U
    ZÊ¹jŠ€  ã                   @   sÔ  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„ dƒZ5G dd„ dƒZ6ej7 8de%g¡G dd„ dƒƒZ9ej7 8de%ee!e"eeeee d�fg¡G dd„ dƒƒZ:ej7 8de%ee!e"eeeee d�fg¡G d d!„ d!ƒƒZ;G d"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                   @   sH   e Zd Zedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZed	d
„ ƒZdS )ÚTestMusculotendonFormulationc                   C   s"   t dƒdkst‚t jdkst‚d S )Nr   )r   ÚAssertionErrorÚRIGID_TENDON© r$   r$   úr/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/physics/biomechanics/tests/test_musculotendon.pyÚtest_rigid_tendon_member+   s    z5TestMusculotendonFormulation.test_rigid_tendon_memberc                   C   s"   t dƒdkst‚t jdkst‚d S )Né   )r   r"   ÚFIBER_LENGTH_EXPLICITr$   r$   r$   r%   Ú!test_fiber_length_explicit_member0   s    z>TestMusculotendonFormulation.test_fiber_length_explicit_memberc                   C   s"   t dƒdkst‚t jdkst‚d S )Né   )r   r"   ÚTENDON_FORCE_EXPLICITr$   r$   r$   r%   Ú!test_tendon_force_explicit_member5   s    z>TestMusculotendonFormulation.test_tendon_force_explicit_memberc                   C   s"   t dƒdkst‚t jdkst‚d S )Né   )r   r"   ZFIBER_LENGTH_IMPLICITr$   r$   r$   r%   Ú!test_fiber_length_implicit_member:   s    z>TestMusculotendonFormulation.test_fiber_length_implicit_memberc                   C   s"   t dƒdkst‚t jdkst‚d S )Né   )r   r"   ZTENDON_FORCE_IMPLICITr$   r$   r$   r%   Ú!test_tendon_force_implicit_member?   s    z>TestMusculotendonFormulation.test_tendon_force_implicit_memberN)	Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr&   r)   r,   r.   r0   r$   r$   r$   r%   r!   *   s   



r!   c                   @   s0   e Zd Zedd„ ƒZedd„ ƒZedd„ ƒZdS )ÚTestMusculotendonBasec                   C   s   t ttjƒst‚d S ©N)Ú
issubclassr   ÚabcÚABCr"   r$   r$   r$   r%   Útest_is_abstract_base_classG   s    z1TestMusculotendonBase.test_is_abstract_base_classc                   C   s.   t ttƒst‚t ttƒst‚tjdks*t‚d S )Nr   )r7   r   r   r"   r   r1   r$   r$   r$   r%   Ú
test_classK   s    z TestMusculotendonBase.test_classc               	   C   s    t  t¡� tƒ } W 5 Q R X d S r6   )ÚpytestÚraisesÚ	TypeErrorr   )Ú_r$   r$   r%   Ú test_cannot_instantiate_directlyQ   s    z6TestMusculotendonBase.test_cannot_instantiate_directlyN)r1   r2   r3   r4   r:   r;   r@   r$   r$   r$   r%   r5   E   s   

r5   Úmusculotendon_concretec                   @   sP   e Zd Zejdd�dd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestMusculotendonRigidTendonT©Zautousec                 C   s¶  d| _ tdƒ| _tdƒ| _tdƒ| _tdƒ| _| j | j| j| jj	 ¡ t
| j| jƒ| _t| j ƒ| _| jj| _| jj| _| jj| _| jj| _| jj| _tj| _tdƒ| _tdƒ| _tdƒ| _td	ƒ| _td
ƒ| _tdƒ| _ || j | j| j| j| j| j| j| j| j| j d�
| _!d| jt"ddƒt"ddƒ| j    t"ddƒt"ddƒt#| j| j| j  ƒ   t"ddƒt"ddƒ| j  | j t"ddƒt"ddƒt#| j| j| j  ƒ    | j| j  | _$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'   r*   r-   )%rD   r   rE   r   rF   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   rI   rJ   rK   rL   rM   rN   Úinstancer   r   Úda_expr)ÚselfrA   r$   r$   r%   Ú#_musculotendon_rigid_tendon_fixtureZ   sR    














ö"(ÿ(ÿþ
ûz@TestMusculotendonRigidTendon._musculotendon_rigid_tendon_fixturec                 C   s¬   t | jdƒst‚t | jdƒs t‚| jj| jjks4t‚t| jgƒ}| jj|ksPt‚| jj|ks`t‚t| jjtƒsrt‚t| jjtƒs„t‚| jjjdks–t‚| jjjdks¨t‚d S )NrZ   Ú
state_vars©r'   r'   )	Úhasattrrg   r"   rZ   rk   ÚMatrixr_   Ú
isinstanceÚshape©ri   Z
x_expectedr$   r$   r%   Útest_state_varsƒ   s    z,TestMusculotendonRigidTendon.test_state_varsc                 C   s¬   t | jdƒst‚t | jdƒs t‚| jj| jjks4t‚t| jgƒ}| jj|ksPt‚| jj|ks`t‚t| jjtƒsrt‚t| jjtƒs„t‚| jjjdks–t‚| jjjdks¨t‚d S ©NÚrÚ
input_varsrl   ©	rm   rg   r"   rt   ru   rn   r^   ro   rp   ©ri   Z
r_expectedr$   r$   r%   Útest_input_vars�   s    z,TestMusculotendonRigidTendon.test_input_varsc              !   C   sZ  t | jdƒst‚t | jdƒs t‚| jj| jjks4t‚t| 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ƒgƒ}| jj|ksôt‚| jj|k�st‚t| jjtƒ�st‚t| jjtƒ�s.t‚| jjjdk�sBt‚| jjjdk�sVt‚d S )NÚpÚ	constantsZc_0_fl_T_nameZc_1_fl_T_nameZc_2_fl_T_nameZc_3_fl_T_nameZc_0_fl_M_pas_nameZc_1_fl_M_pas_nameZc_0_fl_M_act_nameZc_1_fl_M_act_nameZc_2_fl_M_act_nameZc_3_fl_M_act_nameZc_4_fl_M_act_nameZc_5_fl_M_act_nameZc_6_fl_M_act_nameZc_7_fl_M_act_nameZc_8_fl_M_act_nameZc_9_fl_M_act_nameZc_10_fl_M_act_nameZc_11_fl_M_act_nameZc_0_fv_M_nameZc_1_fv_M_nameZc_2_fv_M_nameZc_3_fv_M_name)é   r'   )rm   rg   r"   ry   rz   rn   rI   rJ   rK   rL   rM   rN   ra   rc   re   r   ro   rp   ©ri   Z
p_expectedr$   r$   r%   Útest_constants›   sV    áÿ#z+TestMusculotendonRigidTendon.test_constantsc                 C   sR   t | jdƒst‚tdgƒ}| jj|ks*t‚t| jjtƒs<t‚| jjjdksNt‚d S )NÚMr'   rl   )rm   rg   r"   rn   r~   ro   rp   ©ri   Z
M_expectedr$   r$   r%   Útest_MÉ   s
    
z#TestMusculotendonRigidTendon.test_Mc                 C   sT   t | jdƒst‚t| jgƒ}| jj|ks,t‚t| jjtƒs>t‚| jjjdksPt‚d S )NÚFrl   )rm   rg   r"   rn   rh   r�   ro   rp   ©ri   Z
F_expectedr$   r$   r%   Útest_FÐ   s
    z#TestMusculotendonRigidTendon.test_Fc                 C   s^   t | jdƒst‚t| jgƒ}| j ¡ }t|tƒs4t‚|jdksBt‚t|| ƒt	dƒksZt‚d S )NÚrhsrl   r'   )
rm   rg   r"   rn   rh   r„   ro   rp   r    r   ©ri   Zrhs_expectedr„   r$   r$   r%   Útest_rhs×   s    
z%TestMusculotendonRigidTendon.test_rhsN)r1   r2   r3   r<   Úfixturerj   rr   rx   r}   r€   rƒ   r†   r$   r$   r$   r%   rB   W   s   

(.rB   zmusculotendon_concrete, curve)Útendon_force_lengthÚtendon_force_length_inverseÚfiber_force_length_passiveZ"fiber_force_length_passive_inverseÚfiber_force_length_activeZfiber_force_velocityÚfiber_force_velocity_inversec                   @   sP   e Zd Zejdd�dd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestFiberLengthExplicitTrC   c           
      C   sl  d| _ tdƒ| _tdƒ| _tdƒ| _tdƒ| _| j | j| j| jj	 ¡ t
| j| jƒ| _t| j ƒ| _| jj| _| jj| _| jj| _| jj| _| jj| _tj| _tdƒ| _tdƒ| _tdƒ| _td	ƒ| _td
ƒ| _tdƒ| _ || j | j| j| j| j| j| j| j| j| j dd�| _!tdƒ| _"| jj#}| j"| j }|t$|d | jt%| jƒ d  ƒ }|j& '|| j ¡}|j( '| j"¡}|j) '| j"¡}|j* '|| j || |  | j | | j|  ¡}	| j| j |	 | _+d| jt,ddƒt,ddƒ| j    t,ddƒt,ddƒt-| j| j| j  ƒ   t,ddƒt,ddƒ| j  | j t,ddƒt,ddƒt-| j| j| j  ƒ    | j| j  | _.d S )NrD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   T©rP   rQ   rR   rS   rT   rU   rV   Úwith_defaultsZl_M_tilde_namer*   r'   r-   )/rD   r   rE   r   rF   r   rW   rX   rY   rZ   r   r[   r   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   r   r(   rf   r   rI   rJ   rK   rL   rM   rN   rg   Ú	l_M_tildeÚlengthr	   r
   rˆ   r�   rŠ   r‹   rŒ   Údl_M_tilde_exprr   r   rh   )
ri   rA   ÚcurveÚl_MTÚl_MÚl_TZfl_TÚfl_M_pasÚfl_M_actÚ	v_M_tilder$   r$   r%   Ú,_musculotendon_fiber_length_explicit_fixtureó   sn    














õ
$ÿÿ"(ÿ(ÿþ
ûzDTestFiberLengthExplicit._musculotendon_fiber_length_explicit_fixturec                 C   s°   t | jdƒst‚t | jdƒs t‚| jj| jjks4t‚t| j| jgƒ}| jj|ksTt‚| jj|ksdt‚t| jjtƒsvt‚t| jjtƒsˆt‚| jjj	dksšt‚| jjj	dks¬t‚d S ©NrZ   rk   ©r*   r'   )
rm   rg   r"   rZ   rk   rn   r�   r_   ro   rp   rq   r$   r$   r%   rr   -  s    z'TestFiberLengthExplicit.test_state_varsc                 C   s¬   t | jdƒst‚t | jdƒs t‚| jj| jjks4t‚t| jgƒ}| jj|ksPt‚| jj|ks`t‚t| jjtƒsrt‚t| jjtƒs„t‚| jjjdks–t‚| jjjdks¨t‚d S rs   rv   rw   r$   r$   r%   rx   9  s    z'TestFiberLengthExplicit.test_input_varsc              
   C   sÌ   t | jdƒst‚t | jdƒs t‚| jj| jjks4t‚t| j| j| j| j	| j
| j| j| j| jg	ƒ}| jj|kspt‚| jj|ks€t‚t| jjtƒs’t‚t| jjtƒs¤t‚| jjjdks¶t‚| jjjdksÈt‚d S ©Nry   rz   )é	   r'   ©rm   rg   r"   ry   rz   rn   rI   rJ   rK   rL   rM   rN   ra   rc   re   ro   rp   r|   r$   r$   r%   r}   E  s*    ÷ÿz&TestFiberLengthExplicit.test_constantsc                 C   sP   t | jdƒst‚tdƒ}| jj|ks(t‚t| jjtƒs:t‚| jjjdksLt‚d S ©Nr~   r*   )r*   r*   ©rm   rg   r"   r   r~   ro   rn   rp   r   r$   r$   r%   r€   ]  s
    zTestFiberLengthExplicit.test_Mc                 C   sX   t | jdƒst‚t| j| jgƒ}| jj|ks0t‚t| jjtƒsBt‚| jjjdksTt‚d S ©Nr�   rœ   )	rm   rg   r"   rn   r’   rh   r�   ro   rp   r‚   r$   r$   r%   rƒ   d  s
    zTestFiberLengthExplicit.test_Fc                 C   sd   t | jdƒst‚t| j| jgƒ}| j ¡ }t|tƒs8t‚|jdksFt‚t	|| ƒt
ddƒks`t‚d S ©Nr„   rœ   r*   r'   )rm   rg   r"   rn   r’   rh   r„   ro   rp   r    r   r…   r$   r$   r%   r†   k  s    
z TestFiberLengthExplicit.test_rhsN)r1   r2   r3   r<   r‡   rš   rr   rx   r}   r€   rƒ   r†   r$   r$   r$   r%   r�   à   s   

9r�   c                   @   sP   e Zd Zejdd�dd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestTendonForceExplicitTrC   c                 C   sÊ  d| _ tdƒ| _tdƒ| _tdƒ| _tdƒ| _| j | j| j| jj	 ¡ t
| j| jƒ| _t| j ƒ| _| jj| _| jj| _| jj| _| jj| _| jj| _tj| _tdƒ| _tdƒ| _tdƒ| _td	ƒ| _td
ƒ| _tdƒ| _ || j | j| j| j| j| j| j| j| j| j dd�| _!tdƒ| _"|j# $| j"¡}| jj%}| jj&}|| j }t'|| d | jt(| jƒ d  ƒ}|| j }|| | }	| j"| j }
|
|	 }|| j }|j) $|¡}|j* $|¡}|| | j|  }|j+ $|¡}|| j }|||	  }|| j }t,dƒt,dƒ t-t,dƒt.|t,dƒ ƒ ƒ | | _/d| jt0ddƒt0ddƒ| j    t0ddƒt0ddƒt1| j| j| j  ƒ   t0ddƒt0ddƒ| j  | j t0ddƒt0ddƒt1| j| j| j  ƒ    | j| j  | _2d S )NrD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   TrŽ   ZF_T_tilde_namer*   z0.2z33.93669377311689z0.995r'   r-   )3rD   r   rE   r   rF   r   rW   rX   rY   rZ   r   r[   r   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   r   r+   rf   r   rI   rJ   rK   rL   rM   rN   rg   Ú	F_T_tilder‰   r�   r‘   Zextension_velocityr	   r
   rŠ   r‹   rŒ   r   r   r   ÚdF_T_tilde_exprr   r   rh   )ri   rA   r“   Z	l_T_tilder”   Zv_MTr–   r•   r�   Z	cos_alphaZF_TZF_MZ	F_M_tilder—   r˜   Zfv_Mr™   Zv_MZv_TZ	v_T_tilder$   r$   r%   Ú,_musculotendon_tendon_force_explicit_fixture‡  s„    














õ

$



ÿþÿ"(ÿ(ÿþ
ûzDTestTendonForceExplicit._musculotendon_tendon_force_explicit_fixturec                 C   s°   t | jdƒst‚t | jdƒs t‚| jj| jjks4t‚t| j| jgƒ}| jj|ksTt‚| jj|ksdt‚t| jjtƒsvt‚t| jjtƒsˆt‚| jjj	dksšt‚| jjj	dks¬t‚d S r›   )
rm   rg   r"   rZ   rk   rn   r¥   r_   ro   rp   rq   r$   r$   r%   rr   Ì  s    z'TestTendonForceExplicit.test_state_varsc                 C   s¬   t | jdƒst‚t | jdƒs t‚| jj| jjks4t‚t| jgƒ}| jj|ksPt‚| jj|ks`t‚t| jjtƒsrt‚t| jjtƒs„t‚| jjjdks–t‚| jjjdks¨t‚d S rs   rv   rw   r$   r$   r%   rx   Ø  s    z'TestTendonForceExplicit.test_input_varsc              
   C   sÌ   t | jdƒst‚t | jdƒs t‚| jj| jjks4t‚t| j| j| j| j	| j
| j| j| j| jg	ƒ}| jj|kspt‚| jj|ks€t‚t| jjtƒs’t‚t| jjtƒs¤t‚| jjjdks¶t‚| jjjdksÈt‚d S r�   rŸ   r|   r$   r$   r%   r}   ä  s*    ÷ÿz&TestTendonForceExplicit.test_constantsc                 C   sP   t | jdƒst‚tdƒ}| jj|ks(t‚t| jjtƒs:t‚| jjjdksLt‚d S r    r¡   r   r$   r$   r%   r€   ü  s
    zTestTendonForceExplicit.test_Mc                 C   sX   t | jdƒst‚t| j| jgƒ}| jj|ks0t‚t| jjtƒsBt‚| jjjdksTt‚d S r¢   )	rm   rg   r"   rn   r¦   rh   r�   ro   rp   r‚   r$   r$   r%   rƒ     s
    zTestTendonForceExplicit.test_Fc                 C   sd   t | jdƒst‚t| j| jgƒ}| j ¡ }t|tƒs8t‚|jdksFt‚t	|| ƒt
ddƒks`t‚d S r£   )rm   rg   r"   rn   r¦   rh   r„   ro   rp   r    r   r…   r$   r$   r%   r†   
  s    
z TestTendonForceExplicit.test_rhsN)r1   r2   r3   r<   r‡   r§   rr   rx   r}   r€   rƒ   r†   r$   r$   r$   r%   r¤   t  s   

Dr¤   c                
   @   s>  e Zd Zedd„ ƒZedd„ ƒZejdd�dd„ ƒZd	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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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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%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,d-„ ƒZej
 d.ded/ƒfed0ƒed0ƒfed*ƒed*ƒfedd#ƒedd#ƒfed+ƒed+ƒfg¡d1d2„ ƒZd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ ZdS )=ÚTestMusculotendonDeGroote2016c                   C   s.   t ttƒst‚t ttƒst‚tjdks*t‚d S )Nr   )r7   r   r   r"   r   r1   r$   r$   r$   r%   r;     s    z(TestMusculotendonDeGroote2016.test_classc                  C   sœ   t dƒ} t dƒ}| | tdƒtdƒj ¡ t| |ƒ}tdƒ}tdƒ}tdƒ}tdƒ}td	ƒ}td
ƒ}tdƒ}	td||t	j
||||||	d�
}
t|
tƒs˜t‚d S )NrG   rH   rF   rE   rD   rI   rJ   rK   rL   rM   rN   rO   )r   rY   r   r   rZ   r   r   r   r   r   r#   ro   r"   )rW   rX   r[   r\   rI   rJ   rK   rL   rM   rN   rg   r$   r$   r%   Útest_instance  s0    
öz+TestMusculotendonDeGroote2016.test_instanceTrC   c                 C   s¤   d| _ tdƒ| _tdƒ| _tdƒ| _tdƒ| _| j | j| j| jj	 ¡ t
| j| jƒ| _t| j ƒ| _tdƒ| _tdƒ| _tdƒ| _td	ƒ| _td
ƒ| _tdƒ| _d S )NrD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   )rD   r   rE   r   rF   r   rW   rX   rY   rZ   r   r[   r   r\   r   rI   rJ   rK   rL   rM   rN   )ri   r$   r$   r%   Ú_musculotendon_fixture6  s    








z4TestMusculotendonDeGroote2016._musculotendon_fixturec              	   C   sÞ   t dƒ}t dƒ}| |tdƒtdƒj ¡ t||ƒ}tdƒ}tdƒ}tdƒ}tdƒ}td	ƒ}td
ƒ}	tdƒ}
t	j
d||tj|||d�}|j|ks”t‚|j|ks¢t‚|j|ks°t‚|j|ks¾t‚|j|	ksÌt‚|j|
ksÚt‚d S )NrG   rH   rF   rE   rD   rI   rJ   rK   ú10.0z0.0ú0.1)rP   rQ   rR   rS   )r   rY   r   r   rZ   r   r   r   r   r   r�   r   r#   rQ   r"   rR   rS   rT   rU   rV   )ri   rW   rX   r[   r\   rI   rJ   rK   rL   rM   rN   rg   r$   r$   r%   Útest_with_defaultsG  s4    
ù	z0TestMusculotendonDeGroote2016.test_with_defaultszl_T_slack, expectedNZl_T_slack_namerI   r'   r*   z0.5c                 C   sN   t | j| j| jtj|| j| j| j| j	| j
d�
}|j|ks<t‚|j|ksJt‚d S ©NrO   )r   rD   r[   r\   r   r#   rJ   rK   rL   rM   rN   rI   r"   rQ   )ri   rI   Úexpectedrg   r$   r$   r%   Útest_tendon_slack_lengthc  s    
öz6TestMusculotendonDeGroote2016.test_tendon_slack_lengthzF_M_max, expectedZF_M_max_namerJ   iè  z1000.0c                 C   sN   t | j| j| jtj| j|| j| j| j	| j
d�
}|j|ks<t‚|j|ksJt‚d S r®   )r   rD   r[   r\   r   r#   rI   rK   rL   rM   rN   rJ   r"   rR   )ri   rJ   r¯   rg   r$   r$   r%   Útest_peak_isometric_force|  s    
öz7TestMusculotendonDeGroote2016.test_peak_isometric_forcezl_M_opt, expectedZl_M_opt_namerK   c                 C   sN   t | j| j| jtj| j| j|| j| j	| j
d�
}|j|ks<t‚|j|ksJt‚d S r®   )r   rD   r[   r\   r   r#   rI   rJ   rL   rM   rN   rK   r"   rS   )ri   rK   r¯   rg   r$   r$   r%   Útest_optimal_fiber_length•  s    
öz7TestMusculotendonDeGroote2016.test_optimal_fiber_lengthzv_M_max, expectedZv_M_max_namerL   é
   r«   c                 C   sN   t | j| j| jtj| j| j| j|| j	| j
d�
}|j|ks<t‚|j|ksJt‚d S r®   )r   rD   r[   r\   r   r#   rI   rJ   rK   rM   rN   rL   r"   rT   )ri   rL   r¯   rg   r$   r$   r%   Útest_maximal_fiber_velocity®  s    
öz9TestMusculotendonDeGroote2016.test_maximal_fiber_velocityzalpha_opt, expectedZalpha_opt_namerM   r   r¬   c                 C   sN   t | j| j| jtj| j| j| j| j	|| j
d�
}|j|ks<t‚|j|ksJt‚d S r®   )r   rD   r[   r\   r   r#   rI   rJ   rK   rL   rN   rM   r"   rU   )ri   rM   r¯   rg   r$   r$   r%   Útest_optimal_pennation_angleÇ  s    
öz:TestMusculotendonDeGroote2016.test_optimal_pennation_anglezbeta, expectedZ	beta_namerN   c                 C   sN   t | j| j| jtj| j| j| j| j	| j
|d�
}|j|ks<t‚|j|ksJt‚d S r®   )r   rD   r[   r\   r   r#   rI   rJ   rK   rL   rM   rN   r"   rV   )ri   rN   r¯   rg   r$   r$   r%   Útest_fiber_damping_coefficientà  s    öz<TestMusculotendonDeGroote2016.test_fiber_damping_coefficientc                 C   sf   t | j| j| jƒ}t|dƒs t‚t|dƒs.t‚tdƒ}|j|ksDt‚|j|ksRt‚|j|jksbt‚d S )Nr^   r]   Ze_name)	r   rD   r[   r\   rm   r"   r   r^   r]   )ri   rg   Z
e_expectedr$   r$   r%   Útest_excitationú  s    ýz-TestMusculotendonDeGroote2016.test_excitationc              	   C   sN   t | j| j| jƒ}t t¡� d |_W 5 Q R X t t¡� d |_W 5 Q R X d S r6   )	r   rD   r[   r\   r<   r=   ÚAttributeErrorr^   r]   ©ri   rg   r$   r$   r%   Útest_excitation_is_immutable  s    ýz:TestMusculotendonDeGroote2016.test_excitation_is_immutablec                 C   sV   t | j| j| jƒ}t|dƒs t‚t|dƒs.t‚tdƒ}|j|ksDt‚|j|ksRt‚d S )Nr_   r\   Úa_name)r   rD   r[   r\   rm   r"   r   r_   )ri   rg   Z
a_expectedr$   r$   r%   Útest_activation  s    ýz-TestMusculotendonDeGroote2016.test_activationc              	   C   sN   t | j| j| jƒ}t t¡� d |_W 5 Q R X t t¡� d |_W 5 Q R X d S r6   )r   rD   r[   r\   r<   r=   r¸   r_   r¹   r$   r$   r%   Útest_activation_is_immutable  s    ýz:TestMusculotendonDeGroote2016.test_activation_is_immutablec                 C   sH   t | j| j| jtj| j| j| j| j	| j
| jd�
}d}t|ƒ|ksDt‚d S )NrO   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   rD   r[   r\   r   r#   rI   rJ   rK   rL   rM   rN   Úreprr"   )ri   rg   r¯   r$   r$   r%   Ú	test_repr)  s    öÿz'TestMusculotendonDeGroote2016.test_repr)r1   r2   r3   r4   r;   r©   r<   r‡   rª   r­   ÚmarkÚparametrizer   r   r   r°   r   r±   r²   r´   rµ   r¶   r·   rº   r¼   r½   r¿   r$   r$   r$   r%   r¨     s†   




üþ	

üþ	

üþ	

üþ	

üþ	

ûþ

r¨   )=Ú__doc__r8   r<   Zsympy.core.exprr   Zsympy.core.numbersr   r   r   Zsympy.core.symbolr   Z&sympy.functions.elementary.exponentialr   Z%sympy.functions.elementary.hyperbolicr   Z(sympy.functions.elementary.miscellaneousr	   Z(sympy.functions.elementary.trigonometricr
   Zsympy.matrices.denser   rn   r   r   Z%sympy.physics.biomechanics.activationr   Z sympy.physics.biomechanics.curver   r   r   r   r   r   r   r   Z(sympy.physics.biomechanics.musculotendonr   r   r   Z!sympy.physics.biomechanics._mixinr   Z sympy.physics.mechanics.actuatorr   Zsympy.physics.mechanics.pathwayr   Zsympy.physics.vector.framer   Zsympy.physics.vector.functionsr   Zsympy.physics.vector.pointr   Zsympy.simplify.simplifyr    r!   r5   rÀ   rÁ   rB   r�   r¤   r¨   r$   r$   r$   r%   Ú<module>   sx   (
 	ùþÿþ ùþÿþ 