Ë
    7^(hŠ€  ã                   ó˜  — d Z ddlZddlZddlmZ ddlmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZ ddlmZ ddl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& ddl'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4  G d„ d«      Z5 G d„ d«      Z6ejn                  jq                  de%g«       G d„ d«      «       Z9ejn                  jq                  de% ee!e"eeeee ¬«      fg«       G d„ d«      «       Z:ejn                  jq                  de% ee!e"eeeee ¬«      fg«       G d „ d!«      «       Z; G d"„ d#«      Z<y)$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                   ó\   — e Zd Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zy)ÚTestMusculotendonFormulationc                  óN   — t        d«      dk(  sJ ‚t         j                  dk(  sJ ‚y )Nr   )r   ÚRIGID_TENDON© ó    úq/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/physics/biomechanics/tests/test_musculotendon.pyÚtest_rigid_tendon_memberz5TestMusculotendonFormulation.test_rigid_tendon_member+   s)   € ä'¨Ó*¨aÒ/Ð/Ð/Ü'×4Ñ4¸Ò9Ð9Ñ9r'   c                  óN   — t        d«      dk(  sJ ‚t         j                  dk(  sJ ‚y )Né   )r   ÚFIBER_LENGTH_EXPLICITr&   r'   r(   Ú!test_fiber_length_explicit_memberz>TestMusculotendonFormulation.test_fiber_length_explicit_member0   ó)   € ä'¨Ó*¨aÒ/Ð/Ð/Ü'×=Ñ=ÀÒBÐBÑBr'   c                  óN   — t        d«      dk(  sJ ‚t         j                  dk(  sJ ‚y )Né   )r   ÚTENDON_FORCE_EXPLICITr&   r'   r(   Ú!test_tendon_force_explicit_memberz>TestMusculotendonFormulation.test_tendon_force_explicit_member5   r.   r'   c                  óN   — t        d«      dk(  sJ ‚t         j                  dk(  sJ ‚y )Né   )r   ÚFIBER_LENGTH_IMPLICITr&   r'   r(   Ú!test_fiber_length_implicit_memberz>TestMusculotendonFormulation.test_fiber_length_implicit_member:   r.   r'   c                  óN   — t        d«      dk(  sJ ‚t         j                  dk(  sJ ‚y )Né   )r   ÚTENDON_FORCE_IMPLICITr&   r'   r(   Ú!test_tendon_force_implicit_memberz>TestMusculotendonFormulation.test_tendon_force_implicit_member?   r.   r'   N)	Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr)   r-   r2   r6   r:   r&   r'   r(   r#   r#   *   sl   „ Øñ:ó ð:ð ñCó ðCð ñCó ðCð ñCó ðCð ñCó ñCr'   r#   c                   ó<   — e Zd Zed„ «       Zed„ «       Zed„ «       Zy)ÚTestMusculotendonBasec                  óD   — t        t        t        j                  «      sJ ‚y ©N)Ú
issubclassr   ÚabcÚABCr&   r'   r(   Útest_is_abstract_base_classz1TestMusculotendonBase.test_is_abstract_base_classG   s   € äÔ+¬S¯W©WÔ5Ð5Ñ5r'   c                  ó†   — t        t        t        «      sJ ‚t        t        t        «      sJ ‚t        j                  dk(  sJ ‚y )Nr   )rC   r   r   r   r;   r&   r'   r(   Ú
test_classz TestMusculotendonBase.test_classK   s9   € äÔ+¬]Ô;Ð;Ð;ÜÔ+¬[Ô9Ð9Ð9Ü ×)Ñ)Ð-@Ò@Ð@Ñ@r'   c                  ót   — t        j                  t        «      5  t        «       } d d d «       y # 1 sw Y   y xY wrB   )ÚpytestÚraisesÚ	TypeErrorr   )Ú_s    r(   Ú test_cannot_instantiate_directlyz6TestMusculotendonBase.test_cannot_instantiate_directlyQ   s+   € ä�]‰]œ9Ó%ñ 	$Ü!Ó#ˆA÷	$÷ 	$ñ 	$ús   š.®7N)r;   r<   r=   r>   rF   rH   rN   r&   r'   r(   r@   r@   E   s>   „ àñ6ó ð6ð ñAó ðAð
 ñ$ó ñ$r'   r@   Úmusculotendon_concretec                   ób   — e Zd Z ej                  d¬«      d„ «       Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚTestMusculotendonRigidTendonT©Úautousec                 óÆ  — d| _         t        d«      | _        t        d«      | _        t        d«      | _        t        d«      | _        | j                  j                  | j                  | j                  | j                  j                  z  «       t        | j                  | j                  «      | _        t        | j                   «      | _        | j                  j                  | _        | j                  j                  | _        | j                  j"                  | _        | j                  j&                  | _        | j                  j*                  | _        t.        j0                  | _        t5        d«      | _        t5        d«      | _        t5        d«      | _        t5        d	«      | _        t5        d
«      | _        t5        d«      | _          || j                   | j                  | j                  | j2                  | j6                  | j8                  | j:                  | j<                  | j>                  | j@                  ¬«
      | _!        d| j$                  tE        dd«      tE        dd«      | j                   z  z   z  z  tE        dd«      tE        dd«      tG        | j,                  | j                  | j                   z
  z  «      z  z   z  tE        dd«      tE        dd«      | j                   z  z   | j(                  z  tE        dd«      tE        dd«      tG        | j,                  | j                  | j                   z
  z  «      z  z
  z  z   | j                  | j                   z
  z  | _$        y )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+   r0   r4   )%rU   r   rV   r   rW   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   rZ   r[   r\   r]   r^   r_   Úinstancer   r	   Úda_expr)ÚselfrO   s     r(   Ú#_musculotendon_rigid_tendon_fixturez@TestMusculotendonRigidTendon._musculotendon_rigid_tendon_fixtureZ   sh  € àˆŒ	Ü Ó$ˆŒÜ Ó$ˆŒÜ˜D“kˆŒÜ˜t›ˆŒØ�‰×Ñ˜tŸ{™{¨D¯F©F°4·6±6·8±8©OÔ<Ü$ T§[¡[°$·.±.ÓAˆŒÜ:¸4¿9¹9ÓEˆŒØ—‘×+Ñ+ˆŒØ—‘×+Ñ+ˆŒØ—_‘_×=Ñ=ˆŒ
Ø—_‘_×?Ñ?ˆŒ
Ø—‘×/Ñ/ˆŒÜ3×@Ñ@ˆÔÜ Ó,ˆŒÜ˜iÓ(ˆŒÜ˜iÓ(ˆŒÜ˜iÓ(ˆŒÜ Ó,ˆŒÜ˜6“NˆŒ	Ù.Ø�I‰IØ�L‰LØ�O‰OØ#'×#3Ñ#3Ø $§¡Ø!%§¡Ø!%§¡Ø#'§<¡<Ø$(§N¡NØ&*§i¡iô
ˆŒð �—
‘
œH Q¨›N¬X°a¸«^¸D¿F¹FÑ-BÑBÑCÑDÜ�q˜!‹nœx¨¨1›~¬d°4·6±6¸4¿6¹6ÀDÇFÁF¹?Ñ3KÓ.LÑLÑLñNä˜˜A“¤¨!¨Q£°·±Ñ!6Ñ6¸¿
¹
ÑBÜ�q˜!‹nœx¨¨1›~¬d°4·6±6¸4¿6¹6ÀDÇFÁF¹?Ñ3KÓ.LÑLÑLñNñNð �6‰6�D—F‘F‰?ñˆ�r'   c                 ó†  — t        | j                  d«      sJ ‚t        | j                  d«      sJ ‚| j                  j                  | j                  j                  k(  sJ ‚t	        | j
                  g«      }| j                  j                  |k(  sJ ‚| j                  j                  |k(  sJ ‚t        | j                  j                  t        «      sJ ‚t        | j                  j                  t        «      sJ ‚| j                  j                  j                  dk(  sJ ‚| j                  j                  j                  dk(  sJ ‚y )Nrk   Ú
state_vars©r+   r+   )Úhasattrrx   rk   r}   ÚMatrixrp   Ú
isinstanceÚshape©rz   Ú
x_expecteds     r(   Útest_state_varsz,TestMusculotendonRigidTendon.test_state_varsƒ   óô   € Ü�t—}‘} cÔ*Ð*Ð*Ü�t—}‘} lÔ3Ð3Ð3Ø�}‰}�‰ $§-¡-×":Ñ":Ò:Ð:Ð:Ü˜TŸV™V˜HÓ%ˆ
Ø�}‰}�‰ *Ò,Ð,Ð,Ø�}‰}×'Ñ'¨:Ò5Ð5Ð5Ü˜$Ÿ-™-Ÿ/™/¬6Ô2Ð2Ð2Ü˜$Ÿ-™-×2Ñ2´FÔ;Ð;Ð;Ø�}‰}�‰×$Ñ$¨Ò.Ð.Ð.Ø�}‰}×'Ñ'×-Ñ-°Ò7Ð7Ñ7r'   c                 ó†  — t        | j                  d«      sJ ‚t        | j                  d«      sJ ‚| j                  j                  | j                  j                  k(  sJ ‚t	        | j
                  g«      }| j                  j                  |k(  sJ ‚| j                  j                  |k(  sJ ‚t        | j                  j                  t        «      sJ ‚t        | j                  j                  t        «      sJ ‚| j                  j                  j                  dk(  sJ ‚| j                  j                  j                  dk(  sJ ‚y ©NÚrÚ
input_varsr~   ©r   rx   r‰   rŠ   r€   ro   r�   r‚   ©rz   Ú
r_expecteds     r(   Útest_input_varsz,TestMusculotendonRigidTendon.test_input_vars�   r†   r'   c                 ó,  — t        | j                  d«      sJ ‚t        | j                  d«      sJ ‚| j                  j                  | j                  j                  k(  sJ ‚t	        g | j
                  ‘| j                  ‘| j                  ‘| j                  ‘| j                  ‘| j                  ‘| j                  ‘| j                  ‘| j                  ‘t        d«      ‘t        d«      ‘t        d«      ‘t        d«      ‘t        d«      ‘t        d«      ‘t        d	«      ‘t        d
«      ‘t        d«      ‘t        d«      ‘t        d«      ‘t        d«      ‘t        d«      ‘t        d«      ‘t        d«      ‘t        d«      ‘t        d«      ‘t        d«      ‘t        d«      ‘t        d«      ‘t        d«      ‘t        d«      ‘«      }| j                  j                  |k(  sJ ‚| j                  j                  |k(  sJ ‚t        | j                  j                  t        «      sJ ‚t        | j                  j                  t        «      sJ ‚| j                  j                  j                   dk(  sJ ‚| j                  j                  j                   dk(  sJ ‚y )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   rx   r�   r‘   r€   rZ   r[   r\   r]   r^   r_   rr   rt   rv   r   r�   r‚   ©rz   Ú
p_expecteds     r(   Útest_constantsz+TestMusculotendonRigidTendon.test_constants›   sÈ  € Ü�t—}‘} cÔ*Ð*Ð*Ü�t—}‘} kÔ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Ü˜$Ÿ-™-×1Ñ1´6Ô:Ð:Ð:Ø�}‰}�‰×$Ñ$¨Ò/Ð/Ð/Ø�}‰}×&Ñ&×,Ñ,°Ò7Ð7Ñ7r'   c                 ó  — t        | j                  d«      sJ ‚t        dg«      }| j                  j                  |k(  sJ ‚t	        | j                  j                  t        «      sJ ‚| j                  j                  j
                  dk(  sJ ‚y )NÚMr+   r~   )r   rx   r€   r­   r�   r‚   ©rz   Ú
M_expecteds     r(   Útest_Mz#TestMusculotendonRigidTendon.test_MÉ   sk   € Ü�t—}‘} cÔ*Ð*Ð*Ü˜Q˜C“[ˆ
Ø�}‰}�‰ *Ò,Ð,Ð,Ü˜$Ÿ-™-Ÿ/™/¬6Ô2Ð2Ð2Ø�}‰}�‰×$Ñ$¨Ò.Ð.Ñ.r'   c                 ó,  — t        | j                  d«      sJ ‚t        | j                  g«      }| j                  j                  |k(  sJ ‚t        | j                  j                  t        «      sJ ‚| j                  j                  j                  dk(  sJ ‚y )NÚFr~   )r   rx   r€   ry   r²   r�   r‚   ©rz   Ú
F_expecteds     r(   Útest_Fz#TestMusculotendonRigidTendon.test_FÐ   sp   € Ü�t—}‘} cÔ*Ð*Ð*Ü˜TŸ\™\˜NÓ+ˆ
Ø�}‰}�‰ *Ò,Ð,Ð,Ü˜$Ÿ-™-Ÿ/™/¬6Ô2Ð2Ð2Ø�}‰}�‰×$Ñ$¨Ò.Ð.Ñ.r'   c                 ó  — t        | j                  d«      sJ ‚t        | j                  g«      }| j                  j	                  «       }t        |t        «      sJ ‚|j                  dk(  sJ ‚t        ||z
  «      t        d«      k(  sJ ‚y )NÚrhsr~   r+   )	r   rx   r€   ry   r·   r�   r‚   r!   r   ©rz   Úrhs_expectedr·   s      r(   Útest_rhsz%TestMusculotendonRigidTendon.test_rhs×   sv   € Ü�t—}‘} eÔ,Ð,Ð,Ü˜tŸ|™|˜nÓ-ˆØ�m‰m×ÑÓ!ˆÜ˜#œvÔ&Ð&Ð&Ø�y‰y˜FÒ"Ð"Ð"Ü˜˜lÑ*Ó+¬u°Q«xÒ7Ð7Ñ7r'   N)r;   r<   r=   rJ   Úfixturer{   r…   rŽ   r«   r°   rµ   rº   r&   r'   r(   rQ   rQ   W   sA   „ ð €V‡^�^˜DÔ!ñ&ó "ð&òP
8ò
8ò,8ò\/ò/ó8r'   rQ   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                   ób   — e Zd Z ej                  d¬«      d„ «       Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚTestFiberLengthExplicitTrR   c                 ó|	  — d| _         t        d«      | _        t        d«      | _        t        d«      | _        t        d«      | _        | j                  j                  | j                  | j                  | j                  j                  z  «       t        | j                  | j                  «      | _        t        | j                   «      | _        | j                  j                  | _        | j                  j                  | _        | j                  j"                  | _        | j                  j&                  | _        | j                  j*                  | _        t.        j0                  | _        t5        d«      | _        t5        d«      | _        t5        d«      | _        t5        d	«      | _        t5        d
«      | _        t5        d«      | _          || j                   | j                  | j                  | j2                  | j6                  | j8                  | j:                  | j<                  | j>                  | j@                  d¬«      | _!        t        d«      | _"        | j                  jF                  }| jD                  | j:                  z  }|tI        |dz  | j:                  tK        | j>                  «      z  dz  z
  «      z
  }|jL                  jO                  || j6                  z  «      }|jP                  jO                  | jD                  «      }|jR                  jO                  | jD                  «      }|jT                  jO                  || j8                  z  ||z
  |z  z  | j8                  z  |z
  | j                   |z  z  «      }	| j<                  | j:                  z  |	z  | _+        d| j$                  tY        dd«      tY        dd«      | j                   z  z   z  z  tY        dd«      tY        dd«      t[        | j,                  | j                  | j                   z
  z  «      z  z   z  tY        dd«      tY        dd«      | j                   z  z   | j(                  z  tY        dd«      tY        dd«      t[        | j,                  | j                  | j                   z
  z  «      z  z
  z  z   | j                  | j                   z
  z  | _.        y )NrU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   T©ra   rb   rc   rd   re   rf   rg   Úwith_defaultsÚl_M_tilde_namer0   r+   r4   )/rU   r   rV   r   rW   r    rh   ri   rj   rk   r   rl   r   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   r   r,   rw   r   rZ   r[   r\   r]   r^   r_   rx   Ú	l_M_tildeÚlengthr
   r   r¼   rÇ   r¾   rÀ   rÂ   Údl_M_tilde_exprr   r	   ry   )
rz   rO   ÚcurveÚl_MTÚl_MÚl_TÚfl_TÚfl_M_pasÚfl_M_actÚ	v_M_tildes
             r(   Ú,_musculotendon_fiber_length_explicit_fixturezDTestFiberLengthExplicit._musculotendon_fiber_length_explicit_fixtureó   s‡  € ð ˆŒ	Ü Ó$ˆŒÜ Ó$ˆŒÜ˜D“kˆŒÜ˜t›ˆŒØ�‰×Ñ˜tŸ{™{¨D¯F©F°4·6±6·8±8©OÔ<Ü$ T§[¡[°$·.±.ÓAˆŒÜ:¸4¿9¹9ÓEˆŒØ—‘×+Ñ+ˆŒØ—‘×+Ñ+ˆŒØ—_‘_×=Ñ=ˆŒ
Ø—_‘_×?Ñ?ˆŒ
Ø—‘×/Ñ/ˆŒÜ3×IÑIˆÔÜ Ó,ˆŒÜ˜iÓ(ˆŒÜ˜iÓ(ˆŒÜ˜iÓ(ˆŒÜ Ó,ˆŒÜ˜6“NˆŒ	Ù.Ø�I‰IØ�L‰LØ�O‰OØ#'×#3Ñ#3Ø $§¡Ø!%§¡Ø!%§¡Ø#'§<¡<Ø$(§N¡NØ&*§i¡iØô
ˆŒô (Ð(8Ó9ˆŒØ�|‰|×"Ñ"ˆØ�n‰n˜TŸ\™\Ñ)ˆØ”T˜#˜q™& D§L¡L´°T·^±^Ó1DÑ$DÀqÑ#HÑHÓIÑIˆØ×(Ñ(×6Ñ6°s¸4¿>¹>Ñ7IÓJˆØ×3Ñ3×AÑAÀ$Ç.Á.ÓQˆØ×2Ñ2×@Ñ@ÀÇÁÓPˆØ×6Ñ6×DÑDØ�T—\‘\Ñ! T¨C¡Z°Ñ$4Ñ5°t·|±|ÑCÀxÑOØ�f‰f�X‰oñó
ˆ	ð !%§¡¨T¯\©\Ñ 9¸9ÑDˆÔà�—
‘
œH Q¨›N¬X°a¸«^¸D¿F¹FÑ-BÑBÑCÑDÜ�q˜!‹nœx¨¨1›~¬d°4·6±6¸4¿6¹6ÀDÇFÁF¹?Ñ3KÓ.LÑLÑLñNä˜˜A“¤¨!¨Q£°·±Ñ!6Ñ6¸¿
¹
ÑBÜ�q˜!‹nœx¨¨1›~¬d°4·6±6¸4¿6¹6ÀDÇFÁF¹?Ñ3KÓ.LÑLÑLñNñNð �6‰6�D—F‘F‰?ñˆ�r'   c                 óœ  — t        | j                  d«      sJ ‚t        | j                  d«      sJ ‚| j                  j                  | j                  j                  k(  sJ ‚t	        | j
                  | j                  g«      }| j                  j                  |k(  sJ ‚| j                  j                  |k(  sJ ‚t        | j                  j                  t        «      sJ ‚t        | j                  j                  t        «      sJ ‚| j                  j                  j                  dk(  sJ ‚| j                  j                  j                  dk(  sJ ‚y ©Nrk   r}   ©r0   r+   )	r   rx   rk   r}   r€   rÉ   rp   r�   r‚   rƒ   s     r(   r…   z'TestFiberLengthExplicit.test_state_vars-  óû   € Ü�t—}‘} cÔ*Ð*Ð*Ü�t—}‘} lÔ3Ð3Ð3Ø�}‰}�‰ $§-¡-×":Ñ":Ò:Ð:Ð:Ü˜TŸ^™^¨T¯V©VÐ4Ó5ˆ
Ø�}‰}�‰ *Ò,Ð,Ð,Ø�}‰}×'Ñ'¨:Ò5Ð5Ð5Ü˜$Ÿ-™-Ÿ/™/¬6Ô2Ð2Ð2Ü˜$Ÿ-™-×2Ñ2´FÔ;Ð;Ð;Ø�}‰}�‰×$Ñ$¨Ò.Ð.Ð.Ø�}‰}×'Ñ'×-Ñ-°Ò7Ð7Ñ7r'   c                 ó†  — t        | j                  d«      sJ ‚t        | j                  d«      sJ ‚| j                  j                  | j                  j                  k(  sJ ‚t	        | j
                  g«      }| j                  j                  |k(  sJ ‚| j                  j                  |k(  sJ ‚t        | j                  j                  t        «      sJ ‚t        | j                  j                  t        «      sJ ‚| j                  j                  j                  dk(  sJ ‚| j                  j                  j                  dk(  sJ ‚y rˆ   r‹   rŒ   s     r(   rŽ   z'TestFiberLengthExplicit.test_input_vars9  r†   r'   c                 ó6  — t        | j                  d«      sJ ‚t        | j                  d«      sJ ‚| j                  j                  | j                  j                  k(  sJ ‚t	        | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  g	«      }| j                  j                  |k(  sJ ‚| j                  j                  |k(  sJ ‚t        | j                  j                  t        «      sJ ‚t        | j                  j                  t        «      sJ ‚| j                  j                  j                  dk(  sJ ‚| j                  j                  j                  dk(  sJ ‚y ©Nr�   r‘   )é	   r+   ©r   rx   r�   r‘   r€   rZ   r[   r\   r]   r^   r_   rr   rt   rv   r�   r‚   r©   s     r(   r«   z&TestFiberLengthExplicit.test_constantsE  ó4  € Ü�t—}‘} cÔ*Ð*Ð*Ü�t—}‘} kÔ2Ð2Ð2Ø�}‰}�‰ $§-¡-×"9Ñ"9Ò9Ð9Ð9Üà—‘Ø—‘Ø—‘Ø—‘Ø—‘Ø—	‘	Ø—
‘
Ø—
‘
Ø—‘ð
ó
ˆ
ð �}‰}�‰ *Ò,Ð,Ð,Ø�}‰}×&Ñ&¨*Ò4Ð4Ð4Ü˜$Ÿ-™-Ÿ/™/¬6Ô2Ð2Ð2Ü˜$Ÿ-™-×1Ñ1´6Ô:Ð:Ð:Ø�}‰}�‰×$Ñ$¨Ò.Ð.Ð.Ø�}‰}×&Ñ&×,Ñ,°Ò6Ð6Ñ6r'   c                 ó  — t        | j                  d«      sJ ‚t        d«      }| j                  j                  |k(  sJ ‚t	        | j                  j                  t
        «      sJ ‚| j                  j                  j                  dk(  sJ ‚y ©Nr­   r0   )r0   r0   ©r   rx   r   r­   r�   r€   r‚   r®   s     r(   r°   zTestFiberLengthExplicit.test_M]  ói   € Ü�t—}‘} cÔ*Ð*Ð*Ü˜“Vˆ
Ø�}‰}�‰ *Ò,Ð,Ð,Ü˜$Ÿ-™-Ÿ/™/¬6Ô2Ð2Ð2Ø�}‰}�‰×$Ñ$¨Ò.Ð.Ñ.r'   c                 óB  — t        | j                  d«      sJ ‚t        | j                  | j                  g«      }| j                  j
                  |k(  sJ ‚t        | j                  j
                  t        «      sJ ‚| j                  j
                  j                  dk(  sJ ‚y ©Nr²   r×   )r   rx   r€   rË   ry   r²   r�   r‚   r³   s     r(   rµ   zTestFiberLengthExplicit.test_Fd  óy   € Ü�t—}‘} cÔ*Ð*Ð*Ü˜T×1Ñ1°4·<±<Ð@ÓAˆ
Ø�}‰}�‰ *Ò,Ð,Ð,Ü˜$Ÿ-™-Ÿ/™/¬6Ô2Ð2Ð2Ø�}‰}�‰×$Ñ$¨Ò.Ð.Ñ.r'   c                 ó*  — t        | j                  d«      sJ ‚t        | j                  | j                  g«      }| j                  j                  «       }t        |t        «      sJ ‚|j                  dk(  sJ ‚t        ||z
  «      t        dd«      k(  sJ ‚y ©Nr·   r×   r0   r+   )
r   rx   r€   rË   ry   r·   r�   r‚   r!   r   r¸   s      r(   rº   z TestFiberLengthExplicit.test_rhsk  ó�   € Ü�t—}‘} eÔ,Ð,Ð,Ü˜t×3Ñ3°T·\±\ÐBÓCˆØ�m‰m×ÑÓ!ˆÜ˜#œvÔ&Ð&Ð&Ø�y‰y˜FÒ"Ð"Ð"Ü˜˜lÑ*Ó+¬u°Q¸«{Ò:Ð:Ñ:r'   N)r;   r<   r=   rJ   r»   rÔ   r…   rŽ   r«   r°   rµ   rº   r&   r'   r(   rÄ   rÄ   à   s@   „ ð& €V‡^�^˜DÔ!ñ7ó "ð7òr
8ò
8ò7ò0/ò/ó;r'   rÄ   c                   ób   — e Zd Z ej                  d¬«      d„ «       Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚTestTendonForceExplicitTrR   c                 óN
  — d| _         t        d«      | _        t        d«      | _        t        d«      | _        t        d«      | _        | j                  j                  | j                  | j                  | j                  j                  z  «       t        | j                  | j                  «      | _        t        | j                   «      | _        | j                  j                  | _        | j                  j                  | _        | j                  j"                  | _        | j                  j&                  | _        | j                  j*                  | _        t.        j0                  | _        t5        d«      | _        t5        d«      | _        t5        d«      | _        t5        d	«      | _        t5        d
«      | _        t5        d«      | _          || j                   | j                  | j                  | j2                  | j6                  | j8                  | j:                  | j<                  | j>                  | j@                  d¬«      | _!        t        d«      | _"        |jF                  jI                  | jD                  «      }| j                  jJ                  }| j                  jL                  }|| j6                  z  }tO        ||z
  dz  | j:                  tQ        | j>                  «      z  dz  z   «      }|| j:                  z  }||z
  |z  }	| jD                  | j8                  z  }
|
|	z  }|| j8                  z  }|jR                  jI                  |«      }|jT                  jI                  |«      }||z
  | j                   |z  z  }|jV                  jI                  |«      }|| j<                  z  }|||	z  z
  }|| j6                  z  }tY        d«      tY        d«      z  t[        tY        d«      t]        |tY        d«      z
  «      z  «      z  |z  | _/        d| j$                  ta        dd«      ta        dd«      | j                   z  z   z  z  ta        dd«      ta        dd«      tc        | j,                  | j                  | j                   z
  z  «      z  z   z  ta        dd«      ta        dd«      | j                   z  z   | j(                  z  ta        dd«      ta        dd«      tc        | j,                  | j                  | j                   z
  z  «      z  z
  z  z   | j                  | j                   z
  z  | _2        y )NrU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   TrÆ   ÚF_T_tilde_namer0   z0.2z33.93669377311689z0.995r+   r4   )3rU   r   rV   r   rW   r    rh   ri   rj   rk   r   rl   r   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   r   r1   rw   r   rZ   r[   r\   r]   r^   r_   rx   Ú	F_T_tilder½   rÇ   rÊ   Úextension_velocityr
   r   r¾   rÀ   rÂ   r   r   r   ÚdF_T_tilde_exprr   r	   ry   )rz   rO   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_fixturezDTestTendonForceExplicit._musculotendon_tendon_force_explicit_fixture‡  s  € ð ˆŒ	Ü Ó$ˆŒÜ Ó$ˆŒÜ˜D“kˆŒÜ˜t›ˆŒØ�‰×Ñ˜tŸ{™{¨D¯F©F°4·6±6·8±8©OÔ<Ü$ T§[¡[°$·.±.ÓAˆŒÜ:¸4¿9¹9ÓEˆŒØ—‘×+Ñ+ˆŒØ—‘×+Ñ+ˆŒØ—_‘_×=Ñ=ˆŒ
Ø—_‘_×?Ñ?ˆŒ
Ø—‘×/Ñ/ˆŒÜ3×IÑIˆÔÜ Ó,ˆŒÜ˜iÓ(ˆŒÜ˜iÓ(ˆŒÜ˜iÓ(ˆŒÜ Ó,ˆŒÜ˜6“NˆŒ	Ù.Ø�I‰IØ�L‰LØ�O‰OØ#'×#3Ñ#3Ø $§¡Ø!%§¡Ø!%§¡Ø#'§<¡<Ø$(§N¡NØ&*§i¡iØô
ˆŒô (Ð(8Ó9ˆŒØ×5Ñ5×CÑCÀDÇNÁNÓSˆ	Ø�|‰|×"Ñ"ˆØ�|‰|×.Ñ.ˆØ˜Ÿ™Ñ&ˆÜ�D˜3‘J ‘? d§l¡l´3°t·~±~Ó3FÑ&FÈÑ%JÑJÓKˆØ˜Ÿ™Ñ$ˆ	Ø˜C‘Z Ñ$ˆ	Ø�n‰n˜TŸ\™\Ñ)ˆØ�)‰mˆØ˜Ÿ™Ñ$ˆ	Ø×3Ñ3×AÑAÀ)ÓLˆØ×2Ñ2×@Ñ@ÀÓKˆØ˜HÑ$ t§v¡v¨h¡Ñ7ˆØ×6Ñ6×DÑDÀTÓJˆ	Ø˜Ÿ™Ñ$ˆØ�S˜‘]Ñ"ˆØ˜Ÿ™Ñ&ˆ	ä�%‹LœÐ2Ó3Ñ3´CÜÐ)Ó*¬?¸9ÄuÈWÃ~Ñ;UÓ+VÑVó5ñ àñð 	Ôð �—
‘
œH Q¨›N¬X°a¸«^¸D¿F¹FÑ-BÑBÑCÑDÜ�q˜!‹nœx¨¨1›~¬d°4·6±6¸4¿6¹6ÀDÇFÁF¹?Ñ3KÓ.LÑLÑLñNä˜˜A“¤¨!¨Q£°·±Ñ!6Ñ6¸¿
¹
ÑBÜ�q˜!‹nœx¨¨1›~¬d°4·6±6¸4¿6¹6ÀDÇFÁF¹?Ñ3KÓ.LÑLÑLñNñNð �6‰6�D—F‘F‰?ñˆ�r'   c                 óœ  — t        | j                  d«      sJ ‚t        | j                  d«      sJ ‚| j                  j                  | j                  j                  k(  sJ ‚t	        | j
                  | j                  g«      }| j                  j                  |k(  sJ ‚| j                  j                  |k(  sJ ‚t        | j                  j                  t        «      sJ ‚t        | j                  j                  t        «      sJ ‚| j                  j                  j                  dk(  sJ ‚| j                  j                  j                  dk(  sJ ‚y rÖ   )	r   rx   rk   r}   r€   rí   rp   r�   r‚   rƒ   s     r(   r…   z'TestTendonForceExplicit.test_state_varsÌ  rØ   r'   c                 ó†  — t        | j                  d«      sJ ‚t        | j                  d«      sJ ‚| j                  j                  | j                  j                  k(  sJ ‚t	        | j
                  g«      }| j                  j                  |k(  sJ ‚| j                  j                  |k(  sJ ‚t        | j                  j                  t        «      sJ ‚t        | j                  j                  t        «      sJ ‚| j                  j                  j                  dk(  sJ ‚| j                  j                  j                  dk(  sJ ‚y rˆ   r‹   rŒ   s     r(   rŽ   z'TestTendonForceExplicit.test_input_varsØ  r†   r'   c                 ó6  — t        | j                  d«      sJ ‚t        | j                  d«      sJ ‚| j                  j                  | j                  j                  k(  sJ ‚t	        | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  g	«      }| j                  j                  |k(  sJ ‚| j                  j                  |k(  sJ ‚t        | j                  j                  t        «      sJ ‚t        | j                  j                  t        «      sJ ‚| j                  j                  j                  dk(  sJ ‚| j                  j                  j                  dk(  sJ ‚y rÛ   rÝ   r©   s     r(   r«   z&TestTendonForceExplicit.test_constantsä  rÞ   r'   c                 ó  — t        | j                  d«      sJ ‚t        d«      }| j                  j                  |k(  sJ ‚t	        | j                  j                  t
        «      sJ ‚| j                  j                  j                  dk(  sJ ‚y rà   rá   r®   s     r(   r°   zTestTendonForceExplicit.test_Mü  râ   r'   c                 óB  — t        | j                  d«      sJ ‚t        | j                  | j                  g«      }| j                  j
                  |k(  sJ ‚t        | j                  j
                  t        «      sJ ‚| j                  j
                  j                  dk(  sJ ‚y rä   )r   rx   r€   rï   ry   r²   r�   r‚   r³   s     r(   rµ   zTestTendonForceExplicit.test_F  rå   r'   c                 ó*  — t        | j                  d«      sJ ‚t        | j                  | j                  g«      }| j                  j                  «       }t        |t        «      sJ ‚|j                  dk(  sJ ‚t        ||z
  «      t        dd«      k(  sJ ‚y rç   )
r   rx   r€   rï   ry   r·   r�   r‚   r!   r   r¸   s      r(   rº   z TestTendonForceExplicit.test_rhs
  rè   r'   N)r;   r<   r=   rJ   r»   rú   r…   rŽ   r«   r°   rµ   rº   r&   r'   r(   rê   rê   t  sB   „ ð& €V‡^�^˜DÔ!ñBó "ðBòH
8ò
8ò7ò0/ò/ó;r'   rê   c                   óÌ  — e Zd Zed„ «       Zed„ «       Z ej                  d¬«      d„ «       Zd„ Z	ej                  j                  dd ed	«      f ed
«       ed
«      f edd«       edd«      f ed«       ed«      fg«      d„ «       Zej                  j                  dd ed«      f ed«       ed«      f ed«       ed«      f ed«       ed«      fg«      d„ «       Zej                  j                  dd ed«      f ed«       ed«      f edd«       edd«      f ed«       ed«      fg«      d„ «       Zej                  j                  dd ed«      f ed«       ed«      f ed«       ed«      f ed«       ed«      fg«      d„ «       Zej                  j                  dd ed «      f ed!«       ed!«      f ed"«       ed"«      f ed#«       ed#«      fg«      d$„ «       Zej                  j                  d%d ed&«      f ed'«       ed'«      f ed"«       ed"«      f edd«       edd«      f ed#«       ed#«      fg«      d(„ «       Zd)„ Zd*„ Zd+„ Zd,„ Zd-„ Zy).ÚTestMusculotendonDeGroote2016c                  ó†   — t        t        t        «      sJ ‚t        t        t        «      sJ ‚t        j                  dk(  sJ ‚y )Nr   )rC   r   r   r   r;   r&   r'   r(   rH   z(TestMusculotendonDeGroote2016.test_class  s9   € äÔ3´]ÔCÐCÐCÜÔ3´[ÔAÐAÐAÜ(×1Ñ1Ð5PÒPÐPÑPr'   c                  ó®  — t        d«      } t        d«      }|j                  | t        d«      t        d«      j                  z  «       t        | |«      }t        d«      }t        d«      }t        d«      }t        d«      }t        d	«      }t        d
«      }t        d«      }	t        d||t        j                  ||||||	¬«
      }
t        |
t        «      sJ ‚y )NrX   rY   rW   rV   rU   rZ   r[   r\   r]   r^   r_   r`   )r    rj   r   r   rk   r   r   r   r   r   r%   r�   )rh   ri   rl   rm   rZ   r[   r\   r]   r^   r_   rx   s              r(   Útest_instancez+TestMusculotendonDeGroote2016.test_instance  sË   € ä�t“ˆÜ˜$“Kˆ	Ø×Ñ˜&¤.°Ó"5´nÀSÓ6I×6KÑ6KÑ"KÔLÜ ¨	Ó2ˆÜ5°fÓ=ˆ
Ü˜;Ó'ˆ	Ü˜Ó#ˆÜ˜Ó#ˆÜ˜Ó#ˆÜ˜;Ó'ˆ	Ü�f‹~ˆÜ,ØØØÜ#;×#HÑ#HØ )Ø!(Ø!(Ø#*Ø$-Ø&*ô
ˆô ˜(Ô$=Ô>Ð>Ñ>r'   TrR   c                 ó^  — d| _         t        d«      | _        t        d«      | _        t        d«      | _        t        d«      | _        | j                  j                  | j                  | j                  | j                  j                  z  «       t        | j                  | j                  «      | _        t        | j                   «      | _        t        d«      | _        t        d«      | _        t        d«      | _        t        d	«      | _        t        d
«      | _        t        d«      | _        y )NrU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   )rU   r   rV   r   rW   r    rh   ri   rj   rk   r   rl   r   rm   r   rZ   r[   r\   r]   r^   r_   )rz   s    r(   Ú_musculotendon_fixturez4TestMusculotendonDeGroote2016._musculotendon_fixture6  sÌ   € àˆŒ	Ü Ó$ˆŒÜ Ó$ˆŒÜ˜D“kˆŒÜ˜t›ˆŒØ�‰×Ñ˜tŸ{™{¨D¯F©F°4·6±6·8±8©OÔ<Ü$ T§[¡[°$·.±.ÓAˆŒÜ:¸4¿9¹9ÓEˆŒÜ Ó,ˆŒÜ˜iÓ(ˆŒÜ˜iÓ(ˆŒÜ˜iÓ(ˆŒÜ Ó,ˆŒÜ˜6“Nˆ�	r'   c           	      ód  — t        d«      }t        d«      }|j                  |t        d«      t        d«      j                  z  «       t        ||«      }t        d«      }t        d«      }t        d«      }t        d«      }t        d	«      }t        d
«      }	t        d«      }
t        j                  d||t        j                  |||¬«      }|j                  |k(  sJ ‚|j                  |k(  sJ ‚|j                  |k(  sJ ‚|j                   |k(  sJ ‚|j"                  |	k(  sJ ‚|j$                  |
k(  sJ ‚y )NrX   rY   rW   rV   rU   rZ   r[   r\   ú10.0z0.0ú0.1)ra   rb   rc   rd   )r    rj   r   r   rk   r   r   r   r   r   rÇ   r   r%   rb   rc   rd   re   rf   rg   )rz   rh   ri   rl   rm   rZ   r[   r\   r]   r^   r_   rx   s               r(   Útest_with_defaultsz0TestMusculotendonDeGroote2016.test_with_defaultsG  s-  € Ü�t“ˆÜ˜$“Kˆ	Ø×Ñ˜&¤.°Ó"5´nÀSÓ6I×6KÑ6KÑ"KÔLÜ ¨	Ó2ˆÜ5°fÓ=ˆ
Ü˜;Ó'ˆ	Ü˜Ó#ˆÜ˜Ó#ˆÜ˜“-ˆÜ˜%“Lˆ	Ü�U‹|ˆÜ,×:Ñ:ØØØÜ#;×#HÑ#HØ )Ø!(Ø!(ô
ˆð ×+Ñ+¨yÒ8Ð8Ð8Ø×,Ñ,°Ò7Ð7Ð7Ø×,Ñ,°Ò7Ð7Ð7Ø×.Ñ.°'Ò9Ð9Ð9Ø×/Ñ/°9Ò<Ð<Ð<Ø×1Ñ1°TÒ9Ð9Ñ9r'   zl_T_slack, expectedNÚl_T_slack_namerZ   r+   r0   z0.5c                 ó.  — t        | j                  | j                  | j                  t        j
                  || j                  | j                  | j                  | j                  | j                  ¬«
      }|j                  |k(  sJ ‚|j                  |k(  sJ ‚y ©Nr`   )r   rU   rl   rm   r   r%   r[   r\   r]   r^   r_   rZ   rb   )rz   rZ   Úexpectedrx   s       r(   Útest_tendon_slack_lengthz6TestMusculotendonDeGroote2016.test_tendon_slack_lengthc  s|   € ô -Ø�I‰IØ�L‰LØ�O‰OÜ#;×#HÑ#HØ )Ø!%§¡Ø!%§¡Ø#'§<¡<Ø$(§N¡NØ&*§i¡iô
ˆð ×!Ñ! XÒ-Ð-Ð-Ø×+Ñ+¨xÒ7Ð7Ñ7r'   zF_M_max, expectedÚF_M_max_namer[   iè  z1000.0c                 ó.  — t        | j                  | j                  | j                  t        j
                  | j                  || j                  | j                  | j                  | j                  ¬«
      }|j                  |k(  sJ ‚|j                  |k(  sJ ‚y r  )r   rU   rl   rm   r   r%   rZ   r\   r]   r^   r_   r[   rc   )rz   r[   r  rx   s       r(   Útest_peak_isometric_forcez7TestMusculotendonDeGroote2016.test_peak_isometric_force|  s|   € ô -Ø�I‰IØ�L‰LØ�O‰OÜ#;×#HÑ#HØ $§¡Ø!(Ø!%§¡Ø#'§<¡<Ø$(§N¡NØ&*§i¡iô
ˆð ×Ñ 8Ò+Ð+Ð+Ø×,Ñ,°Ò8Ð8Ñ8r'   zl_M_opt, expectedÚl_M_opt_namer\   c                 ó.  — t        | j                  | j                  | j                  t        j
                  | j                  | j                  || j                  | j                  | j                  ¬«
      }|j                  |k(  sJ ‚|j                  |k(  sJ ‚y r  )r   rU   rl   rm   r   r%   rZ   r[   r]   r^   r_   r\   rd   )rz   r\   r  rx   s       r(   Útest_optimal_fiber_lengthz7TestMusculotendonDeGroote2016.test_optimal_fiber_length•  s|   € ô -Ø�I‰IØ�L‰LØ�O‰OÜ#;×#HÑ#HØ $§¡Ø!%§¡Ø!(Ø#'§<¡<Ø$(§N¡NØ&*§i¡iô
ˆð ×Ñ 8Ò+Ð+Ð+Ø×,Ñ,°Ò8Ð8Ñ8r'   zv_M_max, expectedÚv_M_max_namer]   é
   r	  c                 ó.  — t        | j                  | j                  | j                  t        j
                  | j                  | j                  | j                  || j                  | j                  ¬«
      }|j                  |k(  sJ ‚|j                  |k(  sJ ‚y r  )r   rU   rl   rm   r   r%   rZ   r[   r\   r^   r_   r]   re   )rz   r]   r  rx   s       r(   Útest_maximal_fiber_velocityz9TestMusculotendonDeGroote2016.test_maximal_fiber_velocity®  s|   € ô -Ø�I‰IØ�L‰LØ�O‰OÜ#;×#HÑ#HØ $§¡Ø!%§¡Ø!%§¡Ø#*Ø$(§N¡NØ&*§i¡iô
ˆð ×Ñ 8Ò+Ð+Ð+Ø×.Ñ.°(Ò:Ð:Ñ:r'   zalpha_opt, expectedÚalpha_opt_namer^   r   r
  c                 ó.  — t        | j                  | j                  | j                  t        j
                  | j                  | j                  | j                  | j                  || j                  ¬«
      }|j                  |k(  sJ ‚|j                  |k(  sJ ‚y r  )r   rU   rl   rm   r   r%   rZ   r[   r\   r]   r_   r^   rf   )rz   r^   r  rx   s       r(   Útest_optimal_pennation_anglez:TestMusculotendonDeGroote2016.test_optimal_pennation_angleÇ  s|   € ô -Ø�I‰IØ�L‰LØ�O‰OÜ#;×#HÑ#HØ $§¡Ø!%§¡Ø!%§¡Ø#'§<¡<Ø$-Ø&*§i¡iô
ˆð ×!Ñ! XÒ-Ð-Ð-Ø×/Ñ/°8Ò;Ð;Ñ;r'   zbeta, expectedÚ	beta_namer_   c                 ó.  — t        | j                  | j                  | j                  t        j
                  | j                  | j                  | j                  | j                  | j                  |¬«
      }|j                  |k(  sJ ‚|j                  |k(  sJ ‚y r  )r   rU   rl   rm   r   r%   rZ   r[   r\   r]   r^   r_   rg   )rz   r_   r  rx   s       r(   Útest_fiber_damping_coefficientz<TestMusculotendonDeGroote2016.test_fiber_damping_coefficientà  sz   € ô -Ø�I‰IØ�L‰LØ�O‰OÜ#;×#HÑ#HØ $§¡Ø!%§¡Ø!%§¡Ø#'§<¡<Ø$(§N¡NØ&*ô
ˆð �}‰} Ò(Ð(Ð(Ø×1Ñ1°XÒ=Ð=Ñ=r'   c                 ó   — t        | j                  | j                  | j                  «      }t	        |d«      sJ ‚t	        |d«      sJ ‚t        d«      }|j                  |k(  sJ ‚|j                  |k(  sJ ‚|j                  |j                  u sJ ‚y )Nro   rn   Úe_name)r   rU   rl   rm   r   r   ro   rn   )rz   rx   Ú
e_expecteds      r(   Útest_excitationz-TestMusculotendonDeGroote2016.test_excitationú  s‹   € Ü,Ø�I‰IØ�L‰LØ�O‰Oó
ˆô
 �x Ô%Ð%Ð%Ü�x Ô.Ð.Ð.Ü# HÓ-ˆ
Ø�z‰z˜ZÒ'Ð'Ð'Ø×"Ñ" jÒ0Ð0Ð0Ø�z‰z˜X×0Ñ0Ñ0Ð0Ñ0r'   c                 ó.  — t        | j                  | j                  | j                  «      }t	        j
                  t        «      5  d |_        d d d «       t	        j
                  t        «      5  d |_        d d d «       y # 1 sw Y   Œ3xY w# 1 sw Y   y xY wrB   )	r   rU   rl   rm   rJ   rK   ÚAttributeErrorro   rn   ©rz   rx   s     r(   Útest_excitation_is_immutablez:TestMusculotendonDeGroote2016.test_excitation_is_immutable  óy   € Ü,Ø�I‰IØ�L‰LØ�O‰Oó
ˆô
 �]‰]œ>Ó*ñ 	ØˆHŒJ÷	ä�]‰]œ>Ó*ñ 	'Ø"&ˆHÔ÷	'ð 	'÷	ð 	ú÷	'ð 	'úó   ÁA?Á.BÁ?BÂBc                 óì   — t        | j                  | j                  | j                  «      }t	        |d«      sJ ‚t	        |d«      sJ ‚t        d«      }|j                  |k(  sJ ‚|j                  |k(  sJ ‚y )Nrp   rm   Úa_name)r   rU   rl   rm   r   r   rp   )rz   rx   Ú
a_expecteds      r(   Útest_activationz-TestMusculotendonDeGroote2016.test_activation  ss   € Ü,Ø�I‰IØ�L‰LØ�O‰Oó
ˆô
 �x Ô%Ð%Ð%Ü�x Ô.Ð.Ð.Ü# HÓ-ˆ
Ø�z‰z˜ZÒ'Ð'Ð'Ø×"Ñ" jÒ0Ð0Ñ0r'   c                 ó.  — t        | j                  | j                  | j                  «      }t	        j
                  t        «      5  d |_        d d d «       t	        j
                  t        «      5  d |_        d d d «       y # 1 sw Y   Œ3xY w# 1 sw Y   y xY wrB   )r   rU   rl   rm   rJ   rK   r&  rp   r'  s     r(   Útest_activation_is_immutablez:TestMusculotendonDeGroote2016.test_activation_is_immutable  r)  r*  c                 ó"  — t        | j                  | j                  | j                  t        j
                  | j                  | j                  | j                  | j                  | j                  | j                  ¬«
      }d}t        |«      |k(  sJ ‚y )Nr`   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   rU   rl   rm   r   r%   rZ   r[   r\   r]   r^   r_   Úrepr)rz   rx   r  s      r(   Ú	test_reprz'TestMusculotendonDeGroote2016.test_repr)  sr   € Ü,Ø�I‰IØ�L‰LØ�O‰OÜ#;×#HÑ#HØ $§¡Ø!%§¡Ø!%§¡Ø#'§<¡<Ø$(§N¡NØ&*§i¡iô
ˆð.ð 	ô �H‹~ Ò)Ð)Ñ)r'   )r;   r<   r=   r>   rH   r  rJ   r»   r  r  ÚmarkÚparametrizer   r   r   r  r   r  r  r  r  r   r$  r(  r.  r0  r3  r&   r'   r(   r  r    sÿ  „ àñQó ðQð
 ñ?ó ð?ð4 €V‡^�^˜DÔ!ñ#ó "ð#ò :ð8 ‡[�[×ÑØà‘6Ð*Ó+Ð,Ù�KÓ ¡&¨Ó"5Ð6Ù�a˜‹^™X a¨›^Ð,Ù�5‹\™5 ›<Ð(ð		
óñ8óð8ð  ‡[�[×ÑØà‘6˜.Ó)Ð*Ù�IÓ¡ yÓ 1Ð2Ù�T‹]™G D›MÐ*Ù�8‹_™e H›oÐ.ð		
óñ9óð9ð  ‡[�[×ÑØà‘6˜.Ó)Ð*Ù�IÓ¡ yÓ 1Ð2Ù�a˜‹^™X a¨›^Ð,Ù�5‹\™5 ›<Ð(ð		
óñ9óð9ð  ‡[�[×ÑØà‘6˜.Ó)Ð*Ù�IÓ¡ yÓ 1Ð2Ù�R‹[™' "›+Ð&Ù�6‹]™E &›MÐ*ð		
óñ;óð;ð  ‡[�[×ÑØà‘6Ð*Ó+Ð,Ù�KÓ ¡&¨Ó"5Ð6Ù�Q‹Z™ ›Ð$Ù�5‹\™5 ›<Ð(ð		
óñ<óð<ð  ‡[�[×ÑØà‘6˜+Ó&Ð'Ù�F‹^™V F›^Ð,Ù�Q‹Z™ ›Ð$Ù�a˜‹_™h q¨"›oÐ.Ù�5‹\™5 ›<Ð(ð	
ó	ñ>ó	ð>ò 1ò	'ò
1ò	'ó*r'   r  )=Ú__doc__rD   rJ   Ú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#   r@   r4  r5  rQ   rÄ   rê   r  r&   r'   r(   ú<module>rI     sm  ðÙ Kã 
ã å +ß 7Ñ 7Ý $Ý 6Ý 6Ý 9Ý 8ß IÑ Iõ÷	÷ 	ó 	÷ñ õ
 :Ý :Ý 9Ý 5Ý 9Ý ,Ý ,÷Cñ C÷6$ñ $ð$ ‡�×ÑÐ1Ð4MÐ3NÓO÷E8ð E8ó PðE8ðP ‡�×ÑØ#ð &Ù)Ø$AØ,PØ+NØ3]Ø*LØ%CØ-Rôð	
ðó÷"@;ð @;ó#ð"@;ðF ‡�×ÑØ#ð &Ù)Ø$AØ,PØ+NØ3]Ø*LØ%CØ-Rôð	
ðó÷"K;ð K;ó#ð"K;÷\r*ò r*r'   