+
    i                        R t ^ RIt^ RIt^ RIHt ^ RIHtHtHt ^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHtHt ^ R
IHt ^ RIHtHtHtHtHtH t H!t!H"t" ^ RI#H$t$H%t%H&t& ^ RI'H(t( ^ RI)H*t* ^ RI+H,t, ^ RI-H.t. ^ RI/H0t0 ^ RI1H2t2 ^ RI3H4t4  ! R R4      t5 ! R R4      t6]Pn                  Pq                  R]%.4       ! R R4      4       t9]Pn                  Pq                  R]%]! ]!]"]]]]] R7      3.4       ! R R4      4       t:]Pn                  Pq                  R]%]! ]!]"]]]]] R7      3.4       ! R R 4      4       t; ! R! R"4      t<R# )#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                   p   a  ] tR t^*t o ]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t	Rt
V tR# )TestMusculotendonFormulationc                 X    \        ^ 4      ^ 8X  g   Q h\         P                  ^ 8X  g   Q hR# )    N)r   RIGID_TENDON     q/var/www/html/photoedit/myenv/lib/python3.14/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                 X    \        ^4      ^8X  g   Q h\         P                  ^8X  g   Q hR# )   N)r   FIBER_LENGTH_EXPLICITr&   r'   r(   !test_fiber_length_explicit_member>TestMusculotendonFormulation.test_fiber_length_explicit_member0   )    '*a///'==BBBr'   c                 X    \        ^4      ^8X  g   Q h\         P                  ^8X  g   Q hR# )   N)r   TENDON_FORCE_EXPLICITr&   r'   r(   !test_tendon_force_explicit_member>TestMusculotendonFormulation.test_tendon_force_explicit_member5   r0   r'   c                 X    \        ^4      ^8X  g   Q h\         P                  ^8X  g   Q hR# )   N)r   FIBER_LENGTH_IMPLICITr&   r'   r(   !test_fiber_length_implicit_member>TestMusculotendonFormulation.test_fiber_length_implicit_member:   r0   r'   c                 X    \        ^4      ^8X  g   Q h\         P                  ^8X  g   Q hR# )   N)r   TENDON_FORCE_IMPLICITr&   r'   r(   !test_tendon_force_implicit_member>TestMusculotendonFormulation.test_tendon_force_implicit_member?   r0   r'   r&   N)__name__
__module____qualname____firstlineno__staticmethodr)   r.   r4   r9   r>   __static_attributes____classdictcell____classdict__s   @r(   r"   r"   *   so     : : C C C C C C C Cr'   r"   c                   P   a  ] tR t^Et o ]R 4       t]R 4       t]R 4       tRtV t	R# )TestMusculotendonBasec                 R    \        \        \        P                  4      '       g   Q hR # N)
issubclassr   abcABCr&   r'   r(   test_is_abstract_base_class1TestMusculotendonBase.test_is_abstract_base_classG   s    +SWW5555r'   c                     \        \        \        4      '       g   Q h\        \        \        4      '       g   Q h\        P                  R 8X  g   Q hR# )r   N)rM   r   r   r   r@   r&   r'   r(   
test_class TestMusculotendonBase.test_classK   s?    +];;;;+[9999 ))-@@@@r'   c                     \         P                  ! \        4      ;_uu_ 4        \        4       p R R R 4       R #   + '       g   i     R # ; irL   )pytestraises	TypeErrorr   )_s    r(    test_cannot_instantiate_directly6TestMusculotendonBase.test_cannot_instantiate_directlyQ   s(    ]]9%%!#A &%%%s	   8A		r&   N)
r@   rA   rB   rC   rD   rP   rS   rZ   rE   rF   rG   s   @r(   rJ   rJ   E   sA     6 6 A A
 $ $r'   rJ   musculotendon_concretec                   v   a  ] tR t^Wt o ]P
                  ! RR7      R 4       tR tR tR t	R t
R tR	 tR
tV tR# )TestMusculotendonRigidTendonTautousec                p   R V n         \        R4      V n        \        R4      V n        \        R4      V n        \        R4      V n        V P                  P                  V P                  V P                  V P                  P                  ,          4       \        V P                  V P                  4      V n        \        V P                   4      V n        V P                  P                  V n        V P                  P                  V n        V P                  P"                  V n        V P                  P&                  V n        V P                  P*                  V n        \.        P0                  V n        \5        R4      V n        \5        R4      V n        \5        R4      V n        \5        R4      V n        \5        R	4      V n        \5        R
4      V n         V! V P                   V P                  V P                  V P2                  V P6                  V P8                  V P:                  V P<                  V P>                  V P@                  R7
      V n!        ^V P$                  \E        ^^4      \E        ^^4      V P                   ,          ,           ,          ,          \E        ^^4      \E        ^^4      \G        V P,                  V P                  V P                   ,
          ,          4      ,          ,           ,          \E        ^^4      \E        ^^4      V P                   ,          ,           V P(                  ,          \E        ^^4      \E        ^^4      \G        V P,                  V P                  V P                   ,
          ,          4      ,          ,
          ,          ,           V P                  V P                   ,
          ,          V n$        R# )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_coefficientN)%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                   \        V P                  R 4      '       g   Q h\        V P                  R4      '       g   Q hV P                  P                  V P                  P                  8X  g   Q h\	        V P
                  .4      pV P                  P                  V8X  g   Q hV P                  P                  V8X  g   Q h\        V P                  P                  \        4      '       g   Q h\        V P                  P                  \        4      '       g   Q hV P                  P                  P                  R8X  g   Q hV P                  P                  P                  R8X  g   Q hR# )rx   
state_varsN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                   \        V P                  R 4      '       g   Q h\        V P                  R4      '       g   Q hV P                  P                  V P                  P                  8X  g   Q h\	        V P
                  .4      pV P                  P                  V8X  g   Q hV P                  P                  V8X  g   Q h\        V P                  P                  \        4      '       g   Q h\        V P                  P                  \        4      '       g   Q hV P                  P                  P                  R8X  g   Q hV P                  P                  P                  R8X  g   Q hR# r
input_varsNr   r   r   r   r   r   r|   r   r   r   
r_expecteds   & r(   test_input_vars,TestMusculotendonRigidTendon.test_input_vars   r   r'   c                r   \        V P                  R 4      '       g   Q h\        V P                  R4      '       g   Q hV P                  P                  V P                  P                  8X  g   Q h\	        . V P
                  NV P                  NV P                  NV P                  NV P                  NV P                  NV P                  NV P                  NV P                  N\        R4      N\        R4      N\        R4      N\        R4      N\        R4      N\        R4      N\        R4      N\        R	4      N\        R
4      N\        R4      N\        R4      N\        R4      N\        R4      N\        R4      N\        R4      N\        R4      N\        R4      N\        R4      N\        R4      N\        R4      N\        R4      N\        R4      N4      pV P                  P                  V8X  g   Q hV P                  P                  V8X  g   Q h\        V P                  P                  \        4      '       g   Q h\        V P                  P                  \        4      '       g   Q hV P                  P                  P                   R8X  g   Q hV P                  P                  P                   R8X  g   Q hR# )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_nameN)   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                :   \        V P                  R 4      '       g   Q h\        ^.4      pV P                  P                  V8X  g   Q h\	        V P                  P                  \        4      '       g   Q hV P                  P                  P
                  R8X  g   Q hR# )MNr   )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                N   \        V P                  R 4      '       g   Q h\        V P                  .4      pV P                  P                  V8X  g   Q h\        V P                  P                  \        4      '       g   Q hV P                  P                  P                  R8X  g   Q hR# )FNr   )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                :   \        V P                  R 4      '       g   Q h\        V P                  .4      pV P                  P	                  4       p\        V\        4      '       g   Q hVP                  R8X  g   Q h\        W!,
          4      \        ^4      8X  g   Q hR# )rhsNr   )	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)r@   rA   rB   rC   rV   fixturer   r   r   r   r   r   r   rE   rF   rG   s   @r(   r^   r^   W   sG      ^^D!& "&P
8
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                   v   a  ] tR t^t o ]P
                  ! RR7      R 4       tR tR tR t	R t
R tR	 tR
tV tR# )TestFiberLengthExplicitTr_   c                
   R V n         \        R4      V n        \        R4      V n        \        R4      V n        \        R4      V n        V P                  P                  V P                  V P                  V P                  P                  ,          4       \        V P                  V P                  4      V n        \        V P                   4      V n        V P                  P                  V n        V P                  P                  V n        V P                  P"                  V n        V P                  P&                  V n        V P                  P*                  V n        \.        P0                  V n        \5        R4      V n        \5        R4      V n        \5        R4      V n        \5        R4      V n        \5        R	4      V n        \5        R
4      V n         V! V P                   V P                  V P                  V P2                  V P6                  V P8                  V P:                  V P<                  V P>                  V P@                  RR7      V n!        \        R4      V n"        V P                  PF                  pV PD                  V P:                  ,          pV\I        V^,          V P:                  \K        V P>                  4      ,          ^,          ,
          4      ,
          pVPL                  PO                  WPP6                  ,          4      pVPP                  PO                  V PD                  4      pVPR                  PO                  V PD                  4      pVPT                  PO                  W`P8                  ,          W5,
          V,          ,          V P8                  ,          V,
          V P                   V,          ,          4      p	V P<                  V P:                  ,          V	,          V n+        ^V P$                  \Y        ^^4      \Y        ^^4      V P                   ,          ,           ,          ,          \Y        ^^4      \Y        ^^4      \[        V P,                  V P                  V P                   ,
          ,          4      ,          ,           ,          \Y        ^^4      \Y        ^^4      V P                   ,          ,           V P(                  ,          \Y        ^^4      \Y        ^^4      \[        V P,                  V P                  V P                   ,
          ,          4      ,          ,
          ,          ,           V P                  V P                   ,
          ,          V n.        R# )rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   Trn   ro   rp   rq   rr   rs   rt   with_defaultsl_M_tilde_nameN)/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                   \        V P                  R 4      '       g   Q h\        V P                  R4      '       g   Q hV P                  P                  V P                  P                  8X  g   Q h\	        V P
                  V P                  .4      pV P                  P                  V8X  g   Q hV P                  P                  V8X  g   Q h\        V P                  P                  \        4      '       g   Q h\        V P                  P                  \        4      '       g   Q hV P                  P                  P                  R8X  g   Q hV P                  P                  P                  R8X  g   Q hR# rx   r   Nr2   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                   \        V P                  R 4      '       g   Q h\        V P                  R4      '       g   Q hV P                  P                  V P                  P                  8X  g   Q h\	        V P
                  .4      pV P                  P                  V8X  g   Q hV P                  P                  V8X  g   Q h\        V P                  P                  \        4      '       g   Q h\        V P                  P                  \        4      '       g   Q hV P                  P                  P                  R8X  g   Q hV P                  P                  P                  R8X  g   Q hR# r   r   r   s   & r(   r   'TestFiberLengthExplicit.test_input_vars9  r   r'   c                |   \        V P                  R 4      '       g   Q h\        V P                  R4      '       g   Q hV P                  P                  V P                  P                  8X  g   Q h\	        V P
                  V P                  V P                  V P                  V P                  V P                  V P                  V P                  V P                  .	4      pV P                  P                  V8X  g   Q hV P                  P                  V8X  g   Q h\        V P                  P                  \        4      '       g   Q h\        V P                  P                  \        4      '       g   Q hV P                  P                  P                  R8X  g   Q hV P                  P                  P                  R8X  g   Q hR# r   r   N)	   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                8   \        V P                  R 4      '       g   Q h\        ^4      pV P                  P                  V8X  g   Q h\	        V P                  P                  \
        4      '       g   Q hV P                  P                  P                  R8X  g   Q hR# r   N)r2   r2   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                d   \        V P                  R 4      '       g   Q h\        V P                  V P                  .4      pV P                  P
                  V8X  g   Q h\        V P                  P
                  \        4      '       g   Q hV P                  P
                  P                  R8X  g   Q hR# r   Nr   )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                R   \        V P                  R 4      '       g   Q h\        V P                  V P                  .4      pV P                  P                  4       p\        V\        4      '       g   Q hVP                  R8X  g   Q h\        W!,
          4      \        ^^4      8X  g   Q hR# r   Nr   )
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)r@   rA   rB   rC   rV   r   r   r   r   r   r   r   r   rE   rF   rG   s   @r(   r   r      sF     & ^^D!7 "7r
8
870//; ;r'   r   c                   v   a  ] tR tRt o ]P
                  ! RR7      R 4       tR tR tR t	R t
R	 tR
 tRtV tR# )TestTendonForceExplicitit  Tr_   c                   R V n         \        R4      V n        \        R4      V n        \        R4      V n        \        R4      V n        V P                  P                  V P                  V P                  V P                  P                  ,          4       \        V P                  V P                  4      V n        \        V P                   4      V n        V P                  P                  V n        V P                  P                  V n        V P                  P"                  V n        V P                  P&                  V n        V P                  P*                  V n        \.        P0                  V n        \5        R4      V n        \5        R4      V n        \5        R4      V n        \5        R4      V n        \5        R	4      V n        \5        R
4      V n         V! V P                   V P                  V P                  V P2                  V P6                  V P8                  V P:                  V P<                  V P>                  V P@                  RR7      V n!        \        R4      V n"        VPF                  PI                  V PD                  4      pV P                  PJ                  pV P                  PL                  pW0P6                  ,          p\O        WF,
          ^,          V P:                  \Q        V P>                  4      ,          ^,          ,           4      pWpP:                  ,          pWF,
          V,          p	V PD                  V P8                  ,          p
W,          pWP8                  ,          pVPR                  PI                  V4      pVPT                  PI                  V4      pW,
          V P                   V,          ,          pVPV                  PI                  V4      pVV P<                  ,          pVVV	,          ,
          pVV P6                  ,          p\Y        R4      \Y        R4      ,          \[        \Y        R4      \]        V\Y        R4      ,
          4      ,          4      ,          V,          V n/        ^V P$                  \a        ^^4      \a        ^^4      V P                   ,          ,           ,          ,          \a        ^^4      \a        ^^4      \c        V P,                  V P                  V P                   ,
          ,          4      ,          ,           ,          \a        ^^4      \a        ^^4      V P                   ,          ,           V P(                  ,          \a        ^^4      \a        ^^4      \c        V P,                  V P                  V P                   ,
          ,          4      ,          ,
          ,          ,           V P                  V P                   ,
          ,          V n2        R# )rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   Tr   F_T_tilde_namez0.2z33.93669377311689z0.995N)3rb   r   rc   r   rd   r   ru   rv   rw   rx   r   ry   r   rz   r{   r|   r}   r~   r   r   r   r   r   r   r3   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                   \        V P                  R 4      '       g   Q h\        V P                  R4      '       g   Q hV P                  P                  V P                  P                  8X  g   Q h\	        V P
                  V P                  .4      pV P                  P                  V8X  g   Q hV P                  P                  V8X  g   Q h\        V P                  P                  \        4      '       g   Q h\        V P                  P                  \        4      '       g   Q hV P                  P                  P                  R8X  g   Q hV P                  P                  P                  R8X  g   Q hR# r   )	r   r   rx   r   r   r  r}   r   r   r   s   & r(   r   'TestTendonForceExplicit.test_state_vars  r   r'   c                   \        V P                  R 4      '       g   Q h\        V P                  R4      '       g   Q hV P                  P                  V P                  P                  8X  g   Q h\	        V P
                  .4      pV P                  P                  V8X  g   Q hV P                  P                  V8X  g   Q h\        V P                  P                  \        4      '       g   Q h\        V P                  P                  \        4      '       g   Q hV P                  P                  P                  R8X  g   Q hV P                  P                  P                  R8X  g   Q hR# r   r   r   s   & r(   r   'TestTendonForceExplicit.test_input_vars  r   r'   c                |   \        V P                  R 4      '       g   Q h\        V P                  R4      '       g   Q hV P                  P                  V P                  P                  8X  g   Q h\	        V P
                  V P                  V P                  V P                  V P                  V P                  V P                  V P                  V P                  .	4      pV P                  P                  V8X  g   Q hV P                  P                  V8X  g   Q h\        V P                  P                  \        4      '       g   Q h\        V P                  P                  \        4      '       g   Q hV P                  P                  P                  R8X  g   Q hV P                  P                  P                  R8X  g   Q hR# r   r   r   s   & r(   r   &TestTendonForceExplicit.test_constants  r   r'   c                8   \        V P                  R 4      '       g   Q h\        ^4      pV P                  P                  V8X  g   Q h\	        V P                  P                  \
        4      '       g   Q hV P                  P                  P                  R8X  g   Q hR# r   r   r   s   & r(   r   TestTendonForceExplicit.test_M  r   r'   c                d   \        V P                  R 4      '       g   Q h\        V P                  V P                  .4      pV P                  P
                  V8X  g   Q h\        V P                  P
                  \        4      '       g   Q hV P                  P
                  P                  R8X  g   Q hR# r   )r   r   r   r
  r   r   r   r   r   s   & r(   r   TestTendonForceExplicit.test_F  r   r'   c                R   \        V P                  R 4      '       g   Q h\        V P                  V P                  .4      pV P                  P                  4       p\        V\        4      '       g   Q hVP                  R8X  g   Q h\        W!,
          4      \        ^^4      8X  g   Q hR# 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)r@   rA   rB   rC   rV   r   r  r   r   r   r   r   r   rE   rF   rG   s   @r(   r  r  t  sH     & ^^D!B "BH
8
870//; ;r'   r  c                     a  ] tR tRt o ]R 4       t]R 4       t]P                  ! RR7      R 4       t	R t
]P                  P                  RR	]! R
4      3]! R4      ]! R4      3]! ^^4      ]! ^^4      3]! R4      ]! R4      3.4      R 4       t]P                  P                  RR	]! R4      3]! R4      ]! R4      3]! R4      ]! R4      3]! R4      ]! R4      3.4      R 4       t]P                  P                  RR	]! R4      3]! R4      ]! R4      3]! ^^4      ]! ^^4      3]! R4      ]! R4      3.4      R 4       t]P                  P                  RR	]! R4      3]! R4      ]! R4      3]! ^
4      ]! ^
4      3]! R4      ]! R4      3.4      R 4       t]P                  P                  RR	]! R4      3]! R4      ]! R4      3]! ^ 4      ]! ^ 4      3]! R 4      ]! R 4      3.4      R! 4       t]P                  P                  R"R	]! R#4      3]! R$4      ]! R$4      3]! ^ 4      ]! ^ 4      3]! ^^
4      ]! ^^
4      3]! R 4      ]! R 4      3.4      R% 4       tR& tR' tR( tR) tR* tR+tV tR	# ),TestMusculotendonDeGroote2016i  c                     \        \        \        4      '       g   Q h\        \        \        4      '       g   Q h\        P                  R 8X  g   Q hR# )r   N)rM   r   r   r   r@   r&   r'   r(   rS   (TestMusculotendonDeGroote2016.test_class  s?    3]CCCC3[AAAA(115PPPPr'   c                    \        R 4      p \        R4      pVP                  V \        R4      \        R4      P                  ,          4       \        W4      p\        R4      p\        R4      p\        R4      p\        R4      p\        R4      p\        R	4      p\        R
4      p	\        RVV\        P                  VVVVVV	R7
      p
\        V
\        4      '       g   Q hR# )re   rf   rd   rc   rb   rg   rh   ri   rj   rk   rl   rm   N)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                h   R V n         \        R4      V n        \        R4      V n        \        R4      V n        \        R4      V n        V P                  P                  V P                  V P                  V P                  P                  ,          4       \        V P                  V P                  4      V n        \        V P                   4      V n        \        R4      V n        \        R4      V n        \        R4      V n        \        R4      V n        \        R	4      V n        \        R
4      V n        R# )rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   N)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           
        \        R 4      p\        R4      pVP                  V\        R4      \        R4      P                  ,          4       \        W4      p\        R4      p\        R4      p\        R4      p\        R4      p\        R4      p\        R	4      p	\        R
4      p
\        P                  ! RVV\        P                  VVVR7      pVP                  V8X  g   Q hVP                  V8X  g   Q hVP                  V8X  g   Q hVP                   V8X  g   Q hVP"                  V	8X  g   Q hVP$                  V
8X  g   Q hR# )re   rf   rd   rc   rb   rg   rh   ri   10.0z0.00.1)rn   ro   rp   rq   N)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   z0.5c                8   \        V P                  V P                  V P                  \        P
                  VV P                  V P                  V P                  V P                  V P                  R 7
      pVP                  V8X  g   Q hVP                  V8X  g   Q hR# rm   N)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                8   \        V P                  V P                  V P                  \        P
                  V P                  VV P                  V P                  V P                  V P                  R 7
      pVP                  V8X  g   Q hVP                  V8X  g   Q hR# r4  )r   rb   ry   rz   r   r%   rg   ri   rj   rk   rl   rh   rp   )r   rh   r5  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                8   \        V P                  V P                  V P                  \        P
                  V P                  V P                  VV P                  V P                  V P                  R 7
      pVP                  V8X  g   Q hVP                  V8X  g   Q hR# r4  )r   rb   ry   rz   r   r%   rg   rh   rj   rk   rl   ri   rq   )r   ri   r5  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                8   \        V P                  V P                  V P                  \        P
                  V P                  V P                  V P                  VV P                  V P                  R 7
      pVP                  V8X  g   Q hVP                  V8X  g   Q hR# r4  )r   rb   ry   rz   r   r%   rg   rh   ri   rk   rl   rj   rr   )r   rj   r5  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/  c                8   \        V P                  V P                  V P                  \        P
                  V P                  V P                  V P                  V P                  VV P                  R 7
      pVP                  V8X  g   Q hVP                  V8X  g   Q hR# r4  )r   rb   ry   rz   r   r%   rg   rh   ri   rj   rl   rk   rs   )r   rk   r5  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                8   \        V P                  V P                  V P                  \        P
                  V P                  V P                  V P                  V P                  V P                  VR 7
      pVP                  V8X  g   Q hVP                  V8X  g   Q hR# r4  )r   rb   ry   rz   r   r%   rg   rh   ri   rj   rk   rl   rt   )r   rl   r5  r   s   &&& r(   test_fiber_damping_coefficient<TestMusculotendonDeGroote2016.test_fiber_damping_coefficient  sz     -IILLOO#;#H#H $!%!%#'<<$(NN&*
 }}(((11X===r'   c                F   \        V P                  V P                  V P                  4      p\	        VR 4      '       g   Q h\	        VR4      '       g   Q h\        R4      pVP                  V8X  g   Q hVP                  V8X  g   Q hVP                  VP                  J g   Q hR# )r|   r{   e_nameN)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                r   \        V P                  V P                  V P                  4      p\        P
                  ! \        4      ;_uu_ 4        R Vn        R R R 4       \        P
                  ! \        4      ;_uu_ 4        R Vn        R R R 4       R #   + '       g   i     LD; i  + '       g   i     R # ; irL   )	r   rb   ry   rz   rV   rW   AttributeErrorr|   r{   r   r   s   & r(   test_excitation_is_immutable:TestMusculotendonDeGroote2016.test_excitation_is_immutable  p    ,IILLOO

 ]]>**HJ +]]>**"&H +* +****   B B%B"	%B6	c                   \        V P                  V P                  V P                  4      p\	        VR 4      '       g   Q h\	        VR4      '       g   Q h\        R4      pVP                  V8X  g   Q hVP                  V8X  g   Q hR# )r}   rz   a_nameN)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                r   \        V P                  V P                  V P                  4      p\        P
                  ! \        4      ;_uu_ 4        R Vn        R R R 4       \        P
                  ! \        4      ;_uu_ 4        R Vn        R R R 4       R #   + '       g   i     LD; i  + '       g   i     R # ; irL   )r   rb   ry   rz   rV   rW   rR  r}   rS  s   & r(   test_activation_is_immutable:TestMusculotendonDeGroote2016.test_activation_is_immutable  rV  rW  c                (   \        V P                  V P                  V P                  \        P
                  V P                  V P                  V P                  V P                  V P                  V P                  R 7
      pRp\        V4      V8X  g   Q hR# )rm   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)N)r   rb   ry   rz   r   r%   rg   rh   ri   rj   rk   rl   repr)r   r   r5  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   )r@   rA   rB   rC   rD   rS   r(  rV   r   r+  r0  markparametrizer   r   r   r6  r   r:  r>  rB  rF  rJ  rO  rT  r[  r^  rb  rE   rF   rG   s   @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__rN   rV   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"   rJ   rd  re  r^   r   r  r$  r&   r'   r(   <module>ry     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'   