§
    OŠtjŠ€  ã                   óÖ  — 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j7         8                    de%g¦  «         G d„ d¦  «        ¦   «         Z9ej7         8                    de% ee!e"eeeee ¬¦  «        fg¦  «         G d„ d¦  «        ¦   «         Z:ej7         8                    de% ee!e"eeeee ¬¦  «        fg¦  «         G d „ d!¦  «        ¦   «         Z; G d"„ d#¦  «        Z<dS )$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dS )ÚTestMusculotendonFormulationc                  óT   — t          d¦  «        dk    sJ ‚t           j        dk    sJ ‚d S )Nr   )r   ÚRIGID_TENDON© ó    úq/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/physics/biomechanics/tests/test_musculotendon.pyÚtest_rigid_tendon_memberz5TestMusculotendonFormulation.test_rigid_tendon_member+   s5   € å'¨Ñ*Ô*¨aÒ/Ð/Ð/Ð/Ý'Ô4¸Ò9Ð9Ð9Ð9Ð9Ð9r'   c                  óT   — t          d¦  «        dk    sJ ‚t           j        dk    sJ ‚d S )Né   )r   ÚFIBER_LENGTH_EXPLICITr&   r'   r(   Ú!test_fiber_length_explicit_memberz>TestMusculotendonFormulation.test_fiber_length_explicit_member0   ó5   € å'¨Ñ*Ô*¨aÒ/Ð/Ð/Ð/Ý'Ô=ÀÒBÐBÐBÐBÐBÐBr'   c                  óT   — t          d¦  «        dk    sJ ‚t           j        dk    sJ ‚d S )Né   )r   ÚTENDON_FORCE_EXPLICITr&   r'   r(   Ú!test_tendon_force_explicit_memberz>TestMusculotendonFormulation.test_tendon_force_explicit_member5   r.   r'   c                  óT   — t          d¦  «        dk    sJ ‚t           j        dk    sJ ‚d S )Né   )r   ÚFIBER_LENGTH_IMPLICITr&   r'   r(   Ú!test_fiber_length_implicit_memberz>TestMusculotendonFormulation.test_fiber_length_implicit_member:   r.   r'   c                  óT   — t          d¦  «        dk    sJ ‚t           j        dk    sJ ‚d S )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#   *   s§   € € € € € Øð:ð :ñ „\ð:ð ðCð Cñ „\ðCð ðCð Cñ „\ðCð ðCð Cñ „\ðCð ðCð Cñ „\ðCð Cð Cr'   r#   c                   óP   — e Zd Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         ZdS )ÚTestMusculotendonBasec                  óH   — t          t          t          j        ¦  «        sJ ‚d S ©N)Ú
issubclassr   ÚabcÚABCr&   r'   r(   Útest_is_abstract_base_classz1TestMusculotendonBase.test_is_abstract_base_classG   s!   € åÕ+­S¬WÑ5Ô5Ð5Ð5Ð5Ð5Ð5r'   c                  óš   — t          t          t          ¦  «        sJ ‚t          t          t          ¦  «        sJ ‚t          j        dk    sJ ‚d S )Nr   )rC   r   r   r   r;   r&   r'   r(   Ú
test_classz TestMusculotendonBase.test_classK   sK   € åÕ+­]Ñ;Ô;Ð;Ð;Ð;ÝÕ+­[Ñ9Ô9Ð9Ð9Ð9Ý Ô)Ð-@Ò@Ð@Ð@Ð@Ð@Ð@r'   c                  ó†   — t          j        t          ¦  «        5  t          ¦   «         } d d d ¦  «         d S # 1 swxY w Y   d S rB   )ÚpytestÚraisesÚ	TypeErrorr   )Ú_s    r(   Ú test_cannot_instantiate_directlyz6TestMusculotendonBase.test_cannot_instantiate_directlyQ   s�   € åŒ]�9Ñ%Ô%ð 	$ð 	$Ý!Ñ#Ô#ˆAð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð 	$ð 	$s   š6¶:½:N)r;   r<   r=   r>   rF   rH   rN   r&   r'   r(   r@   r@   E   sf   € € € € € àð6ð 6ñ „\ð6ð ðAð Añ „\ðAð
 ð$ð $ñ „\ð$ð $ð $r'   r@   Úmusculotendon_concretec                   óf   — e Zd Z ej        d¬¦  «        d„ ¦   «         Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )ÚTestMusculotendonRigidTendonT©Úautousec                 óî  — d| _         t          d¦  «        | _        t          d¦  «        | _        t          d¦  «        | _        t          d¦  «        | _        | j                             | j        | j        | j        j	        z  ¦  «         t          | j        | j        ¦  «        | _        t          | j         ¦  «        | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        t.          j        | _        t5          d¦  «        | _        t5          d¦  «        | _        t5          d¦  «        | _        t5          d	¦  «        | _        t5          d
¦  «        | _        t5          d¦  «        | _          || j         | j        | j        | j        | j        | j        | 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  | _$        d S )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   s]  € àˆŒ	Ý Ñ$Ô$ˆŒÝ Ñ$Ô$ˆŒÝ˜D‘k”kˆŒÝ˜t™œˆŒØŒ×Ò˜tœ{¨D¬F°4´6´8©OÑ<Ô<Ð<Ý$ T¤[°$´.ÑAÔAˆŒÝ:¸4¼9ÑEÔEˆŒØ”Ô+ˆŒØ”Ô+ˆŒØ”_Ô=ˆŒ
Ø”_Ô?ˆŒ
Ø”Ô/ˆŒÝ3Ô@ˆÔÝ Ñ,Ô,ˆŒÝ˜iÑ(Ô(ˆŒÝ˜iÑ(Ô(ˆŒÝ˜iÑ(Ô(ˆŒÝ Ñ,Ô,ˆŒÝ˜6‘N”NˆŒ	Ø.Ð.ØŒIØŒLØŒOØ#'Ô#3Ø $¤Ø!%¤Ø!%¤Ø#'¤<Ø$(¤NØ&*¤ið
ñ 
ô 
ˆŒð �”
�H Q¨™NœN­X°a¸©^¬^¸D¼FÑ-BÑBÑCÑDÝ�q˜!‰nŒn�x¨¨1™~œ~­d°4´6¸4¼6ÀDÄF¹?Ñ3KÑ.LÔ.LÑLÑLñNå˜˜A‘”¥¨!¨Q¡¤°´Ñ!6Ñ6¸¼
ÑBÝ�q˜!‰nŒn�x¨¨1™~œ~­d°4´6¸4¼6ÀDÄF¹?Ñ3KÑ.LÔ.LÑLÑLñNñNð Œ6�D”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 ‚d S )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Ð3Ð3ØŒ}Œ $¤-Ô":Ò:Ð:Ð:Ð:Ý˜TœV˜HÑ%Ô%ˆ
ØŒ}Œ *Ò,Ð,Ð,Ð,ØŒ}Ô'¨:Ò5Ð5Ð5Ð5Ý˜$œ-œ/­6Ñ2Ô2Ð2Ð2Ð2Ý˜$œ-Ô2µFÑ;Ô;Ð;Ð;Ð;ØŒ}ŒÔ$¨Ò.Ð.Ð.Ð.ØŒ}Ô'Ô-°Ò7Ð7Ð7Ð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 ‚d S ©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 ‚d S )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Ð2Ð2ØŒ}Œ $¤-Ô"9Ò9Ð9Ð9Ð9Ýð Ø”ð à”ð ð ”ð ð ”ð	 ð
 ”ð ð ”	ð ð ”
ð ð ”
ð ð ”ð õ �Ñ'Ô'ð õ �Ñ'Ô'ð õ �Ñ'Ô'ð õ �Ñ'Ô'ð õ Ð*Ñ+Ô+ð õ Ð*Ñ+Ô+ð õ  Ð*Ñ+Ô+ð! õ" Ð*Ñ+Ô+ð# õ$ Ð*Ñ+Ô+ð% õ& Ð*Ñ+Ô+ð' õ( Ð*Ñ+Ô+ð) õ* Ð*Ñ+Ô+ð+ õ, Ð*Ñ+Ô+ð- õ. Ð*Ñ+Ô+ð/ õ0 Ð*Ñ+Ô+ð1 õ2 Ð*Ñ+Ô+ð3 õ4 Ð+Ñ,Ô,ð5 õ6 Ð+Ñ,Ô,ð7 õ8 �Ñ'Ô'ð9 õ: �Ñ'Ô'ð; õ< �Ñ'Ô'ð= õ> �Ñ'Ô'ð? ñ"
ô "
ˆ
ðF Œ}Œ *Ò,Ð,Ð,Ð,ØŒ}Ô&¨*Ò4Ð4Ð4Ð4Ý˜$œ-œ/­6Ñ2Ô2Ð2Ð2Ð2Ý˜$œ-Ô1µ6Ñ:Ô:Ð:Ð:Ð:ØŒ}ŒÔ$¨Ò/Ð/Ð/Ð/ØŒ}Ô&Ô,°Ò7Ð7Ð7Ð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 ‚d S )NÚMr+   r~   )r   rx   r€   r­   r�   r‚   ©rz   Ú
M_expecteds     r(   Útest_Mz#TestMusculotendonRigidTendon.test_MÉ   st   € Ý�t”} cÑ*Ô*Ð*Ð*Ð*Ý˜Q˜C‘[”[ˆ
ØŒ}Œ *Ò,Ð,Ð,Ð,Ý˜$œ-œ/­6Ñ2Ô2Ð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 ‚d S )NÚFr~   )r   rx   r€   ry   r²   r�   r‚   ©rz   Ú
F_expecteds     r(   Útest_Fz#TestMusculotendonRigidTendon.test_FÐ   sx   € Ý�t”} cÑ*Ô*Ð*Ð*Ð*Ý˜Tœ\˜NÑ+Ô+ˆ
ØŒ}Œ *Ò,Ð,Ð,Ð,Ý˜$œ-œ/­6Ñ2Ô2Ð2Ð2Ð2ØŒ}ŒÔ$¨Ò.Ð.Ð.Ð.Ð.Ð.r'   c                 ó"  — t          | j        d¦  «        sJ ‚t          | j        g¦  «        }| j                             ¦   «         }t          |t          ¦  «        sJ ‚|j        dk    sJ ‚t          ||z
  ¦  «        t          d¦  «        k    sJ ‚d S )NÚrhsr~   r+   )	r   rx   r€   ry   r·   r�   r‚   r!   r   ©rz   Úrhs_expectedr·   s      r(   Útest_rhsz%TestMusculotendonRigidTendon.test_rhs×   s‘   € Ý�t”} eÑ,Ô,Ð,Ð,Ð,Ý˜tœ|˜nÑ-Ô-ˆØŒm×ÒÑ!Ô!ˆÝ˜#�vÑ&Ô&Ð&Ð&Ð&ØŒy˜FÒ"Ð"Ð"Ð"Ý˜˜lÑ*Ñ+Ô+­u°Q©x¬xÒ7Ð7Ð7Ð7Ð7Ð7r'   N)r;   r<   r=   rJ   Úfixturer{   r…   rŽ   r«   r°   rµ   rº   r&   r'   r(   rQ   rQ   W   s›   € € € € € ð €V„^˜DÐ!Ñ!Ô!ð&ð &ñ "Ô!ð&ðP
8ð 
8ð 
8ð
8ð 
8ð 
8ð,8ð ,8ð ,8ð\/ð /ð /ð/ð /ð /ð8ð 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                   óf   — e Zd Z ej        d¬¦  «        d„ ¦   «         Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )ÚTestFiberLengthExplicitTrR   c                 ó(  — d| _         t          d¦  «        | _        t          d¦  «        | _        t          d¦  «        | _        t          d¦  «        | _        | j                             | j        | j        | j        j	        z  ¦  «         t          | j        | j        ¦  «        | _        t          | j         ¦  «        | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        t.          j        | _        t5          d¦  «        | _        t5          d¦  «        | _        t5          d¦  «        | _        t5          d	¦  «        | _        t5          d
¦  «        | _        t5          d¦  «        | _          || j         | j        | j        | j        | j        | j        | j        | j        | j        | j         d¬¦  «        | _!        t          d¦  «        | _"        | j        j#        }| j"        | j        z  }|tI          |dz  | j        tK          | j        ¦  «        z  dz  z
  ¦  «        z
  }|j&         '                    || j        z  ¦  «        }|j(         '                    | j"        ¦  «        }|j)         '                    | j"        ¦  «        }|j*         '                    || j        z  ||z
  |z  z  | j        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  | _.        d S )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ó   sj  € ð ˆŒ	Ý Ñ$Ô$ˆŒÝ Ñ$Ô$ˆŒÝ˜D‘k”kˆŒÝ˜t™œˆŒØŒ×Ò˜tœ{¨D¬F°4´6´8©OÑ<Ô<Ð<Ý$ T¤[°$´.ÑAÔAˆŒÝ:¸4¼9ÑEÔEˆŒØ”Ô+ˆŒØ”Ô+ˆŒØ”_Ô=ˆŒ
Ø”_Ô?ˆŒ
Ø”Ô/ˆŒÝ3ÔIˆÔÝ Ñ,Ô,ˆŒÝ˜iÑ(Ô(ˆŒÝ˜iÑ(Ô(ˆŒÝ˜iÑ(Ô(ˆŒÝ Ñ,Ô,ˆŒÝ˜6‘N”NˆŒ	Ø.Ð.ØŒIØŒLØŒOØ#'Ô#3Ø $¤Ø!%¤Ø!%¤Ø#'¤<Ø$(¤NØ&*¤iØð
ñ 
ô 
ˆŒõ (Ð(8Ñ9Ô9ˆŒØŒ|Ô"ˆØŒn˜Tœ\Ñ)ˆØ•T˜#˜q™& D¤Lµ°T´^Ñ1DÔ1DÑ$DÀqÑ#HÑHÑIÔIÑIˆØÔ(×6Ò6°s¸4¼>Ñ7IÑJÔJˆØÔ3×AÒAÀ$Ä.ÑQÔQˆØÔ2×@Ò@ÀÄÑPÔPˆØÔ6×DÒDØ�T”\Ñ! T¨C¡Z°Ñ$4Ñ5°t´|ÑCÀxÑOØŒf�X‰oññ
ô 
ˆ	ð !%¤¨T¬\Ñ 9¸9ÑDˆÔà�”
�H Q¨™NœN­X°a¸©^¬^¸D¼FÑ-BÑBÑCÑDÝ�q˜!‰nŒn�x¨¨1™~œ~­d°4´6¸4¼6ÀDÄF¹?Ñ3KÑ.LÔ.LÑLÑLñNå˜˜A‘”¥¨!¨Q¡¤°´Ñ!6Ñ6¸¼
ÑBÝ�q˜!‰nŒn�x¨¨1™~œ~­d°4´6¸4¼6ÀDÄF¹?Ñ3KÑ.LÔ.LÑLÑLñNñNð Œ6�D”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 ‚d S ©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Ð3Ð3ØŒ}Œ $¤-Ô":Ò:Ð:Ð:Ð:Ý˜Tœ^¨T¬VÐ4Ñ5Ô5ˆ
ØŒ}Œ *Ò,Ð,Ð,Ð,ØŒ}Ô'¨:Ò5Ð5Ð5Ð5Ý˜$œ-œ/­6Ñ2Ô2Ð2Ð2Ð2Ý˜$œ-Ô2µFÑ;Ô;Ð;Ð;Ð;ØŒ}ŒÔ$¨Ò.Ð.Ð.Ð.ØŒ}Ô'Ô-°Ò7Ð7Ð7Ð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 ‚d S rˆ   r‹   rŒ   s     r(   rŽ   z'TestFiberLengthExplicit.test_input_vars9  r†   r'   c                 óL  — 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 ‚d S ©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  ó&  € Ý�t”} cÑ*Ô*Ð*Ð*Ð*Ý�t”} kÑ2Ô2Ð2Ð2Ð2ØŒ}Œ $¤-Ô"9Ò9Ð9Ð9Ð9Ýà”Ø”Ø”Ø”Ø”Ø”	Ø”
Ø”
Ø”ð
ñ
ô 
ˆ
ð Œ}Œ *Ò,Ð,Ð,Ð,ØŒ}Ô&¨*Ò4Ð4Ð4Ð4Ý˜$œ-œ/­6Ñ2Ô2Ð2Ð2Ð2Ý˜$œ-Ô1µ6Ñ:Ô:Ð:Ð:Ð:ØŒ}ŒÔ$¨Ò.Ð.Ð.Ð.ØŒ}Ô&Ô,°Ò6Ð6Ð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 ‚d S ©Nr­   r0   )r0   r0   ©r   rx   r   r­   r�   r€   r‚   r®   s     r(   r°   zTestFiberLengthExplicit.test_M]  ór   € Ý�t”} cÑ*Ô*Ð*Ð*Ð*Ý˜‘V”Vˆ
ØŒ}Œ *Ò,Ð,Ð,Ð,Ý˜$œ-œ/­6Ñ2Ô2Ð2Ð2Ð2ØŒ}ŒÔ$¨Ò.Ð.Ð.Ð.Ð.Ð.r'   c                 óþ   — 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 ‚d S ©Nr²   r×   )r   rx   r€   rË   ry   r²   r�   r‚   r³   s     r(   rµ   zTestFiberLengthExplicit.test_Fd  ó~   € Ý�t”} cÑ*Ô*Ð*Ð*Ð*Ý˜TÔ1°4´<Ð@ÑAÔAˆ
ØŒ}Œ *Ò,Ð,Ð,Ð,Ý˜$œ-œ/­6Ñ2Ô2Ð2Ð2Ð2ØŒ}ŒÔ$¨Ò.Ð.Ð.Ð.Ð.Ð.r'   c                 ó0  — t          | j        d¦  «        sJ ‚t          | j        | j        g¦  «        }| j                             ¦   «         }t          |t          ¦  «        sJ ‚|j        dk    sJ ‚t          ||z
  ¦  «        t          dd¦  «        k    sJ ‚d S ©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°T´\ÐBÑCÔCˆØŒm×ÒÑ!Ô!ˆÝ˜#�vÑ&Ô&Ð&Ð&Ð&ØŒ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ñ "Ô!ð7ðr
8ð 
8ð 
8ð
8ð 
8ð 
8ð7ð 7ð 7ð0/ð /ð /ð/ð /ð /ð;ð ;ð ;ð ;ð ;r'   rÄ   c                   óf   — e Zd Z ej        d¬¦  «        d„ ¦   «         Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )ÚTestTendonForceExplicitTrR   c                 ó 	  — d| _         t          d¦  «        | _        t          d¦  «        | _        t          d¦  «        | _        t          d¦  «        | _        | j                             | j        | j        | j        j	        z  ¦  «         t          | j        | j        ¦  «        | _        t          | j         ¦  «        | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        t.          j        | _        t5          d¦  «        | _        t5          d¦  «        | _        t5          d¦  «        | _        t5          d	¦  «        | _        t5          d
¦  «        | _        t5          d¦  «        | _          || j         | j        | j        | j        | j        | j        | j        | j        | j        | j         d¬¦  «        | _!        t          d¦  «        | _"        |j#         $                    | j"        ¦  «        }| j        j%        }| j        j&        }|| j        z  }tO          ||z
  dz  | j        tQ          | j        ¦  «        z  dz  z   ¦  «        }|| j        z  }||z
  |z  }	| j"        | j        z  }
|
|	z  }|| j        z  }|j)         $                    |¦  «        }|j*         $                    |¦  «        }||z
  | j        |z  z  }|j+         $                    |¦  «        }|| j        z  }|||	z  z
  }|| j        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        d S )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”kˆŒÝ˜t™œˆŒØŒ×Ò˜tœ{¨D¬F°4´6´8©OÑ<Ô<Ð<Ý$ T¤[°$´.ÑAÔAˆŒÝ:¸4¼9ÑEÔEˆŒØ”Ô+ˆŒØ”Ô+ˆŒØ”_Ô=ˆŒ
Ø”_Ô?ˆŒ
Ø”Ô/ˆŒÝ3ÔIˆÔÝ Ñ,Ô,ˆŒÝ˜iÑ(Ô(ˆŒÝ˜iÑ(Ô(ˆŒÝ˜iÑ(Ô(ˆŒÝ Ñ,Ô,ˆŒÝ˜6‘N”NˆŒ	Ø.Ð.ØŒIØŒLØŒOØ#'Ô#3Ø $¤Ø!%¤Ø!%¤Ø#'¤<Ø$(¤NØ&*¤iØð
ñ 
ô 
ˆŒõ (Ð(8Ñ9Ô9ˆŒØÔ5×CÒCÀDÄNÑSÔSˆ	ØŒ|Ô"ˆØŒ|Ô.ˆØ˜œÑ&ˆÝ�D˜3‘J ‘? d¤lµ3°t´~Ñ3FÔ3FÑ&FÈÑ%JÑJÑKÔKˆØ˜œÑ$ˆ	Ø˜C‘Z Ñ$ˆ	ØŒn˜Tœ\Ñ)ˆØ�)‰mˆØ˜œÑ$ˆ	ØÔ3×AÒAÀ)ÑLÔLˆØÔ2×@Ò@ÀÑKÔKˆØ˜HÑ$ t¤v¨h¡Ñ7ˆØÔ6×DÒDÀTÑJÔJˆ	Ø˜œÑ$ˆØ�S˜‘]Ñ"ˆØ˜œÑ&ˆ	å�%‰LŒL�Ð2Ñ3Ô3Ñ3µCÝÐ)Ñ*Ô*­?¸9ÅuÈWÁ~Ä~Ñ;UÑ+VÔ+VÑVñ5ô 5ñ àñð 	Ôð �”
�H Q¨™NœN­X°a¸©^¬^¸D¼FÑ-BÑBÑCÑDÝ�q˜!‰nŒn�x¨¨1™~œ~­d°4´6¸4¼6ÀDÄF¹?Ñ3KÑ.LÔ.LÑLÑLñNå˜˜A‘”¥¨!¨Q¡¤°´Ñ!6Ñ6¸¼
ÑBÝ�q˜!‰nŒn�x¨¨1™~œ~­d°4´6¸4¼6ÀDÄF¹?Ñ3KÑ.LÔ.LÑLÑLñNñNð Œ6�D”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 ‚d S 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 ‚d S rˆ   r‹   rŒ   s     r(   rŽ   z'TestTendonForceExplicit.test_input_varsØ  r†   r'   c                 óL  — 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 ‚d S 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 ‚d S rà   rá   r®   s     r(   r°   zTestTendonForceExplicit.test_Mü  râ   r'   c                 óþ   — 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 ‚d S rä   )r   rx   r€   rï   ry   r²   r�   r‚   r³   s     r(   rµ   zTestTendonForceExplicit.test_F  rå   r'   c                 ó0  — t          | j        d¦  «        sJ ‚t          | j        | j        g¦  «        }| j                             ¦   «         }t          |t          ¦  «        sJ ‚|j        dk    sJ ‚t          ||z
  ¦  «        t          dd¦  «        k    sJ ‚d S 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  s�   € € € € € ð& €V„^˜DÐ!Ñ!Ô!ðBð Bñ "Ô!ðBðH
8ð 
8ð 
8ð
8ð 
8ð 
8ð7ð 7ð 7ð0/ð /ð /ð/ð /ð /ð;ð ;ð ;ð ;ð ;r'   rê   c                   óü  — e Zd Zed„ ¦   «         Zed„ ¦   «         Z ej        d¬¦  «        d„ ¦   «         Zd„ Z	e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
                             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
                             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
                             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
                             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
                             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dS ).ÚTestMusculotendonDeGroote2016c                  óš   — t          t          t          ¦  «        sJ ‚t          t          t          ¦  «        sJ ‚t          j        dk    sJ ‚d S )Nr   )rC   r   r   r   r;   r&   r'   r(   rH   z(TestMusculotendonDeGroote2016.test_class  sK   € åÕ3µ]ÑCÔCÐCÐCÐCÝÕ3µ[ÑAÔAÐAÐAÐAÝ(Ô1Ð5PÒPÐPÐPÐPÐPÐPr'   c                  ó  — t          d¦  «        } t          d¦  «        }|                     | 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 ‚d S )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”Kˆ	Ø×Ò˜&¥.°Ñ"5Ô"5µnÀSÑ6IÔ6IÔ6KÑ"KÑLÔLÐLÝ ¨	Ñ2Ô2ˆÝ5°fÑ=Ô=ˆ
Ý˜;Ñ'Ô'ˆ	Ý˜Ñ#Ô#ˆÝ˜Ñ#Ô#ˆÝ˜Ñ#Ô#ˆÝ˜;Ñ'Ô'ˆ	Ý�f‰~Œ~ˆÝ,ØØØÝ#;Ô#HØ )Ø!(Ø!(Ø#*Ø$-Ø&*ð
ñ 
ô 
ˆõ ˜(Õ$=Ñ>Ô>Ð>Ð>Ð>Ð>Ð>r'   TrR   c                 óx  — d| _         t          d¦  «        | _        t          d¦  «        | _        t          d¦  «        | _        t          d¦  «        | _        | j                             | j        | j        | j        j	        z  ¦  «         t          | j        | j        ¦  «        | _        t          | j         ¦  «        | _        t          d¦  «        | _        t          d¦  «        | _        t          d¦  «        | _        t          d	¦  «        | _        t          d
¦  «        | _        t          d¦  «        | _        d S )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”kˆŒÝ˜t™œˆŒØŒ×Ò˜tœ{¨D¬F°4´6´8©OÑ<Ô<Ð<Ý$ T¤[°$´.ÑAÔAˆŒÝ:¸4¼9ÑEÔEˆŒÝ Ñ,Ô,ˆŒÝ˜iÑ(Ô(ˆŒÝ˜iÑ(Ô(ˆŒÝ˜iÑ(Ô(ˆŒÝ Ñ,Ô,ˆŒÝ˜6‘N”NˆŒ	ˆ	ˆ	r'   c           	      óŠ  — t          d¦  «        }t          d¦  «        }|                     |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 ‚d S )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  sY  € Ý�t‘”ˆÝ˜$‘K”Kˆ	Ø×Ò˜&¥.°Ñ"5Ô"5µnÀSÑ6IÔ6IÔ6KÑ"KÑLÔLÐLÝ ¨	Ñ2Ô2ˆÝ5°fÑ=Ô=ˆ
Ý˜;Ñ'Ô'ˆ	Ý˜Ñ#Ô#ˆÝ˜Ñ#Ô#ˆÝ˜‘-”-ˆÝ˜%‘L”Lˆ	Ý�U‰|Œ|ˆÝ,Ô:ØØØÝ#;Ô#HØ )Ø!(Ø!(ð
ñ 
ô 
ˆð Ô+¨yÒ8Ð8Ð8Ð8ØÔ,°Ò7Ð7Ð7Ð7ØÔ,°Ò7Ð7Ð7Ð7ØÔ.°'Ò9Ð9Ð9Ð9ØÔ/°9Ò<Ð<Ð<Ð<ØÔ1°TÒ9Ð9Ð9Ð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 ‚d S ©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  sy   € õ -ØŒIØŒLØŒOÝ#;Ô#HØ )Ø!%¤Ø!%¤Ø#'¤<Ø$(¤NØ&*¤ið
ñ 
ô 
ˆð Ô! XÒ-Ð-Ð-Ð-ØÔ+¨xÒ7Ð7Ð7Ð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 ‚d S 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|  sy   € õ -ØŒIØŒLØŒOÝ#;Ô#HØ $¤Ø!(Ø!%¤Ø#'¤<Ø$(¤NØ&*¤ið
ñ 
ô 
ˆð Ô 8Ò+Ð+Ð+Ð+ØÔ,°Ò8Ð8Ð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 ‚d S 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•  sy   € õ -ØŒIØŒLØŒOÝ#;Ô#HØ $¤Ø!%¤Ø!(Ø#'¤<Ø$(¤NØ&*¤ið
ñ 
ô 
ˆð Ô 8Ò+Ð+Ð+Ð+ØÔ,°Ò8Ð8Ð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 ‚d S 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®  sy   € õ -ØŒIØŒLØŒOÝ#;Ô#HØ $¤Ø!%¤Ø!%¤Ø#*Ø$(¤NØ&*¤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 ‚d S 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Ç  sy   € õ -ØŒIØŒLØŒOÝ#;Ô#HØ $¤Ø!%¤Ø!%¤Ø#'¤<Ø$-Ø&*¤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 ‚d S 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à  sx   € õ -ØŒIØŒLØŒOÝ#;Ô#HØ $¤Ø!%¤Ø!%¤Ø#'¤<Ø$(¤NØ&*ð
ñ 
ô 
ˆð Œ} Ò(Ð(Ð(Ð(ØÔ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 ‚d S )Nro   rn   Úe_name)r   rU   rl   rm   r   r   ro   rn   )rz   rx   Ú
e_expecteds      r(   Útest_excitationz-TestMusculotendonDeGroote2016.test_excitationú  sž   € Ý,ØŒIØŒLØŒOñ
ô 
ˆõ
 �x Ñ%Ô%Ð%Ð%Ð%Ý�x Ñ.Ô.Ð.Ð.Ð.Ý# HÑ-Ô-ˆ
ØŒz˜ZÒ'Ð'Ð'Ð'ØÔ" jÒ0Ð0Ð0Ð0ØŒz˜XÔ0Ð0Ð0Ð0Ð0Ð0Ð0r'   c                 ó(  — t          | j        | j        | j        ¦  «        }t	          j        t          ¦  «        5  d |_        d d d ¦  «         n# 1 swxY w Y   t	          j        t          ¦  «        5  d |_        d d d ¦  «         d S # 1 swxY w Y   d S rB   )	r   rU   rl   rm   rJ   rK   ÚAttributeErrorro   rn   ©rz   rx   s     r(   Útest_excitation_is_immutablez:TestMusculotendonDeGroote2016.test_excitation_is_immutable  ó
  € Ý,ØŒIØŒLØŒOñ
ô 
ˆõ
 Œ]�>Ñ*Ô*ð 	ð 	ØˆHŒJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	åŒ]�>Ñ*Ô*ð 	'ð 	'Ø"&ˆHÔð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð 	'ð 	'ó#   ºAÁAÁAÁ2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 ‚d S )Nrp   rm   Úa_name)r   rU   rl   rm   r   r   rp   )rz   rx   Ú
a_expecteds      r(   Útest_activationz-TestMusculotendonDeGroote2016.test_activation  sˆ   € Ý,ØŒIØŒLØŒOñ
ô 
ˆõ
 �x Ñ%Ô%Ð%Ð%Ð%Ý�x Ñ.Ô.Ð.Ð.Ð.Ý# HÑ-Ô-ˆ
ØŒz˜ZÒ'Ð'Ð'Ð'ØÔ" jÒ0Ð0Ð0Ð0Ð0Ð0r'   c                 ó(  — t          | j        | j        | j        ¦  «        }t	          j        t          ¦  «        5  d |_        d d d ¦  «         n# 1 swxY w Y   t	          j        t          ¦  «        5  d |_        d d d ¦  «         d S # 1 swxY w Y   d S 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 ‚d S )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ØŒLØŒOÝ#;Ô#HØ $¤Ø!%¤Ø!%¤Ø#'¤<Ø$(¤NØ&*¤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    sv  € € € € € àðQð Qñ „\ðQð
 ð?ð ?ñ „\ð?ð4 €V„^˜DÐ!Ñ!Ô!ð#ð #ñ "Ô!ð#ð :ð :ð :ð8 „[×ÒØà�6�6Ð*Ñ+Ô+Ð,ØˆV�KÑ Ô  & &¨Ñ"5Ô"5Ð6ØˆX�a˜‰^Œ^˜X˜X a¨™^œ^Ð,ØˆU�5‰\Œ\˜5˜5 ™<œ<Ð(ð		
ñô ð8ð 8ñô ð8ð  „[×ÒØà�6�6˜.Ñ)Ô)Ð*ØˆV�IÑÔ   yÑ 1Ô 1Ð2ØˆW�T‰]Œ]˜G˜G D™MœMÐ*ØˆU�8‰_Œ_˜e˜e H™oœoÐ.ð		
ñô ð9ð 9ñô ð9ð  „[×ÒØà�6�6˜.Ñ)Ô)Ð*ØˆV�IÑÔ   yÑ 1Ô 1Ð2ØˆX�a˜‰^Œ^˜X˜X a¨™^œ^Ð,ØˆU�5‰\Œ\˜5˜5 ™<œ<Ð(ð		
ñô ð9ð 9ñô ð9ð  „[×ÒØà�6�6˜.Ñ)Ô)Ð*ØˆV�IÑÔ   yÑ 1Ô 1Ð2ØˆW�R‰[Œ[˜'˜' "™+œ+Ð&ØˆU�6‰]Œ]˜E˜E &™MœMÐ*ð		
ñô ð;ð ;ñô ð;ð  „[×ÒØà�6�6Ð*Ñ+Ô+Ð,ØˆV�KÑ Ô  & &¨Ñ"5Ô"5Ð6ØˆW�Q‰ZŒZ˜˜ ™œÐ$ØˆU�5‰\Œ\˜5˜5 ™<œ<Ð(ð		
ñô ð<ð <ñô ð<ð  „[×ÒØà�6�6˜+Ñ&Ô&Ð'ØˆV�F‰^Œ^˜V˜V F™^œ^Ð,ØˆW�Q‰ZŒZ˜˜ ™œÐ$ØˆX�a˜‰_Œ_˜h˜h q¨"™oœoÐ.ØˆU�5‰\Œ\˜5˜5 ™<œ<Ð(ð	
ñ	ô 	ð>ð >ñ	ô 	ð>ð 1ð 1ð 1ð	'ð 	'ð 	'ð
1ð 
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     sÿ  ðØ KÐ Kà 
€
€
€
à €€€à +Ð +Ð +Ð +Ð +Ð +Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø $Ð $Ð $Ð $Ð $Ð $Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ Iðð ð ð ð ð ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð ð ð ð ð ð
 :Ð 9Ð 9Ð 9Ð 9Ð 9Ø :Ð :Ð :Ð :Ð :Ð :Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ðCð Cð Cð Cð Cñ Cô Cð Cð6$ð $ð $ð $ð $ñ $ô $ð $ð$ „×ÒÐ1Ð4MÐ3NÑOÔOðE8ð E8ð E8ð E8ð E8ñ E8ô E8ñ PÔOðE8ðP „×ÒØ#ð &Ø)Ð)Ø$AØ,PØ+NØ3]Ø*LØ%CØ-Rðñ ô ð	
ðñô ð"@;ð @;ð @;ð @;ð @;ñ @;ô @;ñ#ô ð"@;ðF „×ÒØ#ð &Ø)Ð)Ø$AØ,PØ+NØ3]Ø*LØ%CØ-Rðñ ô ð	
ðñô ð"K;ð K;ð K;ð K;ð K;ñ K;ô K;ñ#ô ð"K;ð\r*ð r*ð r*ð r*ð r*ñ r*ô r*ð r*ð r*ð r*r'   