Ë
    7^(hy   ã                   óT  — d Z ddlZddlmZmZmZ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mZmZmZmZmZmZ ddlmZ   ed«      Z! ed«      Z" G d„ d	«      Z# G d
„ d«      Z$ G d„ d«      Z% G d„ d«      Z& G d„ d«      Z' G d„ d«      Z( G d„ d«      Z) G d„ d«      Z*y)z=Tests for the ``sympy.physics.mechanics.actuator.py`` module.é    N)	ÚSÚMatrixÚSymbolÚSympifyErrorÚsqrtÚAbsÚsymbolsÚexpÚsign)ÚActuatorBaseÚForceÚForceActuatorÚKanesMethodÚLinearDamperÚLinearPathwayÚLinearSpringÚParticleÚPinJointÚPointÚReferenceFrameÚ	RigidBodyÚTorqueActuatorÚVectorÚdynamicsymbolsÚDuffingSpringÚCoulombKineticFriction)ÚExprÚtargetÚreactionc                   ót  — e Zd Z ej                  d¬«      d„ «       Zd„ Zej                  j                  dde	j                  fe	j                  e	j                  f ed«       ed«      f ed«       ed«      f ed«      dz   ed«      z    ed«      dz   ed«      z   fg«      d	„ «       Zej                  j                  d
ddg«      d„ «       Zej                  j                  d e ed«       ed«      «      g«      d„ «       Zd„ Zej                  j                  dddg«      d„ «       Zd„ Zd„ Zd„ Zd„ Zy)ÚTestForceActuatorT©Úautousec                 ó”  — 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«      | _        y )	NÚFÚpAÚpBÚq1Úq2Úq3é   ÚN)r   Úforcer   r&   r'   r   Úpathwayr   r(   r)   r*   Úq1dÚq2dÚq3dr   r,   ©Úselfs    úi/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/physics/mechanics/tests/test_actuator.pyÚ_linear_pathway_fixturez)TestForceActuator._linear_pathway_fixture,   s“   € ä˜C“[ˆŒ
Ü˜“+ˆŒÜ˜“+ˆŒÜ$ T§W¡W¨d¯g©gÓ6ˆŒÜ  Ó&ˆŒÜ  Ó&ˆŒÜ  Ó&ˆŒÜ! $¨Ó*ˆŒÜ! $¨Ó*ˆŒÜ! $¨Ó*ˆŒÜ Ó$ˆ�ó    c                 ó0   — t        t        t        «      sJ ‚y ©N)Ú
issubclassr   r   r2   s    r4   Útest_is_actuator_base_subclassz0TestForceActuator.test_is_actuator_base_subclass:   ó   € Üœ-¬Ô6Ð6Ñ6r6   zforce, expected_forcer+   r%   é   c                 óÊ   — t        || j                  «      }t        |t         «      sJ ‚t        |d«      sJ ‚t        |j                  t
        «      sJ ‚|j                  |k(  sJ ‚y )Nr-   )r   r.   Ú
isinstanceÚhasattrr-   ÚExprType)r3   r-   Úexpected_forceÚinstances       r4   Útest_valid_constructor_forcez.TestForceActuator.test_valid_constructor_force=   sZ   € ô ! ¨¯©Ó5ˆÜ˜(¤MÔ2Ð2Ð2Ü�x Ô)Ð)Ð)Ü˜(Ÿ.™.¬(Ô3Ð3Ð3Ø�~‰~ Ò/Ð/Ñ/r6   r-   Nc                 óŒ   — t        j                  t        «      5  t        || j                  «      }d d d «       y # 1 sw Y   y xY wr8   )ÚpytestÚraisesr   r   r.   )r3   r-   Ú_s      r4   Ú.test_invalid_constructor_force_not_sympifyablez@TestForceActuator.test_invalid_constructor_force_not_sympifyableN   s3   € ä�]‰]œ<Ó(ñ 	3Ü˜e T§\¡\Ó2ˆA÷	3÷ 	3ñ 	3úó	   š:ºAr.   r&   r'   c                 óÊ   — t        | j                  |«      }t        |t         «      sJ ‚t        |d«      sJ ‚t        |j                  t
        «      sJ ‚|j                  |k(  sJ ‚y )Nr.   )r   r-   r>   r?   r.   r   )r3   r.   rB   s      r4   Útest_valid_constructor_pathwayz0TestForceActuator.test_valid_constructor_pathwayS   s^   € ô ! §¡¨WÓ5ˆÜ˜(¤MÔ2Ð2Ð2Ü�x Ô+Ð+Ð+Ü˜(×*Ñ*¬MÔ:Ð:Ð:Ø×Ñ 7Ò*Ð*Ñ*r6   c                 óŒ   — t        j                  t        «      5  t        | j                  d «      }d d d «       y # 1 sw Y   y xY wr8   )rE   rF   Ú	TypeErrorr   r-   ©r3   rG   s     r4   Ú1test_invalid_constructor_pathway_not_pathway_basezCTestForceActuator.test_invalid_constructor_pathway_not_pathway_base`   s3   € Ü�]‰]œ9Ó%ñ 	0Ü˜dŸj™j¨$Ó/ˆA÷	0÷ 	0ñ 	0úrI   ú property_name, fixture_attr_name)r-   r-   ©r.   r.   c                 óÒ   — t        | j                  | j                  «      }t        | |«      }t	        j
                  t        «      5  t        |||«       d d d «       y # 1 sw Y   y xY wr8   )r   r-   r.   ÚgetattrrE   rF   ÚAttributeErrorÚsetattr)r3   Úproperty_nameÚfixture_attr_namerB   Úvalues        r4   Útest_properties_are_immutablez/TestForceActuator.test_properties_are_immutabled   sR   € ô ! §¡¨T¯\©\Ó:ˆÜ˜Ð/Ó0ˆÜ�]‰]œ>Ó*ñ 	4Ü�H˜m¨UÔ3÷	4÷ 	4ñ 	4úó   ÁAÁA&c                 óh   — t        | j                  | j                  «      }d}t        |«      |k(  sJ ‚y )Nz'ForceActuator(F, LinearPathway(pA, pB)))r   r-   r.   Úrepr©r3   ÚactuatorÚexpecteds      r4   Ú	test_reprzTestForceActuator.test_reprq   s-   € Ü  §¡¨T¯\©\Ó:ˆØ<ˆÜ�H‹~ Ò)Ð)Ñ)r6   c                 ó¦  — | j                   j                  | j                  d| j                  j                  z  «       t        | j                  | j                  «      }| j                  | j                   | j                  j                  z  f| j                   | j                  | j                  j                  z  fg}|j                  «       |k(  sJ ‚y ©Nr<   )	r'   Úset_posr&   r,   Úxr   r-   r.   Úto_loadsr]   s      r4   Útest_to_loads_static_pathwayz.TestForceActuator.test_to_loads_static_pathwayv   s”   € Ø�‰�‰˜Ÿ™  4§6¡6§8¡8¡Ô,Ü  §¡¨T¯\©\Ó:ˆà�W‰W˜Ÿ
™
�l 4§6¡6§8¡8Ñ+Ð,Ø�W‰W�d—j‘j §¡§¡Ñ)Ð*ð
ˆð × Ñ Ó" hÒ.Ð.Ñ.r6   c                 óX  — | j                   j                  | j                  d| j                  z  | j                  j
                  z  «       t        | j                  | j                  «      }| j                  | j                   | j                  t        | j                  dz  «      z  z  | j                  j
                  z  f| j                   | j                  | j                  t        | j                  dz  «      z  z  | j                  j
                  z  fg}|j                  «       |k(  sJ ‚y rb   )r'   rc   r&   r(   r,   rd   r   r-   r.   r   re   r]   s      r4   Útest_to_loads_2D_pathwayz*TestForceActuator.test_to_loads_2D_pathway   sÓ   € Ø�‰�‰˜Ÿ™  4§7¡7¡¨4¯6©6¯8©8Ñ!3Ô4Ü  §¡¨T¯\©\Ó:ˆà�W‰W˜Ÿ
™
�l D§G¡G¬D°·±¸!±Ó,<Ñ$<Ñ=¸d¿f¹f¿h¹hÑFÐGØ�W‰W�d—j‘j $§'¡'¬$¨t¯w©w¸©zÓ*:Ñ":Ñ;¸D¿F¹F¿H¹HÑDÐEð
ˆð × Ñ Ó" hÒ.Ð.Ñ.r6   c                 óº  — | j                   j                  | j                  | j                  | j                  j
                  z  | j                  | j                  j                  z  z
  d| j                  z  | j                  j                  z  z   «       t        | j                  | j                  «      }t        | j                  dz  | j                  dz  z   d| j                  dz  z  z   «      }| j                   | j                  z  | j                  j
                  z  |z  | j                  | j                  z  | j                  j                  z  |z  z   d| j                  z  | j                  z  | j                  j                  z  |z  z
  }| j                  | j                  z  | j                  j
                  z  |z  | j                  | j                  z  | j                  j                  z  |z  z
  d| j                  z  | j                  z  | j                  j                  z  |z  z   }| j                  |f| j                   |fg}|j                  «       |k(  sJ ‚y )Nr<   é   )r'   rc   r&   r(   r,   rd   r)   Úyr*   Úzr   r-   r.   r   re   )r3   r^   ÚlengthÚpO_forceÚpI_forcer_   s         r4   Útest_to_loads_3D_pathwayz*TestForceActuator.test_to_loads_3D_pathwayˆ   sÓ  € Ø�‰�‰Ø�G‰GØ�G‰G�D—F‘F—H‘HÑ˜tŸw™w t§v¡v§x¡xÑ/Ñ/°!°D·G±G±)¸D¿F¹F¿H¹HÑ2DÑDô	
ô ! §¡¨T¯\©\Ó:ˆÜ�d—g‘g˜q‘j 4§7¡7¨A¡:Ñ-°°$·'±'¸1±*±Ñ<Ó=ˆà�j‰jˆL˜Ÿ™Ñ  §¡§¡Ñ)¨&Ñ0Ø�j‰j˜Ÿ™Ñ  §¡§¡Ñ)¨&Ñ0ñ1à�—
‘
‰l˜4Ÿ7™7Ñ" 4§6¡6§8¡8Ñ+¨FÑ2ñ3ð 	ð �J‰J�t—w‘wÑ˜tŸv™vŸx™xÑ'¨Ñ.Ø�j‰j˜Ÿ™Ñ  §¡§¡Ñ)¨&Ñ0ñ1à�—
‘
‰l˜4Ÿ7™7Ñ" 4§6¡6§8¡8Ñ+¨FÑ2ñ3ð 	ð �W‰W�hÐØ�W‰W�hÐð
ˆð × Ñ Ó" hÒ.Ð.Ñ.r6   )Ú__name__Ú
__module__Ú__qualname__rE   Úfixturer5   r:   ÚmarkÚparametrizer   ÚOner   r   rC   rH   r   r   rK   rO   rY   r`   rf   rh   rp   © r6   r4   r!   r!   *   se  „ à€V‡^�^˜DÔ!ñ%ó "ð%ò7ð ‡[�[×ÑØà�—‘ˆJØ�U‰U�A—E‘EˆNÙ�C‹[™& ›+Ð&Ù˜CÓ ¡.°Ó"5Ð6Ù�C‹[˜!‰^™f S›kÑ)©6°#«;¸©>¹FÀ3»KÑ+GÐHð	
ó	ñ0ó	ð0ð ‡[�[×Ñ˜W t¨S kÓ2ñ3ó 3ð3ð ‡[�[×ÑØá™% ›+¡u¨T£{Ó3ð	
óñ+óð+ò0ð ‡[�[×ÑØ*àØ"ð	
óñ4óð4ò*ò
/ò/ó/r6   r!   c                   óž  — e Zd Z ej                  d¬«      d„ «       Zd„ Zd„ Zej                  j                  dde
j                  de
j                   e ed	«      d
z  «       f ed«       ed«      de
j                   ed«        e ed	«      d
z  «      z  f ed«       ed«      e
j                  e
j                   ed«        e ed	«      d
z  «      z  f ed«       ed«       ed«       ed«       ed«        e ed	«      d
z  «       ed«      z
  z  fg«      d„ «       Zej                  j                  dddg«      d„ «       Zd„ Zej                  j                  dddg«      d„ «       Zej                  j                  dg d¢«      d„ «       Zej                  j                  de
j                  df ed«      dfg«      d„ «       Zd„ Zy)ÚTestLinearSpringTr"   c                 ó  — t        d«      | _        t        d«      | _        t        d«      | _        t        d«      | _        t        | j                  | j
                  «      | _        t        d«      | _	        t        d«      | _        y )NÚkÚlr&   r'   Úqr,   )r   Ú	stiffnessr}   r   r&   r'   r   r.   r   r~   r   r,   r2   s    r4   Ú_linear_spring_fixturez'TestLinearSpring._linear_spring_fixture¢   s\   € ä ›ˆŒÜ˜“ˆŒÜ˜“+ˆŒÜ˜“+ˆŒÜ$ T§W¡W¨d¯g©gÓ6ˆŒÜ Ó$ˆŒÜ Ó$ˆ�r6   c                 ó0   — t        t        t        «      sJ ‚y r8   )r9   r   r   r2   s    r4   Útest_is_force_actuator_subclassz0TestLinearSpring.test_is_force_actuator_subclass¬   ó   € Üœ,¬Ô6Ð6Ñ6r6   c                 ó0   — t        t        t        «      sJ ‚y r8   )r9   r   r   r2   s    r4   r:   z/TestLinearSpring.test_is_actuator_base_subclass¯   ó   € Üœ,¬Ô5Ð5Ñ5r6   zUstiffness, expected_stiffness, equilibrium_length, expected_equilibrium_length, forcer+   r   r~   r<   r|   r}   c                 óÐ  — | j                   j                  | j                  | j                  | j                  j
                  z  «       t        || j                  |«      }t        |t        «      sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  |k(  sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  | j                  k(  sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  |k(  sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  |k(  sJ ‚y )Nr   r.   Úequilibrium_lengthr-   )r'   rc   r&   r~   r,   rd   r   r.   r>   r?   r   r@   r   r‡   r-   )r3   r   Úexpected_stiffnessr‡   Úexpected_equilibrium_lengthr-   Úsprings          r4   Útest_valid_constructorz'TestLinearSpring.test_valid_constructor²   s5  € ð^ 	�‰�‰˜Ÿ™ §¡¨¯©¯©¡Ô1Ü˜i¨¯©Ð7IÓJˆä˜&¤,Ô/Ð/Ð/ä�v˜{Ô+Ð+Ð+Ü˜&×*Ñ*¬HÔ5Ð5Ð5Ø×ÑÐ#5Ò5Ð5Ð5ä�v˜yÔ)Ð)Ð)Ü˜&Ÿ.™.¬-Ô8Ð8Ð8Ø�~‰~ §¡Ò-Ð-Ð-ä�vÐ3Ô4Ð4Ð4Ü˜&×3Ñ3´XÔ>Ð>Ð>Ø×(Ñ(Ð,GÒGÐGÐGä�v˜wÔ'Ð'Ð'Ü˜&Ÿ,™,¬Ô1Ð1Ð1Ø�|‰|˜uÒ$Ð$Ñ$r6   r   Nc                 ó¢   — t        j                  t        «      5  t        || j                  | j
                  «      }d d d «       y # 1 sw Y   y xY wr8   )rE   rF   r   r   r.   r}   )r3   r   rG   s      r4   Ú2test_invalid_constructor_stiffness_not_sympifyablezCTestLinearSpring.test_invalid_constructor_stiffness_not_sympifyableö   s9   € ä�]‰]œ<Ó(ñ 	>Ü˜Y¨¯©°d·f±fÓ=ˆA÷	>÷ 	>ñ 	>úó   š"AÁAc                 ó¢   — t        j                  t        «      5  t        | j                  d | j
                  «      }d d d «       y # 1 sw Y   y xY wr8   )rE   rF   rM   r   r   r}   rN   s     r4   rO   zBTestLinearSpring.test_invalid_constructor_pathway_not_pathway_baseû   s9   € Ü�]‰]œ9Ó%ñ 	;Ü˜TŸ^™^¨T°4·6±6Ó:ˆA÷	;÷ 	;ñ 	;úrŽ   r‡   c                 ó¢   — t        j                  t        «      5  t        | j                  | j
                  |«      }d d d «       y # 1 sw Y   y xY wr8   )rE   rF   r   r   r   r.   ©r3   r‡   rG   s      r4   Ú;test_invalid_constructor_equilibrium_length_not_sympifyablezLTestLinearSpring.test_invalid_constructor_equilibrium_length_not_sympifyableÿ   s@   € ô
 �]‰]œ<Ó(ñ 	OÜ˜TŸ^™^¨T¯\©\Ð;MÓNˆA÷	O÷ 	Oñ 	OúrŽ   rP   ))r   r   rQ   )r‡   r}   c                 óè   — t        | j                  | j                  | j                  «      }t	        | |«      }t        j                  t        «      5  t        |||«       d d d «       y # 1 sw Y   y xY wr8   )	r   r   r.   r}   rS   rE   rF   rT   rU   )r3   rV   rW   rŠ   rX   s        r4   rY   z.TestLinearSpring.test_properties_are_immutable  sX   € ô ˜dŸn™n¨d¯l©l¸D¿F¹FÓCˆÜ˜Ð/Ó0ˆÜ�]‰]œ>Ó*ñ 	2Ü�F˜M¨5Ô1÷	2÷ 	2ñ 	2ús   ÁA(Á(A1úequilibrium_length, expectedz&LinearSpring(k, LinearPathway(pA, pB))z<LinearSpring(k, LinearPathway(pA, pB), equilibrium_length=l)c                 óô   — | j                   j                  | j                  | j                  | j                  j
                  z  «       t        | j                  | j                  |«      }t        |«      |k(  sJ ‚y r8   )
r'   rc   r&   r~   r,   rd   r   r   r.   r\   ©r3   r‡   r_   rŠ   s       r4   r`   zTestLinearSpring.test_repr  sS   € ð 	�‰�‰˜Ÿ™ §¡¨¯©¯©¡Ô1Ü˜dŸn™n¨d¯l©lÐ<NÓOˆÜ�F‹|˜xÒ'Ð'Ñ'r6   c                 óf  — | j                   j                  | j                  | j                  | j                  j
                  z  «       t        | j                  | j                  | j                  «      }| j                  t        | j                  dz  «      z  | j                  j
                  z  }| j                  t        | j                  dz  «      | j                  z
  z  |z  }| j                   t        | j                  dz  «      | j                  z
  z  |z  }t        | j                  |«      t        | j                   |«      g}|j                  «       }t        ||«      D ]M  \  }\  }}	t        |t        «      sJ ‚|j                  |k(  sJ ‚|j                   |	z
  j#                  «       dk(  rŒMJ ‚ y )Nr<   r   )r'   rc   r&   r~   r,   rd   r   r   r.   r}   r   r   re   Úzipr>   ÚpointÚvectorÚsimplify)
r3   rŠ   ÚnormalÚpA_forceÚpB_forcer_   ÚloadsÚloadr™   rš   s
             r4   Útest_to_loadszTestLinearSpring.test_to_loads$  sH  € Ø�‰�‰˜Ÿ™ §¡¨¯©¯©¡Ô1Ü˜dŸn™n¨d¯l©l¸D¿F¹FÓCˆØ—‘œ˜TŸV™V Q™Y›Ñ'¨¯©¯©Ñ0ˆØ—>‘>¤4¨¯©°©	£?°T·V±VÑ#;Ñ<¸VÑCˆØ—N‘N�?¤D¨¯©°©£O°d·f±fÑ$<Ñ=¸fÑDˆÜ˜$Ÿ'™' 8Ó,¬e°D·G±G¸XÓ.FÐGˆØ—‘Ó!ˆä%(¨°Ó%9ò 	:Ñ!ˆD‘/�5˜&Ü˜d¤EÔ*Ð*Ð*Ø—:‘: Ò&Ð&Ð&Ø—K‘K &Ñ(×2Ñ2Ó4¸Ó9Ð9Ð9ñ	:r6   )rq   rr   rs   rE   rt   r€   r‚   r:   ru   rv   r   rw   ÚZeror   r   r   r‹   r�   rO   r’   rY   r`   r¡   rx   r6   r4   rz   rz       s   „ à€V‡^�^˜DÔ!ñ%ó "ð%ò7ò6ð ‡[�[×Ñðð Ø—‘ØØ—‘Ù‘n SÓ)¨1Ñ,Ó-Ð-ðñ �s“Ù�s“ØØ—‘Ù˜“�™T¡.°Ó"5°qÑ"8Ó9Ñ9ðñ �s“Ù�s“Ø—‘Ø—‘Ù˜“�™T¡.°Ó"5°qÑ"8Ó9Ñ9ðñ �s“Ù�s“Ù�s“Ù�s“Ù˜“�™d¡>°#Ó#6¸Ñ#9Ó:¹VÀC»[ÑHÑIðð-	
ó&ñN%óO&ðN%ð: ‡[�[×Ñ˜[¨4°¨+Ó6ñ>ó 7ð>ò;ð ‡[�[×ÑÐ1°D¸#°;Ó?ñOó @ðOð ‡[�[×ÑØ*ò	
óñ2óð2ð ‡[�[×ÑØ&à�V‰VÐ=Ð>á�s“ØNðð	
ó	ñ(ó	ð(ó
:r6   rz   c                   óø   — e Zd Z ej                  d¬«      d„ «       Zd„ Zd„ Zd„ Zd„ Z	ej                  j                  dd	d
g«      d„ «       Zd„ Zej                  j                  dddg«      d„ «       Zd„ Zd„ Zy	)ÚTestLinearDamperTr"   c                 óP  — t        d«      | _        t        d«      | _        t        d«      | _        t        d«      | _        t        | j                  | j
                  «      | _        t        d«      | _	        t        dd«      | _
        t        d«      | _        t        d«      | _        y )	NÚcr}   r&   r'   r~   r+   Úur,   )r   Údampingr}   r   r&   r'   r   r.   r   r~   Údqr§   r   r,   r2   s    r4   Ú_linear_damper_fixturez'TestLinearDamper._linear_damper_fixture5  sv   € ä˜c“{ˆŒÜ˜“ˆŒÜ˜“+ˆŒÜ˜“+ˆŒÜ$ T§W¡W¨d¯g©gÓ6ˆŒÜ Ó$ˆŒÜ   aÓ(ˆŒÜ Ó$ˆŒÜ Ó$ˆ�r6   c                 ó0   — t        t        t        «      sJ ‚y r8   )r9   r   r   r2   s    r4   r‚   z0TestLinearDamper.test_is_force_actuator_subclassA  rƒ   r6   c                 ó0   — t        t        t        «      sJ ‚y r8   )r9   r   r   r2   s    r4   r:   z/TestLinearDamper.test_is_actuator_base_subclassD  r…   r6   c                 ó
  — | j                   j                  | j                  | j                  | j                  j
                  z  «       t        | j                  | j                  «      }t        |t        «      sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  | j                  k(  sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  | j                  k(  sJ ‚y )Nr¨   r.   )r'   rc   r&   r~   r,   rd   r   r¨   r.   r>   r?   r@   r   )r3   Údampers     r4   r‹   z'TestLinearDamper.test_valid_constructorG  sÀ   € Ø�‰�‰˜Ÿ™ §¡¨¯©¯©¡Ô1Ü˜dŸl™l¨D¯L©LÓ9ˆä˜&¤,Ô/Ð/Ð/ä�v˜yÔ)Ð)Ð)Ü˜&Ÿ.™.¬(Ô3Ð3Ð3Ø�~‰~ §¡Ò-Ð-Ð-ä�v˜yÔ)Ð)Ð)Ü˜&Ÿ.™.¬-Ô8Ð8Ð8Ø�~‰~ §¡Ò-Ð-Ñ-r6   c                 óÈ  — | j                   j                  | j                  | j                  | j                  j
                  z  «       t        | j                  | j                  «      }| j                   t        | j                  dz  «      z  | j                  z  | j                  z  }t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  |k(  sJ ‚y )Nr<   r-   )r'   rc   r&   r~   r,   rd   r   r¨   r.   r   r©   r?   r>   r-   r@   )r3   r®   rA   s      r4   rC   z-TestLinearDamper.test_valid_constructor_forceU  s    € Ø�‰�‰˜Ÿ™ §¡¨¯©¯©¡Ô1Ü˜dŸl™l¨D¯L©LÓ9ˆàŸ,™,˜¤t¨D¯F©F°A©I£Ñ6°t·w±wÑ>¸t¿v¹vÑEˆÜ�v˜wÔ'Ð'Ð'Ü˜&Ÿ,™,¬Ô1Ð1Ð1Ø�|‰|˜~Ò-Ð-Ñ-r6   r¨   Nr¦   c                 óŒ   — t        j                  t        «      5  t        || j                  «      }d d d «       y # 1 sw Y   y xY wr8   )rE   rF   r   r   r.   )r3   r¨   rG   s      r4   Ú0test_invalid_constructor_damping_not_sympifyablezATestLinearDamper.test_invalid_constructor_damping_not_sympifyable^  s3   € ä�]‰]œ<Ó(ñ 	4Ü˜W d§l¡lÓ3ˆA÷	4÷ 	4ñ 	4úrI   c                 óŒ   — t        j                  t        «      5  t        | j                  d «      }d d d «       y # 1 sw Y   y xY wr8   )rE   rF   rM   r   r¨   rN   s     r4   rO   zBTestLinearDamper.test_invalid_constructor_pathway_not_pathway_basec  s3   € Ü�]‰]œ9Ó%ñ 	1Ü˜TŸ\™\¨4Ó0ˆA÷	1÷ 	1ñ 	1úrI   rP   )r¨   r¨   rQ   c                 óÒ   — t        | j                  | j                  «      }t        | |«      }t	        j
                  t        «      5  t        |||«       d d d «       y # 1 sw Y   y xY wr8   )r   r¨   r.   rS   rE   rF   rT   rU   )r3   rV   rW   r®   rX   s        r4   rY   z.TestLinearDamper.test_properties_are_immutableg  sR   € ô ˜dŸl™l¨D¯L©LÓ9ˆÜ˜Ð/Ó0ˆÜ�]‰]œ>Ó*ñ 	2Ü�F˜M¨5Ô1÷	2÷ 	2ñ 	2úrZ   c                 óö   — | j                   j                  | j                  | j                  | j                  j
                  z  «       t        | j                  | j                  «      }d}t        |«      |k(  sJ ‚y )Nz&LinearDamper(c, LinearPathway(pA, pB)))
r'   rc   r&   r~   r,   rd   r   r¨   r.   r\   )r3   r®   r_   s      r4   r`   zTestLinearDamper.test_reprt  sS   € Ø�‰�‰˜Ÿ™ §¡¨¯©¯©¡Ô1Ü˜dŸl™l¨D¯L©LÓ9ˆØ;ˆÜ�F‹|˜xÒ'Ð'Ñ'r6   c                 ó2  — | j                   j                  | j                  | j                  | j                  j
                  z  «       t        | j                  | j                  «      }| j                  dz  | j                  dz  z  | j                  j
                  z  }| j                  | j                  z  |z  }| j                   | j                  z  |z  }t        | j                  |«      t        | j                   |«      g}|j                  «       |k(  sJ ‚y rb   )r'   rc   r&   r~   r,   rd   r   r¨   r.   r©   r   re   )r3   r®   Ú	directionr�   rž   r_   s         r4   r¡   zTestLinearDamper.test_to_loadsz  sÈ   € Ø�‰�‰˜Ÿ™ §¡¨¯©¯©¡Ô1Ü˜dŸl™l¨D¯L©LÓ9ˆØ—F‘F˜A‘I˜dŸf™f a™iÑ'¨¯©¯©Ñ0ˆ	Ø—<‘< §¡Ñ'¨	Ñ1ˆØ—L‘L�= §¡Ñ(¨Ñ2ˆÜ˜$Ÿ'™' 8Ó,¬e°D·G±G¸XÓ.FÐGˆØ�‰Ó  HÒ,Ð,Ñ,r6   )rq   rr   rs   rE   rt   rª   r‚   r:   r‹   rC   ru   rv   r±   rO   rY   r`   r¡   rx   r6   r4   r¤   r¤   3  sœ   „ à€V‡^�^˜DÔ!ñ	%ó "ð	%ò7ò6ò.ò.ð ‡[�[×Ñ˜Y¨¨s¨Ó4ñ4ó 5ð4ò1ð ‡[�[×ÑØ*à"Ø"ð	
óñ2óð2ò(ó-r6   r¤   c                   óN   — e Zd ZdZ ej
                  d¬«      d„ «       Zd„ Zd„ Zy)ÚTestForcedMassSpringDamperModela  A single degree of freedom translational forced mass-spring-damper.

    Notes
    =====

    This system is well known to have the governing equation:

    .. math::
        m \ddot{x} = F - k x - c \dot{x}

    where $F$ is an externally applied force, $m$ is the mass of the particle
    to which the spring and damper are attached, $k$ is the spring's stiffness,
    $c$ is the dampers damping coefficient, and $x$ is the generalized
    coordinate representing the system's single (translational) degree of
    freedom.

    Tr"   c                 óJ  — t        d«      | _        t        d«      | _        t        d«      | _        t        d«      | _        t        d«      | _        t        dd«      | _        t        d«      | _        t        d«      | _
        t        d	«      | _        | j                  j                  | j                  d
«       t        d«      | _        | j                  j                  | j                  | j                  | j                  j                   z  «       t#        d| j                  | j                  «      | _        t'        | j                  | j                  «      | _        t+        | j                  | j                  g| j                  g| j                  | j                  z
  g¬«      | _        | j$                  g| _        t1        | j                  gg«      | _        t1        | j                  | j                  | j                  z  z
  | j                  | j                  z  z
  gg«      | _        y )NÚmr|   r¦   r%   r~   r+   r§   r,   ÚpOr   r&   Úmass)Úq_indÚu_indÚkd_eqs)r   rº   r|   r¦   r%   r   r~   r©   r§   r   Úframer   ÚoriginÚset_velÚ
attachmentrc   rd   r   r¼   r   r.   r   Úkanes_methodÚbodiesr   Úmass_matrixÚforcingr2   s    r4   Ú'_force_mass_spring_damper_model_fixturezGTestForcedMassSpringDamperModel._force_mass_spring_damper_model_fixture—  sz  € ä˜“ˆŒÜ˜“ˆŒÜ˜“ˆŒÜ˜“ˆŒä Ó$ˆŒÜ   aÓ(ˆŒÜ Ó$ˆŒä# CÓ(ˆŒ
Ü˜D“kˆŒØ�‰×Ñ˜DŸJ™J¨Ô*ä ›+ˆŒØ�‰×Ñ §¡¨T¯V©V°D·J±J·L±LÑ-@ÔAä˜V T§_¡_°d·f±fÓ=ˆŒ	Ü$ T§[¡[°$·/±/ÓBˆŒä'Ø�J‰JØ—6‘6�(Ø—6‘6�(Ø—G‘G˜dŸf™fÑ$Ð%ô	
ˆÔð —y‘y�kˆŒä! D§F¡F 8 *Ó-ˆÔÜ §¡¨¯©°·±©Ñ 6¸¿¹ÀÇÁ¹Ñ FÐGÐHÓIˆ�r6   c                 ól  — | j                    | j                  j                  z  }t        || j                  «      }| j                   | j                  j
                  z  }t        || j                  «      }| j                  | j                  | j                  j                  z  fg|j                  «       ¢|j                  «       ¢}| j                  j                  | j                  |«       | j                  j                  | j                  k(  sJ ‚| j                  j                  | j                  k(  sJ ‚y r8   )r|   r.   rm   r   r¦   Úextension_velocityrÃ   r%   rÀ   rd   re   rÄ   Úkanes_equationsrÅ   rÆ   rÇ   )r3   r   rŠ   r¨   r®   rŸ   s         r4   Útest_force_acuatorz2TestForcedMassSpringDamperModel.test_force_acuator·  sö   € Ø—V‘V�G˜DŸL™L×/Ñ/Ñ/ˆ	Ü˜y¨$¯,©,Ó7ˆØ—6‘6�'˜$Ÿ,™,×9Ñ9Ñ9ˆÜ˜w¨¯©Ó5ˆð �_‰_˜dŸf™f T§Z¡Z§\¡\Ñ1Ð2ð
à�_‰_Óð
ð �_‰_Óð
ˆð
 	×Ñ×)Ñ)¨$¯+©+°uÔ=à× Ñ ×,Ñ,°×0@Ñ0@Ò@Ð@Ð@Ø× Ñ ×(Ñ(¨D¯L©LÒ8Ð8Ñ8r6   c                 ó  — t        | j                  | j                  «      }t        | j                  | j                  «      }| j
                  | j                  | j                  j                  z  fg|j                  «       ¢|j                  «       ¢}| j                  j                  | j                  |«       | j                  j                  | j                  k(  sJ ‚| j                  j                  | j                  k(  sJ ‚y r8   )r   r|   r.   r   r¦   rÃ   r%   rÀ   rd   re   rÄ   rË   rÅ   rÆ   rÇ   )r3   rŠ   r®   rŸ   s       r4   Ú test_linear_spring_linear_damperz@TestForcedMassSpringDamperModel.test_linear_spring_linear_damperÇ  sÊ   € Ü˜dŸf™f d§l¡lÓ3ˆÜ˜dŸf™f d§l¡lÓ3ˆð �_‰_˜dŸf™f T§Z¡Z§\¡\Ñ1Ð2ð
à�_‰_Óð
ð �_‰_Óð
ˆð
 	×Ñ×)Ñ)¨$¯+©+°uÔ=à× Ñ ×,Ñ,°×0@Ñ0@Ò@Ð@Ð@Ø× Ñ ×(Ñ(¨D¯L©LÒ8Ð8Ñ8r6   N)	rq   rr   rs   Ú__doc__rE   rt   rÈ   rÌ   rÎ   rx   r6   r4   r¸   r¸   „  s2   „ ñð$ €V‡^�^˜DÔ!ñJó "ðJò>9ó 9r6   r¸   c            	       óì  — e Zd Z ej                  d¬«      d„ «       Zd„ Zej                  j                  d e	d«       e
d«       e	d«      dz   e	d«      z   g«      ej                  j                  dej                  ej                  feej                  fej                  efeefg«      d	„ «       «       Zej                  j                  d e	d«       e
d«       e	d«      dz   e	d«      z   g«      ej                  j                  d
ej                  eg«      d„ «       «       Zej                  j                  dddg«      d„ «       Zej                  j                  d e	d«       e
d«      g«      d„ «       Zej                  j                  dd ed«      f ed«      dfd ed«      f ed«      dfg«      d„ «       Zej                  j                  dg d¢«      d„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestTorqueActuatorTr"   c                 ó
  — t        d«      | _        t        d«      | _        t        d«      | _        | j                  j
                  | _        t        d| j                  ¬«      | _        t        d| j                  ¬«      | _	        y )NÚTr,   ÚAr   )rÀ   r   )
r   Útorquer   r,   rÔ   rl   Úaxisr   r   r   r2   s    r4   Ú_torque_actuator_fixturez+TestTorqueActuator._torque_actuator_fixtureØ  sX   € ä˜S“kˆŒÜ Ó$ˆŒÜ Ó$ˆŒØ—F‘F—H‘HˆŒ	Ü °·±Ô7ˆŒÜ! *°D·F±FÔ;ˆ�r6   c                 ó0   — t        t        t        «      sJ ‚y r8   )r9   r   r   r2   s    r4   r:   z1TestTorqueActuator.test_is_actuator_base_subclassá  s   € Üœ.¬,Ô7Ð7Ñ7r6   rÕ   rÓ   r<   ztarget_frame, reaction_framec                 ó|  — t        || j                  ||«      }t        |t         «      sJ ‚t        |d«      sJ ‚t        |j                  t
        «      sJ ‚|j                  |k(  sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  | j                  k(  sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  t        j                  k(  sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  t        j                  k(  sJ ‚y ©NrÕ   rÖ   Útarget_frameÚreaction_frame)r   rÖ   r>   r?   rÕ   r@   r   rÛ   r   r   rÀ   rÜ   r   )r3   rÕ   rÛ   rÜ   rB   s        r4   Ú$test_valid_constructor_with_reactionz7TestTorqueActuator.test_valid_constructor_with_reactionä  s  € ô. "ØØ�I‰IØØó	
ˆô ˜(¤NÔ3Ð3Ð3ä�x Ô*Ð*Ð*Ü˜(Ÿ/™/¬8Ô4Ð4Ð4Ø�‰ &Ò(Ð(Ð(ä�x Ô(Ð(Ð(Ü˜(Ÿ-™-¬Ô0Ð0Ð0Ø�}‰} §	¡	Ò)Ð)Ð)ä�x Ô0Ð0Ð0Ü˜(×/Ñ/´Ô@Ð@Ð@Ø×$Ñ$¬¯©Ò4Ð4Ð4ä�xÐ!1Ô2Ð2Ð2Ü˜(×1Ñ1´>ÔBÐBÐBØ×&Ñ&¬(¯.©.Ò8Ð8Ñ8r6   rÛ   c                 ó   — t        || j                  |«      }t        |t         «      sJ ‚t        |d«      sJ ‚t        |j                  t
        «      sJ ‚|j                  |k(  sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  | j                  k(  sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  t        j                  k(  sJ ‚t        |d«      sJ ‚|j                  �J ‚y rÚ   )r   rÖ   r>   r?   rÕ   r@   r   rÛ   r   r   rÀ   rÜ   )r3   rÕ   rÛ   rB   s       r4   Ú'test_valid_constructor_without_reactionz:TestTorqueActuator.test_valid_constructor_without_reaction  s÷   € ô " &¨$¯)©)°\ÓBˆÜ˜(¤NÔ3Ð3Ð3ä�x Ô*Ð*Ð*Ü˜(Ÿ/™/¬8Ô4Ð4Ð4Ø�‰ &Ò(Ð(Ð(ä�x Ô(Ð(Ð(Ü˜(Ÿ-™-¬Ô0Ð0Ð0Ø�}‰} §	¡	Ò)Ð)Ð)ä�x Ô0Ð0Ð0Ü˜(×/Ñ/´Ô@Ð@Ð@Ø×$Ñ$¬¯©Ò4Ð4Ð4ä�xÐ!1Ô2Ð2Ð2Ø×&Ñ&Ð.Ð.Ñ.r6   Nc                 ó¢   — t        j                  t        «      5  t        || j                  | j
                  «      }d d d «       y # 1 sw Y   y xY wr8   )rE   rF   r   r   rÖ   r   )r3   rÕ   rG   s      r4   Ú/test_invalid_constructor_torque_not_sympifyablezBTestTorqueActuator.test_invalid_constructor_torque_not_sympifyable/  s9   € ä�]‰]œ<Ó(ñ 	?Ü˜v t§y¡y°$·+±+Ó>ˆA÷	?÷ 	?ñ 	?úrŽ   rÖ   Úac                 ó¸   — t        j                  t        «      5  t        | j                  || j
                  | j                  «      }d d d «       y # 1 sw Y   y xY wr8   )rE   rF   rM   r   rÕ   r   r   )r3   rÖ   rG   s      r4   Ú(test_invalid_constructor_axis_not_vectorz;TestTorqueActuator.test_invalid_constructor_axis_not_vector4  sC   € ä�]‰]œ9Ó%ñ 	NÜ˜tŸ{™{¨D°$·+±+¸t¿}¹}ÓMˆA÷	N÷ 	Nñ 	Núó   š-AÁAÚframesÚchildÚparentc                 ó¢   — t        j                  t        «      5  t        | j                  | j
                  g|¢­Ž }d d d «       y # 1 sw Y   y xY wr8   )rE   rF   rM   r   rÕ   rÖ   )r3   ræ   rG   s      r4   Ú)test_invalid_constructor_frames_not_framez<TestTorqueActuator.test_invalid_constructor_frames_not_frame9  sB   € ô �]‰]œ9Ó%ñ 	@Ü˜tŸ{™{¨D¯I©IÐ?¸Ò?ˆA÷	@÷ 	@ñ 	@úrŽ   rP   ))rÕ   rÕ   )rÖ   rÖ   )rÛ   r   )rÜ   r   c                 óþ   — t        | j                  | j                  | j                  | j                  «      }t        | |«      }t        j                  t        «      5  t        |||«       d d d «       y # 1 sw Y   y xY wr8   )
r   rÕ   rÖ   r   r   rS   rE   rF   rT   rU   )r3   rV   rW   r^   rX   s        r4   rY   z0TestTorqueActuator.test_properties_are_immutableF  sf   € ô "Ø�K‰KØ�I‰IØ�K‰KØ�M‰Mó	
ˆô ˜Ð/Ó0ˆÜ�]‰]œ>Ó*ñ 	4Ü�H˜m¨UÔ3÷	4÷ 	4ñ 	4ús   ÁA3Á3A<c                 ó~   — t        | j                  | j                  | j                  «      }d}t	        |«      |k(  sJ ‚y )Nz+TorqueActuator(T, axis=N.z, target_frame=N))r   rÕ   rÖ   r   r\   r]   s      r4   Útest_repr_without_reactionz-TestTorqueActuator.test_repr_without_reactionZ  s3   € Ü! $§+¡+¨t¯y©y¸$¿+¹+ÓFˆØ@ˆÜ�H‹~ Ò)Ð)Ñ)r6   c                 ó”   — t        | j                  | j                  | j                  | j                  «      }d}t        |«      |k(  sJ ‚y )Nz=TorqueActuator(T, axis=N.z, target_frame=N, reaction_frame=A))r   rÕ   rÖ   r   r   r\   r]   s      r4   Útest_repr_with_reactionz*TestTorqueActuator.test_repr_with_reaction_  sB   € Ü!Ø�K‰KØ�I‰IØ�K‰KØ�M‰Mó	
ˆð SˆÜ�H‹~ Ò)Ð)Ñ)r6   c           	      ó(  — t        d| j                  | j                  t        d«      t        d«      | j                  | j
                  ¬«      }t        j                  | j                  |«      }t        |t        «      sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  | j                  k(  sJ ‚t        |d«      sJ ‚t        |j
                  t        «      sJ ‚|j
                  | j
                  k(  sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  | j                  k(  sJ ‚t        |d«      sJ ‚t        |j                   t        «      sJ ‚|j                   | j                  k(  sJ ‚y )	NÚpinr~   r§   )ÚcoordinatesÚspeedsÚparent_interframeÚ
joint_axisrÕ   rÖ   rÛ   rÜ   )r   r   r   r   r,   rÖ   r   Úat_pin_jointrÕ   r>   r?   r@   r   rÛ   r   rÔ   rÜ   )r3   Ú	pin_jointrB   s      r4   Útest_at_pin_joint_constructorz0TestTorqueActuator.test_at_pin_joint_constructori  sT  € ÜØØ�K‰KØ�M‰MÜ& sÓ+Ü! #Ó&Ø"Ÿf™fØ—y‘yô
ˆ	ô "×.Ñ.¨t¯{©{¸IÓFˆÜ˜(¤NÔ3Ð3Ð3ä�x Ô*Ð*Ð*Ü˜(Ÿ/™/¬8Ô4Ð4Ð4Ø�‰ $§+¡+Ò-Ð-Ð-ä�x Ô(Ð(Ð(Ü˜(Ÿ-™-¬Ô0Ð0Ð0Ø�}‰} §	¡	Ò)Ð)Ð)ä�x Ô0Ð0Ð0Ü˜(×/Ñ/´Ô@Ð@Ð@Ø×$Ñ$¨¯©Ò.Ð.Ð.ä�xÐ!1Ô2Ð2Ð2Ü˜(×1Ñ1´>ÔBÐBÐBØ×&Ñ&¨$¯&©&Ò0Ð0Ñ0r6   c                 ó²   — t        j                  t        «      5  t        j                  | j
                  t        d«      «      }d d d «       y # 1 sw Y   y xY w)Nrñ   )rE   rF   rM   r   rö   rÕ   r   rN   s     r4   Ú1test_at_pin_joint_pin_joint_not_pin_joint_invalidzDTestTorqueActuator.test_at_pin_joint_pin_joint_not_pin_joint_invalid†  sA   € Ü�]‰]œ9Ó%ñ 	HÜ×+Ñ+¨D¯K©K¼À»ÓGˆA÷	H÷ 	Hñ 	Hús   š*AÁAc                 óÐ   — t        | j                  | j                  | j                  «      }| j                  | j                  | j                  z  fg}|j                  «       |k(  sJ ‚y r8   )r   rÕ   rÖ   r   r,   re   r]   s      r4   Útest_to_loads_without_reactionz1TestTorqueActuator.test_to_loads_without_reactionŠ  sU   € Ü! $§+¡+¨t¯y©y¸$¿+¹+ÓFˆà�V‰V�T—[‘[ §¡Ñ*Ð+ð
ˆð × Ñ Ó" hÒ.Ð.Ñ.r6   c                 ó0  — t        | j                  | j                  | j                  | j                  «      }| j
                  | j                  | j                  z  f| j                  | j                   | j                  z  fg}|j                  «       |k(  sJ ‚y r8   )r   rÕ   rÖ   r   r   r,   rÔ   re   r]   s      r4   Útest_to_loads_with_reactionz.TestTorqueActuator.test_to_loads_with_reaction‘  s~   € Ü!Ø�K‰KØ�I‰IØ�K‰KØ�M‰Mó	
ˆð �V‰V�T—[‘[ §¡Ñ*Ð+Ø�V‰V�t—{‘{�] 4§9¡9Ñ,Ð-ð
ˆð × Ñ Ó" hÒ.Ð.Ñ.r6   )rq   rr   rs   rE   rt   r×   r:   ru   rv   r   r   r   rÀ   r   rÝ   rß   rá   rä   r   r   rê   rY   rí   rï   rø   rú   rü   rþ   rx   r6   r4   rÑ   rÑ   Ö  s@  „ à€V‡^�^˜DÔ!ñ<ó "ð<ò8ð ‡[�[×ÑØá�3‹KÙ˜3ÓÙ�3‹K˜‰N™V C›[Ñ(ð	
óð ‡[�[×ÑØ&à�\‰\˜8Ÿ>™>Ð*Ø�X—^‘^Ð$Ø�\‰\˜8Ð$Ø�XÐð		
óñ9óóð"9ð< ‡[�[×ÑØá�3‹KÙ˜3ÓÙ�3‹K˜‰N™V C›[Ñ(ð	
óð ‡[�[×Ñ˜^¨f¯l©l¸FÐ-CÓDñ/ó Eóð/ð& ‡[�[×Ñ˜X¨¨c {Ó3ñ?ó 4ð?ð ‡[�[×Ñ˜V¡f¨S£k±>À#Ó3FÐ%GÓHñNó IðNð ‡[�[×ÑØà‘> 'Ó*Ð+Ù˜HÓ% tÐ,Ø‘9˜WÓ%Ð&Ù�xÓ  $Ð'ð		
óñ@óð@ð ‡[�[×ÑØ*ò	
óñ	4óð	4ò*ò
*ò1ò:Hò/ó/r6   rÑ   c                   ó   — e Zd Zy)ÚNonSympifyableN)rq   rr   rs   rx   r6   r4   r   r   Ÿ  s   „ Ør6   r   c                   óH  — e Zd Z ej                  d¬«      d„ «       Zd„ Zd„ Zej                  j                  dde
j                  de
j                  de
j                   e ed	«      d
z  «        e ed	«      d
z  «      dz  z
  f ed«       ed«       ed«       ed«      de
j                   ed«        e ed	«      d
z  «      z   ed«       e ed	«      d
z  «      dz  z  z
  f ed«       ed«       ed«       ed«      e
j                  e
j                   ed«        e ed	«      d
z  «      z   ed«       e ed	«      d
z  «      dz  z  z
  f ed«       ed«       ed«       ed«       ed«       ed«       ed«        e ed	«      d
z  «       ed«      z
  z   ed«       e ed	«      d
z  «       ed«      z
  dz  z  z
  fg«      d„ «       Zej                  j                  dd e«       g«      d„ «       Zej                  j                  dd e«       g«      d„ «       Zd„ Zej                  j                  dd e«       g«      d„ «       Zej                  j                  dg d¢«      d„ «       Zej                  j                  dd ed«      dfg«      d„ «       Zd„ Zy) ÚTestDuffingSpringTr"   c                 ó.  — t        d«      | _        t        d«      | _        t        d«      | _        t	        d«      | _        t	        d«      | _        t        | j
                  | j                  «      | _        t        d«      | _
        t        d«      | _        y )NÚbetaÚalphar}   r&   r'   r~   r,   )r   Úlinear_stiffnessÚnonlinear_stiffnessr‡   r   r&   r'   r   r.   r   r~   r   r,   r2   s    r4   Ú_duffing_spring_fixturez)TestDuffingSpring._duffing_spring_fixture¤  sl   € ô !' v£ˆÔÜ#)¨'£?ˆÔ Ü"(¨£+ˆÔÜ˜“+ˆŒÜ˜“+ˆŒÜ$ T§W¡W¨d¯g©gÓ6ˆŒÜ Ó$ˆŒÜ Ó$ˆ�r6   c                 ó0   — t        t        t        «      sJ ‚y r8   )r9   r   r   r2   s    r4   r‚   z1TestDuffingSpring.test_is_force_actuator_subclass±  s   € Üœ-¬Ô7Ð7Ñ7r6   c                 ó0   — t        t        t        «      sJ ‚y r8   )r9   r   r   r2   s    r4   r:   z0TestDuffingSpring.test_is_actuator_base_subclass´  r;   r6   z linear_stiffness,  expected_linear_stiffness,  nonlinear_stiffness,   expected_nonlinear_stiffness,  equilibrium_length,    expected_equilibrium_length,   forcer+   r   r~   r<   é   r  r  r}   c                 óH  — | j                   j                  | j                  | j                  | j                  j
                  z  «       t        ||| j                  |«      }t        |t        «      sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  |k(  sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  |k(  sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  | j                  k(  sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  |k(  sJ ‚t        |d«      sJ ‚t        |j                  t        «      sJ ‚|j                  |k(  sJ ‚y )Nr  r  r.   r‡   r-   )r'   rc   r&   r~   r,   rd   r   r.   r>   r?   r  r@   r  r   r‡   r-   )	r3   r  Úexpected_linear_stiffnessr  Úexpected_nonlinear_stiffnessr‡   r‰   r-   rŠ   s	            r4   r‹   z(TestDuffingSpring.test_valid_constructor·  sv  € ð~ 	�‰�‰˜Ÿ™ §¡¨¯©¯©¡Ô1ÜÐ/Ð1DÀdÇlÁlÐTfÓgˆä˜&¤-Ô0Ð0Ð0ä�vÐ1Ô2Ð2Ð2Ü˜&×1Ñ1´8Ô<Ð<Ð<Ø×&Ñ&Ð*CÒCÐCÐCä�vÐ4Ô5Ð5Ð5Ü˜&×4Ñ4´hÔ?Ð?Ð?Ø×)Ñ)Ð-IÒIÐIÐIä�v˜yÔ)Ð)Ð)Ü˜&Ÿ.™.¬-Ô8Ð8Ð8Ø�~‰~ §¡Ò-Ð-Ð-ä�vÐ3Ô4Ð4Ð4Ü˜&×3Ñ3´XÔ>Ð>Ð>Ø×(Ñ(Ð,GÒGÐGÐGä�v˜wÔ'Ð'Ð'Ü˜&Ÿ,™,¬Ô1Ð1Ð1Ø�|‰|˜uÒ$Ð$Ñ$r6   r  Nc                 ó¸   — t        j                  t        «      5  t        || j                  | j
                  | j                  «      }d d d «       y # 1 sw Y   y xY wr8   )rE   rF   r   r   r  r.   r‡   )r3   r  rG   s      r4   Ú9test_invalid_constructor_linear_stiffness_not_sympifyablezKTestDuffingSpring.test_invalid_constructor_linear_stiffness_not_sympifyable  sI   € ä�]‰]œ<Ó(ñ 	qÜÐ.°×0HÑ0HÈ$Ï,É,ÐX\×XoÑXoÓpˆA÷	q÷ 	qñ 	qúrå   r  c                 ó¸   — t        j                  t        «      5  t        | j                  || j
                  | j                  «      }d d d «       y # 1 sw Y   y xY wr8   )rE   rF   r   r   r  r.   r‡   )r3   r  rG   s      r4   Ú<test_invalid_constructor_nonlinear_stiffness_not_sympifyablezNTestDuffingSpring.test_invalid_constructor_nonlinear_stiffness_not_sympifyable  sI   € ä�]‰]œ<Ó(ñ 	qÜ˜d×3Ñ3Ð5HÈ$Ï,É,ÐX\×XoÑXoÓpˆA÷	q÷ 	qñ 	qúrå   c                 óÈ   — t        j                  t        «      5  t        | j                  | j
                  t        «       | j                  «      }d d d «       y # 1 sw Y   y xY wr8   )rE   rF   rM   r   r  r  r   r‡   rN   s     r4   rO   zCTestDuffingSpring.test_invalid_constructor_pathway_not_pathway_base  sM   € Ü�]‰]œ9Ó%ñ 	zÜ˜d×3Ñ3°T×5MÑ5MÌ~ÓO_Ðae×axÑaxÓyˆA÷	z÷ 	zñ 	zús   š5AÁA!r‡   c                 ó¸   — t        j                  t        «      5  t        | j                  | j
                  | j                  |«      }d d d «       y # 1 sw Y   y xY wr8   )rE   rF   r   r   r  r  r.   r‘   s      r4   r’   zMTestDuffingSpring.test_invalid_constructor_equilibrium_length_not_sympifyable  sH   € ä�]‰]œ<Ó(ñ 	qÜ˜d×3Ñ3°T×5MÑ5MÈtÏ|É|Ð]oÓpˆA÷	q÷ 	qñ 	qúrå   rP   ))r  r  )r  r  rQ   )r‡   r‡   c           	      óú   — t        | j                  | j                  | j                  | j                  «      }t        j                  t        «      5  t        ||t        | |«      «       d d d «       y # 1 sw Y   y xY wr8   )
r   r  r  r.   r‡   rE   rF   rT   rU   rS   )r3   rV   rW   rŠ   s       r4   rY   z/TestDuffingSpring.test_properties_are_immutable"  sg   € ô ˜t×4Ñ4°d×6NÑ6NÐPT×P\ÑP\Ð^b×^uÑ^uÓvˆÜ�]‰]œ>Ó*ñ 	MÜ�F˜M¬7°4Ð9JÓ+KÔL÷	M÷ 	Mñ 	Mús   ÁA1Á1A:r”   )r   zGDuffingSpring(beta, alpha, LinearPathway(pA, pB), equilibrium_length=0)zGDuffingSpring(beta, alpha, LinearPathway(pA, pB), equilibrium_length=l)c                 ó|   — t        | j                  | j                  | j                  |«      }t	        |«      |k(  sJ ‚y r8   )r   r  r  r.   r\   r–   s       r4   r`   zTestDuffingSpring.test_repr2  s:   € ô ˜t×4Ñ4°d×6NÑ6NÐPT×P\ÑP\Ð^pÓqˆÜ�F‹|˜xÒ'Ð'Ñ'r6   c                 ó
  — | j                   j                  | j                  | j                  | j                  j
                  z  «       t        | j                  | j                  | j                  | j                  «      }| j                  | j                  z
  }| j                   |z  | j                  |dz  z  z
  }t        | j                  || j                  j
                  z  «      t        | j                   | | j                  j
                  z  «      g}|j                  «       }t        ||«      D ]Ð  \  }}|j                  |j                  k(  sJ ‚| j                  D ]¡  }|j                  j!                  |«      }	|j                  j!                  |«      }
| j                  dt#        d«      dt#        d«      dt#        d«      di}|	|
z
  j%                  |«      j'                  «       }t)        |«      dk  rŒ™J d|› �«       ‚ ŒÒ y )Nr  r+   r}   r  r  g•Ö&è.>z%The forces do not match. Difference: )r'   rc   r&   r~   r,   rd   r   r  r  r.   r‡   r   re   r˜   r™   rš   Údotr   ÚsubsÚevalfr   )r3   rŠ   Údisplacementr-   Úexpected_loadsÚcalculated_loadsÚ
calculatedr_   ÚdimÚcalculated_componentÚexpected_componentÚsubstitutionsÚdiffs                r4   r¡   zTestDuffingSpring.test_to_loads?  sÇ  € Ø�‰�‰˜Ÿ™ §¡¨¯©¯©¡Ô1Ü˜t×4Ñ4°d×6NÑ6NÐPT×P\ÑP\Ð^b×^uÑ^uÓvˆð —v‘v × 7Ñ 7Ñ7ˆð ×&Ñ&Ð&¨Ñ5¸×8PÑ8PÐS_ÐabÑSbÑ8bÑbˆô   §¡¨°·±·±Ñ)9Ó:¼EÀ$Ç'Á'ÈEÈ6ÐTX×TZÑTZ×T\ÑT\ÑK\Ó<]Ð^ˆð "Ÿ?™?Ó,ÐÜ$'Ð(8¸.Ó$Iò 		XÑ ˆJ˜Ø×#Ñ# x§~¡~Ò5Ð5Ð5Ø—v‘vò X�Ø'1×'8Ñ'8×'<Ñ'<¸SÓ'AÐ$Ø%-§_¡_×%8Ñ%8¸Ó%=Ð"à!%§¡¨¬F°3«K¸¼FÀ7»OÈQÔPVÐW]ÓP^Ð`aÐ b�Ø,Ð/AÑA×GÑGÈÓV×\Ñ\Ó^�ä˜4“y 4Ó'ÐWÐ+PÐQUÐPVÐ)WÓWÐ'ñXñ		Xr6   )rq   rr   rs   rE   rt   r  r‚   r:   ru   rv   r   rw   r¢   r   r   r   r‹   r   r  r  rO   r’   rY   r`   r¡   rx   r6   r4   r  r  £  sH  „ Ø€V‡^�^˜DÔ!ñ%ó "ð%ò8ò7ð ‡[�[×Ñð	ð Ø—‘ØØ—‘ØØ—‘Ù‘n SÓ)¨1Ñ,Ó-Ð-©t±NÀ3Ó4GÈÑ4JÓ/KÈaÑ.OÑOðñ �v“Ù�v“Ù�w“Ù�w“ØØ—‘Ù˜“�¡¡^°CÓ%8¸!Ñ%;Ó <Ñ<¹VÀG»_ÉdÑSaÐbeÓSfÐhiÑSiÓNjÐmnÑMnÑ=nÑnðñ �v“Ù�v“Ù�w“Ù�w“Ø—‘Ø—‘Ù˜“�¡¡^°CÓ%8¸!Ñ%;Ó <Ñ<¹VÀG»_ÉdÑSaÐbeÓSfÐhiÑSiÓNjÐmnÑMnÑ=nÑnðñ �v“Ù�v“Ù�w“Ù�w“Ù�s“Ù�s“Ù˜“�¡4©°sÓ(;¸QÑ(>Ó#?Á&ÈÃ+Ñ#MÑNÑQWÐX_ÓQ`ÑdhÑiwÐx{Ói|Ð~Ñió  eAñ  DJð  KNó  DOñ  eOð  RSñ  dSñ  RSñ  Sðð9%
ó1ñj!%ók1ðj!%ðF ‡[�[×ÑÐ/°$¹Ó8HÐ1IÓJñqó Kðqð ‡[�[×ÑÐ2°T¹>Ó;KÐ4LÓMñqó Nðqòzð ‡[�[×ÑÐ1°D¹.Ó:JÐ3KÓLñqó Mðqð ‡[�[×ÑØ*ò	
óñMóðMð
 ‡[�[×ÑØ&àZÙ�C‹[ÐcÐdð	
óñ(óð(óXr6   r  c                   ó\   — e Zd Z ej                  d¬«      d„ «       Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚTestCoulombKineticFrictionTr"   c                 ót   — t        dd¬«      \  | _        | _        | _        | _        | _        | _        | _        y)a8  A block sliding on a surface.

        Notes
        =====
        This test validates the correctness of the CoulombKineticFriction by simulating
        a block sliding on a surface with the Coulomb kinetic friction force.
        The test covers scenarios with both positive and negative velocities.

        zm g mu_k mu_s v_s sigma FT)ÚrealN)r	   rº   ÚgÚmu_kÚmu_sÚv_sÚsigmar%   r2   s    r4   Ú_block_on_surfacez,TestCoulombKineticFriction._block_on_surfaceZ  s1   € ô NUÐUpÐw{ÔM|ÑJˆŒ�”˜œ	 4¤9¨d¬h¸¼
ÀDÅFr6   c                 ó&
  — t        d«      }t        d«      }t        d«      }|j                  d||j                  z  «      }|j                  |d«       |j                  ||j                  «       |j                  z  «       t        ||«      }t        | j                  | j                  | j                  z  |«      }t        || j                  | j                  z  | j                  z  |z  t        t        |dz  «      |j                  «       z  |z  «      z  t        |dz  «      z  |j                  z  ¬«      t        || j                   | j                  z  | j                  z  |z  t        t        |dz  «      |j                  «       z  |z  «      z  t        |dz  «      z  |j                  z  ¬«      g}|j                  «       |k(  sJ ‚t        dd¬	«      }t        d«      }t        d«      }|j                  d||j                  z  «      }|j                  |d«       |j                  ||j                  «       |j                  z  «       t        ||«      }t        | j                  | j                  | j                  z  |«      }t        || j                  | j                  z  | j                  z  t        |j                  «       «      z  |j                  z  ¬«      t        || j                   | j                  z  | j                  z  t        |j                  «       «      z  |j                  z  ¬«      g}|j                  «       |k(  sJ ‚t        dd
¬	«      }t        d«      }t        d«      }|j                  d||j                  z  «      }|j                  |d«       |j                  ||j                  «       |j                  z  «       t        ||«      }t        | j                  | j                  | j                  z  |«      }t        || j                  | j                  z  | j                  z  |z  t        t        |dz  «      |j                  «       z  |z  «      z  t        |dz  «      z  |j                  z  ¬«      t        || j                   | j                  z  | j                  z  |z  t        t        |dz  «      |j                  «       z  |z  «      z  t        |dz  «      z  |j                  z  ¬«      g}	|j                  «       |	k(  sJ ‚y )Nr~   r,   ÚOÚPr   r<   ©r™   r-   T©ÚpositiveF)r   r   r   Ú	locatenewrd   rÂ   r#  r   r   r)  rº   r(  r   r   r   re   ©
r3   r~   r,   r/  r0  r.   ÚfrictionÚexpected_generalÚexpected_positiveÚexpected_negatives
             r4   Útest_block_on_surface_defaultz8TestCoulombKineticFriction.test_block_on_surface_defaulti  s�  € ä˜3Óˆä˜3ÓˆÜ�#‹JˆØ�K‰K˜˜Q §¡™WÓ%ˆØ	�	‰	�!�QŒØ	�	‰	�!�Q—V‘V“X §¡‘^Ô$ä  1Ó%ˆÜ)¨$¯)©)°T·V±V¸d¿f¹f±_ÀgÓNˆÜ!¨°·±¸$¿&¹&±À4Ç9Á9Ñ1LÈqÑ1PÔSWÔX\Ð]^Ð`aÑ]aÓXbÐef×ekÑekÓemÑXmÐnoÑXoÓSpÑ1pÔquÐvwÐyzÑvzÓq{Ñ1{Ð~÷  Bñ  Bñ  2Bô  CÜ!¨°$·&±&°¸4¿6¹6Ñ1AÀDÇIÁIÑ1MÐPQÑ1QÔTXÔY]Ð^_ÐabÑ^bÓYcÐfg×flÑflÓfnÑYnÐopÑYpÓTqÑ1qÔrvÐwxÐz{Ñw{Ór|Ñ1|ð  @A÷  @Cñ  @Cñ  2Cô  DðEÐð × Ñ Ó"Ð&6Ò6Ð6Ð6ô ˜3¨Ô.ˆä˜3ÓˆÜ�#‹JˆØ�K‰K˜˜Q §¡™WÓ%ˆØ	�	‰	�!�QŒØ	�	‰	�!�Q—V‘V“X §¡‘^Ô$ä  1Ó%ˆÜ)¨$¯)©)°T·V±V¸d¿f¹f±_ÀgÓNˆÜ"¨°$·&±&¸4¿6¹6±/ÀDÇIÁIÑ2MÔPTÐUV×U[ÑU[ÓU]ÓP^Ñ2^Ðab×adÑadÑ2dÔeÜ"¨°4·6±6°'¸D¿F¹FÑ2BÀTÇYÁYÑ2NÔQUÐVW×V\ÑV\ÓV^ÓQ_Ñ2_Ðbc×beÑbeÑ2eÔfðhÐð × Ñ Ó"Ð&7Ò7Ð7Ð7ô ˜3¨Ô/ˆä˜3ÓˆÜ�#‹JˆØ�K‰K˜˜Q §¡™WÓ%ˆØ	�	‰	�!�QŒØ	�	‰	�!�Q—V‘V“X §¡‘^Ô$ä  1Ó%ˆÜ)¨$¯)©)°T·V±V¸d¿f¹f±_ÀgÓNˆÜ"¨°$·&±&¸4¿6¹6±/ÀDÇIÁIÑ2MÐPQÑ2QÔTXÔY]Ð^_ÐabÑ^bÓYcÐfg×flÑflÓfnÑYnÐopÑYpÓTqÑ2qÔrvÐwxÐz{Ñw{Ór|Ñ2|Ð}~÷  ~Añ  ~Añ  3Aô  BÜ"¨°4·6±6°'¸D¿F¹FÑ2BÀTÇYÁYÑ2NÐQRÑ2RÔUYÔZ^Ð_`ÐbcÑ_cÓZdÐgh×gmÑgmÓgoÑZoÐpqÑZqÓUrÑ2rÔswÐxyÐ{|Ñx|Ós}Ñ2}Ð~÷  Bñ  Bñ  3Bô  CðDÐð × Ñ Ó"Ð&7Ò7Ð7Ñ7r6   c                 óf  — t        d«      }t        d«      }t        d«      }|j                  d||j                  z  «      }|j                  |d«       |j                  ||j                  «       |j                  z  «       t        ||«      }t        | j                  | j                  | j                  z  || j                  ¬«      }t        || j                  | j                  z  | j                  z  t        t        |dz  «      |j                  «       z  |z  «      z  | j                  t        |dz  «      z  |j                  «       z  |z  z   |z  t        |dz  «      z  |j                  z  ¬«      t        || j                   | j                  z  | j                  z  t        t        |dz  «      |j                  «       z  |z  «      z  | j                  t        |dz  «      z  |j                  «       z  |z  z
  |z  t        |dz  «      z  |j                  z  ¬«      g}|j!                  «       |k(  sJ ‚t        dd	¬
«      }t        d«      }t        d«      }|j                  d||j                  z  «      }|j                  |d«       |j                  ||j                  «       |j                  z  «       t        ||«      }t        | j                  | j                  | j                  z  || j                  ¬«      }t        || j                  | j                  z  | j                  z  t        |j                  «       «      z  | j                  |j                  «       z  z   |j                  z  ¬«      t        || j                   | j                  z  | j                  z  t        |j                  «       «      z  | j                  |j                  «       z  z
  |j                  z  ¬«      g}|j!                  «       |k(  sJ ‚t        dd¬
«      }t        d«      }t        d«      }|j                  d||j                  z  «      }|j                  |d«       |j                  ||j                  «       |j                  z  «       t        ||«      }t        | j                  | j                  | j                  z  || j                  ¬«      }t        || j                  | j                  z  | j                  z  t        t        |dz  «      |j                  «       z  |z  «      z  | j                  t        |dz  «      z  |j                  «       z  |z  z   |z  t        |dz  «      z  |j                  z  ¬«      t        || j                   | j                  z  | j                  z  t        t        |dz  «      |j                  «       z  |z  «      z  | j                  t        |dz  «      z  |j                  «       z  |z  z
  |z  t        |dz  «      z  |j                  z  ¬«      g}	|j!                  «       |	k(  sJ ‚y )Nr~   r,   r/  r0  r   )r,  r<   r1  Tr2  F)r   r   r   r4  rd   rÂ   r#  r   r   r)  rº   r(  r,  r   r   r   re   r5  s
             r4   Útest_block_on_surface_viscousz8TestCoulombKineticFriction.test_block_on_surface_viscousš  s  € ä˜3Óˆä˜3ÓˆÜ�#‹JˆØ�K‰K˜˜Q §¡™WÓ%ˆØ	�	‰	�!�QŒØ	�	‰	�!�Q—V‘V“X §¡‘^Ô$ä  1Ó%ˆÜ)¨$¯)©)°T·V±V¸d¿f¹f±_ÀgÐUY×U_ÑU_Ô`ˆÜ!¨°$·&±&¸4¿6¹6±/ÀDÇIÁIÑ2MÔPTÔUYÐZ[Ð]^ÑZ^ÓU_Ðbc×bhÑbhÓbjÑUjÐklÑUlÓPmÑ2mÐpt×pzÑpzô  ~Bð  CDð  FGñ  CGó  ~Hñ  qHð  KL÷  KQñ  KQó  KSñ  qSð  TUñ  qUñ  3Uð  YZñ  2Zô  [_ð  `að  cdñ  `dó  [eñ  2eð  hi÷  hkñ  hkñ  2kô  lÜ!¨°4·6±6°'¸D¿F¹FÑ2BÀTÇYÁYÑ2NÔQUÔVZÐ[\Ð^_Ñ[_ÓV`Ðcd×ciÑciÓckÑVkÐlmÑVmÓQnÑ2nÐqu×q{Ñq{ô  Cð  DEð  GHñ  DHó  Iñ  rIð  LM÷  LRñ  LRó  LTñ  rTð  UVñ  rVñ  3Vð  Z[ñ  2[ô  \`ð  abð  deñ  aeó  \fñ  2fð  ij÷  ilñ  ilñ  2lô  mðnÐð × Ñ Ó"Ð&6Ò6Ð6Ð6ô ˜3¨Ô.ˆä˜3ÓˆÜ�#‹JˆØ�K‰K˜˜Q §¡™WÓ%ˆØ	�	‰	�!�QŒØ	�	‰	�!�Q—V‘V“X §¡‘^Ô$ä  1Ó%ˆÜ)¨$¯)©)°T·V±V¸d¿f¹f±_ÀgÐUY×U_ÑU_Ô`ˆÜ"¨°4·6±6¸D¿F¹F±?ÀTÇYÁYÑ3NÔQUÐVW×V\ÑV\ÓV^ÓQ_Ñ3_Ðbf×blÑblÐop×ouÑouÓowÑbwÑ3wÐ{|×{~Ñ{~Ñ2~ÔÜ"¨°D·F±F°7¸T¿V¹VÑ3CÀdÇiÁiÑ3OÔRVÐWX×W]ÑW]ÓW_ÓR`Ñ3`Ðcg×cmÑcmÐpq×pvÑpvÓpxÑcxÑ3xÐ|}×|Ñ|Ñ2ô  AðBÐð × Ñ Ó"Ð&7Ò7Ð7Ð7ô ˜3¨Ô/ˆä˜3ÓˆÜ�#‹JˆØ�K‰K˜˜Q §¡™WÓ%ˆØ	�	‰	�!�QŒØ	�	‰	�!�Q—V‘V“X §¡‘^Ô$ä  1Ó%ˆÜ)¨$¯)©)°T·V±V¸d¿f¹f±_ÀgÐUY×U_ÑU_Ô`ˆÜ"¨°4·6±6¸D¿F¹F±?ÀTÇYÁYÑ3NÔQUÔVZÐ[\Ð^_Ñ[_ÓV`Ðcd×ciÑciÓckÑVkÐlmÑVmÓQnÑ3nÐqu×q{Ñq{ô  Cð  DEð  GHñ  DHó  Iñ  rIð  LM÷  LRñ  LRó  LTñ  rTð  UVñ  rVñ  4Vð  Z[ñ  3[ô  \`ð  abð  deñ  aeó  \fñ  3fð  ij÷  ilñ  ilñ  3lô  mÜ"¨°D·F±F°7¸T¿V¹VÑ3CÀdÇiÁiÑ3OÔRVÔW[Ð\]Ð_`Ñ\`ÓWaÐde×djÑdjÓdlÑWlÐmnÑWnÓRoÑ3oÐrv×r|Ñr|ô  @Dð  EFð  HIñ  EIó  @Jñ  sJð  MN÷  MSñ  MSó  MUñ  sUð  VWñ  sWñ  4Wð  [\ñ  3\ô  ]að  bcð  efñ  bfó  ]gñ  3gð  jk÷  jmñ  jmñ  3mô  nðoÐð × Ñ Ó"Ð&7Ò7Ð7Ñ7r6   c                 óŒ  — t        d«      }t        d«      }t        d«      }|j                  d||j                  z  «      }|j                  |d«       |j                  ||j                  «       |j                  z  «       t        ||«      }t        | j                  | j                  | j                  z  || j                  | j                  ¬«      }t        || j                  | j                  z  | j                  z  | j                   | j                  z  | j                  z  | j                  | j                  z  | j                  z  z   t        |j                  «       dz   | j                  dz  z  «      z  z   |z  t!        t#        |dz  «      |j                  «       z  |z  «      z  t#        |dz  «      z  |j                  z  ¬«      t        || j                  | j                  z  | j                  z  | j                   | j                  z  | j                  z  | j                  | j                  z  | j                  z  z   t        |j                  «       dz   | j                  dz  z  «      z  z    |z  t!        t#        |dz  «      |j                  «       z  |z  «      z  t#        |dz  «      z  |j                  z  ¬«      g}|j%                  «       |k(  sJ ‚t        dd	¬
«      }t        d«      }t        d«      }|j                  d||j                  z  «      }|j                  |d«       |j                  ||j                  «       |j                  z  «       t        ||«      }t        | j                  | j                  | j                  z  || j                  | j                  ¬«      }t        || j                  | j                  z  | j                  z  | j                   | j                  z  | j                  z  | j                  | j                  z  | j                  z  z   t        |j                  «       dz   | j                  dz  z  «      z  z   t!        |j                  «       «      z  |j                  z  ¬«      t        || j                  | j                  z  | j                  z  | j                   | j                  z  | j                  z  | j                  | j                  z  | j                  z  z   t        |j                  «       dz   | j                  dz  z  «      z  z    t!        |j                  «       «      z  |j                  z  ¬«      g}|j%                  «       |k(  sJ ‚t        dd¬
«      }t        d«      }t        d«      }|j                  d||j                  z  «      }|j                  |d«       |j                  ||j                  «       |j                  z  «       t        ||«      }t        | j                  | j                  | j                  z  || j                  | j                  ¬«      }t        || j                  | j                  z  | j                  z  | j                   | j                  z  | j                  z  | j                  | j                  z  | j                  z  z   t        |j                  «       dz   | j                  dz  z  «      z  z   |z  t!        t#        |dz  «      |j                  «       z  |z  «      z  t#        |dz  «      z  |j                  z  ¬«      t        || j                  | j                  z  | j                  z  | j                   | j                  z  | j                  z  | j                  | j                  z  | j                  z  z   t        |j                  «       dz   | j                  dz  z  «      z  z    |z  t!        t#        |dz  «      |j                  «       z  |z  «      z  t#        |dz  «      z  |j                  z  ¬«      g}	|j%                  «       |	k(  sJ ‚y )Nr~   r,   r/  r0  r   )r+  r*  r<   r1  Tr2  F)r   r   r   r4  rd   rÂ   r#  r   r   r)  rº   r(  r+  r*  r   r
   r   r   re   r5  s
             r4   Útest_block_on_surface_stribeckz9TestCoulombKineticFriction.test_block_on_surface_stribeckË  sÉ  € ä˜3Óˆä˜3ÓˆÜ�#‹JˆØ�K‰K˜˜Q §¡™WÓ%ˆØ	�	‰	�!�QŒØ	�	‰	�!�Q—V‘V“X §¡‘^Ô$ä  1Ó%ˆÜ)¨$¯)©)°T·V±V¸d¿f¹f±_ÀgÐSW×S[ÑS[Ðbf×bkÑbkÔlˆÜ!¨°$·&±&¸4¿6¹6±/ÀDÇIÁIÑ2MÐRV×RXÑRXÐQXÐ[_×[aÑ[aÑQaÐdh×dmÑdmÑQmÐpt×pvÑpvÐy}×yÑyÑpð  CG÷  CLñ  CLñ  qLñ  RLô  PSð  UV÷  U[ñ  U[ó  U]ð  _`ñ  U`ð  T`ð  ae÷  aiñ  aið  klñ  alñ  Tló  Pmñ  Qmñ  3mð  qrñ  2rô  uyô  z~ð  @ð  BCñ  Có  zDð  GH÷  GMñ  GMó  GOñ  zOð  PQñ  zQó  uRñ  2Rô  SWð  XYð  [\ñ  X\ó  S]ñ  2]ð  `a÷  `cñ  `cñ  2cô  dÜ!¨°D·F±F¸T¿V¹V±OÀdÇiÁiÑ4OÐTX×TZÑTZÐSZÐ]a×]cÑ]cÑScÐfj×foÑfoÑSoÐrv×rxÑrxÐ{÷  |Bñ  |Bñ  sBð  EI÷  ENñ  ENñ  sNñ  TNô  RUð  WX÷  W]ñ  W]ó  W_ð  abñ  Wbð  Vbð  cg÷  ckñ  ckð  mnñ  cnñ  Vnó  Roñ  Soñ  5oð  2pð  stñ  2tô  w{ô  |@ð  ABð  DEñ  AEó  |Fð  IJ÷  IOñ  IOó  IQñ  |Qð  RSñ  |Só  wTñ  2Tô  UYð  Z[ð  ]^ñ  Z^ó  U_ñ  2_ð  bc÷  beñ  beñ  2eô  fðgÐð × Ñ Ó"Ð&6Ò6Ð6Ð6ô ˜3¨Ô.ˆä˜3ÓˆÜ�#‹JˆØ�K‰K˜˜Q §¡™WÓ%ˆØ	�	‰	�!�QŒØ	�	‰	�!�Q—V‘V“X §¡‘^Ô$ä  1Ó%ˆÜ)¨$¯)©)°T·V±V¸d¿f¹f±_ÀgÐSW×S[ÑS[Ðbf×bkÑbkÔlˆÜ"¨°4·6±6¸D¿F¹F±?ÀTÇYÁYÑ3NÐSW×SYÑSYÐRYÐ\`×\bÑ\bÑRbÐei×enÑenÑRnÐqu×qwÑqwÐz~÷  {Añ  {Añ  rAð  DH÷  DMñ  DMñ  rMñ  SMô  QTð  VW÷  V\ñ  V\ó  V^ð  `añ  Vað  Uað  bf÷  bjñ  bjð  lmñ  bmñ  Umó  Qnñ  Rnñ  4nô  rvð  wx÷  w}ñ  w}ó  wó  r@ñ  3@ð  CD÷  CFñ  CFñ  3Fô  GÜ"¨°T·V±V¸d¿f¹f±_ÀtÇyÁyÑ5PÐUY×U[ÑU[ÐT[Ð^b×^dÑ^dÑTdÐgk×gpÑgpÑTpÐsw×syÑsyð  }A÷  }Cñ  }Cñ  tCð  FJ÷  FOñ  FOñ  tOñ  UOô  SVð  XY÷  X^ñ  X^ó  X`ð  bcñ  Xcð  Wcð  dh÷  dlñ  dlð  noñ  doñ  Woó  Spñ  Tpñ  6pð  3qô  txð  yz÷  yñ  yó  yAó  tBñ  3Bð  EF÷  EHñ  EHñ  3Hô  IðJÐð × Ñ Ó"Ð&7Ò7Ð7Ð7ô ˜3¨Ô/ˆä˜3ÓˆÜ�#‹JˆØ�K‰K˜˜Q §¡™WÓ%ˆØ	�	‰	�!�QŒØ	�	‰	�!�Q—V‘V“X §¡‘^Ô$ä  1Ó%ˆÜ)¨$¯)©)°T·V±V¸d¿f¹f±_ÀgÐSW×S[ÑS[Ðbf×bkÑbkÔlˆÜ"¨°4·6±6¸D¿F¹F±?ÀTÇYÁYÑ3NÐSW×SYÑSYÐRYÐ\`×\bÑ\bÑRbÐei×enÑenÑRnÐqu×qwÑqwÐz~÷  {Añ  {Añ  rAð  DH÷  DMñ  DMñ  rMñ  SMô  QTð  VW÷  V\ñ  V\ó  V^ð  `añ  Vað  Uað  bf÷  bjñ  bjð  lmñ  bmñ  Umó  Qnñ  Rnñ  4nð  rsñ  3sô  vzô  {ð  @Að  CDñ  @Dó  {Eð  HI÷  HNñ  HNó  HPñ  {Pð  QRñ  {Ró  vSñ  3Sô  TXð  YZð  \]ñ  Y]ó  T^ñ  3^ð  ab÷  adñ  adñ  3dô  eÜ"¨°T·V±V¸d¿f¹f±_ÀtÇyÁyÑ5PÐUY×U[ÑU[ÐT[Ð^b×^dÑ^dÑTdÐgk×gpÑgpÑTpÐsw×syÑsyð  }A÷  }Cñ  }Cñ  tCð  FJ÷  FOñ  FOñ  tOñ  UOô  SVð  XY÷  X^ñ  X^ó  X`ð  bcñ  Xcð  Wcð  dh÷  dlñ  dlð  noñ  doñ  Woó  Spñ  Tpñ  6pð  3qð  tuñ  3uô  x|ô  }Að  BCð  EFñ  BFó  }Gð  JK÷  JPñ  JPó  JRñ  }Rð  STñ  }Tó  xUñ  3Uô  VZð  [\ð  ^_ñ  [_ó  V`ñ  3`ð  cd÷  cfñ  cfñ  3fô  gðhÐð × Ñ Ó"Ð&7Ò7Ð7Ñ7r6   c                 óÆ  — t        d«      }t        d«      }t        d«      }|j                  d||j                  z  «      }|j                  |d«       |j                  ||j                  «       |j                  z  «       t        ||«      }t        | j                  | j                  | j                  z  || j                  | j                  | j                  ¬«      }t        || j                  t!        |dz  «      z  |j                  «       z  |z  | j                  | j                  z  | j                  z  | j                   | j                  z  | j                  z  | j                  | j                  z  | j                  z  z   t#        |j                  «       dz   | j                  dz  z  «      z  z   t%        t!        |dz  «      |j                  «       z  |z  «      z  z   |z  t!        |dz  «      z  |j                  z  ¬«      t        || j                   t!        |dz  «      z  |j                  «       z  |z  | j                  | j                  z  | j                  z  | j                   | j                  z  | j                  z  | j                  | j                  z  | j                  z  z   t#        |j                  «       dz   | j                  dz  z  «      z  z   t%        t!        |dz  «      |j                  «       z  |z  «      z  z
  |z  t!        |dz  «      z  |j                  z  ¬«      g}|j'                  «       |k(  sJ ‚t        dd	¬
«      }t        d«      }t        d«      }|j                  d||j                  z  «      }|j                  |d«       |j                  ||j                  «       |j                  z  «       t        ||«      }t        | j                  | j                  | j                  z  || j                  | j                  | j                  ¬«      }t        || j                  |j                  «       z  | j                  | j                  z  | j                  z  | j                   | j                  z  | j                  z  | j                  | j                  z  | j                  z  z   t#        |j                  «       dz   | j                  dz  z  «      z  z   t%        |j                  «       «      z  z   |j                  z  ¬«      t        || j                   |j                  «       z  | j                  | j                  z  | j                  z  | j                   | j                  z  | j                  z  | j                  | j                  z  | j                  z  z   t#        |j                  «       dz   | j                  dz  z  «      z  z   t%        |j                  «       «      z  z
  |j                  z  ¬«      g}|j'                  «       |k(  sJ ‚t        dd¬
«      }t        d«      }t        d«      }|j                  d||j                  z  «      }|j                  |d«       |j                  ||j                  «       |j                  z  «       t        ||«      }t        | j                  | j                  | j                  z  || j                  | j                  | j                  ¬«      }t        || j                  t!        |dz  «      z  |j                  «       z  |z  | j                  | j                  z  | j                  z  | j                   | j                  z  | j                  z  | j                  | j                  z  | j                  z  z   t#        |j                  «       dz   | j                  dz  z  «      z  z   t%        t!        |dz  «      |j                  «       z  |z  «      z  z   |z  t!        |dz  «      z  |j                  z  ¬«      t        || j                   t!        |dz  «      z  |j                  «       z  |z  | j                  | j                  z  | j                  z  | j                   | j                  z  | j                  z  | j                  | j                  z  | j                  z  z   t#        |j                  «       dz   | j                  dz  z  «      z  z   t%        t!        |dz  «      |j                  «       z  |z  «      z  z
  |z  t!        |dz  «      z  |j                  z  ¬«      g}	|j'                  «       |	k(  sJ ‚y )Nr~   r,   r/  r0  r   )r+  r,  r*  r<   r1  Tr2  F)r   r   r   r4  rd   rÂ   r#  r   r   r)  rº   r(  r+  r,  r*  r   r   r
   r   re   r5  s
             r4   Útest_block_on_surface_allz4TestCoulombKineticFriction.test_block_on_surface_allü  s&  € ä˜3Óˆä˜3ÓˆÜ�#‹JˆØ�K‰K˜˜Q §¡™WÓ%ˆØ	�	‰	�!�QŒØ	�	‰	�!�Q—V‘V“X §¡‘^Ô$ä  1Ó%ˆÜ)¨$¯)©)°T·V±V¸d¿f¹f±_ÀgÐSW×S[ÑS[Ðcg×cmÑcmÐtx×t}Ñt}Ô~ˆÜ!¨°$·*±*¼tÀAÀqÁD»zÑ2IÈAÏFÉFËHÑ2TÐUVÑ2VÐZ^×Z`ÑZ`Ðcg×ciÑciÑZiÐlp×luÑluÑZuÐz~÷  {Añ  {Að  zAð  DH÷  DJñ  DJñ  zJð  MQ÷  MVñ  MVñ  zVð  Y]÷  Y_ñ  Y_ð  bf÷  bhñ  bhñ  Yhð  ko÷  ktñ  ktñ  Ytñ  ztô  x{ð  }~÷  }Cñ  }Có  }Eð  GHñ  }Hð  |Hð  IM÷  IQñ  IQð  STñ  ITñ  |Tó  xUñ  yUñ  [Uô  Y]ô  ^bð  cdð  fgñ  cgó  ^hð  kl÷  kqñ  kqó  ksñ  ^sð  tuñ  ^uó  Yvñ  Zvñ  3vð  z{ñ  2{ô  |@ð  ABð  DEñ  AEó  |Fñ  2Fð  IJ÷  ILñ  ILñ  2Lô  MÜ!¨°4·:±:°+ÄÀQÈÁTÃ
Ñ2JÈQÏVÉVËXÑ2UÐVWÑ2WÐ[_×[aÑ[aÐdh×djÑdjÑ[jÐmq×mvÑmvÑ[vÐ{÷  |Bñ  |Bð  {Bð  EI÷  EKñ  EKñ  {Kð  NR÷  NWñ  NWñ  {Wð  Z^÷  Z`ñ  Z`ð  cg÷  ciñ  ciñ  Zið  lp÷  luñ  luñ  Zuñ  {uô  y|ð  ~÷  ~Dñ  ~Dó  ~Fð  HIñ  ~Ið  }Ið  JN÷  JRñ  JRð  TUñ  JUñ  }Uó  yVñ  zVñ  \Vô  Z^ô  _cð  deð  ghñ  dhó  _ið  lm÷  lrñ  lró  ltñ  _tð  uvñ  _vó  Zwñ  [wñ  3wð  {|ñ  2|ô  }Að  BCð  EFñ  BFó  }Gñ  2Gð  JK÷  JMñ  JMñ  2Mô  NðOÐð × Ñ Ó"Ð&6Ò6Ð6Ð6ô ˜3¨Ô.ˆä˜3ÓˆÜ�#‹JˆØ�K‰K˜˜Q §¡™WÓ%ˆØ	�	‰	�!�QŒØ	�	‰	�!�Q—V‘V“X §¡‘^Ô$ä  1Ó%ˆÜ)¨$¯)©)°T·V±V¸d¿f¹f±_ÀgÐSW×S[ÑS[Ðcg×cmÑcmÐtx×t}Ñt}Ô~ˆÜ"¨°4·:±:ÀÇÁÃÑ3HÈDÏFÉFÐUY×U[ÑU[ÉOÐ^b×^gÑ^gÑLgÐlp×lrÑlrÐkrÐuy×u{Ñu{Ñk{ð  C÷  Hñ  Hñ  lHð  KO÷  KQñ  KQð  TX÷  TZñ  TZñ  KZð  ]a÷  ]fñ  ]fñ  Kfñ  lfô  jmð  op÷  ouñ  ouó  owð  yzñ  ozð  nzð  {÷  {Cñ  {Cð  EFñ  {Fñ  nFó  jGñ  kGñ  MGô  KOð  PQ÷  PVñ  PVó  PXó  KYñ  LYñ  4Yð  ]^÷  ]`ñ  ]`ñ  3`ô  aÜ"¨°D·J±J°;ÀÇÁÃÑ3IÈTÏVÉVÐVZ×V\ÑV\É_Ð_c×_hÑ_hÑMhÐmq×msÑmsÐlsÐvz×v|Ñv|Ñl|ð  @D÷  @Iñ  @Iñ  mIð  LP÷  LRñ  LRð  UY÷  U[ñ  U[ñ  L[ð  ^b÷  ^gñ  ^gñ  Lgñ  mgô  knð  pq÷  pvñ  pvó  pxð  z{ñ  p{ð  o{ð  |@÷  |Dñ  |Dð  FGñ  |Gñ  oGó  kHñ  lHñ  NHô  LPð  QR÷  QWñ  QWó  QYó  LZñ  MZñ  4Zð  ^_÷  ^añ  ^añ  3aô  bðcÐð × Ñ Ó"Ð&7Ò7Ð7Ð7ô ˜3¨Ô/ˆä˜3ÓˆÜ�#‹JˆØ�K‰K˜˜Q §¡™WÓ%ˆØ	�	‰	�!�QŒØ	�	‰	�!�Q—V‘V“X §¡‘^Ô$ä  1Ó%ˆÜ)¨$¯)©)°T·V±V¸d¿f¹f±_ÀgÐSW×S[ÑS[Ðcg×cmÑcmÐtx×t}Ñt}Ô~ˆÜ"¨°4·:±:ÄÀQÈÁTÃ
Ñ3JÈQÏVÉVËXÑ3UÐVWÑ3WÐ[_×[aÑ[aÐdh×djÑdjÑ[jÐmq×mvÑmvÑ[vÐ{÷  |Bñ  |Bð  {Bð  EI÷  EKñ  EKñ  {Kð  NR÷  NWñ  NWñ  {Wð  Z^÷  Z`ñ  Z`ð  cg÷  ciñ  ciñ  Zið  lp÷  luñ  luñ  Zuñ  {uô  y|ð  ~÷  ~Dñ  ~Dó  ~Fð  HIñ  ~Ið  }Ið  JN÷  JRñ  JRð  TUñ  JUñ  }Uó  yVñ  zVñ  \Vô  Z^ô  _cð  deð  ghñ  dhó  _ið  lm÷  lrñ  lró  ltñ  _tð  uvñ  _vó  Zwñ  [wñ  4wð  {|ñ  3|ô  }Að  BCð  EFñ  BFó  }Gñ  3Gð  JK÷  JMñ  JMñ  3Mô  NÜ"¨°D·J±J°;ÄÀaÈÁdÃÑ3KÈaÏfÉfËhÑ3VÐWXÑ3XÐ\`×\bÑ\bÐei×ekÑekÑ\kÐnr×nwÑnwÑ\wð  }A÷  }Cñ  }Cð  |Cð  FJ÷  FLñ  FLñ  |Lð  OS÷  OXñ  OXñ  |Xð  [_÷  [añ  [að  dh÷  djñ  djñ  [jð  mq÷  mvñ  mvñ  [vñ  |vô  z}ð  @÷  Eñ  Eó  Gð  IJñ  Jð  ~Jð  KO÷  KSñ  KSð  UVñ  KVñ  ~Vó  zWñ  {Wñ  ]Wô  [_ô  `dð  efð  hiñ  eió  `jð  mn÷  msñ  msó  muñ  `uð  vwñ  `wó  [xñ  \xñ  4xð  |}ñ  3}ô  ~Bð  CDð  FGñ  CGó  ~Hñ  3Hð  KL÷  KNñ  KNñ  3Nô  OðPÐð × Ñ Ó"Ð&7Ò7Ð7Ñ7r6   c                 ój  — t        d«      }t        d«      }t        d«      }|j                  d||j                  z  «      }|j                  |d«       |j                  ||j                  «       |j                  z  «       t        ||«      }t        | j                  d|«      }|j                  dk(  sJ ‚y )Nr~   r,   r/  r0  r   )r   r   r   r4  rd   rÂ   r#  r   r   r)  r-   )r3   r~   r,   r/  r0  r.   r6  s          r4   Útest_normal_force_zeroz1TestCoulombKineticFriction.test_normal_force_zero-  s—   € Ü˜3Óˆä˜3ÓˆÜ�#‹JˆØ�K‰K˜˜Q §¡™WÓ%ˆØ	�	‰	�!�QŒØ	�	‰	�!�Q—V‘V“X §¡‘^Ô$ä  1Ó%ˆÜ)Ø�I‰IØØó
ˆð
 �~‰~ Ò"Ð"Ñ"r6   N)rq   rr   rs   rE   rt   r-  r:  r<  r>  r@  rB  rx   r6   r4   r%  r%  Y  s>   „ Ø€V‡^�^˜DÔ!ñ}ó "ð}ò/8òb/8òb/8òb/8ób#r6   r%  )+rÏ   rE   Úsympyr   r   r   r   r   r   r	   r
   r   Úsympy.physics.mechanicsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Úsympy.core.exprr   r@   r   r   r!   rz   r¤   r¸   rÑ   r   r  r%  rx   r6   r4   ú<module>rF     s²   ðÙ Cã ÷
÷ 
õ 
÷÷ ÷ ÷ õ õ( -á	�8Ó	€Ù�ZÓ €÷s/ñ s/÷lP:ñ P:÷fN-ñ N-÷bO9ñ O9÷dF/ñ F/÷R	ñ 	÷tXñ tX÷lc#ò c#r6   