U
    ZÊ¹jpa  ã                   @   s¢   d Z ddlZddlmZmZmZmZmZmZ ddl	m
Z
mZmZmZmZmZmZmZmZmZmZ ddlmZ dd„ ZG dd	„ d	ƒZG d
d„ dƒZG dd„ dƒZdS )z<Tests for the ``sympy.physics.mechanics.pathway.py`` module.é    N)ÚRationalÚSymbolÚcosÚpiÚsinÚsqrt)ÚForceÚLinearPathwayÚObstacleSetPathwayÚPathwayBaseÚPointÚReferenceFrameÚWrappingCylinderÚWrappingGeometryBaseÚWrappingPathwayÚWrappingSphereÚdynamicsymbols)Úsimplifyc                 C   s   dd„ | D ƒS )Nc                 S   s    g | ]}|  |j|j ¡ ¡‘qS © )Ú	__class__ÚlocationZvectorr   )Ú.0Úloadr   r   úi/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/physics/mechanics/tests/test_pathway.pyÚ
<listcomp>   s   ÿz#_simplify_loads.<locals>.<listcomp>r   )Úloadsr   r   r   Ú_simplify_loads   s    þr   c                	   @   s  e Zd Zdd„ Zeej dedƒedƒfi fg¡dd„ ƒƒZ	eej dedƒfedƒedƒed	ƒfg¡d
d„ ƒƒZ
eej ddedƒfedƒdfg¡dd„ ƒƒZejdd�dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ ZdS ))ÚTestLinearPathwayc                 C   s   t ttƒst‚d S ©N)Ú
issubclassr	   r   ÚAssertionError©Úselfr   r   r   Útest_is_pathway_base_subclass&   s    z/TestLinearPathway.test_is_pathway_base_subclasszargs, kwargsÚpAÚpBc                 C   s¸   | \}}t | |Ž}t|t ƒs t‚t|dƒs.t‚t|jƒdks@t‚|jd |ksRt‚|jd |ksdt‚t|jd tƒsxt‚|jd jdksŒt‚t|jd tƒs t‚|jd jdks´t‚d S )NÚattachmentsé   r   é   r$   r%   )r	   Ú
isinstancer    ÚhasattrÚlenr&   r   Úname)ÚargsÚkwargsZpointAZpointBÚinstancer   r   r   Útest_valid_constructor)   s    
z(TestLinearPathway.test_valid_constructorr&   ÚpZc              	   C   s"   t  t¡� t| Ž }W 5 Q R X d S r   )ÚpytestÚraisesÚ
ValueErrorr	   ©r&   Ú_r   r   r   Ú)test_invalid_attachments_incorrect_number=   s    	z;TestLinearPathway.test_invalid_attachments_incorrect_numberNc              	   C   s"   t  t¡� t| Ž }W 5 Q R X d S r   )r2   r3   Ú	TypeErrorr	   r5   r   r   r   Ú"test_invalid_attachments_not_pointI   s    	z4TestLinearPathway.test_invalid_attachments_not_pointT©Zautousec                 C   s~   t dƒ| _tdƒ| _tdƒ| _t| j| jƒ| _tdƒ| _tdƒ| _	tdƒ| _
tddƒ| _tddƒ| _tddƒ| _tdƒ| _d S )	NÚNr$   r%   Úq1Úq2Úq3r(   ÚF)r   r;   r   r$   r%   r	   Úpathwayr   r<   r=   r>   Úq1dÚq2dÚq3dr   r?   r!   r   r   r   Ú_linear_pathway_fixtureU   s    





z)TestLinearPathway._linear_pathway_fixturec              	   C   sn   t | j| jƒ}t t¡� d |_W 5 Q R X t t¡� d |jd< W 5 Q R X t t¡� d |jd< W 5 Q R X d S ©Nr   r(   )r	   r$   r%   r2   r3   ÚAttributeErrorr&   r8   ©r"   r/   r   r   r   Útest_properties_are_immutablec   s    z/TestLinearPathway.test_properties_are_immutablec                 C   s&   t | j| jƒ}d}t|ƒ|ks"t‚d S )NzLinearPathway(pA, pB))r	   r$   r%   Úreprr    ©r"   r@   Úexpectedr   r   r   Ú	test_reprl   s    zTestLinearPathway.test_reprc                 C   s,   | j  | jd| jj ¡ | jjdks(t‚d S ©Nr'   )r%   Úset_posr$   r;   Úxr@   Úlengthr    r!   r   r   r   Útest_static_pathway_lengthq   s    z,TestLinearPathway.test_static_pathway_lengthc                 C   s,   | j  | jd| jj ¡ | jjdks(t‚d S ©Nr'   r   )r%   rN   r$   r;   rO   r@   Úextension_velocityr    r!   r   r   r   Ú&test_static_pathway_extension_velocityu   s    z8TestLinearPathway.test_static_pathway_extension_velocityc                 C   s\   | j  | jd| jj ¡ | j| j | jj f| j | j| jj fg}| j | j¡|ksXt‚d S rM   )	r%   rN   r$   r;   rO   r?   r@   Úto_loadsr    ©r"   rK   r   r   r   Útest_static_pathway_to_loadsy   s
    þz.TestLinearPathway.test_static_pathway_to_loadsc                 C   sD   | j  | jd| j | jj ¡ dt| jd ƒ }| jj|ks@t	‚d S rM   )
r%   rN   r$   r<   r;   rO   r   r@   rP   r    rV   r   r   r   Útest_2D_pathway_length�   s    z(TestLinearPathway.test_2D_pathway_lengthc                 C   sP   | j  | jd| j | jj ¡ dt| jd ƒ | j | j }| jj	|ksLt
‚d S rM   )r%   rN   r$   r<   r;   rO   r   rA   r@   rS   r    rV   r   r   r   Ú"test_2D_pathway_extension_velocity†   s    z4TestLinearPathway.test_2D_pathway_extension_velocityc                 C   sŠ   | j  | jd| j | jj ¡ | j| j | jt| jd ƒ  | jj f| j | j| jt| jd ƒ  | jj fg}| j 	| j¡|ks†t
‚d S rM   )r%   rN   r$   r<   r;   rO   r?   r   r@   rU   r    rV   r   r   r   Útest_2D_pathway_to_loads‹   s
    (&þz*TestLinearPathway.test_2D_pathway_to_loadsc                 C   s|   | j  | j| j| jj | j| jj  d| j | jj	  ¡ t
| jd | jd  d| jd   ƒ}t| jj| ƒdksxt‚d S ©Nr'   é   r   )r%   rN   r$   r<   r;   rO   r=   Úyr>   Úzr   r   r@   rP   r    rV   r   r   r   Útest_3D_pathway_length“   s    ,þ&z(TestLinearPathway.test_3D_pathway_lengthc                 C   s°   | j  | j| j| jj | j| jj  d| j | jj	  ¡ t
| jd | jd  d| jd   ƒ}| j| j | | j| j |  d| j | j |  }t| jj| ƒdks¬t‚d S r[   )r%   rN   r$   r<   r;   rO   r=   r]   r>   r^   r   rA   rB   rC   r   r@   rS   r    )r"   rP   rK   r   r   r   Ú"test_3D_pathway_extension_velocity›   s    ,þ&ÿþÿz4TestLinearPathway.test_3D_pathway_extension_velocityc                 C   s*  | j  | j| j| jj | j| jj  d| j | jj	  ¡ t
| jd | jd  d| jd   ƒ}| j | j | jj | | j| j | jj |  d| j | j | jj	 |  }| j| j | jj | | j| j | jj |  d| j | j | jj	 |  }| j|f| j |fg}| j | j¡|k�s&t‚d S )Nr'   r\   )r%   rN   r$   r<   r;   rO   r=   r]   r>   r^   r   r?   r@   rU   r    )r"   rP   ÚpO_forceZpI_forcerK   r   r   r   Útest_3D_pathway_to_loads¨   s*    ,þ&ÿþÿÿþÿþz*TestLinearPathway.test_3D_pathway_to_loads)Ú__name__Ú
__module__Ú__qualname__r#   Ústaticmethodr2   ÚmarkÚparametrizer   r0   r7   r9   ÚfixturerD   rH   rL   rQ   rT   rW   rX   rY   rZ   r_   r`   rb   r   r   r   r   r   $   sJ   ÿþþþ

þþ

	r   c                
   @   s~  e Zd Zdd„ Zeej dddd„ dD ƒfdd	d„ d
D ƒfddd„ dD ƒfddd„ dD ƒfg¡dd„ ƒƒZeej de	dƒge	dƒe	dƒgg¡dd„ ƒƒZ
eej dde	dƒe	dƒfe	dƒde	dƒfe	dƒe	dƒdfg¡dd„ ƒƒZdd„ Zeej ddd„ dD ƒd fd!d„ d
D ƒd"fd#d„ dD ƒd$fg¡d%d&„ ƒƒZejd'd(�d)d*„ ƒZd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ ZdS )7ÚTestObstacleSetPathwayc                 C   s   t ttƒst‚d S r   )r   r
   r   r    r!   r   r   r   r#   Á   s    z4TestObstacleSetPathway.test_is_pathway_base_subclassznum_attachments, attachmentsé   c                 C   s   g | ]}t |ƒ‘qS r   ©r   ©r   r,   r   r   r   r   È   s     z!TestObstacleSetPathway.<listcomp>)ÚpOr$   ÚpIr\   c                 C   s   g | ]}t |ƒ‘qS r   rl   rm   r   r   r   r   É   s     )rn   r$   r%   ro   é   c                 C   s   g | ]}t |ƒ‘qS r   rl   rm   r   r   r   r   Ê   s     )rn   r$   r%   ÚpCro   é   c                 C   s   g | ]}t |ƒ‘qS r   rl   rm   r   r   r   r   Ë   s     )rn   r$   r%   rq   ZpDro   c                 C   sT   t |Ž }t|t ƒst‚t|dƒs$t‚t|jƒ| ks6t‚|jD ]}t|tƒs<t‚q<d S )Nr&   )r
   r)   r    r*   r+   r&   r   )Znum_attachmentsr&   r/   Ú
attachmentr   r   r   r0   Ä   s    
z-TestObstacleSetPathway.test_valid_constructorr&   rn   ro   c              	   C   s"   t  t¡� t| Ž }W 5 Q R X d S r   )r2   r3   r4   r
   r5   r   r   r   Ú5test_invalid_constructor_attachments_incorrect_numberÖ   s    zLTestObstacleSetPathway.test_invalid_constructor_attachments_incorrect_numberNr$   c              	   C   s"   t  t¡� t| Ž }W 5 Q R X d S r   ©r2   r3   r8   r   r5   r   r   r   Ú.test_invalid_constructor_attachments_not_pointß   s    
zETestObstacleSetPathway.test_invalid_constructor_attachments_not_pointc              	   C   s˜   t tdƒtdƒtdƒƒ}t t¡� d |_W 5 Q R X t t¡� d |jd< W 5 Q R X t t¡� d |jd< W 5 Q R X t t¡� d |jd< W 5 Q R X d S )Nrn   r$   ro   r   r(   éÿÿÿÿ)r
   r   r2   r3   rF   r&   r8   ©r"   r@   r   r   r   rH   ì   s    z4TestObstacleSetPathway.test_properties_are_immutablezattachments, expectedc                 C   s   g | ]}t |ƒ‘qS r   rl   rm   r   r   r   r   ü   s     zObstacleSetPathway(pO, pA, pI)c                 C   s   g | ]}t |ƒ‘qS r   rl   rm   r   r   r   r      s     z"ObstacleSetPathway(pO, pA, pB, pI)c                 C   s   g | ]}t |ƒ‘qS r   rl   rm   r   r   r   r     s     z&ObstacleSetPathway(pO, pA, pB, pC, pI)c                 C   s   t | Ž }t|ƒ|kst‚d S r   )r
   rI   r    )r&   rK   r@   r   r   r   rL   ÷   s    z TestObstacleSetPathway.test_reprTr:   c                 C   sV   t dƒ| _tdƒ| _tdƒ| _tdƒ| _tdƒ| _tdƒ| _tddƒ| _	t
dƒ| _d S )	Nr;   rn   ro   r$   r%   Úqr(   r?   )r   r;   r   rn   ro   r$   r%   r   ry   Úqdr   r?   r!   r   r   r   Ú_obstacle_set_pathway_fixture  s    





z4TestObstacleSetPathway._obstacle_set_pathway_fixturec                 C   sp   | j  | j| jj¡ | j | j| jj¡ | j | j| jj¡ t	| j| j | j| jƒ}|j
ddtdƒ  kslt‚d S )Nr(   r'   )r$   rN   rn   r;   rO   r%   r]   ro   r^   r
   rP   r   r    rx   r   r   r   rQ     s
    z1TestObstacleSetPathway.test_static_pathway_lengthc                 C   sd   | j  | j| jj¡ | j | j| jj¡ | j | j| jj¡ t	| j| j | j| jƒ}|j
dks`t‚d S ©Nr   )r$   rN   rn   r;   rO   r%   r]   ro   r^   r
   rS   r    rx   r   r   r   rT     s
    z=TestObstacleSetPathway.test_static_pathway_extension_velocityc              
   C   s:  | j  | j| jj¡ | j | j| jj¡ | j | j| jj¡ t	| j| j | j| jƒ}t
| j| j | jj ƒt
| j | j| jj ƒt
| j | jtdƒ d | jj| jj  ƒt
| j| jtdƒ d | jj| jj  ƒt
| j| jtdƒ d | jj| jj  ƒt
| j| jtdƒ d | jj| jj  ƒg}| | j¡|k�s6t‚d S rM   )r$   rN   rn   r;   rO   r%   r]   ro   r^   r
   r   r?   r   rU   r    rJ   r   r   r   rW   &  s    ((((úz3TestObstacleSetPathway.test_static_pathway_to_loadsc                 C   sØ   | j  | j| jj| jj  ¡ | j | jt| jƒ| jj t	| jƒd | jj  ¡ | j
 | jt	| jƒ| jj t| jƒd | jj  ¡ t| j| j | j| j
ƒ}dtdƒ tddt| jƒ  ƒ }|j|  ¡ dksÔt‚d S ©Nr(   r'   r   )r$   rN   rn   r;   rO   r]   r%   r   ry   r   ro   r
   r   rP   r   r    rJ   r   r   r   rX   5  s     &ÿ &ÿ"z-TestObstacleSetPathway.test_2D_pathway_lengthc                 C   sæ   | j  | j| jj| jj  ¡ | j | jt| jƒ| jj t	| jƒd | jj  ¡ | j
 | jt	| jƒ| jj t| jƒd | jj  ¡ t| j| j | j| j
ƒ}tdƒt	| jƒ | j  dtt| jƒd ƒ  }|j|  ¡ dksât‚d S r}   )r$   rN   rn   r;   rO   r]   r%   r   ry   r   ro   r
   r   rz   rS   r   r    rJ   r   r   r   rY   A  s     &ÿ &ÿ0z9TestObstacleSetPathway.test_2D_pathway_extension_velocityc              	   C   sÈ  | j  | j| jj| jj  ¡ | j | jt| jƒ| jj t	| jƒd | jj  ¡ | j
 | jt	| jƒ| jj t| jƒd | jj  ¡ t| j| j | j| j
ƒ}tdƒd | jj| jj  }tdt| jƒ d ƒ d | jj tdƒt	| jƒ dtt| jƒd ƒ  | jj  }t| jtd  ƒ| jj t	| jtd  ƒ| jj  }t| j| j| ƒt| j | j | ƒt| j | j| ƒt| j| j | ƒt| j| j| ƒt| j
| j | ƒg}t| | j¡ƒ|k�sÄt‚d S )Nr(   r'   r\   )r$   rN   rn   r;   rO   r]   r%   r   ry   r   ro   r
   r   r   r   r?   r   rU   r    )r"   r@   ZpO_pA_force_vecZpA_pB_force_vecZpB_pI_force_vecrK   r   r   r   rZ   M  s0     &ÿ &ÿ".ÿÿ4úz/TestObstacleSetPathway.test_2D_pathway_to_loads)rc   rd   re   r#   rf   r2   rg   rh   r0   r   rt   rv   rH   rL   ri   r{   rQ   rT   rW   rX   rY   rZ   r   r   r   r   rj   ¿   sd   üþ	þýþþþþ÷þ


rj   c                   @   s@  e Zd Zdd„ Zejdd�dd„ ƒZdd„ Zej 	d	e
d
ƒfe
d
ƒe
dƒe
dƒfg¡dd„ ƒZeej 	d	de
dƒfe
d
ƒdfg¡dd„ ƒƒZdd„ Zej 	dedƒedƒedƒedƒjg¡dd„ ƒZdd„ Zdd„ Zdd„ Zed d!„ ƒZej 	d"d#d$ed% fd$ed%ƒd% ed%ƒ d% d&fd'e d( fd#ed)d%ƒed'ƒd% d&fed' fg¡d*d+„ ƒZej 	d"d#d$ed)d%ƒe fd#d,efd,d#efd$ed%ƒd% ed%ƒ d% d&fd-e d( fd#ed)d%ƒed'ƒd% d&fed' fd$ed%ƒed)d%ƒ ed%ƒ ed)d%ƒ d)fed)ed-d(ƒe d%  ƒfd#ed)d%ƒed'ƒed)d%ƒ d)fed)ed)d'ƒe d%  ƒfg¡d.d/„ ƒZej 	d0d1d$ed%ƒed)d%ƒ ed%ƒ ed)d%ƒ d&ffd#ed)d%ƒed'ƒed)d%ƒ d&ffg¡d2d3„ ƒZej 	d0d1d4d5d$ed%ƒd% ed%ƒ d% d&ffd#ed)d%ƒed'ƒd% d&ffd$ed%ƒed)d%ƒ ed%ƒ d% d)ffd#ed)d%ƒed'ƒd% d)ffg¡d6d7„ ƒZej 	d8d9d$ed%ƒd% ed%ƒ d% d&fd#ed%ƒd% ed%ƒd% d&fd:ed%ƒd%  ed%ƒ d% d&ffd#ed)d%ƒed'ƒd% d&fd$ed'ƒd% ed)d%ƒ d&fed'ƒ d% ed)d%ƒd) d&fff¡d;d<„ ƒZej 	d8d9d=d>d$ed%ƒd% ed%ƒ d% d&fd,ed%ƒ d% ed%ƒ d% d&fd)ed%ƒd%  ed%ƒd% d&ffd#ed)d%ƒed'ƒd% d&fd$ed'ƒd% ed)d%ƒ d&fed'ƒ d% ed)d%ƒd) d&ffd#ed%ƒd% ed%ƒd% d&fd$ed%ƒd% ed%ƒ d% d&fed%ƒ d% ed%ƒd% d) d&ffd?d$ed%ƒd% ed%ƒ d% d)fd@e edAdBed%   ƒ d&d(edAdBed%   ƒ fd@ed%ƒ e d%edAdBed%   ƒ  d@ed%ƒ e d%edAdBed%   ƒ  dCedAdBed%   ƒ fd-ed%ƒd%  e d%edAdBed%   ƒ  d-ed%ƒ e d%edAdBed%   ƒ  d&fff¡dDdE„ ƒZ dFdG„ Z!dHdI„ Z"dJdK„ Z#dS )LÚTestWrappingPathwayc                 C   s   t ttƒst‚d S r   )r   r   r   r    r!   r   r   r   r#   i  s    z1TestWrappingPathway.test_is_pathway_base_subclassTr:   c                 C   s†   t dƒ| _t dƒ| _tddd�| _t dƒ| _tdƒ| _| jj| _	t
| j| jƒ| _t| j| j| j	ƒ| _t| j| j| jƒ| _tdƒ| _d S )	Nr$   r%   ÚrT)Zpositivern   r;   r?   )r   r$   r%   r   r   rn   r   r;   r^   Zaxr   Úspherer   Úcylinderr   r@   r?   r!   r   r   r   Ú_wrapping_pathway_fixturel  s    




z-TestWrappingPathway._wrapping_pathway_fixturec                 C   sÂ   t | j| j| jƒ}t|t ƒs t‚t|dƒs.t‚t|jƒdks@t‚t|jd t	ƒsTt‚|jd | jksht‚t|jd t	ƒs|t‚|jd | jks�t‚t|dƒsžt‚t|j
tƒs®t‚|j
| jks¾t‚d S )Nr&   r'   r   r(   Úgeometry)r   r$   r%   r�   r)   r    r*   r+   r&   r   rƒ   r   rG   r   r   r   r0   y  s    z*TestWrappingPathway.test_valid_constructorr&   r$   r%   r1   c              	   C   s*   t  t¡� t|| jfžŽ }W 5 Q R X d S r   )r2   r3   r8   r   r�   )r"   r&   r6   r   r   r   rt   †  s    zITestWrappingPathway.test_invalid_constructor_attachments_incorrect_numberNc              	   C   s"   t  t¡� t| Ž }W 5 Q R X d S r   ru   r5   r   r   r   rv   ‘  s    	zBTestWrappingPathway.test_invalid_constructor_attachments_not_pointc              	   C   s(   t  t¡� t| j| jƒ}W 5 Q R X d S r   ©r2   r3   r8   r   r$   r%   )r"   r6   r   r   r   Ú1test_invalid_constructor_geometry_is_not_supplied�  s    zETestWrappingPathway.test_invalid_constructor_geometry_is_not_suppliedrƒ   r   ry   r;   c              	   C   s*   t  t¡� t| j| j|ƒ}W 5 Q R X d S r   r„   )r"   rƒ   r6   r   r   r   Ú"test_invalid_geometry_not_geometry¡  s    
z6TestWrappingPathway.test_invalid_geometry_not_geometryc              	   C   sL   t  t¡� | j| jjd< W 5 Q R X t  t¡� | j| jjd< W 5 Q R X d S rE   )r2   r3   r8   r%   r@   r&   r$   r!   r   r   r   Ú&test_attachments_property_is_immutable®  s    z:TestWrappingPathway.test_attachments_property_is_immutablec              	   C   s"   t  t¡� d | j_W 5 Q R X d S r   )r2   r3   rF   r@   rƒ   r!   r   r   r   Ú#test_geometry_property_is_immutable´  s    z7TestWrappingPathway.test_geometry_property_is_immutablec                 C   s$   d| j ›d�}t| jƒ|ks t‚d S )Nz!WrappingPathway(pA, pB, geometry=ú))r�   rI   r@   r    rV   r   r   r   rL   ¸  s    ÿzTestWrappingPathway.test_reprc                 C   s   t dd„ t| |ƒD ƒƒS )Nc                 s   s   | ]\}}|| V  qd S r   r   ©r   ÚmagÚunitr   r   r   Ú	<genexpr>Á  s     z9TestWrappingPathway._expand_pos_to_vec.<locals>.<genexpr>)ÚsumÚzip)ÚposÚframer   r   r   Ú_expand_pos_to_vec¿  s    z&TestWrappingPathway._expand_pos_to_veczpA_vec, pB_vec, factor©r(   r   r   ©r   r(   r   r'   r   rk   r\   r(   c                 C   s~   |   || j¡}|   || j¡}| j | j| j| ¡ | j | j| j| ¡ t| j| j| jƒ}|| j }t	|j
| ƒdkszt‚d S r|   )r’   r;   r$   rN   rn   r   r%   r   r€   r   rP   r    ©r"   ÚpA_vecÚpB_vecÚfactorr@   rK   r   r   r   Ú$test_static_pathway_on_sphere_lengthÃ  s    	
z8TestWrappingPathway.test_static_pathway_on_sphere_length©rw   r   r   rp   c                 C   s†   |   || j¡}|   || j¡}| j | j| j| ¡ | j | j| j| ¡ t| j| j| jƒ}|t	| jd ƒ }t
|j| ƒdks‚t‚d S rR   )r’   r;   r$   rN   rn   r   r%   r   r�   r   r   rP   r    r•   r   r   r   Ú&test_static_pathway_on_cylinder_lengthÔ  s    z:TestWrappingPathway.test_static_pathway_on_cylinder_lengthzpA_vec, pB_vec)r“   r”   c                 C   sl   |   || j¡}|   || j¡}| j | j| j| ¡ | j | j| j| ¡ t| j| j| jƒ}|j	dksht
‚d S r|   )r’   r;   r$   rN   rn   r   r%   r   r€   rS   r    ©r"   r–   r—   r@   r   r   r   Ú0test_static_pathway_on_sphere_extension_velocityñ  s    	zDTestWrappingPathway.test_static_pathway_on_sphere_extension_velocity)r“   rš   )rš   r“   c                 C   sl   |   || j¡}|   || j¡}| j | j| j| ¡ | j | j| j| ¡ t| j| j| jƒ}|j	dksht
‚d S r|   )r’   r;   r$   rN   rn   r   r%   r   r�   rS   r    rœ   r   r   r   Ú2test_static_pathway_on_cylinder_extension_velocity  s    zFTestWrappingPathway.test_static_pathway_on_cylinder_extension_velocityzApA_vec, pB_vec, pA_vec_expected, pB_vec_expected, pO_vec_expected)r“   r”   r”   r“   )rw   rw   r   rw   c              	   C   s>  |   || j¡}|   || j¡}| j | j| j| ¡ | j | j| j| ¡ t| j| j| jƒ}t	dd„ t
|| jƒD ƒƒ}t	dd„ t
|| jƒD ƒƒ}t	dd„ t
|| jƒD ƒƒ}t| j| j| jd t| jd ƒ  | ƒt| j| j| jd t| jd ƒ  | ƒt| j| j| jd t| jd ƒ  | ƒg}| | j¡|k�s:t‚d S )Nc                 s   s   | ]\}}|| V  qd S r   r   rŠ   r   r   r   r�   7  s    zMTestWrappingPathway.test_static_pathway_on_sphere_to_loads.<locals>.<genexpr>c                 s   s   | ]\}}|| V  qd S r   r   rŠ   r   r   r   r�   :  s    c                 s   s   | ]\}}|| V  qd S r   r   rŠ   r   r   r   r�   =  s    rk   rr   )r’   r;   r$   rN   rn   r   r%   r   r€   rŽ   r�   r   r?   r   rU   r    )r"   r–   r—   ÚpA_vec_expectedÚpB_vec_expectedÚpO_vec_expectedr@   rK   r   r   r   Ú&test_static_pathway_on_sphere_to_loads  s&    
ÿ
ÿ
ÿ(((ýz:TestWrappingPathway.test_static_pathway_on_sphere_to_loads)r“   rš   r”   r”   )r   éþÿÿÿr   )rš   r“   ©r   rw   r   r¤   )r   r'   r   )r”   )r   r(   r(   )r   r   r(   )r   r   rw   )r   r   r   éûÿÿÿé   é   éüÿÿÿc                 C   sÔ   |   || j¡}|   || j¡}| j | j| j| ¡ | j | j| j| ¡ t| j| j| jƒ}| j	|   || j¡ }| j	|   || j¡ }| j	|   || j¡ }	t
| j|ƒt
| j|ƒt
| j|	ƒg}
t| | j	¡ƒ|
ksÐt‚d S r   )r’   r;   r$   rN   rn   r   r%   r   r�   r?   r   r   rU   r    )r"   r–   r—   rŸ   r    r¡   r@   ZpA_force_expectedZpB_force_expectedZpO_force_expectedrK   r   r   r   Ú(test_static_pathway_on_cylinder_to_loadsG  s&    5
ÿ
ÿ
ÿ


ýz<TestWrappingPathway.test_static_pathway_on_cylinder_to_loadsc                 C   sŠ   t dƒ}| j| jj }| jt|ƒ| jj t|ƒ| jj   }| j | j	|¡ | j
 | j	|¡ | jt|d ƒ }t| jj| ƒdks†t‚d S )Nry   r'   r   )r   r   r;   rO   r   r   r]   r$   rN   rn   r%   r   r   r@   rP   r    )r"   ry   ÚpA_posÚpB_posrK   r   r   r   Ú"test_2D_pathway_on_cylinder_length�  s    &z6TestWrappingPathway.test_2D_pathway_on_cylinder_lengthc                 C   sœ   t dƒ}t ddƒ}| j| jj }| jt|ƒ| jj t|ƒ| jj   }| j | j	|¡ | j
 | j	|¡ | jt|d ƒ|  | }t| jj| ƒdks˜t‚d S )Nry   r(   r'   r   )r   r   r;   rO   r   r   r]   r$   rN   rn   r%   r   r   r@   rS   r    )r"   ry   rz   rª   r«   rK   r   r   r   Ú.test_2D_pathway_on_cylinder_extension_velocity˜  s    
&zBTestWrappingPathway.test_2D_pathway_on_cylinder_extension_velocityc           	      C   s   t dƒ}| j| jj }| jt|ƒ| jj t|ƒ| jj   }| j | j	|¡ | j
 | j	|¡ | j| jj }| jt|ƒ| jj t|ƒ| jj   }| jt|ƒ | jj t|ƒd | jj   }t| j|ƒt| j
|ƒt| j	|ƒg}t| j | j¡ƒ}||ksüt‚d S )Nry   r(   )r   r   r;   rO   r   r   r]   r$   rN   rn   r%   r?   r   r   r@   rU   r    )	r"   ry   rª   r«   ZpA_forceZpB_forcera   rK   r   r   r   r   Ú$test_2D_pathway_on_cylinder_to_loads¢  s    &&,


ýz8TestWrappingPathway.test_2D_pathway_on_cylinder_to_loads)$rc   rd   re   r#   r2   ri   r‚   r0   rg   rh   r   rt   rf   rv   r…   r   r   r   rO   r†   r‡   rˆ   rL   r’   r   r   r   r™   r›   r�   rž   r¢   r©   r¬   r­   r®   r   r   r   r   r~   g  s  

þþ


þþüþ	

( ýþ
	( &ýýõþ
	* ýþ
$ùþ
ûû÷þ
ûûû4&&ý*&ý÷æþ-
	
r~   )Ú__doc__r2   Zsympyr   r   r   r   r   r   Zsympy.physics.mechanicsr   r	   r
   r   r   r   r   r   r   r   r   Zsympy.simplify.simplifyr   r   r   rj   r~   r   r   r   r   Ú<module>   s    4  )