
    \h                        S r SSKrSSKrSSKJr  SSKJrJrJr  SSK	J
r
  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJrJrJr  SSKJr  SSKJrJrJrJrJrJ r J!r!J"r"  SSK#J$r$J%r%J&r&  SSK'J(r(  SSK)J*r*  SSK+J,r,  SSK-J.r.  SSK/J0r0  SSK1J2r2  SSK3J4r4   " S S5      r5 " S S5      r6\Rn                  Rq                  S\%/5       " S S5      5       r9\Rn                  Rq                  S\%\" \!\"\\\\\ S94/5       " S S5      5       r:\Rn                  Rq                  S\%\" \!\"\\\\\ S94/5       " S  S!5      5       r; " S" S#5      r<g)$zETests for the ``sympy.physics.biomechanics.musculotendon.py`` module.    N)UnevaluatedExpr)FloatIntegerRational)Symbol)exp)tanh)sqrt)sin)MutableDenseMatrixeyezeros) FirstOrderActivationDeGroote2016)CharacteristicCurveCollection"FiberForceLengthActiveDeGroote2016#FiberForceLengthPassiveDeGroote2016*FiberForceLengthPassiveInverseDeGroote2016FiberForceVelocityDeGroote2016%FiberForceVelocityInverseDeGroote2016TendonForceLengthDeGroote2016$TendonForceLengthInverseDeGroote2016)MusculotendonBaseMusculotendonDeGroote2016MusculotendonFormulation)_NamedMixin)ForceActuator)LinearPathway)ReferenceFrame)dynamicsymbols)Point)simplifyc                   d    \ rS rSr\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r	Sr
g)	TestMusculotendonFormulation*   c                  R    [        S5      S:X  d   e[         R                  S:X  d   eg )Nr   )r   RIGID_TENDON     k/var/www/auris/envauris/lib/python3.13/site-packages/sympy/physics/biomechanics/tests/test_musculotendon.pytest_rigid_tendon_member5TestMusculotendonFormulation.test_rigid_tendon_member+   s)    '*a///'44999r(   c                  R    [        S5      S:X  d   e[         R                  S:X  d   eg )N   )r   FIBER_LENGTH_EXPLICITr'   r(   r)   !test_fiber_length_explicit_member>TestMusculotendonFormulation.test_fiber_length_explicit_member0   )    '*a///'==BBBr(   c                  R    [        S5      S:X  d   e[         R                  S:X  d   eg )N   )r   TENDON_FORCE_EXPLICITr'   r(   r)   !test_tendon_force_explicit_member>TestMusculotendonFormulation.test_tendon_force_explicit_member5   r1   r(   c                  R    [        S5      S:X  d   e[         R                  S:X  d   eg )N   )r   FIBER_LENGTH_IMPLICITr'   r(   r)   !test_fiber_length_implicit_member>TestMusculotendonFormulation.test_fiber_length_implicit_member:   r1   r(   c                  R    [        S5      S:X  d   e[         R                  S:X  d   eg )N   )r   TENDON_FORCE_IMPLICITr'   r(   r)   !test_tendon_force_implicit_member>TestMusculotendonFormulation.test_tendon_force_implicit_member?   r1   r(   r'   N)__name__
__module____qualname____firstlineno__staticmethodr*   r/   r5   r:   r?   __static_attributes__r'   r(   r)   r#   r#   *   sl    : : C C C C C C C Cr(   r#   c                   D    \ rS rSr\S 5       r\S 5       r\S 5       rSrg)TestMusculotendonBaseE   c                  N    [        [        [        R                  5      (       d   eg N)
issubclassr   abcABCr'   r(   r)   test_is_abstract_base_class1TestMusculotendonBase.test_is_abstract_base_classG   s    +SWW5555r(   c                      [        [        [        5      (       d   e[        [        [        5      (       d   e[        R                  S:X  d   eg )Nr   )rL   r   r   r   rA   r'   r(   r)   
test_class TestMusculotendonBase.test_classK   s?    +];;;;+[9999 ))-@@@@r(   c                      [         R                  " [        5         [        5       n S S S 5        g ! , (       d  f       g = frK   )pytestraises	TypeErrorr   )_s    r)    test_cannot_instantiate_directly6TestMusculotendonBase.test_cannot_instantiate_directlyQ   s"    ]]9%!#A &%%s   /
=r'   N)	rA   rB   rC   rD   rE   rO   rR   rY   rF   r'   r(   r)   rH   rH   E   s>    6 6 A A
 $ $r(   rH   musculotendon_concretec                   d    \ rS rSr\R
                  " SS9S 5       rS rS rS r	S r
S	 rS
 rSrg)TestMusculotendonRigidTendonW   Tautousec                    SU l         [        S5      U l        [        S5      U l        [        S5      U l        [        S5      U l        U R                  R                  U R                  U R                  U R                  R                  -  5        [        U R                  U R                  5      U l        [        U R                   5      U l        U R                  R                  U l        U R                  R                  U l        U R                  R"                  U l        U R                  R&                  U l        U R                  R*                  U l        [.        R0                  U l        [5        S5      U l        [5        S5      U l        [5        S5      U l        [5        S	5      U l        [5        S
5      U l        [5        S5      U l         U" U R                   U R                  U R                  U R2                  U R6                  U R8                  U R:                  U R<                  U R>                  U R@                  S9
U l!        SU R$                  [E        SS5      [E        SS5      U R                   -  -   -  -  [E        SS5      [E        SS5      [G        U R,                  U R                  U R                   -
  -  5      -  -   -  [E        SS5      [E        SS5      U R                   -  -   U R(                  -  [E        SS5      [E        SS5      [G        U R,                  U R                  U R                   -
  -  5      -  -
  -  -   U R                  U R                   -
  -  U l$        g )NnameNqpOpI	l_T_slackF_M_maxl_M_optv_M_max	alpha_optbetamusculotendon_dynamicstendon_slack_lengthpeak_isometric_forceoptimal_fiber_lengthmaximal_fiber_velocityoptimal_pennation_anglefiber_damping_coefficientr-   r3   r8   )%rb   r   rc   r   rd   r    origin	insertionset_posxr   pathwayr   
activation
excitationeaactivation_time_constanttau_adeactivation_time_constanttau_dsmoothing_ratebr   r&   formulationr   rg   rh   ri   rj   rk   rl   instancer   r	   da_expr)selfr[   s     r)   #_musculotendon_rigid_tendon_fixture@TestMusculotendonRigidTendon._musculotendon_rigid_tendon_fixtureZ   sh   	$$Dktt{{DFF46688O<$T[[$..A:499E++++__==
__??
//3@@,i(i(i(,6N	.IILLOO#'#3#3 $!%!%#'<<$(NN&*ii
 

HQNXa^DFF-BBCDq!nx1~d466466DFF?3K.LLLNA!Q!66

Bq!nx1~d466466DFF?3K.LLLNN 66DFF?r(   c                    [        U R                  S5      (       d   e[        U R                  S5      (       d   eU R                  R                  U R                  R                  :X  d   e[	        U R
                  /5      nU R                  R                  U:X  d   eU R                  R                  U:X  d   e[        U R                  R                  [        5      (       d   e[        U R                  R                  [        5      (       d   eU R                  R                  R                  S:X  d   eU R                  R                  R                  S:X  d   eg )Nrx   
state_varsr-   r-   )hasattrr   rx   r   Matrixr}   
isinstanceshaper   
x_expecteds     r)   test_state_vars,TestMusculotendonRigidTendon.test_state_vars       t}}c****t}}l3333}}$--":"::::TVVH%
}}*,,,}}'':555$--//62222$--22F;;;;}}$$...}}''--777r(   c                    [        U R                  S5      (       d   e[        U R                  S5      (       d   eU R                  R                  U R                  R                  :X  d   e[	        U R
                  /5      nU R                  R                  U:X  d   eU R                  R                  U:X  d   e[        U R                  R                  [        5      (       d   e[        U R                  R                  [        5      (       d   eU R                  R                  R                  S:X  d   eU R                  R                  R                  S:X  d   eg Nr
input_varsr   r   r   r   r   r   r|   r   r   r   
r_expecteds     r)   test_input_vars,TestMusculotendonRigidTendon.test_input_vars   r   r(   c                 ^   [        U R                  S5      (       d   e[        U R                  S5      (       d   eU R                  R                  U R                  R                  :X  d   e[	        / U R
                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  P[        S5      P[        S5      P[        S5      P[        S5      P[        S5      P[        S5      P[        S	5      P[        S
5      P[        S5      P[        S5      P[        S5      P[        S5      P[        S5      P[        S5      P[        S5      P[        S5      P[        S5      P[        S5      P[        S5      P[        S5      P[        S5      P[        S5      P5      nU R                  R                  U:X  d   eU R                  R                  U:X  d   e[        U R                  R                  [        5      (       d   e[        U R                  R                  [        5      (       d   eU R                  R                  R                   S:X  d   eU R                  R                  R                   S:X  d   eg )Np	constantsc_0_fl_T_namec_1_fl_T_namec_2_fl_T_namec_3_fl_T_namec_0_fl_M_pas_namec_1_fl_M_pas_namec_0_fl_M_act_namec_1_fl_M_act_namec_2_fl_M_act_namec_3_fl_M_act_namec_4_fl_M_act_namec_5_fl_M_act_namec_6_fl_M_act_namec_7_fl_M_act_namec_8_fl_M_act_namec_9_fl_M_act_namec_10_fl_M_act_namec_11_fl_M_act_namec_0_fv_M_namec_1_fv_M_namec_2_fv_M_namec_3_fv_M_name)   r-   )r   r   r   r   r   rg   rh   ri   rj   rk   rl   r   r   r   r   r   r   r   
p_expecteds     r)   test_constants+TestMusculotendonRigidTendon.test_constants   s   t}}c****t}}k2222}}$--"9"9999      	 
   		  

  

    '  '  '  '  *+  *+   *+! " *+# $ *+% & *+' ( *+) * *++ , *+- . *+/ 0 *+1 2 *+3 4 +,5 6 +,7 8 '9 : '; < '= > '? "

F }}*,,,}}&&*444$--//62222$--116::::}}$$///}}&&,,777r(   c                 0   [        U R                  S5      (       d   e[        S/5      nU R                  R                  U:X  d   e[	        U R                  R                  [        5      (       d   eU R                  R                  R
                  S:X  d   eg )NMr-   r   )r   r   r   r   r   r   r   
M_expecteds     r)   test_M#TestMusculotendonRigidTendon.test_M   sq    t}}c****QC[
}}*,,,$--//62222}}$$...r(   c                 D   [        U R                  S5      (       d   e[        U R                  /5      nU R                  R                  U:X  d   e[        U R                  R                  [        5      (       d   eU R                  R                  R                  S:X  d   eg )NFr   )r   r   r   r   r   r   r   r   
F_expecteds     r)   test_F#TestMusculotendonRigidTendon.test_F   sv    t}}c****T\\N+
}}*,,,$--//62222}}$$...r(   c                 (   [        U R                  S5      (       d   e[        U R                  /5      nU R                  R	                  5       n[        U[        5      (       d   eUR                  S:X  d   e[        X!-
  5      [        S5      :X  d   eg )Nrhsr   r-   )	r   r   r   r   r   r   r   r!   r   r   rhs_expectedr   s      r)   test_rhs%TestMusculotendonRigidTendon.test_rhs   sz    t}}e,,,,t||n-mm!#v&&&&yyF"""*+uQx777r(   )rh   rc   r}   rz   rk   r   rl   r   r|   r   rv   r   ri   rg   rb   ru   ry   rd   r   r   rj   N)rA   rB   rC   rD   rU   fixturer   r   r   r   r   r   r   rF   r'   r(   r)   r]   r]   W   s?     ^^D!& "&P
8
8,8\//8r(   r]   zmusculotendon_concrete, curve)tendon_force_lengthtendon_force_length_inversefiber_force_length_passive"fiber_force_length_passive_inversefiber_force_length_activefiber_force_velocityfiber_force_velocity_inversec                   d    \ rS rSr\R
                  " SS9S 5       rS rS rS r	S r
S	 rS
 rSrg)TestFiberLengthExplicit   Tr_   c                 p	   SU l         [        S5      U l        [        S5      U l        [        S5      U l        [        S5      U l        U R                  R                  U R                  U R                  U R                  R                  -  5        [        U R                  U R                  5      U l        [        U R                   5      U l        U R                  R                  U l        U R                  R                  U l        U R                  R"                  U l        U R                  R&                  U l        U R                  R*                  U l        [.        R0                  U l        [5        S5      U l        [5        S5      U l        [5        S5      U l        [5        S	5      U l        [5        S
5      U l        [5        S5      U l         U" U R                   U R                  U R                  U R2                  U R6                  U R8                  U R:                  U R<                  U R>                  U R@                  SS9U l!        [        S5      U l"        U R                  RF                  nU RD                  U R:                  -  nU[I        US-  U R:                  [K        U R>                  5      -  S-  -
  5      -
  nURL                  RO                  XPR6                  -  5      nURP                  RO                  U RD                  5      nURR                  RO                  U RD                  5      nURT                  RO                  X`R8                  -  X5-
  U-  -  U R8                  -  U-
  U R                   U-  -  5      n	U R<                  U R:                  -  U	-  U l+        SU R$                  [Y        SS5      [Y        SS5      U R                   -  -   -  -  [Y        SS5      [Y        SS5      [[        U R,                  U R                  U R                   -
  -  5      -  -   -  [Y        SS5      [Y        SS5      U R                   -  -   U R(                  -  [Y        SS5      [Y        SS5      [[        U R,                  U R                  U R                   -
  -  5      -  -
  -  -   U R                  U R                   -
  -  U l.        g )Nrb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   Trn   ro   rp   rq   rr   rs   rt   with_defaultsl_M_tilde_namer3   r-   r8   )/rb   r   rc   r   rd   r    ru   rv   rw   rx   r   ry   r   rz   r{   r|   r}   r~   r   r   r   r   r   r   r.   r   r   rg   rh   ri   rj   rk   rl   r   	l_M_tildelengthr
   r   r   r   r   r   r   dl_M_tilde_exprr   r	   r   )
r   r[   curvel_MTl_Ml_Tfl_Tfl_M_pasfl_M_act	v_M_tildes
             r)   ,_musculotendon_fiber_length_explicit_fixtureDTestFiberLengthExplicit._musculotendon_fiber_length_explicit_fixture   s    	$$Dktt{{DFF46688O<$T[[$..A:499E++++__==
__??
//3II,i(i(i(,6N	.IILLOO#'#3#3 $!%!%#'<<$(NN&*ii
 ((89||""nnT\\)T#q&DLLT^^1D$Dq#HHII((66s>>7IJ33AA$..Q22@@P66DD\\!TZ$45t||CxOffXo
	 !%T\\ 99D

HQNXa^DFF-BBCDq!nx1~d466466DFF?3K.LLLNA!Q!66

Bq!nx1~d466466DFF?3K.LLLNN 66DFF?r(   c                    [        U R                  S5      (       d   e[        U R                  S5      (       d   eU R                  R                  U R                  R                  :X  d   e[	        U R
                  U R                  /5      nU R                  R                  U:X  d   eU R                  R                  U:X  d   e[        U R                  R                  [        5      (       d   e[        U R                  R                  [        5      (       d   eU R                  R                  R                  S:X  d   eU R                  R                  R                  S:X  d   eg Nrx   r   r3   r-   )	r   r   rx   r   r   r   r}   r   r   r   s     r)   r   'TestFiberLengthExplicit.test_state_vars-     t}}c****t}}l3333}}$--":"::::T^^TVV45
}}*,,,}}'':555$--//62222$--22F;;;;}}$$...}}''--777r(   c                    [        U R                  S5      (       d   e[        U R                  S5      (       d   eU R                  R                  U R                  R                  :X  d   e[	        U R
                  /5      nU R                  R                  U:X  d   eU R                  R                  U:X  d   e[        U R                  R                  [        5      (       d   e[        U R                  R                  [        5      (       d   eU R                  R                  R                  S:X  d   eU R                  R                  R                  S:X  d   eg r   r   r   s     r)   r   'TestFiberLengthExplicit.test_input_vars9  r   r(   c                 h   [        U R                  S5      (       d   e[        U R                  S5      (       d   eU R                  R                  U R                  R                  :X  d   e[	        U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  /	5      nU R                  R                  U:X  d   eU R                  R                  U:X  d   e[        U R                  R                  [        5      (       d   e[        U R                  R                  [        5      (       d   eU R                  R                  R                  S:X  d   eU R                  R                  R                  S:X  d   eg Nr   r   )	   r-   r   r   r   r   r   rg   rh   ri   rj   rk   rl   r   r   r   r   r   r   s     r)   r   &TestFiberLengthExplicit.test_constantsE  @   t}}c****t}}k2222}}$--"9"9999		






 }}*,,,}}&&*444$--//62222$--116::::}}$$...}}&&,,666r(   c                 .   [        U R                  S5      (       d   e[        S5      nU R                  R                  U:X  d   e[	        U R                  R                  [
        5      (       d   eU R                  R                  R                  S:X  d   eg Nr   r3   )r3   r3   r   r   r   r   r   r   r   r   s     r)   r   TestFiberLengthExplicit.test_M]  o    t}}c****V
}}*,,,$--//62222}}$$...r(   c                 Z   [        U R                  S5      (       d   e[        U R                  U R                  /5      nU R                  R
                  U:X  d   e[        U R                  R
                  [        5      (       d   eU R                  R
                  R                  S:X  d   eg Nr   r   )r   r   r   r   r   r   r   r   r   s     r)   r   TestFiberLengthExplicit.test_Fd      t}}c****T114<<@A
}}*,,,$--//62222}}$$...r(   c                 @   [        U R                  S5      (       d   e[        U R                  U R                  /5      nU R                  R                  5       n[        U[        5      (       d   eUR                  S:X  d   e[        X!-
  5      [        SS5      :X  d   eg Nr   r   r3   r-   )
r   r   r   r   r   r   r   r   r!   r   r   s      r)   r    TestFiberLengthExplicit.test_rhsk      t}}e,,,,t33T\\BCmm!#v&&&&yyF"""*+uQ{:::r(   )rh   rc   r}   rz   rk   r   rl   r   r   r|   r   rv   r   ri   r   rg   rb   ru   ry   rd   r   r   rj   N)rA   rB   rC   rD   rU   r   r   r   r   r   r   r   r   rF   r'   r(   r)   r   r      s>    & ^^D!7 "7r
8
870//;r(   r   c                   d    \ rS rSr\R
                  " SS9S 5       rS rS rS r	S r
S	 rS
 rSrg)TestTendonForceExplicitit  Tr_   c                 :
   SU l         [        S5      U l        [        S5      U l        [        S5      U l        [        S5      U l        U R                  R                  U R                  U R                  U R                  R                  -  5        [        U R                  U R                  5      U l        [        U R                   5      U l        U R                  R                  U l        U R                  R                  U l        U R                  R"                  U l        U R                  R&                  U l        U R                  R*                  U l        [.        R0                  U l        [5        S5      U l        [5        S5      U l        [5        S5      U l        [5        S	5      U l        [5        S
5      U l        [5        S5      U l         U" U R                   U R                  U R                  U R2                  U R6                  U R8                  U R:                  U R<                  U R>                  U R@                  SS9U l!        [        S5      U l"        URF                  RI                  U RD                  5      nU R                  RJ                  nU R                  RL                  nX0R6                  -  n[O        XF-
  S-  U R:                  [Q        U R>                  5      -  S-  -   5      nXpR:                  -  nXF-
  U-  n	U RD                  U R8                  -  n
X-  nXR8                  -  nURR                  RI                  U5      nURT                  RI                  U5      nX-
  U R                   U-  -  nURV                  RI                  U5      nUU R<                  -  nUUU	-  -
  nUU R6                  -  n[Y        S5      [Y        S5      -  [[        [Y        S5      []        U[Y        S5      -
  5      -  5      -  U-  U l/        SU R$                  [a        SS5      [a        SS5      U R                   -  -   -  -  [a        SS5      [a        SS5      [c        U R,                  U R                  U R                   -
  -  5      -  -   -  [a        SS5      [a        SS5      U R                   -  -   U R(                  -  [a        SS5      [a        SS5      [c        U R,                  U R                  U R                   -
  -  5      -  -
  -  -   U R                  U R                   -
  -  U l2        g )Nrb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   Tr   F_T_tilde_namer3   z0.2z33.93669377311689z0.995r-   r8   )3rb   r   rc   r   rd   r    ru   rv   rw   rx   r   ry   r   rz   r{   r|   r}   r~   r   r   r   r   r   r   r4   r   r   rg   rh   ri   rj   rk   rl   r   	F_T_tilder   r   r   extension_velocityr
   r   r   r   r   r   r   r   dF_T_tilde_exprr   r	   r   )r   r[   r   	l_T_tilder   v_MTr   r   r   	cos_alphaF_TF_M	F_M_tilder   r   fv_Mr   v_Mv_T	v_T_tildes                       r)   ,_musculotendon_tendon_force_explicit_fixtureDTestTendonForceExplicit._musculotendon_tendon_force_explicit_fixture  s    	$$Dktt{{DFF46688O<$T[[$..A:499E++++__==
__??
//3II,i(i(i(,6N	.IILLOO#'#3#3 $!%!%#'<<$(NN&*ii
 ((8955CCDNNS	||""||..&DJ?dll3t~~3F&F%JJK$	Z$	nnT\\)m$	33AA)L22@@K$tvvh766DDTJ	$S]"&	%L233C)*?9uW~;U+VV5  	 

HQNXa^DFF-BBCDq!nx1~d466466DFF?3K.LLLNA!Q!66

Bq!nx1~d466466DFF?3K.LLLNN 66DFF?r(   c                    [        U R                  S5      (       d   e[        U R                  S5      (       d   eU R                  R                  U R                  R                  :X  d   e[	        U R
                  U R                  /5      nU R                  R                  U:X  d   eU R                  R                  U:X  d   e[        U R                  R                  [        5      (       d   e[        U R                  R                  [        5      (       d   eU R                  R                  R                  S:X  d   eU R                  R                  R                  S:X  d   eg r   )	r   r   rx   r   r   r	  r}   r   r   r   s     r)   r   'TestTendonForceExplicit.test_state_vars  r   r(   c                    [        U R                  S5      (       d   e[        U R                  S5      (       d   eU R                  R                  U R                  R                  :X  d   e[	        U R
                  /5      nU R                  R                  U:X  d   eU R                  R                  U:X  d   e[        U R                  R                  [        5      (       d   e[        U R                  R                  [        5      (       d   eU R                  R                  R                  S:X  d   eU R                  R                  R                  S:X  d   eg r   r   r   s     r)   r   'TestTendonForceExplicit.test_input_vars  r   r(   c                 h   [        U R                  S5      (       d   e[        U R                  S5      (       d   eU R                  R                  U R                  R                  :X  d   e[	        U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  /	5      nU R                  R                  U:X  d   eU R                  R                  U:X  d   e[        U R                  R                  [        5      (       d   e[        U R                  R                  [        5      (       d   eU R                  R                  R                  S:X  d   eU R                  R                  R                  S:X  d   eg r   r   r   s     r)   r   &TestTendonForceExplicit.test_constants  r   r(   c                 .   [        U R                  S5      (       d   e[        S5      nU R                  R                  U:X  d   e[	        U R                  R                  [
        5      (       d   eU R                  R                  R                  S:X  d   eg r   r   r   s     r)   r   TestTendonForceExplicit.test_M  r   r(   c                 Z   [        U R                  S5      (       d   e[        U R                  U R                  /5      nU R                  R
                  U:X  d   e[        U R                  R
                  [        5      (       d   eU R                  R
                  R                  S:X  d   eg r   )r   r   r   r  r   r   r   r   r   s     r)   r   TestTendonForceExplicit.test_F  r   r(   c                 @   [        U R                  S5      (       d   e[        U R                  U R                  /5      nU R                  R                  5       n[        U[        5      (       d   eUR                  S:X  d   e[        X!-
  5      [        SS5      :X  d   eg r  )
r   r   r   r  r   r   r   r   r!   r   r   s      r)   r    TestTendonForceExplicit.test_rhs
  r  r(   )rh   r	  rc   r}   rz   rk   r   rl   r  r   r|   r   rv   r   ri   rg   rb   ru   ry   rd   r   r   rj   N)rA   rB   rC   rD   rU   r   r  r   r   r   r   r   r   rF   r'   r(   r)   r  r  t  s@    & ^^D!B "BH
8
870//;r(   r  c                      \ rS rSr\S 5       r\S 5       r\R                  " SS9S 5       r	S r
\R                  R                  SS	\" S
5      4\" S5      \" S5      4\" SS5      \" SS5      4\" S5      \" S5      4/5      S 5       r\R                  R                  SS	\" S5      4\" S5      \" S5      4\" S5      \" S5      4\" S5      \" S5      4/5      S 5       r\R                  R                  SS	\" S5      4\" S5      \" S5      4\" SS5      \" SS5      4\" S5      \" S5      4/5      S 5       r\R                  R                  SS	\" S5      4\" S5      \" S5      4\" S5      \" S5      4\" S5      \" S5      4/5      S 5       r\R                  R                  S S	\" S!5      4\" S"5      \" S"5      4\" S#5      \" S#5      4\" S$5      \" S$5      4/5      S% 5       r\R                  R                  S&S	\" S'5      4\" S(5      \" S(5      4\" S#5      \" S#5      4\" SS5      \" SS5      4\" S$5      \" S$5      4/5      S) 5       rS* rS+ rS, rS- rS. rS/rg	)0TestMusculotendonDeGroote2016i  c                      [        [        [        5      (       d   e[        [        [        5      (       d   e[        R                  S:X  d   eg )Nr   )rL   r   r   r   rA   r'   r(   r)   rR   (TestMusculotendonDeGroote2016.test_class  s?    3]CCCC3[AAAA(115PPPPr(   c                     [        S5      n [        S5      nUR                  U [        S5      [        S5      R                  -  5        [        X5      n[        S5      n[        S5      n[        S5      n[        S5      n[        S	5      n[        S
5      n[        S5      n	[        SUU[        R                  UUUUUU	S9
n
[        U
[        5      (       d   eg )Nre   rf   rd   rc   rb   rg   rh   ri   rj   rk   rl   rm   )r    rw   r   r   rx   r   r   r   r   r   r&   r   )ru   rv   ry   rz   rg   rh   ri   rj   rk   rl   r   s              r)   test_instance+TestMusculotendonDeGroote2016.test_instance  s    t$K	&."5nS6I6K6K"KL25f=
;'	###;'	f~,#;#H#H )!(!(#*$-&*
 ($=>>>>r(   Tr_   c                 ^   SU l         [        S5      U l        [        S5      U l        [        S5      U l        [        S5      U l        U R                  R                  U R                  U R                  U R                  R                  -  5        [        U R                  U R                  5      U l        [        U R                   5      U l        [        S5      U l        [        S5      U l        [        S5      U l        [        S	5      U l        [        S
5      U l        [        S5      U l        g )Nrb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   )rb   r   rc   r   rd   r    ru   rv   rw   rx   r   ry   r   rz   r   rg   rh   ri   rj   rk   rl   )r   s    r)   _musculotendon_fixture4TestMusculotendonDeGroote2016._musculotendon_fixture6  s    	$$Dktt{{DFF46688O<$T[[$..A:499E,i(i(i(,6N	r(   c           
      j   [        S5      n[        S5      nUR                  U[        S5      [        S5      R                  -  5        [        X5      n[        S5      n[        S5      n[        S5      n[        S5      n[        S	5      n[        S
5      n	[        S5      n
[        R                  " SUU[        R                  UUUS9nUR                  U:X  d   eUR                  U:X  d   eUR                  U:X  d   eUR                   U:X  d   eUR"                  U	:X  d   eUR$                  U
:X  d   eg )Nre   rf   rd   rc   rb   rg   rh   ri   10.0z0.00.1)rn   ro   rp   rq   )r    rw   r   r   rx   r   r   r   r   r   r   r   r&   ro   rp   rq   rr   rs   rt   )r   ru   rv   ry   rz   rg   rh   ri   rj   rk   rl   r   s               r)   test_with_defaults0TestMusculotendonDeGroote2016.test_with_defaultsG  s+   t$K	&."5nS6I6K6K"KL25f=
;'	##-%L	U|,::#;#H#H )!(!(
 ++y888,,777,,777..'999//9<<<11T999r(   zl_T_slack, expectedNl_T_slack_namerg   r-   r3   z0.5c                 ,   [        U R                  U R                  U R                  [        R
                  UU R                  U R                  U R                  U R                  U R                  S9
nUR                  U:X  d   eUR                  U:X  d   eg Nrm   )r   rb   ry   rz   r   r&   rh   ri   rj   rk   rl   rg   ro   )r   rg   expectedr   s       r)   test_tendon_slack_length6TestMusculotendonDeGroote2016.test_tendon_slack_lengthc  s|     -IILLOO#;#H#H )!%!%#'<<$(NN&*ii
 !!X---++x777r(   zF_M_max, expectedF_M_max_namerh   i  z1000.0c                 ,   [        U R                  U R                  U R                  [        R
                  U R                  UU R                  U R                  U R                  U R                  S9
nUR                  U:X  d   eUR                  U:X  d   eg r5  )r   rb   ry   rz   r   r&   rg   ri   rj   rk   rl   rh   rp   )r   rh   r6  r   s       r)   test_peak_isometric_force7TestMusculotendonDeGroote2016.test_peak_isometric_force|  s|     -IILLOO#;#H#H $!(!%#'<<$(NN&*ii
 8+++,,888r(   zl_M_opt, expectedl_M_opt_nameri   c                 ,   [        U R                  U R                  U R                  [        R
                  U R                  U R                  UU R                  U R                  U R                  S9
nUR                  U:X  d   eUR                  U:X  d   eg r5  )r   rb   ry   rz   r   r&   rg   rh   rj   rk   rl   ri   rq   )r   ri   r6  r   s       r)   test_optimal_fiber_length7TestMusculotendonDeGroote2016.test_optimal_fiber_length  s|     -IILLOO#;#H#H $!%!(#'<<$(NN&*ii
 8+++,,888r(   zv_M_max, expectedv_M_max_namerj   
   r/  c                 ,   [        U R                  U R                  U R                  [        R
                  U R                  U R                  U R                  UU R                  U R                  S9
nUR                  U:X  d   eUR                  U:X  d   eg r5  )r   rb   ry   rz   r   r&   rg   rh   ri   rk   rl   rj   rr   )r   rj   r6  r   s       r)   test_maximal_fiber_velocity9TestMusculotendonDeGroote2016.test_maximal_fiber_velocity  s|     -IILLOO#;#H#H $!%!%#*$(NN&*ii
 8+++..(:::r(   zalpha_opt, expectedalpha_opt_namerk   r   r0  c                 ,   [        U R                  U R                  U R                  [        R
                  U R                  U R                  U R                  U R                  UU R                  S9
nUR                  U:X  d   eUR                  U:X  d   eg r5  )r   rb   ry   rz   r   r&   rg   rh   ri   rj   rl   rk   rs   )r   rk   r6  r   s       r)   test_optimal_pennation_angle:TestMusculotendonDeGroote2016.test_optimal_pennation_angle  s|     -IILLOO#;#H#H $!%!%#'<<$-&*ii
 !!X---//8;;;r(   zbeta, expected	beta_namerl   c                 ,   [        U R                  U R                  U R                  [        R
                  U R                  U R                  U R                  U R                  U R                  US9
nUR                  U:X  d   eUR                  U:X  d   eg r5  )r   rb   ry   rz   r   r&   rg   rh   ri   rj   rk   rl   rt   )r   rl   r6  r   s       r)   test_fiber_damping_coefficient<TestMusculotendonDeGroote2016.test_fiber_damping_coefficient  sz     -IILLOO#;#H#H $!%!%#'<<$(NN&*
 }}(((11X===r(   c                 :   [        U R                  U R                  U R                  5      n[	        US5      (       d   e[	        US5      (       d   e[        S5      nUR                  U:X  d   eUR                  U:X  d   eUR                  UR                  L d   eg )Nr|   r{   e_name)r   rb   ry   rz   r   r   r|   r{   )r   r   
e_expecteds      r)   test_excitation-TestMusculotendonDeGroote2016.test_excitation  s    ,IILLOO

 x%%%%x....#H-
zzZ'''""j000zzX00000r(   c                 F   [        U R                  U R                  U R                  5      n[        R
                  " [        5         S Ul        S S S 5        [        R
                  " [        5         S Ul        S S S 5        g ! , (       d  f       N9= f! , (       d  f       g = frK   )	r   rb   ry   rz   rU   rV   AttributeErrorr|   r{   r   r   s     r)   test_excitation_is_immutable:TestMusculotendonDeGroote2016.test_excitation_is_immutable  g    ,IILLOO

 ]]>*HJ +]]>*"&H +* +***   B0B
B
B c                    [        U R                  U R                  U R                  5      n[	        US5      (       d   e[	        US5      (       d   e[        S5      nUR                  U:X  d   eUR                  U:X  d   eg )Nr}   rz   a_name)r   rb   ry   rz   r   r   r}   )r   r   
a_expecteds      r)   test_activation-TestMusculotendonDeGroote2016.test_activation  sy    ,IILLOO

 x%%%%x....#H-
zzZ'''""j000r(   c                 F   [        U R                  U R                  U R                  5      n[        R
                  " [        5         S Ul        S S S 5        [        R
                  " [        5         S Ul        S S S 5        g ! , (       d  f       N9= f! , (       d  f       g = frK   )r   rb   ry   rz   rU   rV   rT  r}   rU  s     r)   test_activation_is_immutable:TestMusculotendonDeGroote2016.test_activation_is_immutable  rX  rY  c                    [        U R                  U R                  U R                  [        R
                  U R                  U R                  U R                  U R                  U R                  U R                  S9
nSn[        U5      U:X  d   eg )Nrm   a  MusculotendonDeGroote2016('name', pathway=LinearPathway(pO, pI), activation_dynamics=FirstOrderActivationDeGroote2016('name', activation_time_constant=tau_a_name, deactivation_time_constant=tau_d_name, smoothing_rate=b_name), musculotendon_dynamics=0, tendon_slack_length=l_T_slack, peak_isometric_force=F_M_max, optimal_fiber_length=l_M_opt, maximal_fiber_velocity=v_M_max, optimal_pennation_angle=alpha_opt, fiber_damping_coefficient=beta))r   rb   ry   rz   r   r&   rg   rh   ri   rj   rk   rl   repr)r   r   r6  s      r)   	test_repr'TestMusculotendonDeGroote2016.test_repr)  sr    ,IILLOO#;#H#H $!%!%#'<<$(NN&*ii
. 	 H~)))r(   )rh   rc   rz   rk   rl   rv   ri   rg   rb   ru   ry   rd   rj   )rA   rB   rC   rD   rE   rR   r)  rU   r   r,  r1  markparametrizer   r   r   r7  r   r;  r?  rD  rH  rL  rQ  rV  r]  r`  rd  rF   r'   r(   r)   r%  r%    s   Q Q
 ? ?4 ^^D!# "# :8 [[6*+,K &"56a^Xa^,5\5<(		
88  [[6.)*Iy 12T]GDM*8_eHo.		
99  [[6.)*Iy 12a^Xa^,5\5<(		
99  [[6.)*Iy 12R['"+&6]E&M*		
;;  [[6*+,K &"56QZ$5\5<(		
<<  [[6+&'F^VF^,QZ$a_hq"o.5\5<(	
	>	> 1	'
1	'*r(   r%  )=__doc__rM   rU   sympy.core.exprr   sympy.core.numbersr   r   r   sympy.core.symbolr   &sympy.functions.elementary.exponentialr   %sympy.functions.elementary.hyperbolicr	   (sympy.functions.elementary.miscellaneousr
   (sympy.functions.elementary.trigonometricr   sympy.matrices.denser   r   r   r   %sympy.physics.biomechanics.activationr    sympy.physics.biomechanics.curver   r   r   r   r   r   r   r   (sympy.physics.biomechanics.musculotendonr   r   r   !sympy.physics.biomechanics._mixinr    sympy.physics.mechanics.actuatorr   sympy.physics.mechanics.pathwayr   sympy.physics.vector.framer   sympy.physics.vector.functionsr   sympy.physics.vector.pointr    sympy.simplify.simplifyr!   r#   rH   rf  rg  r]   r   r  r%  r'   r(   r)   <module>r{     sm   K 
  + 7 7 $ 6 6 9 8 I I	 	 	 
 : : 9 5 9 , ,C C6$ $$ 14M3NOE8 E8 PE8P # &)$A,P+N3]*L%C-R	
"@; @;#"@;F # &)$A,P+N3]*L%C-R	
"K; K;#"K;\r* r*r(   