
    Qiy                        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*dS )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                      e Zd Z ej        d          d             Zd Ze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                            d
ddg          d             Zej                            d e ed           ed                    g          d             Zd Zej                            dddg          d             Zd Zd Zd Zd ZdS )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          | _        d S )	NFpApBq1q2q3   N)r   forcer   r&   r'   r   pathwayr   r(   r)   r*   q1dq2dq3dr   r,   selfs    /var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/sympy/physics/mechanics/tests/test_actuator.py_linear_pathway_fixturez)TestForceActuator._linear_pathway_fixture,   s    C[[
++++$TWdg66 && && &&!$**!$**!$**$$    c                 >    t          t          t                    sJ d S N)
issubclassr   r   r2   s    r4   test_is_actuator_base_subclassz0TestForceActuator.test_is_actuator_base_subclass:       -6666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 d S )Nr-   )r   r.   
isinstancehasattrr-   ExprType)r3   r-   expected_forceinstances       r4   test_valid_constructor_forcez.TestForceActuator.test_valid_constructor_force=   sr     !55(M22222x)))))(.(33333~//////r6   r-   Nc                     t          j        t                    5  t          || j                  }d d d            d S # 1 swxY w Y   d S r8   )pytestraisesr   r   r.   )r3   r-   _s      r4   .test_invalid_constructor_force_not_sympifyablez@TestForceActuator.test_invalid_constructor_force_not_sympifyableN   s    ]<(( 	3 	3eT\22A	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3   =AAr.   r&   r'   c                     t          | j        |          }t          |t                     sJ t          |d          sJ t          |j        t
                    sJ |j        |k    sJ d S )Nr.   )r   r-   r>   r?   r.   r   )r3   r.   rB   s      r4   test_valid_constructor_pathwayz0TestForceActuator.test_valid_constructor_pathwayS   st     !W55(M22222x+++++(*M:::::7******r6   c                     t          j        t                    5  t          | j        d           }d d d            d S # 1 swxY w Y   d S r8   )rE   rF   	TypeErrorr   r-   r3   rG   s     r4   1test_invalid_constructor_pathway_not_pathway_basezCTestForceActuator.test_invalid_constructor_pathway_not_pathway_base`   s    ]9%% 	0 	0dj$//A	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0rI    property_name, fixture_attr_name)r-   r-   r.   r.   c                     t          | j        | j                  }t          | |          }t	          j        t                    5  t          |||           d d d            d S # 1 swxY w Y   d S 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   s     !T\::/00]>** 	4 	4HmU333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4   A##A'*A'c                 h    t          | j        | j                  }d}t          |          |k    sJ d S )Nz'ForceActuator(F, LinearPathway(pA, pB)))r   r-   r.   reprr3   actuatorexpecteds      r4   	test_reprzTestForceActuator.test_reprq   s7     T\::<H~~))))))r6   c                 6   | j                             | j        d| j        j        z             t          | j        | j                  }| j        | j         | j        j        z  f| j         | j        | j        j        z  fg}|                                |k    sJ d S Nr<   )	r'   set_posr&   r,   xr   r-   r.   to_loadsr]   s      r4   test_to_loads_static_pathwayz.TestForceActuator.test_to_loads_static_pathwayv   s    468,,, T\::W
l468+,Wdj)*
   ""h......r6   c                    | 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}|
                                |k    sJ d S 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    47468!3444 T\::W
lDGD!,<,<$<=dfhFGWdj$'$twz*:*:":;DFHDE
   ""h......r6   c                 :   | 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}|                                |k    sJ d S )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GDFHtwtvx//!DG)DFH2DD	
 	
 	
 !T\::dgqj47A:-$'1*<==jL )&0j )&01
l47"468+F23 	 Jtwtvx'.j )&01
l47"468+F23 	 WhWh
   ""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!   *   s       V^D!!!% % "!%7 7 7 [JUAENVC[[&&++&^C  .."5"56VC[[!^ffSkk)66#;;>FF3KK+GH	
	 	0 0	 	0 [WtSk223 3 323 [M%%++uuT{{33	
 + + +0 0 0 [*"	
 4 4 4* * *
/ / // / // / / / /r6   r!   c                      e Zd Z ej        d          d             Zd Zd Ze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        	                    dddg          d             Zd Zej        	                    dddg          d             Zej        	                    dg d          d             Zej        	                    de
j        df ed          dfg          d             Zd ZdS )TestLinearSpringTr"   c                 4   t          d          | _        t          d          | _        t          d          | _        t          d          | _        t          | j        | j                  | _        t          d          | _	        t          d          | _        d S )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   sm    ++++$TWdg66$$$$r6   c                 >    t          t          t                    sJ d S r8   )r9   r   r   r2   s    r4   test_is_force_actuator_subclassz0TestLinearSpring.test_is_force_actuator_subclass       ,6666666r6   c                 >    t          t          t                    sJ d S r8   )r9   r   r   r2   s    r4   r:   z/TestLinearSpring.test_is_actuator_base_subclass       ,5555555r6   zUstiffness, expected_stiffness, equilibrium_length, expected_equilibrium_length, forcer+   r   r~   r<   r|   r}   c                    | 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 d S )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   sd   ^ 	111i7IJJ&,/////v{+++++&*H55555#55555vy)))))&.-88888~----v344444&3X>>>>>(,GGGGGvw'''''&,11111|u$$$$$$r6   r   Nc                     t          j        t                    5  t          || j        | j                  }d d d            d S # 1 swxY w Y   d S r8   )rE   rF   r   r   r.   r}   )r3   r   rG   s      r4   2test_invalid_constructor_stiffness_not_sympifyablezCTestLinearSpring.test_invalid_constructor_stiffness_not_sympifyable   s    ]<(( 	> 	>Ydf==A	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>   AA
Ac                     t          j        t                    5  t          | j        d | j                  }d d d            d S # 1 swxY w Y   d S r8   )rE   rF   rM   r   r   r}   rN   s     r4   rO   zBTestLinearSpring.test_invalid_constructor_pathway_not_pathway_base   s    ]9%% 	; 	;T^T46::A	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;r   r   c                     t          j        t                    5  t          | j        | j        |          }d d d            d S # 1 swxY w Y   d S 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 	OT^T\;MNNA	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	Or   rP   ))r   r   rQ   )r   r}   c                     t          | j        | j        | j                  }t	          | |          }t          j        t                    5  t          |||           d d d            d S # 1 swxY w Y   d S r8   )	r   r   r.   r}   rS   rE   rF   rT   rU   )r3   rV   rW   r   rX   s        r4   rY   z.TestLinearSpring.test_properties_are_immutable  s     dndlDFCC/00]>** 	2 	2FM5111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   
A))A-0A-equilibrium_length, expectedz&LinearSpring(k, LinearPathway(pA, pB))z<LinearSpring(k, LinearPathway(pA, pB), equilibrium_length=l)c                     | j                             | j        | j        | j        j        z             t          | j        | j        |          }t          |          |k    sJ d S r8   )
r'   rc   r&   r~   r,   rd   r   r   r.   r\   r3   r   r_   r   s       r4   r`   zTestLinearSpring.test_repr  sY     	111dndl<NOOF||x''''''r6   c                    | 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}|                                }t          ||          D ]N\  }\  }}	t          |t                    sJ |j        |k    sJ |j        |	z
                                  dk    sJ Od S )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$  sS   111dndlDFCCTVQY'0>4	??TV#;<VCN?DOOdf$<=fD$'8,,eDGX.F.FG!!%(%9%9 	: 	:!D/5&dE*****:&&&&K&(224499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 7 76 6 6 [ nnS))1,--- ssTT.."5"5q"8999 ssTT.."5"5q"8999 ssssdd>>##6#6#9::VVC[[HI-	
& &N% %O& &N%: [[4+66> > 76>; ; ; [1D#;??O O @?O [*	
 	
 	
 2 2 2 [&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
                            dd	d
g          d             Zd Zej
                            dddg          d             Zd Zd Zd	S )TestLinearDamperTr"   c                    t          d          | _        t          d          | _        t          d          | _        t          d          | _        t          | j        | j                  | _        t          d          | _	        t          dd          | _
        t          d          | _        t          d          | _        d S )	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  s    c{{++++$TWdg66$$ a(($$$$r6   c                 >    t          t          t                    sJ d S r8   )r9   r   r   r2   s    r4   r   z0TestLinearDamper.test_is_force_actuator_subclassA  r   r6   c                 >    t          t          t                    sJ d S r8   )r9   r   r   r2   s    r4   r:   z/TestLinearDamper.test_is_actuator_base_subclassD  r   r6   c                    | 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 d S )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11dlDL99&,/////vy)))))&.(33333~----vy)))))&.-88888~------r6   c                 t   | 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 d S )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11dlDL99,tDFAI6tw>tvEvw'''''&,11111|~------r6   r   Nr   c                     t          j        t                    5  t          || j                  }d d d            d S # 1 swxY w Y   d S r8   )rE   rF   r   r   r.   )r3   r   rG   s      r4   0test_invalid_constructor_damping_not_sympifyablezATestLinearDamper.test_invalid_constructor_damping_not_sympifyable^  s    ]<(( 	4 	4Wdl33A	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4rI   c                     t          j        t                    5  t          | j        d           }d d d            d S # 1 swxY w Y   d S r8   )rE   rF   rM   r   r   rN   s     r4   rO   zBTestLinearDamper.test_invalid_constructor_pathway_not_pathway_basec  s    ]9%% 	1 	1T\400A	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1rI   rP   )r   r   rQ   c                     t          | j        | j                  }t          | |          }t	          j        t                    5  t          |||           d d d            d S # 1 swxY w Y   d S r8   )r   r   r.   rS   rE   rF   rT   rU   )r3   rV   rW   r   rX   s        r4   rY   z.TestLinearDamper.test_properties_are_immutableg  s     dlDL99/00]>** 	2 	2FM5111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2rZ   c                     | j                             | j        | j        | j        j        z             t          | j        | j                  }d}t          |          |k    sJ d S )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  sY    111dlDL99;F||x''''''r6   c                    | 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}|                                |k    sJ d S 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11dlDL99FAIdfai'0	<'	1L=(2$'8,,eDGX.F.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 7 76 6 6. . .. . . [Ys444 4 5441 1 1 [*""	
 2 2 2( ( (- - - - -r6   r   c                   R    e Zd ZdZ ej        d          d             Zd Zd ZdS )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                    t          d          | _        t          d          | _        t          d          | _        t          d          | _        t          d          | _        t          dd          | _        t          d          | _        t          d          | _
        t          d	          | _        | j                            | j
        d
           t          d          | _        | 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          | _        d S )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  s   $$ a(($$#C((
DkkDJ***++TVDJL-@AAAVT_df==	$T[$/BB'J6(6(Gdf$%	
 
 
 yk!DF8*-- 6 FGHIIr6   c                    | j          | j        j        z  }t          || j                  }| j         | j        j        z  }t          || j                  }| j        | j        | j        j	        z  fg|
                                |
                                }| j                            | j        |           | j        j        | j        k    sJ | j        j        | j        k    sJ d S 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    VGDL//	y$,776'$,99w55 _dfTZ\12
__
 __

 	))$+u=== ,0@@@@@ (DL888888r6   c                    t          | j        | j                  }t          | j        | j                  }| j        | j        | j        j        z  fg|	                                |	                                }| j
                            | j        |           | j
        j        | j        k    sJ | j
        j        | j        k    sJ d S 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    dfdl33dfdl33 _dfTZ\12
__
 __

 	))$+u=== ,0@@@@@ (DL888888r6   N)	rq   rr   rs   __doc__rE   rt   r   r   r   rx   r6   r4   r   r     sj         $ V^D!!!J J "!J>9 9 9 9 9 9 9 9r6   r   c            	       2   e Zd Z ej        d          d             Zd Zej                            d e	d           e
d           e	d          dz   e	d          z   g          ej                            dej        ej        feej        fej        efeefg          d	                         Zej                            d e	d           e
d           e	d          dz   e	d          z   g          ej                            d
ej        eg          d                         Zej                            dddg          d             Zej                            d e	d           e
d          g          d             Zej                            dd ed          f ed          dfd ed          f ed          dfg          d             Zej                            dg d          d             Zd Zd Zd Zd Zd Zd ZdS )TestTorqueActuatorTr"   c                    t          d          | _        t          d          | _        t          d          | _        | j        j        | _        t          d| j                  | _        t          d| j                  | _	        d S )NTr,   Ar   )r   r   )
r   torquer   r,   r   rl   axisr   r   r   r2   s    r4   _torque_actuator_fixturez+TestTorqueActuator._torque_actuator_fixture  sh    Skk$$$$FH	777!*DF;;;r6   c                 >    t          t          t                    sJ d S r8   )r9   r   r   r2   s    r4   r:   z1TestTorqueActuator.test_is_actuator_base_subclass  s    .,7777777r6   r   r   r<   ztarget_frame, reaction_framec                 l   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 d S 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  sN   . "I	
 
 (N33333x*****(/844444&((((x((((((-00000}	))))x00000(/@@@@@$4444x!122222(1>BBBBB&(.888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 d S 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B(N33333x*****(/844444&((((x((((((-00000}	))))x00000(/@@@@@$4444x!122222&.....r6   Nc                     t          j        t                    5  t          || j        | j                  }d d d            d S # 1 swxY w Y   d S r8   )rE   rF   r   r   r   r   )r3   r   rG   s      r4   /test_invalid_constructor_torque_not_sympifyablezBTestTorqueActuator.test_invalid_constructor_torque_not_sympifyable/  s    ]<(( 	? 	?vty$+>>A	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?r   r   ac                     t          j        t                    5  t          | j        || j        | j                  }d d d            d S # 1 swxY w Y   d S 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  s    ]9%% 	N 	Nt{D$+t}MMA	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N   "A		AAframeschildparentc                     t          j        t                    5  t          | j        | j        g|R  }d d d            d S # 1 swxY w Y   d S 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  s     ]9%% 	@ 	@t{DI????A	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   A  AArP   ))r   r   )r   r   )r   r   )r   r   c                     t          | j        | j        | j        | j                  }t          | |          }t          j        t                    5  t          |||           d d d            d S # 1 swxY w Y   d S r8   )
r   r   r   r   r   rS   rE   rF   rT   rU   )r3   rV   rW   r^   rX   s        r4   rY   z0TestTorqueActuator.test_properties_are_immutableF  s     "KIKM	
 
 /00]>** 	4 	4HmU333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   A//A36A3c                 t    t          | j        | j        | j                  }d}t	          |          |k    sJ d S )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  s;    !$+ty$+FF@H~~))))))r6   c                     t          | j        | j        | j        | j                  }d}t          |          |k    sJ d S )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_  sJ    !KIK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 d S )	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  s   KM&s++!#&&"fy
 
 
	 ".t{IFF(N33333x*****(/844444$+----x((((((-00000}	))))x00000(/@@@@@$....x!122222(1>BBBBB&$&000000r6   c                     t          j        t                    5  t          j        | j        t          d                    }d d d            d S # 1 swxY w Y   d S )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  s    ]9%% 	H 	H+DKGGA	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	Hs   (AAAc                     t          | j        | j        | j                  }| j        | j        | j        z  fg}|                                |k    sJ d S r8   )r   r   r   r   r,   re   r]   s      r4   test_to_loads_without_reactionz1TestTorqueActuator.test_to_loads_without_reaction  sX    !$+ty$+FFVT[*+
   ""h......r6   c                     t          | j        | j        | j        | j                  }| j        | j        | j        z  f| j        | j         | j        z  fg}|                                |k    sJ d S 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IKM	
 
 VT[*+Vt{]49,-
   ""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     s9       V^D!!!< < "!<8 8 8 [F3KKN3F3KKNVVC[[(	
  [&\8>*X^$\8$X		
 9 9  "9< [F3KKN3F3KKNVVC[[(	
  [^flF-CDD/ / ED /& [Xc{33? ? 43? [VffSkk>>#3F3F%GHHN N IHN [>>'**+^H%%t,99W%%&Yx  $'		
 @ @ @ [*	
 	
 	
 	4 	4 	4* * *
* * *1 1 1:H H H/ / // / / / /r6   r   c                       e Zd ZdS )NonSympifyableN)rq   rr   rs   rx   r6   r4   r   r     s        Dr6   r   c                   $   e Zd Z ej        d          d             Zd Zd Ze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        	                    dd e            g          d             Zej        	                    dd e            g          d             Zd Zej        	                    dd e            g          d             Zej        	                    dg d          d             Zej        	                    dd ed          dfg          d             Zd ZdS ) TestDuffingSpringTr"   c                 \   t          d          | _        t          d          | _        t          d          | _        t	          d          | _        t	          d          | _        t          | j        | j                  | _        t          d          | _
        t          d          | _        d S )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  s     !'v#)'?? "(++++++$TWdg66$$$$r6   c                 >    t          t          t                    sJ d S r8   )r9   r   r   r2   s    r4   r   z1TestDuffingSpring.test_is_force_actuator_subclass  s    -7777777r6   c                 >    t          t          t                    sJ d S r8   )r9   r   r   r2   s    r4   r:   z0TestDuffingSpring.test_is_actuator_base_subclass  r;   r6   zlinear_stiffness,  expected_linear_stiffness,  nonlinear_stiffness,   expected_nonlinear_stiffness,  equilibrium_length,    expected_equilibrium_length,   forcer+   r   r~   r<      r  r  r}   c                    | 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 d S )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  s   ~ 	111/1DdlTfgg&-00000v122222&18<<<<<&*CCCCCv455555&4h?????)-IIIIIvy)))))&.-88888~----v344444&3X>>>>>(,GGGGGvw'''''&,11111|u$$$$$$r6   r  Nc                     t          j        t                    5  t          || j        | j        | j                  }d d d            d S # 1 swxY w Y   d S 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  s    ]<(( 	q 	q.0H$,X\XoppA	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	qr   r  c                     t          j        t                    5  t          | j        || j        | j                  }d d d            d S # 1 swxY w Y   d S 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  s    ]<(( 	q 	qd35H$,X\XoppA	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	qr   c                     t          j        t                    5  t          | j        | j        t                      | j                  }d d d            d S # 1 swxY w Y   d S r8   )rE   rF   rM   r   r  r  r   r   rN   s     r4   rO   zCTestDuffingSpring.test_invalid_constructor_pathway_not_pathway_base  s    ]9%% 	z 	zd3T5M~O_O_aeaxyyA	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	z 	zs   .AAAr   c                     t          j        t                    5  t          | j        | j        | j        |          }d d d            d S # 1 swxY w Y   d S r8   )rE   rF   r   r   r  r  r.   r   s      r4   r   zMTestDuffingSpring.test_invalid_constructor_equilibrium_length_not_sympifyable  s    ]<(( 	q 	qd3T5Mt|]oppA	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	q 	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            d S # 1 swxY w Y   d S r8   )
r   r  r  r.   r   rE   rF   rT   rU   rS   )r3   rV   rW   r   s       r4   rY   z/TestDuffingSpring.test_properties_are_immutable"  s     t4d6NPTP\^b^uvv]>** 	M 	MFM749J+K+KLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms     A--A14A1r   )r   zGDuffingSpring(beta, alpha, LinearPathway(pA, pB), equilibrium_length=0)zGDuffingSpring(beta, alpha, LinearPathway(pA, pB), equilibrium_length=l)c                 r    t          | j        | j        | j        |          }t	          |          |k    sJ d S r8   )r   r  r  r.   r\   r   s       r4   r`   zTestDuffingSpring.test_repr2  s?     t4d6NPTP\^pqqF||x''''''r6   c                    | 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}|                                }t          ||          D ]\  }}|j        |j        k    sJ | j        D ]}|j                            |          }	|j                            |          }
| j        dt#          d          dt#          d          dt#          d          di}|	|
z
                      |                                          }t)          |          dk     sJ d|             d S )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11t4d6NPTP\^b^uvv v 77 &&58PS_abSb8bb  )9::E$'E6TXTZT\K\<]<]^ "??,,$'(8.$I$I 		X 		X J#x~5555v X X'1'8'<'<S'A'A$%-_%8%8%=%="!%F3KKF7OOQPVW]P^P^`a b,/AAGGVV\\^^4yy4''')WQU)W)W''''X		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    s       V^D!!!% % "!%8 8 87 7 7 [	 nnS))1,---ttNN34G4G4J/K/Ka.OO vvww^^C%8%8!%; < <<VVG__ddSaSabeSfSfhiSiNjNjmnMn=nn vvww^^C%8%8!%; < <<VVG__ddSaSabeSfSfhiSiNjNjmnMn=nn vvwwss44s(;(;Q(>#?#?&&++#MNQWQWX_Q`Q`dhdhiwiwx{i|i|~i  eA  eA  DJ  DJ  KN  DO  DO  eO  RS  dS  RS  S9%
1 1j!% !%k1 1j!%F [/$8H8H1IJJq q KJq [2T>>;K;K4LMMq q NMqz z z [1D..:J:J3KLLq q MLq [*	
 	
 	
 M M M
 [&ZVC[[cd	
 ( ( (X X X X Xr6   r  c                   `    e Zd Z ej        d          d             Zd Zd Zd Zd Z	d Z
d	S )
TestCoulombKineticFrictionTr"   c                 ~    t          dd          \  | _        | _        | _        | _        | _        | _        | _        dS )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  s;     NUUpw{M|M|M|J	49dh
DFFFr6   c                 h
   t          d          }t          d          }t          d          }|                    d||j        z            }|                    |d           |                    ||                                |j        z             t          ||          }t          | j	        | j
        | j        z  |          }t          || j        | j
        z  | j	        z  |z  t          t          |dz            |                                z  |z            z  t          |dz            z  |j        z            t          || j         | j
        z  | j	        z  |z  t          t          |dz            |                                z  |z            z  t          |dz            z  |j        z            g}|                                |k    sJ t          dd	          }t          d          }t          d          }|                    d||j        z            }|                    |d           |                    ||                                |j        z             t          ||          }t          | j	        | j
        | j        z  |          }t          || j        | j
        z  | j	        z  t          |                                          z  |j        z            t          || j         | j
        z  | j	        z  t          |                                          z  |j        z            g}|                                |k    sJ t          dd
	          }t          d          }t          d          }|                    d||j        z            }|                    |d           |                    ||                                |j        z             t          ||          }t          | j	        | j
        | j        z  |          }t          || j        | j
        z  | j	        z  |z  t          t          |dz            |                                z  |z            z  t          |dz            z  |j        z            t          || j         | j
        z  | j	        z  |z  t          t          |dz            |                                z  |z            z  t          |dz            z  |j        z            g}	|                                |	k    sJ d S )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#JJKKQW%%			!Q			!QVVXX^$$$1%%)$)TVdf_gNN!$&491Lq1PSWX\]^`a]aXbXbefekekememXmnoXoSpSp1pquvwyzvzq{q{1{~  B  2B  C  C  C!$&461ADI1MPQ1QTXY]^_ab^bYcYcfgflflfnfnYnopYpTqTq1qrvwxz{w{r|r|1|  @A  @C  2C  D  D  DE   ""&66666 3...3#JJKKQW%%			!Q			!QVVXX^$$$1%%)$)TVdf_gNN"$&46/DI2MPTUVU[U[U]U]P^P^2^abad2deee"46'DF2BTY2NQUVWV\V\V^V^Q_Q_2_bcbe2efffh   ""&77777 3///3#JJKKQW%%			!Q			!QVVXX^$$$1%%)$)TVdf_gNN"$&46/DI2MPQ2QTXY]^_ab^bYcYcfgflflfnfnYnopYpTqTq2qrvwxz{w{r|r|2|}~  ~A  3A  B  B  B"46'DF2BTY2NQR2RUYZ^_`bc_cZdZdghgmgmgogoZopqZqUrUr2rswxy{|x|s}s}2}~  B  3B  C  C  CD   ""&7777777r6   c                    t          d          }t          d          }t          d          }|                    d||j        z            }|                    |d           |                    ||                                |j        z             t          ||          }t          | j	        | j
        | j        z  || j                  }t          || j        | j
        z  | j	        z  t          t          |dz            |                                z  |z            z  | j        t          |dz            z  |                                z  |z  z   |z  t          |dz            z  |j        z            t          || j         | j
        z  | j	        z  t          t          |dz            |                                z  |z            z  | j        t          |dz            z  |                                z  |z  z
  |z  t          |dz            z  |j        z            g}|                                |k    sJ t          dd	
          }t          d          }t          d          }|                    d||j        z            }|                    |d           |                    ||                                |j        z             t          ||          }t          | j	        | j
        | j        z  || j                  }t          || j        | j
        z  | j	        z  t          |                                          z  | j        |                                z  z   |j        z            t          || j         | j
        z  | j	        z  t          |                                          z  | j        |                                z  z
  |j        z            g}|                                |k    sJ t          dd
          }t          d          }t          d          }|                    d||j        z            }|                    |d           |                    ||                                |j        z             t          ||          }t          | j	        | j
        | j        z  || j                  }t          || j        | j
        z  | j	        z  t          t          |dz            |                                z  |z            z  | j        t          |dz            z  |                                z  |z  z   |z  t          |dz            z  |j        z            t          || j         | j
        z  | j	        z  t          t          |dz            |                                z  |z            z  | j        t          |dz            z  |                                z  |z  z
  |z  t          |dz            z  |j        z            g}	|                                |	k    sJ d S )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#JJKKQW%%			!Q			!QVVXX^$$$1%%)$)TVdf_gUYU_```!$&46/DI2MPTUYZ[]^Z^U_U_bcbhbhbjbjUjklUlPmPm2mptpz  ~B  CD  FG  CG  ~H  ~H  qH  KL  KQ  KQ  KS  KS  qS  TU  qU  3U  YZ  2Z  [_  `a  cd  `d  [e  [e  2e  hi  hk  2k  l  l  l!46'DF2BTY2NQUVZ[\^_[_V`V`cdcicickckVklmVmQnQn2nquq{  C  DE  GH  DH  I  I  rI  LM  LR  LR  LT  LT  rT  UV  rV  3V  Z[  2[  \`  ab  de  ae  \f  \f  2f  ij  il  2l  m  m  mn   ""&66666 3...3#JJKKQW%%			!Q			!QVVXX^$$$1%%)$)TVdf_gUYU_```"46DF?TY3NQUVWV\V\V^V^Q_Q_3_bfblopououowowbw3w{|{~2~"DF7TV3Cdi3ORVWXW]W]W_W_R`R`3`cgcmpqpvpvpxpxcx3x|}|2  A  A  AB   ""&77777 3///3#JJKKQW%%			!Q			!QVVXX^$$$1%%)$)TVdf_gUYU_```"46DF?TY3NQUVZ[\^_[_V`V`cdcicickckVklmVmQnQn3nquq{  C  DE  GH  DH  I  I  rI  LM  LR  LR  LT  LT  rT  UV  rV  4V  Z[  3[  \`  ab  de  ae  \f  \f  3f  ij  il  3l  m  m  m"DF7TV3Cdi3ORVW[\]_`\`WaWadedjdjdldlWlmnWnRoRo3orvr|  @D  EF  HI  EI  @J  @J  sJ  MN  MS  MS  MU  MU  sU  VW  sW  4W  [\  3\  ]a  bc  ef  bf  ]g  ]g  3g  jk  jm  3m  n  n  no   ""&7777777r6   c                 N   t          d          }t          d          }t          d          }|                    d||j        z            }|                    |d           |                    ||                                |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          |                                dz   | j        dz  z            z  z   |z  t!          t#          |dz            |                                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          |                                dz   | j        dz  z            z  z    |z  t!          t#          |dz            |                                z  |z            z  t#          |dz            z  |j        z            g}|                                |k    sJ t          dd	
          }t          d          }t          d          }|                    d||j        z            }|                    |d           |                    ||                                |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          |                                dz   | j        dz  z            z  z   t!          |                                          z  |j        z            t          || j        | j
        z  | j	        z  | j         | j
        z  | j	        z  | j        | j
        z  | j        z  z   t          |                                dz   | j        dz  z            z  z    t!          |                                          z  |j        z            g}|                                |k    sJ t          dd
          }t          d          }t          d          }|                    d||j        z            }|                    |d           |                    ||                                |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          |                                dz   | j        dz  z            z  z   |z  t!          t#          |dz            |                                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          |                                dz   | j        dz  z            z  z    |z  t!          t#          |dz            |                                z  |z            z  t#          |dz            z  |j        z            g}	|                                |	k    sJ d S )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#JJKKQW%%			!Q			!QVVXX^$$$1%%)$)TVdf_gSWS[bfbklll!$&46/DI2MRVRXQX[_[aQadhdmQmptpvy}yp  CG  CL  qL  RL  PS  UV  U[  U[  U]  U]  _`  U`  T`  ae  ai  kl  al  Tl  Pm  Pm  Qm  3m  qr  2r  uy  z~  @  BC  C  zD  zD  GH  GM  GM  GO  GO  zO  PQ  zQ  uR  uR  2R  SW  XY  [\  X\  S]  S]  2]  `a  `c  2c  d  d  d!DFTVOdi4OTXTZSZ]a]cScfjfoSorvrx{  |B  sB  EI  EN  sN  TN  RU  WX  W]  W]  W_  W_  ab  Wb  Vb  cg  ck  mn  cn  Vn  Ro  Ro  So  5o  2p  st  2t  w{  |@  AB  DE  AE  |F  |F  IJ  IO  IO  IQ  IQ  |Q  RS  |S  wT  wT  2T  UY  Z[  ]^  Z^  U_  U_  2_  bc  be  2e  f  f  fg   ""&66666 3...3#JJKKQW%%			!Q			!QVVXX^$$$1%%)$)TVdf_gSWS[bfbklll"46DF?TY3NSWSYRY\`\bRbeienRnquqwz~  {A  rA  DH  DM  rM  SM  QT  VW  V\  V\  V^  V^  `a  Va  Ua  bf  bj  lm  bm  Um  Qn  Qn  Rn  4n  rv  wx  w}  w}  w  w  r@  r@  3@  CD  CF  3F  G  G  G"TVdf_ty5PUYU[T[^b^dTdgkgpTpswsy  }A  }C  tC  FJ  FO  tO  UO  SV  XY  X^  X^  X`  X`  bc  Xc  Wc  dh  dl  no  do  Wo  Sp  Sp  Tp  6p  3q  tx  yz  y  y  yA  yA  tB  tB  3B  EF  EH  3H  I  I  IJ   ""&77777 3///3#JJKKQW%%			!Q			!QVVXX^$$$1%%)$)TVdf_gSWS[bfbklll"46DF?TY3NSWSYRY\`\bRbeienRnquqwz~  {A  rA  DH  DM  rM  SM  QT  VW  V\  V\  V^  V^  `a  Va  Ua  bf  bj  lm  bm  Um  Qn  Qn  Rn  4n  rs  3s  vz  {  @A  CD  @D  {E  {E  HI  HN  HN  HP  HP  {P  QR  {R  vS  vS  3S  TX  YZ  \]  Y]  T^  T^  3^  ab  ad  3d  e  e  e"TVdf_ty5PUYU[T[^b^dTdgkgpTpswsy  }A  }C  tC  FJ  FO  tO  UO  SV  XY  X^  X^  X`  X`  bc  Xc  Wc  dh  dl  no  do  Wo  Sp  Sp  Tp  6p  3q  tu  3u  x|  }A  BC  EF  BF  }G  }G  JK  JP  JP  JR  JR  }R  ST  }T  xU  xU  3U  VZ  [\  ^_  [_  V`  V`  3`  cd  cf  3f  g  g  gh   ""&7777777r6   c                 ~   t          d          }t          d          }t          d          }|                    d||j        z            }|                    |d           |                    ||                                |j        z             t          ||          }t          | j	        | j
        | j        z  || j        | j        | j                  }t          || j        t!          |dz            z  |                                z  |z  | j        | j
        z  | j	        z  | j         | j
        z  | j	        z  | j        | j
        z  | j        z  z   t#          |                                dz   | j        dz  z            z  z   t%          t!          |dz            |                                z  |z            z  z   |z  t!          |dz            z  |j        z            t          || j         t!          |dz            z  |                                z  |z  | j        | j
        z  | j	        z  | j         | j
        z  | j	        z  | j        | j
        z  | j        z  z   t#          |                                dz   | j        dz  z            z  z   t%          t!          |dz            |                                z  |z            z  z
  |z  t!          |dz            z  |j        z            g}|                                |k    sJ t          dd	
          }t          d          }t          d          }|                    d||j        z            }|                    |d           |                    ||                                |j        z             t          ||          }t          | j	        | j
        | j        z  || j        | j        | j                  }t          || j        |                                z  | j        | j
        z  | j	        z  | j         | j
        z  | j	        z  | j        | j
        z  | j        z  z   t#          |                                dz   | j        dz  z            z  z   t%          |                                          z  z   |j        z            t          || j         |                                z  | j        | j
        z  | j	        z  | j         | j
        z  | j	        z  | j        | j
        z  | j        z  z   t#          |                                dz   | j        dz  z            z  z   t%          |                                          z  z
  |j        z            g}|                                |k    sJ t          dd
          }t          d          }t          d          }|                    d||j        z            }|                    |d           |                    ||                                |j        z             t          ||          }t          | j	        | j
        | j        z  || j        | j        | j                  }t          || j        t!          |dz            z  |                                z  |z  | j        | j
        z  | j	        z  | j         | j
        z  | j	        z  | j        | j
        z  | j        z  z   t#          |                                dz   | j        dz  z            z  z   t%          t!          |dz            |                                z  |z            z  z   |z  t!          |dz            z  |j        z            t          || j         t!          |dz            z  |                                z  |z  | j        | j
        z  | j	        z  | j         | j
        z  | j	        z  | j        | j
        z  | j        z  z   t#          |                                dz   | j        dz  z            z  z   t%          t!          |dz            |                                z  |z            z  z
  |z  t!          |dz            z  |j        z            g}	|                                |	k    sJ d S )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#JJKKQW%%			!Q			!QVVXX^$$$1%%)$)TVdf_gSWS[cgcmtxt}~~~!$*tAqDzz2IAFFHH2TUV2VZ^Z`cgciZilpluZuz~  {A  zA  DH  DJ  zJ  MQ  MV  zV  Y]  Y_  bf  bh  Yh  ko  kt  Yt  zt  x{  }~  }C  }C  }E  }E  GH  }H  |H  IM  IQ  ST  IT  |T  xU  xU  yU  [U  Y]  ^b  cd  fg  cg  ^h  ^h  kl  kq  kq  ks  ks  ^s  tu  ^u  Yv  Yv  Zv  3v  z{  2{  |@  AB  DE  AE  |F  |F  2F  IJ  IL  2L  M  M  M!4:+QT

2JQVVXX2UVW2W[_[adhdj[jmqmv[v{  |B  {B  EI  EK  {K  NR  NW  {W  Z^  Z`  cg  ci  Zi  lp  lu  Zu  {u  y|  ~  ~D  ~D  ~F  ~F  HI  ~I  }I  JN  JR  TU  JU  }U  yV  yV  zV  \V  Z^  _c  de  gh  dh  _i  _i  lm  lr  lr  lt  lt  _t  uv  _v  Zw  Zw  [w  3w  {|  2|  }A  BC  EF  BF  }G  }G  2G  JK  JM  2M  N  N  NO   ""&66666 3...3#JJKKQW%%			!Q			!QVVXX^$$$1%%)$)TVdf_gSWS[cgcmtxt}~~~"4:3HDFUYU[O^b^gLglplrkruyu{k{  C  H  lH  KO  KQ  TX  TZ  KZ  ]a  ]f  Kf  lf  jm  op  ou  ou  ow  ow  yz  oz  nz  {  {C  EF  {F  nF  jG  jG  kG  MG  KO  PQ  PV  PV  PX  PX  KY  KY  LY  4Y  ]^  ]`  3`  a  a  a"DJ;3ITVVZV\__c_hMhmqmslsvzv|l|  @D  @I  mI  LP  LR  UY  U[  L[  ^b  ^g  Lg  mg  kn  pq  pv  pv  px  px  z{  p{  o{  |@  |D  FG  |G  oG  kH  kH  lH  NH  LP  QR  QW  QW  QY  QY  LZ  LZ  MZ  4Z  ^_  ^a  3a  b  b  bc   ""&77777 3///3#JJKKQW%%			!Q			!QVVXX^$$$1%%)$)TVdf_gSWS[cgcmtxt}~~~"4:QT

3JQVVXX3UVW3W[_[adhdj[jmqmv[v{  |B  {B  EI  EK  {K  NR  NW  {W  Z^  Z`  cg  ci  Zi  lp  lu  Zu  {u  y|  ~  ~D  ~D  ~F  ~F  HI  ~I  }I  JN  JR  TU  JU  }U  yV  yV  zV  \V  Z^  _c  de  gh  dh  _i  _i  lm  lr  lr  lt  lt  _t  uv  _v  Zw  Zw  [w  4w  {|  3|  }A  BC  EF  BF  }G  }G  3G  JK  JM  3M  N  N  N"DJ;ad3Kaffhh3VWX3X\`\beiek\knrnw\w  }A  }C  |C  FJ  FL  |L  OS  OX  |X  [_  [a  dh  dj  [j  mq  mv  [v  |v  z}  @  E  E  G  G  IJ  J  ~J  KO  KS  UV  KV  ~V  zW  zW  {W  ]W  [_  `d  ef  hi  ei  `j  `j  mn  ms  ms  mu  mu  `u  vw  `w  [x  [x  \x  4x  |}  3}  ~B  CD  FG  CG  ~H  ~H  3H  KL  KN  3N  O  O  OP   ""&7777777r6   c                    t          d          }t          d          }t          d          }|                    d||j        z            }|                    |d           |                    ||                                |j        z             t          ||          }t          | j	        d|          }|j
        dk    sJ d S )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#JJKKQW%%			!Q			!QVVXX^$$$1%%)I
 

 ~""""""r6   N)rq   rr   rs   rE   rt   r-  r:  r<  r>  r@  rB  rx   r6   r4   r%  r%  Y  s        V^D!!!} } "!}/8 /8 /8b/8 /8 /8b/8 /8 /8b/8 /8 /8b# # # # #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 C 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                                     ( - , , , , ,	8		9Z  s/ s/ s/ s/ s/ s/ s/ s/lP: P: P: P: P: P: P: P:fN- N- N- N- N- N- N- N-bO9 O9 O9 O9 O9 O9 O9 O9dF/ F/ F/ F/ F/ F/ F/ F/R	 	 	 	 	 	 	 	tX tX tX tX tX tX tX tXlc# c# c# c# c# c# c# c# c# c#r6   