U
    @f/                    @   s  d Z ddlZddlmZ ddlmZ ddlmZmZ ddl	m
Z
mZ ddlmZ ddlmZmZ dd	l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mZ ddl 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l0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6m7Z7 ddl8m9Z9 edZ:edZ;e:rXe:j<=dd G dd dZ>G dd dZ?G dd dZ@G dd  d ZAG d!d" d"ZBG d#d$ d$ZCG d%d& d&ZDG d'd( d(ZEG d)d* d*ZFdS )+zFTests for the ``sympy.physics.biomechanics.characteristic.py`` module.    N)UnevaluatedExpr)Function)FloatInteger)Symbolsymbols)import_module)explog)coshsinh)sqrt)	CharacteristicCurveCollectionCharacteristicCurveFunction"FiberForceLengthActiveDeGroote2016#FiberForceLengthPassiveDeGroote2016*FiberForceLengthPassiveInverseDeGroote2016FiberForceVelocityDeGroote2016%FiberForceVelocityInverseDeGroote2016TendonForceLengthDeGroote2016$TendonForceLengthInverseDeGroote2016)C89CodePrinterC99CodePrinterC11CodePrinter)CXX98CodePrinterCXX11CodePrinterCXX17CodePrinter)FCodePrinter)LambdaPrinter)LatexPrinter)OctaveCodePrinter)CuPyPrinter
JaxPrinterNumPyPrinterSciPyPrinter)MpmathPrinterPythonCodePrinter)lambdifyjaxnumpyZjax_enable_x64Tc                   @   s   e Zd Zeejdedfedfe	dfe
dfedfedfedfedfedfedfedfedfedfedfedfgdd ZdS )TestCharacteristicCurveFunctioncode_printer, expectedz(a + b)*(c + d)*(e + f)z      (a + b)*(c + d)*(e + f)z(a + b).*(c + d).*(e + f)c                 C   sb   G dd dt }td\}}}}}}|||}	|||}
|||}|  |	|
 | |ks^td S )Nc                   @   s    e Zd Zedd Zdd ZdS )zUTestCharacteristicCurveFunction.test_print_code_parenthesize.<locals>.ExampleFunctionc                 S   s   d S N )clsabr-   r-   O/tmp/pip-unpacked-wheel-6uje5nh9/sympy/physics/biomechanics/tests/test_curve.pyevalM   s    zZTestCharacteristicCurveFunction.test_print_code_parenthesize.<locals>.ExampleFunction.evalc                 [   s   | j \}}|| S r,   )args)selfkwargsr/   r0   r-   r-   r1   doitQ   s    
zZTestCharacteristicCurveFunction.test_print_code_parenthesize.<locals>.ExampleFunction.doitN)__name__
__module____qualname__classmethodr2   r6   r-   r-   r-   r1   ExampleFunctionK   s   
r;   za, b, c, d, e, f)r   r   doprintAssertionError)code_printerexpectedr;   r/   r0   cdeff1f2Zf3r-   r-   r1   test_print_code_parenthesize4   s    



z<TestCharacteristicCurveFunction.test_print_code_parenthesizeN)r7   r8   r9   staticmethodpytestmarkparametrizer   r   r   r   r   r   r   r    r&   r#   r$   r!   r"   r%   r   rF   r-   r-   r-   r1   r*   2   s*   r*   c                   @   sD  e Zd Zejdddd Zedd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zejded fed fed fed fed!fed!fed"fed#fed$fed%fe d%fe!d&fe"d'fe#d(fe$d$fgd)d* Z%d+d, Z&d-d. Z'ejj(e)d/kd0d1d2d3 Z*ejj(e+d/kd4d1d5d6 Z,d/S )7!TestTendonForceLengthDeGroote2016TZautousec                 C   sL   t d| _t d| _t d| _t d| _t d| _| j| j| j| jf| _d S )N	l_T_tildec_0c_1c_2c_3)r   rM   c0c1c2c3	constantsr4   r-   r-   r1   &_tendon_force_length_arguments_fixture^   s    




zHTestTendonForceLengthDeGroote2016._tendon_force_length_arguments_fixturec                   C   s.   t ttstt ttsttjdks*td S )Nr   )
issubclassr   r   r=   r   r7   r-   r-   r-   r1   
test_classg   s    z,TestTendonForceLengthDeGroote2016.test_classc                 C   s4   t | jf| j }t|t s tt|dks0td S )Nz<TendonForceLengthDeGroote2016(l_T_tilde, c_0, c_1, c_2, c_3))r   rM   rV   
isinstancer=   strr4   fl_Tr-   r-   r1   test_instancem   s    z/TestTendonForceLengthDeGroote2016.test_instancec                 C   sD   t | jf| j  }|| jt| j| j| j   | j ks@t	d S r,   )
r   rM   rV   r6   rR   r	   rU   rS   rT   r=   r]   r-   r-   r1   	test_doitr   s    z+TestTendonForceLengthDeGroote2016.test_doitc                 C   sL   t | jf| j jdd}|| jt| jt| j| j   | j	 ksHt
d S NFevaluate)r   rM   rV   r6   rR   r	   rU   r   rS   rT   r=   r]   r-   r-   r1   test_doit_evaluate_falsev   s    z:TestTendonForceLengthDeGroote2016.test_doit_evaluate_falsec                 C   sH   t dt dt dt df}t| jf| }t| j}||ksDtd S N0.2z0.995z0.25z33.93669377311689)r   r   rM   with_defaultsr=   )r4   rV   Zfl_T_manualZfl_T_constantsr-   r-   r1   test_with_defaultsz   s    z4TestTendonForceLengthDeGroote2016.test_with_defaultsc                 C   sR   t | jf| j }| j| j t| jt| j | j   }|| j|ksNt	d S r,   
r   rM   rV   rR   rU   r	   r   rS   diffr=   r4   r^   r?   r-   r-   r1    test_differentiate_wrt_l_T_tilde   s    (zBTestTendonForceLengthDeGroote2016.test_differentiate_wrt_l_T_tildec                 C   sF   t | jf| j }t| jt| j | j  }|| j|ksBt	d S r,   )
r   rM   rV   r	   rU   r   rS   rj   rR   r=   rk   r-   r-   r1   test_differentiate_wrt_c0   s    z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c0c                 C   sR   t | jf| j }| j | j t| jt| j| j   }|| j|ksNt	d S r,   ri   rk   r-   r-   r1   test_differentiate_wrt_c1   s    (z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c1c                 C   s2   t | jf| j }td}|| j|ks.td S N)r   rM   rV   r   rj   rT   r=   rk   r-   r-   r1   test_differentiate_wrt_c2   s    z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c2c                 C   sV   t | jf| j }| j| j| j  t| jt| j| j   }|| j|ksRt	d S r,   )
r   rM   rV   rR   rS   r	   rU   r   rj   r=   rk   r-   r-   r1   test_differentiate_wrt_c3   s    ,z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c3c                 C   s&   t | jf| j }| tks"td S r,   )r   rM   rV   inverser   r=   r]   r-   r-   r1   test_inverse   s    z.TestTendonForceLengthDeGroote2016.test_inversec                 C   s.   t | jf| j }d}t ||ks*td S )Nz.\operatorname{fl}^T \left( l_{T tilde} \right))r   rM   rV   r   r<   r=   rk   r-   r-   r1   test_function_print_latex   s    z;TestTendonForceLengthDeGroote2016.test_function_print_latexc                 C   s2   t | jf| j }d}t | |ks.td S )Nz:c_{0} e^{c_{3} \left(- c_{1} + l_{T tilde}\right)} - c_{2})r   rM   rV   r   r<   r6   r=   rk   r-   r-   r1   test_expression_print_latex   s    z=TestTendonForceLengthDeGroote2016.test_expression_print_latexr+   zH(-0.25 + 0.20000000000000001*exp(33.93669377311689*(l_T_tilde - 0.995)))zM(-0.25 + 0.20000000000000001*std::exp(33.93669377311689*(l_T_tilde - 0.995)))zF      (-0.25d0 + 0.2d0*exp(33.93669377311689d0*(l_T_tilde - 0.995d0)))z8(-0.25 + 0.2*exp(33.93669377311689*(l_T_tilde - 0.995)))z=(-0.25 + 0.2*math.exp(33.93669377311689*(l_T_tilde - 0.995)))z>(-0.25 + 0.2*numpy.exp(33.93669377311689*(l_T_tilde - 0.995)))z=(-0.25 + 0.2*cupy.exp(33.93669377311689*(l_T_tilde - 0.995)))zB(-0.25 + 0.2*jax.numpy.exp(33.93669377311689*(l_T_tilde - 0.995)))z(mpmath.mpf((1, 1, -2, 1)) + mpmath.mpf((0, 3602879701896397, -54, 52))*mpmath.exp(mpmath.mpf((0, 9552330089424741, -48, 54))*(l_T_tilde + mpmath.mpf((1, 8962163258467287, -53, 53)))))c                 C   s$   t | j}| ||ks td S r,   )r   rg   rM   r<   r=   )r4   r>   r?   r^   r-   r-   r1   test_print_code   s    Dz1TestTendonForceLengthDeGroote2016.test_print_codec                 C   s4   t | j}|| j}d}t ||ks0td S )NzA6.787338754623378*math.exp(33.93669377311689*(l_T_tilde - 0.995)))r   rg   rM   rj   r&   r<   r=   )r4   r^   Zdfl_T_dl_T_tilder?   r-   r-   r1   test_derivative_print_code   s    z<TestTendonForceLengthDeGroote2016.test_derivative_print_codec                 C   s2   t | j}t| j|}|dtdks.td S )N      ?g A)r   rg   rM   r'   rH   approxr=   )r4   r^   fl_T_callabler-   r-   r1   test_lambdify   s    z/TestTendonForceLengthDeGroote2016.test_lambdifyNNumPy not installedreasonc                 C   sT   t | j}t| j|d}tddddg}tdddd	g}tj||| d S )
Nr)   ffffff?ry   )\(??Opʿ Ag.?Y估?)r   rg   rM   r'   r)   arraytestingassert_allcloser4   r^   r{   rM   r?   r-   r-   r1   test_lambdify_numpy   s    z5TestTendonForceLengthDeGroote2016.test_lambdify_numpyJAX not installedc                 C   s^   t | j}tt| j|d}tjddddg}tjdddd	g}tj	||| d S )
Nr(   r   ry   r   r   r   r   r   r   )
r   rg   rM   r(   jitr'   r)   r   r   r   r   r-   r-   r1   test_lambdify_jax  s    z3TestTendonForceLengthDeGroote2016.test_lambdify_jax)-r7   r8   r9   rH   fixturerX   rG   rZ   r_   r`   rd   rh   rl   rm   rn   rq   rr   rt   ru   rv   rI   rJ   r   r   r   r   r   r   r   r    r&   r#   r$   r!   r"   r%   r   rw   rx   r|   skipifr)   r   r(   r   r-   r-   r-   r1   rK   \   s   


C

rK   c                   @   sD  e Zd Zejdddd Zedd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zejded fed fed fed fed!fed!fed"fed#fed$fed%fe d%fe!d&fe"d'fe#d(fe$d$fgd)d* Z%d+d, Z&d-d. Z'ejj(e)d/kd0d1d2d3 Z*ejj(e+d/kd4d1d5d6 Z,d/S )7(TestTendonForceLengthInverseDeGroote2016TrL   c                 C   sL   t d| _t d| _t d| _t d| _t d| _| j| j| j| jf| _d S )Nr^   rN   rO   rP   rQ   )r   r^   rR   rS   rT   rU   rV   rW   r-   r-   r1   ._tendon_force_length_inverse_arguments_fixture  s    




zWTestTendonForceLengthInverseDeGroote2016._tendon_force_length_inverse_arguments_fixturec                   C   s.   t ttstt ttsttjdks*td S )Nr   )rY   r   r   r=   r   r7   r-   r-   r-   r1   rZ   $  s    z3TestTendonForceLengthInverseDeGroote2016.test_classc                 C   s4   t | jf| j }t|t s tt|dks0td S )Nz>TendonForceLengthInverseDeGroote2016(fl_T, c_0, c_1, c_2, c_3))r   r^   rV   r[   r=   r\   r4   fl_T_invr-   r-   r1   r_   *  s    z6TestTendonForceLengthInverseDeGroote2016.test_instancec                 C   sD   t | jf| j  }|t| j| j | j | j | j ks@t	d S r,   )
r   r^   rV   r6   r
   rT   rR   rU   rS   r=   r   r-   r-   r1   r`   /  s    z2TestTendonForceLengthInverseDeGroote2016.test_doitc                 C   sL   t | jf| j jdd}|tt| j| j | j | j | j	 ksHt
d S ra   )r   r^   rV   r6   r
   r   rT   rR   rU   rS   r=   r   r-   r-   r1   rd   3  s    zATestTendonForceLengthInverseDeGroote2016.test_doit_evaluate_falsec                 C   sH   t dt dt dt df}t| jf| }t| j}||ksDtd S re   )r   r   r^   rg   r=   )r4   rV   Zfl_T_inv_manualZfl_T_inv_constantsr-   r-   r1   rh   7  s    z;TestTendonForceLengthInverseDeGroote2016.test_with_defaultsc                 C   s@   t | jf| j }d| j| j| j   }|| j|ks<td S N   r   r^   rV   rU   rT   rj   r=   r4   r   r?   r-   r-   r1   test_differentiate_wrt_fl_TB  s    zDTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_fl_Tc                 C   s:   t | jf| j }d| j| j  }|| j|ks6td S ro   )r   r^   rV   rR   rU   rj   r=   r   r-   r-   r1   rm   G  s    zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c0c                 C   s2   t | jf| j }td}|| j|ks.td S r   )r   r^   rV   r   rj   rS   r=   r   r-   r-   r1   rn   L  s    zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c1c                 C   s@   t | jf| j }d| j| j| j   }|| j|ks<td S r   r   r   r-   r-   r1   rq   Q  s    zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c2c                 C   sP   t | jf| j }tt| j| j | j  | jd  }|| j|ksLt	d S N   )
r   r^   rV   r
   r   rT   rR   rU   rj   r=   r   r-   r-   r1   rr   V  s    &zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c3c                 C   s&   t | jf| j }| tks"td S r,   )r   r^   rV   rs   r   r=   r   r-   r-   r1   rt   [  s    z5TestTendonForceLengthInverseDeGroote2016.test_inversec                 C   s.   t | jf| j }d}t ||ks*td S )Nz=\left( \operatorname{fl}^T \right)^{-1} \left( fl_{T} \right))r   r^   rV   r   r<   r=   r   r-   r-   r1   ru   _  s    zBTestTendonForceLengthInverseDeGroote2016.test_function_print_latexc                 C   s2   t | jf| j }d}t | |ks.td S )NzFc_{1} + \frac{\log{\left(\frac{c_{2} + fl_{T}}{c_{0}} \right)}}{c_{3}})r   r^   rV   r   r<   r6   r=   rk   r-   r-   r1   rv   d  s    zDTestTendonForceLengthInverseDeGroote2016.test_expression_print_latexr+   z3(0.995 + 0.029466630034306838*log(5.0*fl_T + 1.25))z8(0.995 + 0.029466630034306838*std::log(5.0*fl_T + 1.25))z@      (0.995d0 + 0.02946663003430684d0*log(5.0d0*fl_T + 1.25d0))z2(0.995 + 0.02946663003430684*log(5.0*fl_T + 1.25))z7(0.995 + 0.02946663003430684*math.log(5.0*fl_T + 1.25))z8(0.995 + 0.02946663003430684*numpy.log(5.0*fl_T + 1.25))z7(0.995 + 0.02946663003430684*cupy.log(5.0*fl_T + 1.25))z<(0.995 + 0.02946663003430684*jax.numpy.log(5.0*fl_T + 1.25))z(mpmath.mpf((0, 8962163258467287, -53, 53)) + mpmath.mpf((0, 33972711434846347, -60, 55))*mpmath.log(mpmath.mpf((0, 5, 0, 3))*fl_T + mpmath.mpf((0, 5, -2, 3))))c                 C   s$   t | j}| ||ks td S r,   )r   rg   r^   r<   r=   )r4   r>   r?   r   r-   r-   r1   rw   i  s    Dz8TestTendonForceLengthInverseDeGroote2016.test_print_codec                 C   s4   t | j}|| j}d}t ||ks0td S )Nz.1/(33.93669377311689*fl_T + 8.484173443279222))r   rg   r^   rj   r&   r<   r=   )r4   r   Zdfl_T_inv_dfl_Tr?   r-   r-   r1   rx     s    zCTestTendonForceLengthInverseDeGroote2016.test_derivative_print_codec                 C   s2   t | j}t| j|}|dtdks.td S )N        mIs?)r   rg   r^   r'   rH   rz   r=   )r4   r   fl_T_inv_callabler-   r-   r1   r|     s    z6TestTendonForceLengthInverseDeGroote2016.test_lambdifyNr}   r~   c                 C   s\   t | j}t| j|d}tddddddg}tdd	d
dddg}tj||| d S )Nr)   皙ɿ{Gzr   r   RQ?r   Pgf?}?r   yl?­?纂p?)r   rg   r^   r'   r)   r   r   r   r4   r   r   r^   r?   r-   r-   r1   r     s    z<TestTendonForceLengthInverseDeGroote2016.test_lambdify_numpyr   c                 C   sf   t | j}tt| j|d}tjddddddg}tjdd	d
dddg}tj	||| d S )Nr(   r   r   r   r   r   r   r   r   r   r   r   r   )
r   rg   r^   r(   r   r'   r)   r   r   r   r   r-   r-   r1   r     s    z:TestTendonForceLengthInverseDeGroote2016.test_lambdify_jax)-r7   r8   r9   rH   r   r   rG   rZ   r_   r`   rd   rh   r   rm   rn   rq   rr   rt   ru   rv   rI   rJ   r   r   r   r   r   r   r   r    r&   r#   r$   r!   r"   r%   r   rw   rx   r|   r   r)   r   r(   r   r-   r-   r-   r1   r     s   


C

r   c                   @   s4  e Zd Zejdddd Zedd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zejdedfedfedfedfedfedfedfedfed fed!fed!fed"fe d#fe!d$fe"d fgd%d& Z#d'd( Z$d)d* Z%ejj&e'd+kd,d-d.d/ Z(ejj&e)d+kd0d-d1d2 Z*d+S )3'TestFiberForceLengthPassiveDeGroote2016TrL   c                 C   s0   t d| _t d| _t d| _| j| jf| _d S )N	l_M_tilderN   rO   )r   r   rR   rS   rV   rW   r-   r-   r1   -_fiber_force_length_passive_arguments_fixture  s    


zUTestFiberForceLengthPassiveDeGroote2016._fiber_force_length_passive_arguments_fixturec                   C   s.   t ttstt ttsttjdks*td S )Nr   )rY   r   r   r=   r   r7   r-   r-   r-   r1   rZ     s    z2TestFiberForceLengthPassiveDeGroote2016.test_classc                 C   s4   t | jf| j }t|t s tt|dks0td S )Nz8FiberForceLengthPassiveDeGroote2016(l_M_tilde, c_0, c_1))r   r   rV   r[   r=   r\   r4   fl_M_pasr-   r-   r1   r_     s    z5TestFiberForceLengthPassiveDeGroote2016.test_instancec                 C   sN   t | jf| j  }|t| j| jd  | j d t| jd  ksJtd S r   )r   r   rV   r6   r	   rS   rR   r=   r   r-   r-   r1   r`     s    z1TestFiberForceLengthPassiveDeGroote2016.test_doitc                 C   sV   t | jf| j jdd}|t| jt| jd  | j d t| jd  ksRtd S NFrb   r   )	r   r   rV   r6   r	   rS   r   rR   r=   r   r-   r-   r1   rd     s    z@TestFiberForceLengthPassiveDeGroote2016.test_doit_evaluate_falsec                 C   s<   t dt df}t| jf| }t| j}||ks8td S Nz0.6z4.0)r   r   r   rg   r=   )r4   rV   Zfl_M_pas_manualZfl_M_pas_constantsr-   r-   r1   rh     s    z:TestFiberForceLengthPassiveDeGroote2016.test_with_defaultsc                 C   sb   t | jf| j }| jt| jt| jd  | j  | jt| jd   }|| j|ks^td S r   	r   r   rV   rS   r	   r   rR   rj   r=   r4   r   r?   r-   r-   r1    test_differentiate_wrt_l_M_tilde  s    8zHTestFiberForceLengthPassiveDeGroote2016.test_differentiate_wrt_l_M_tildec                 C   sv   t | jf| j }| j t| jt| jd  | j  t| jd  | jd t| jd   }|| j|ksrtd S Nr   r   r   r   r-   r-   r1   rm     s    $zATestFiberForceLengthPassiveDeGroote2016.test_differentiate_wrt_c0c                 C   s   t | jf| j }t| j dt| jt| jd  | j   t| jd d  t| jt| jd  | j | jd  | jt| jd    }|| j|kstd S )Nrp   r   r   )	r   r   rV   r	   rS   r   rR   rj   r=   r   r-   r-   r1   rn     s    >:zATestFiberForceLengthPassiveDeGroote2016.test_differentiate_wrt_c1c                 C   s&   t | jf| j }| tks"td S r,   )r   r   rV   rs   r   r=   r   r-   r-   r1   rt     s    z4TestFiberForceLengthPassiveDeGroote2016.test_inversec                 C   s.   t | jf| j }d}t ||ks*td S )Nz4\operatorname{fl}^M_{pas} \left( l_{M tilde} \right))r   r   rV   r   r<   r=   r   r-   r-   r1   ru     s    zATestFiberForceLengthPassiveDeGroote2016.test_function_print_latexc                 C   s2   t | jf| j }d}t | |ks.td S )NzN\frac{e^{\frac{c_{1} \left(l_{M tilde} - 1\right)}{c_{0}}} - 1}{e^{c_{1}} - 1})r   r   rV   r   r<   r6   r=   r   r-   r-   r1   rv     s    zCTestFiberForceLengthPassiveDeGroote2016.test_expression_print_latexr+   zC(0.01865736036377405*(-1 + exp(6.666666666666667*(l_M_tilde - 1))))zH(0.01865736036377405*(-1 + std::exp(6.666666666666667*(l_M_tilde - 1))))zT      (0.0186573603637741d0*(-1 + exp(6.666666666666667d0*(l_M_tilde - 1
     @ ))))zA(0.0186573603637741*(-1 + exp(6.66666666666667*(l_M_tilde - 1))))zF(0.0186573603637741*(-1 + math.exp(6.66666666666667*(l_M_tilde - 1))))zG(0.0186573603637741*(-1 + numpy.exp(6.66666666666667*(l_M_tilde - 1))))zF(0.0186573603637741*(-1 + cupy.exp(6.66666666666667*(l_M_tilde - 1))))zK(0.0186573603637741*(-1 + jax.numpy.exp(6.66666666666667*(l_M_tilde - 1))))zy(mpmath.mpf((0, 672202249456079, -55, 50))*(-1 + mpmath.exp(mpmath.mpf((0, 7505999378950827, -50, 53))*(l_M_tilde - 1))))c                 C   s$   t | j}| ||ks td S r,   )r   rg   r   r<   r=   )r4   r>   r?   r   r-   r-   r1   rw   "  s    Dz7TestFiberForceLengthPassiveDeGroote2016.test_print_codec                 C   s4   t | j}|| j}d}t ||ks0td S )Nz;0.12438240242516*math.exp(6.66666666666667*(l_M_tilde - 1)))r   rg   r   rj   r&   r<   r=   )r4   r   Zfl_M_pas_dl_M_tilder?   r-   r-   r1   rx   i  s    zBTestFiberForceLengthPassiveDeGroote2016.test_derivative_print_codec                 C   s2   t | j}t| j|}|dtdks.td S )Nry   r   )r   rg   r   r'   rH   rz   r=   )r4   r   fl_M_pas_callabler-   r-   r1   r|   o  s    z5TestFiberForceLengthPassiveDeGroote2016.test_lambdifyNr}   r~   c              	   C   s`   t | j}t| j|d}tdddddddg}td	d
dddddg}tj||| d S )Nr)         ?皙??ry   皙?333333?      ?1olx#^#gΫr   4],eI?-˯?O#?)r   rg   r   r'   r)   r   r   r   r4   r   r   r   r?   r-   r-   r1   r   t  s    	z;TestFiberForceLengthPassiveDeGroote2016.test_lambdify_numpyr   c              	   C   sj   t | j}tt| j|d}tjdddddddg}tjd	d
dddddg}tj	||| d S )Nr(   r   r   r   ry   r   r   r   r   r   r   r   r   r   r   )
r   rg   r   r(   r   r'   r)   r   r   r   r   r-   r-   r1   r     s    	z9TestFiberForceLengthPassiveDeGroote2016.test_lambdify_jax)+r7   r8   r9   rH   r   r   rG   rZ   r_   r`   rd   rh   r   rm   rn   rt   ru   rv   rI   rJ   r   r   r   r   r   r   r   r    r&   r#   r$   r!   r"   r%   r   rw   rx   r|   r   r)   r   r(   r   r-   r-   r-   r1   r     s   


	C

r   c                   @   s4  e Zd Zejdddd Zedd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zejdedfedfedfedfedfedfedfedfed fed!fed!fed"fe d#fe!d$fe"d fgd%d& Z#d'd( Z$d)d* Z%ejj&e'd+kd,d-d.d/ Z(ejj&e)d+kd0d-d1d2 Z*d+S )3.TestFiberForceLengthPassiveInverseDeGroote2016TrL   c                 C   s0   t d| _t d| _t d| _| j| jf| _d S )Nr   rN   rO   )r   r   rR   rS   rV   rW   r-   r-   r1   r     s    


z\TestFiberForceLengthPassiveInverseDeGroote2016._fiber_force_length_passive_arguments_fixturec                   C   s.   t ttstt ttsttjdks*td S )Nr   )rY   r   r   r=   r   r7   r-   r-   r-   r1   rZ     s    z9TestFiberForceLengthPassiveInverseDeGroote2016.test_classc                 C   s4   t | jf| j }t|t s tt|dks0td S )Nz>FiberForceLengthPassiveInverseDeGroote2016(fl_M_pas, c_0, c_1))r   r   rV   r[   r=   r\   r4   fl_M_pas_invr-   r-   r1   r_     s    z<TestFiberForceLengthPassiveInverseDeGroote2016.test_instancec                 C   sN   t | jf| j  }|| jt| jt| jd  d  | j d ksJtd S r   )	r   r   rV   r6   rR   r
   r	   rS   r=   r   r-   r-   r1   r`     s    z8TestFiberForceLengthPassiveInverseDeGroote2016.test_doitc                 C   sV   t | jf| j jdd}|| jtt| jt| jd  d  | j d ksRt	d S r   )
r   r   rV   r6   rR   r
   r   r	   rS   r=   r   r-   r-   r1   rd     s    zGTestFiberForceLengthPassiveInverseDeGroote2016.test_doit_evaluate_falsec                 C   s<   t dt df}t| jf| }t| j}||ks8td S r   )r   r   r   rg   r=   )r4   rV   Zfl_M_pas_inv_manualZfl_M_pas_inv_constantsr-   r-   r1   rh     s    zATestFiberForceLengthPassiveInverseDeGroote2016.test_with_defaultsc                 C   s\   t | jf| j }| jt| jd  | j| jt| jd  d   }|| j|ksXtd S r   )r   r   rV   rR   r	   rS   rj   r=   r4   r   r?   r-   r-   r1   r     s    2zJTestFiberForceLengthPassiveInverseDeGroote2016.test_differentiate_wrt_fl_Tc                 C   sL   t | jf| j }t| jt| jd  d | j }|| j|ksHtd S r   )	r   r   rV   r
   r	   rS   rj   rR   r=   r   r-   r-   r1   rm     s    "zHTestFiberForceLengthPassiveInverseDeGroote2016.test_differentiate_wrt_c0c                 C   s   t | jf| j }| j| j t| j | j| jt| jd  d   | jt| jt| jd  d  | jd   }|| j|kstd S r   )	r   r   rV   rR   r	   rS   r
   rj   r=   r   r-   r-   r1   rn     s    2*zHTestFiberForceLengthPassiveInverseDeGroote2016.test_differentiate_wrt_c1c                 C   s&   t | jf| j }| tks"td S r,   )r   r   rV   rs   r   r=   r   r-   r-   r1   rt     s    z;TestFiberForceLengthPassiveInverseDeGroote2016.test_inversec                 C   s.   t | jf| j }d}t ||ks*td S )NzG\left( \operatorname{fl}^M_{pas} \right)^{-1} \left( fl_{M pas} \right))r   r   rV   r   r<   r=   r   r-   r-   r1   ru     s    zHTestFiberForceLengthPassiveInverseDeGroote2016.test_function_print_latexc                 C   s2   t | jf| j }d}t | |ks.td S )NzU\frac{c_{0} \log{\left(fl_{M pas} \left(e^{c_{1}} - 1\right) + 1 \right)}}{c_{1}} + 1)r   r   rV   r   r<   r6   r=   rk   r-   r-   r1   rv     s    zJTestFiberForceLengthPassiveInverseDeGroote2016.test_expression_print_latexr+   z>(1 + 0.14999999999999999*log(1 + 53.598150033144236*fl_M_pas))zC(1 + 0.14999999999999999*std::log(1 + 53.598150033144236*fl_M_pas))z;      (1 + 0.15d0*log(1.0d0 + 53.5981500331442d0*fl_M_pas))z-(1 + 0.15*log(1 + 53.5981500331442*fl_M_pas))z2(1 + 0.15*math.log(1 + 53.5981500331442*fl_M_pas))z3(1 + 0.15*numpy.log(1 + 53.5981500331442*fl_M_pas))z2(1 + 0.15*cupy.log(1 + 53.5981500331442*fl_M_pas))z7(1 + 0.15*jax.numpy.log(1 + 53.5981500331442*fl_M_pas))zs(1 + mpmath.mpf((0, 5404319552844595, -55, 53))*mpmath.log(1 + mpmath.mpf((0, 942908627019595, -44, 50))*fl_M_pas))c                 C   s$   t | j}| ||ks td S r,   )r   rg   r   r<   r=   )r4   r>   r?   r   r-   r-   r1   rw     s    Cz>TestFiberForceLengthPassiveInverseDeGroote2016.test_print_codec                 C   s4   t | j}|| j}d}t ||ks0td S )Nz232.1588900198865/(214.392600132577*fl_M_pas + 4.0))r   rg   r   rj   r&   r<   r=   )r4   r   Zdfl_M_pas_inv_dfl_Tr?   r-   r-   r1   rx      s    zITestFiberForceLengthPassiveInverseDeGroote2016.test_derivative_print_codec                 C   s2   t | j}t| j|}|dtdks.td S )Nr   ry   )r   rg   r   r'   rH   rz   r=   )r4   r   fl_M_pas_inv_callabler-   r-   r1   r|   &  s    z<TestFiberForceLengthPassiveInverseDeGroote2016.test_lambdifyNr}   r~   c                 C   s\   t | j}t| j|d}tddddddg}tdd	d
dddg}tj||| d S )Nr)   r   r   {Gz?{Gz?皙?皙?瑰L}P?ry   >7?,5?x~ ?hlp?)r   rg   r   r'   r)   r   r   r   r4   r   r   r   r?   r-   r-   r1   r   +  s    zBTestFiberForceLengthPassiveInverseDeGroote2016.test_lambdify_numpyr   c                 C   sf   t | j}tt| j|d}tjddddddg}tjdd	d
dddg}tj	||| d S )Nr(   r   r   r   r   r   r   r   ry   r   r   r   r   )
r   rg   r   r(   r   r'   r)   r   r   r   r   r-   r-   r1   r   :  s    z@TestFiberForceLengthPassiveInverseDeGroote2016.test_lambdify_jax)+r7   r8   r9   rH   r   r   rG   rZ   r_   r`   rd   rh   r   rm   rn   rt   ru   rv   rI   rJ   r   r   r   r   r   r   r   r    r&   r#   r$   r!   r"   r%   r   rw   rx   r|   r   r)   r   r(   r   r-   r-   r-   r1   r     s   


	B

r   c                   @   s|  e Zd Zejdddd Zedd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zejd-ed.fed.fed.fe d/fe!d0fe"d0fe#d1fe$d2fe%d3fe&d4fe'd4fe(d5fe)d6fe*d7fe+d3fgd8d9 Z,d:d; Z-d<d= Z.ejj/e0d>kd?d@dAdB Z1ejj/e2d>kdCd@dDdE Z3d>S )F&TestFiberForceLengthActiveDeGroote2016TrL   c                 C   s   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| j| j| j| j| j| j	| j
| j| j| jf| _d S )Nr   rN   rO   rP   rQ   Zc_4Zc_5Zc_6Zc_7Zc_8Zc_9Zc_10Zc_11)r   r   rR   rS   rT   rU   c4c5c6c7c8c9c10c11rV   rW   r-   r-   r1   ,_fiber_force_length_active_arguments_fixtureL  s4    












          zSTestFiberForceLengthActiveDeGroote2016._fiber_force_length_active_arguments_fixturec                   C   s.   t ttstt ttsttjdks*td S )Nr   )rY   r   r   r=   r   r7   r-   r-   r-   r1   rZ   `  s    z1TestFiberForceLengthActiveDeGroote2016.test_classc                 C   s4   t | jf| j }t|t s tt|dks0td S )NzkFiberForceLengthActiveDeGroote2016(l_M_tilde, c_0, c_1, c_2, c_3, c_4, c_5, c_6, c_7, c_8, c_9, c_10, c_11))r   r   rV   r[   r=   r\   r4   fl_M_actr-   r-   r1   r_   f  s
    z4TestFiberForceLengthActiveDeGroote2016.test_instancec                 C   s   t | jf| j  }|| jt| j| j | j| j| j   d  d  | j	t| j| j
 | j| j| j   d  d   | jt| j| j | j| j| j   d  d   kstd S r   )r   r   rV   r6   rR   r	   rS   rT   rU   r   r   r   r   r   r   r   r   r=   r   r-   r-   r1   r`   n  s    000z0TestFiberForceLengthActiveDeGroote2016.test_doitc                 C   s   t | jf| j jdd}|| jtt| j| j | j| j	| j   d  d  | j
tt| j| j | j| j| j   d  d   | jtt| j| j | j| j| j   d  d   kstd S )NFrb   r   )r   r   rV   r6   rR   r	   r   rS   rT   rU   r   r   r   r   r   r   r   r   r=   r   r-   r-   r1   rd   v  s    444z?TestFiberForceLengthActiveDeGroote2016.test_doit_evaluate_falsec                 C   sx   t dt dt dt dt dt dt dt dt d	t d
t dt df}t| jf| }t| j}||ksttd S )Nz0.814z1.06z0.162z0.0633z0.433z0.717z-0.0299rf   z0.1z1.0z0.354z0.0)r   r   r   rg   r=   )r4   rV   Zfl_M_act_manualZfl_M_act_constantsr-   r-   r1   rh   ~  s     z9TestFiberForceLengthActiveDeGroote2016.test_with_defaultsc                 C   s  t | jf| j }| j| j| j| j d  | j| j| j  d  | j| j | j| j| j  d    t| j| j d  d| j| j| j  d    | j| j	| j| j
 d  | j| j	| j  d  | j
| j | j| j	| j  d    t| j| j
 d  d| j| j	| j  d     | j| j| j| j d  | j| j| j  d  | j| j | j| j| j  d    t| j| j d  d| j| j| j  d     }|| j|kstd S Nr      )r   r   rV   rR   rU   rS   rT   r	   r   r   r   r   r   r   r   r   rj   r=   r4   r   r?   r-   r-   r1   r     s4    * .* .* .zGTestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_l_M_tildec                 C   s^   t | jf| j }t| j| j d  d| j| j| j  d   }| | j	|ksZt
d S r   )r   r   rV   r	   rS   rT   rU   r6   rj   rR   r=   r   r-   r-   r1   rm     s    0z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c0c                 C   s   t | jf| j }| j| j| j  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|ks~t	d S r   
r   r   rV   rR   rS   rT   rU   r	   rj   r=   r   r-   r-   r1   rn     s    &.z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c1c                 C   s   t | jf| j }| j| j| j d  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|kst	d S r   r   r   r-   r-   r1   rq     s    *.z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c2c                 C   s   t | jf| j }| j| j | j| j d  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|kst	d S r   r   r   r-   r-   r1   rr     s    0.z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c3c                 C   sZ   t | jf| j }t| j| j d  d| j| j| j  d   }|| j|ksVt	d S r   )
r   r   rV   r	   r   r   r   rj   r   r=   r   r-   r-   r1   test_differentiate_wrt_c4  s    0z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c4c                 C   s   t | jf| j }| j| j| j  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|ks~t	d S r   
r   r   rV   r   r   r   r   r	   rj   r=   r   r-   r-   r1   test_differentiate_wrt_c5  s    &.z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c5c                 C   s   t | jf| j }| j| j| j d  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|kst	d S r   r   r   r-   r-   r1   test_differentiate_wrt_c6  s    *.z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c6c                 C   s   t | jf| j }| j| j | j| j d  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|kst	d S r   r   r   r-   r-   r1   test_differentiate_wrt_c7  s    0.z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c7c                 C   sZ   t | jf| j }t| j| j d  d| j| j| j  d   }|| j|ksVt	d S r   )
r   r   rV   r	   r   r   r   rj   r   r=   r   r-   r-   r1   test_differentiate_wrt_c8  s    0z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c8c                 C   s   t | jf| j }| j| j| j  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|ks~t	d S r   
r   r   rV   r   r   r   r   r	   rj   r=   r   r-   r-   r1   test_differentiate_wrt_c9  s    &.z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c9c                 C   s   t | jf| j }| j| j| j d  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|kst	d S r   r   r   r-   r-   r1   test_differentiate_wrt_c10  s    *.zATestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c10c                 C   s   t | jf| j }| j| j | j| j d  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|kst	d S r   r   r   r-   r-   r1   test_differentiate_wrt_c11  s    0.zATestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c11c                 C   s.   t | jf| j }d}t ||ks*td S )Nz4\operatorname{fl}^M_{act} \left( l_{M tilde} \right))r   r   rV   r   r<   r=   r   r-   r-   r1   ru     s    z@TestFiberForceLengthActiveDeGroote2016.test_function_print_latexc                 C   s2   t | jf| j }d}t | |ks.td S )Na=  c_{0} e^{- \frac{\left(- c_{1} + l_{M tilde}\right)^{2}}{2 \left(c_{2} + c_{3} l_{M tilde}\right)^{2}}} + c_{4} e^{- \frac{\left(- c_{5} + l_{M tilde}\right)^{2}}{2 \left(c_{6} + c_{7} l_{M tilde}\right)^{2}}} + c_{8} e^{- \frac{\left(- c_{9} + l_{M tilde}\right)^{2}}{2 \left(c_{10} + c_{11} l_{M tilde}\right)^{2}}})r   r   rV   r   r<   r6   r=   r   r-   r-   r1   rv     s    zBTestFiberForceLengthActiveDeGroote2016.test_expression_print_latexr+   a7  (0.81399999999999995*exp(-19.051973784484073*pow(l_M_tilde - 1.0600000000000001, 2)/pow(0.39074074074074072*l_M_tilde + 1, 2)) + 0.433*exp(-12.499999999999998*pow(l_M_tilde - 0.71699999999999997, 2)/pow(l_M_tilde - 0.14949999999999999, 2)) + 0.10000000000000001*exp(-3.9899134986753491*pow(l_M_tilde - 1.0, 2)))aP  (0.81399999999999995*exp(-19.051973784484073*std::pow(l_M_tilde - 1.0600000000000001, 2)/std::pow(0.39074074074074072*l_M_tilde + 1, 2)) + 0.433*exp(-12.499999999999998*std::pow(l_M_tilde - 0.71699999999999997, 2)/std::pow(l_M_tilde - 0.14949999999999999, 2)) + 0.10000000000000001*exp(-3.9899134986753491*std::pow(l_M_tilde - 1.0, 2)))a_  (0.81399999999999995*std::exp(-19.051973784484073*std::pow(l_M_tilde - 1.0600000000000001, 2)/std::pow(0.39074074074074072*l_M_tilde + 1, 2)) + 0.433*std::exp(-12.499999999999998*std::pow(l_M_tilde - 0.71699999999999997, 2)/std::pow(l_M_tilde - 0.14949999999999999, 2)) + 0.10000000000000001*std::exp(-3.9899134986753491*std::pow(l_M_tilde - 1.0, 2)))a-        (0.814d0*exp(-19.051973784484073d0*(l_M_tilde - 1.06d0)**2/(
     @ 0.39074074074074072d0*l_M_tilde + 1.0d0)**2) + 0.433d0*exp(
     @ -12.499999999999998d0*(l_M_tilde - 0.717d0)**2/(l_M_tilde -
     @ 0.14949999999999999d0)**2) + 0.1d0*exp(-3.9899134986753491d0*(
     @ l_M_tilde - 1.0d0)**2))z(0.814*exp(-19.0519737844841*(l_M_tilde - 1.06).^2./(0.390740740740741*l_M_tilde + 1).^2) + 0.433*exp(-12.5*(l_M_tilde - 0.717).^2./(l_M_tilde - 0.1495).^2) + 0.1*exp(-3.98991349867535*(l_M_tilde - 1.0).^2))z(0.814*math.exp(-19.0519737844841*(l_M_tilde - 1.06)**2/(0.390740740740741*l_M_tilde + 1)**2) + 0.433*math.exp(-12.5*(l_M_tilde - 0.717)**2/(l_M_tilde - 0.1495)**2) + 0.1*math.exp(-3.98991349867535*(l_M_tilde - 1.0)**2))z(0.814*numpy.exp(-19.0519737844841*(l_M_tilde - 1.06)**2/(0.390740740740741*l_M_tilde + 1)**2) + 0.433*numpy.exp(-12.5*(l_M_tilde - 0.717)**2/(l_M_tilde - 0.1495)**2) + 0.1*numpy.exp(-3.98991349867535*(l_M_tilde - 1.0)**2))z(0.814*cupy.exp(-19.0519737844841*(l_M_tilde - 1.06)**2/(0.390740740740741*l_M_tilde + 1)**2) + 0.433*cupy.exp(-12.5*(l_M_tilde - 0.717)**2/(l_M_tilde - 0.1495)**2) + 0.1*cupy.exp(-3.98991349867535*(l_M_tilde - 1.0)**2))z(0.814*jax.numpy.exp(-19.0519737844841*(l_M_tilde - 1.06)**2/(0.390740740740741*l_M_tilde + 1)**2) + 0.433*jax.numpy.exp(-12.5*(l_M_tilde - 0.717)**2/(l_M_tilde - 0.1495)**2) + 0.1*jax.numpy.exp(-3.98991349867535*(l_M_tilde - 1.0)**2))aJ  (mpmath.mpf((0, 7331860193359167, -53, 53))*mpmath.exp(-mpmath.mpf((0, 5362653877279683, -48, 53))*(l_M_tilde + mpmath.mpf((1, 2386907802506363, -51, 52)))**2/(mpmath.mpf((0, 3519479708796943, -53, 52))*l_M_tilde + 1)**2) + mpmath.mpf((0, 7800234554605699, -54, 53))*mpmath.exp(-mpmath.mpf((0, 7036874417766399, -49, 53))*(l_M_tilde + mpmath.mpf((1, 6458161865649291, -53, 53)))**2/(l_M_tilde + mpmath.mpf((1, 5386305154335113, -55, 53)))**2) + mpmath.mpf((0, 3602879701896397, -55, 52))*mpmath.exp(-mpmath.mpf((0, 8984486472937407, -51, 53))*(l_M_tilde + mpmath.mpf((1, 1, 0, 1)))**2))c                 C   s$   t | j}| ||ks td S r,   )r   rg   r   r<   r=   )r4   r>   r?   r   r-   r-   r1   rw     s     5z6TestFiberForceLengthActiveDeGroote2016.test_print_codec                 C   s4   t | j}|| j}d}t ||ks0td S )Na  (0.79798269973507 - 0.79798269973507*l_M_tilde)*math.exp(-3.98991349867535*(l_M_tilde - 1.0)**2) + (10.825*(0.717 - l_M_tilde)/(l_M_tilde - 0.1495)**2 + 10.825*(l_M_tilde - 0.717)**2/(l_M_tilde - 0.1495)**3)*math.exp(-12.5*(l_M_tilde - 0.717)**2/(l_M_tilde - 0.1495)**2) + (31.0166133211401*(1.06 - l_M_tilde)/(0.390740740740741*l_M_tilde + 1)**2 + 13.6174190361677*(0.943396226415094*l_M_tilde - 1)**2/(0.390740740740741*l_M_tilde + 1)**3)*math.exp(-21.4067977442463*(0.943396226415094*l_M_tilde - 1)**2/(0.390740740740741*l_M_tilde + 1)**2))r   rg   r   rj   r&   r<   r=   )r4   r   Zfl_M_act_dl_M_tilder?   r-   r-   r1   rx     s
    zATestFiberForceLengthActiveDeGroote2016.test_derivative_print_codec                 C   s2   t | j}t| j|}|dtdks.td S )Nry   s?)r   rg   r   r'   rH   rz   r=   )r4   r   fl_M_act_callabler-   r-   r1   r|     s    z4TestFiberForceLengthActiveDeGroote2016.test_lambdifyNr}   r~   c                 C   sX   t | j}t| j|d}tdddddg}tddd	d
dg}tj||| d S )Nr)   r   r   ry   r          @	> P^?]Q?r   甄)`?ߌ'|?)r   rg   r   r'   r)   r   r   r   r4   r   r   r   r?   r-   r-   r1   r     s    z:TestFiberForceLengthActiveDeGroote2016.test_lambdify_numpyr   c                 C   sb   t | j}tt| j|d}tjdddddg}tjddd	d
dg}tj	||| d S )Nr(   r   r   ry   r   r   r   r   r   r   r   )
r   rg   r   r(   r   r'   r)   r   r   r   r   r-   r-   r1   r     s    z8TestFiberForceLengthActiveDeGroote2016.test_lambdify_jax)4r7   r8   r9   rH   r   r   rG   rZ   r_   r`   rd   rh   r   rm   rn   rq   rr   r   r   r   r   r   r   r   r   ru   rv   rI   rJ   r   r   r   r   r   r   r   r    r&   r#   r$   r!   r"   r%   r   rw   rx   r|   r   r)   r   r(   r   r-   r-   r-   r1   r   J  s   


	  4

r   c                   @   sD  e Zd Zejdddd Zedd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zejded fed fed fed!fed"fed"fed#fed$fed%fed&fe d&fe!d'fe"d(fe#d)fe$d*fgd+d, Z%d-d. Z&d/d0 Z'ejj(e)d1kd2d3d4d5 Z*ejj(e+d1kd6d3d7d8 Z,d1S )9"TestFiberForceVelocityDeGroote2016TrL   c                 C   sL   t d| _t d| _t d| _t d| _t d| _| j| j| j| jf| _d S )N	v_M_tilderN   rO   rP   rQ   )r   r   rR   rS   rT   rU   rV   rW   r-   r-   r1   ._muscle_fiber_force_velocity_arguments_fixture  s    




zQTestFiberForceVelocityDeGroote2016._muscle_fiber_force_velocity_arguments_fixturec                   C   s.   t ttstt ttsttjdks*td S )Nr   )rY   r   r   r=   r   r7   r-   r-   r-   r1   rZ     s    z-TestFiberForceVelocityDeGroote2016.test_classc                 C   s4   t | jf| j }t|t s tt|dks0td S )Nz=FiberForceVelocityDeGroote2016(v_M_tilde, c_0, c_1, c_2, c_3))r   r   rV   r[   r=   r\   r4   fv_Mr-   r-   r1   r_     s    z0TestFiberForceVelocityDeGroote2016.test_instancec                 C   sf   t | jf| j  }| jt| j| j | j t| j| j | j d d   | j	 }||ksbt
d S Nr   r   )r   r   rV   r6   rR   r
   rS   rT   r   rU   r=   r4   r   r?   r-   r-   r1   r`     s    z,TestFiberForceVelocityDeGroote2016.test_doitc                 C   sn   t | jf| j jdd}| jt| j| j | j tt	| j| j | j d d   | j
 }||ksjtd S )NFrb   r   r   )r   r   rV   r6   rR   r
   rS   rT   r   r   rU   r=   r   r-   r-   r1   rd     s     z;TestFiberForceVelocityDeGroote2016.test_doit_evaluate_falsec                 C   sH   t dt dt dt df}t| jf| }t| j}||ksDtd S Nz-0.318z-8.149z-0.374z0.886)r   r   r   rg   r=   )r4   rV   Zfv_M_manualZfv_M_constantsr-   r-   r1   rh     s    z5TestFiberForceVelocityDeGroote2016.test_with_defaultsc                 C   sX   t | jf| j }| j| j tt| j| j | j d d  }|| j|ksTt	d S r   )
r   r   rV   rR   rS   r   r   rT   rj   r=   r   r-   r-   r1    test_differentiate_wrt_v_M_tilde#  s    
 zCTestFiberForceVelocityDeGroote2016.test_differentiate_wrt_v_M_tildec                 C   sb   t | jf| j }t| j| j | j tt| j| j | j d d  }|| j	|ks^t
d S r   )r   r   rV   r
   rS   rT   r   r   rj   rR   r=   r   r-   r-   r1   rm   +  s     z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c0c                 C   sX   t | jf| j }| j| j tt| j| j | j d d  }|| j|ksTt	d S r   
r   r   rV   rR   r   r   rS   rT   rj   r=   r   r-   r-   r1   rn   3  s    
 z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c1c                 C   sR   t | jf| j }| jtt| j| j | j d d  }|| j|ksNt	d S r   r   r   r-   r-   r1   rq   ;  s     z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c2c                 C   s2   t | jf| j }td}|| j|ks.td S r   )r   r   rV   r   rj   rU   r=   r   r-   r-   r1   rr   C  s    z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c3c                 C   s&   t | jf| j }| tks"td S r,   )r   r   rV   rs   r   r=   r   r-   r-   r1   rt   H  s    z/TestFiberForceVelocityDeGroote2016.test_inversec                 C   s.   t | jf| j }d}t ||ks*td S )Nz.\operatorname{fv}^M \left( v_{M tilde} \right))r   r   rV   r   r<   r=   r   r-   r-   r1   ru   L  s    z<TestFiberForceVelocityDeGroote2016.test_function_print_latexc                 C   s2   t | jf| j }d}t | |ks.td S )Nzsc_{0} \log{\left(c_{1} v_{M tilde} + c_{2} + \sqrt{\left(c_{1} v_{M tilde} + c_{2}\right)^{2} + 1} \right)} + c_{3})r   r   rV   r   r<   r6   r=   r   r-   r-   r1   rv   Q  s    z>TestFiberForceVelocityDeGroote2016.test_expression_print_latexr+   z(0.88600000000000001 - 0.318*log(-8.1489999999999991*v_M_tilde - 0.374 + sqrt(1 + pow(-8.1489999999999991*v_M_tilde - 0.374, 2))))z(0.88600000000000001 - 0.318*log(-8.1489999999999991*v_M_tilde - 0.374 + std::sqrt(1 + std::pow(-8.1489999999999991*v_M_tilde - 0.374, 2))))z(0.88600000000000001 - 0.318*std::log(-8.1489999999999991*v_M_tilde - 0.374 + std::sqrt(1 + std::pow(-8.1489999999999991*v_M_tilde - 0.374, 2))))z      (0.886d0 - 0.318d0*log(-8.1489999999999991d0*v_M_tilde - 0.374d0 +
     @ sqrt(1.0d0 + (-8.149d0*v_M_tilde - 0.374d0)**2)))zW(0.886 - 0.318*log(-8.149*v_M_tilde - 0.374 + sqrt(1 + (-8.149*v_M_tilde - 0.374).^2)))za(0.886 - 0.318*math.log(-8.149*v_M_tilde - 0.374 + math.sqrt(1 + (-8.149*v_M_tilde - 0.374)**2)))zc(0.886 - 0.318*numpy.log(-8.149*v_M_tilde - 0.374 + numpy.sqrt(1 + (-8.149*v_M_tilde - 0.374)**2)))za(0.886 - 0.318*cupy.log(-8.149*v_M_tilde - 0.374 + cupy.sqrt(1 + (-8.149*v_M_tilde - 0.374)**2)))zk(0.886 - 0.318*jax.numpy.log(-8.149*v_M_tilde - 0.374 + jax.numpy.sqrt(1 + (-8.149*v_M_tilde - 0.374)**2)))aC  (mpmath.mpf((0, 7980378539700519, -53, 53)) - mpmath.mpf((0, 5728578726015271, -54, 53))*mpmath.log(-mpmath.mpf((0, 4587479170430271, -49, 53))*v_M_tilde + mpmath.mpf((1, 3368692521273131, -53, 52)) + mpmath.sqrt(1 + (-mpmath.mpf((0, 4587479170430271, -49, 53))*v_M_tilde + mpmath.mpf((1, 3368692521273131, -53, 52)))**2)))z\(0.886 - 0.318*math.log(-8.149*v_M_tilde - 0.374 + sqrt(1 + (-8.149*v_M_tilde - 0.374)**2)))c                 C   s$   t | j}| ||ks td S r,   )r   rg   r   r<   r=   )r4   r>   r?   r   r-   r-   r1   rw   Y  s    Uz2TestFiberForceVelocityDeGroote2016.test_print_codec                 C   s4   t | j}|| j}d}t ||ks0td S )Nz42.591382*(1 + (-8.149*v_M_tilde - 0.374)**2)**(-1/2))r   rg   r   rj   r&   r<   r=   )r4   r   Zdfv_M_dv_M_tilder?   r-   r-   r1   rx     s    z=TestFiberForceVelocityDeGroote2016.test_derivative_print_codec                 C   s2   t | j}t| j|}|dtdks.td S )Nr   gJ<_Y	?)r   rg   r   r'   rH   rz   r=   )r4   r   fv_M_callabler-   r-   r1   r|     s    z0TestFiberForceVelocityDeGroote2016.test_lambdifyNr}   r~   c                 C   sT   t | j}t| j|d}tddddg}tdddd	g}tj||| d S )
Nr)               r   r   $bG?5?[Y	?Ň^)\?)r   rg   r   r'   r)   r   r   r   r4   r   r   r   r?   r-   r-   r1   r     s    z6TestFiberForceVelocityDeGroote2016.test_lambdify_numpyr   c                 C   s^   t | j}tt| j|d}tjddddg}tjdddd	g}tj	||| d S )
Nr(   r   r   r   r   r   r   r  r  )
r   rg   r   r(   r   r'   r)   r   r   r   r  r-   r-   r1   r     s    z4TestFiberForceVelocityDeGroote2016.test_lambdify_jax)-r7   r8   r9   rH   r   r   rG   rZ   r_   r`   rd   rh   r   rm   rn   rq   rr   rt   ru   rv   rI   rJ   r   r   r   r   r   r   r   r    r&   r#   r$   r!   r"   r%   r   rw   rx   r|   r   r)   r   r(   r   r-   r-   r-   r1   r     s   



T

r   c                   @   sD  e Zd Zejdddd Zedd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zejded fed fed fed fed!fed!fed"fed#fed$fed%fe d%fe!d&fe"d'fe#d(fe$d$fgd)d* Z%d+d, Z&d-d. Z'ejj(e)d/kd0d1d2d3 Z*ejj(e+d/kd4d1d5d6 Z,d/S )7)TestFiberForceVelocityInverseDeGroote2016TrL   c                 C   sL   t d| _t d| _t d| _t d| _t d| _| j| j| j| jf| _d S )Nr   rN   rO   rP   rQ   )r   r   rR   rS   rT   rU   rV   rW   r-   r-   r1   r     s    




zXTestFiberForceVelocityInverseDeGroote2016._tendon_force_length_inverse_arguments_fixturec                   C   s.   t ttstt ttsttjdks*td S )Nr   )rY   r   r   r=   r   r7   r-   r-   r-   r1   rZ     s    z4TestFiberForceVelocityInverseDeGroote2016.test_classc                 C   s4   t | jf| j }t|t s tt|dks0td S )Nz?FiberForceVelocityInverseDeGroote2016(fv_M, c_0, c_1, c_2, c_3))r   r   rV   r[   r=   r\   r4   fv_M_invr-   r-   r1   r_     s    z7TestFiberForceVelocityInverseDeGroote2016.test_instancec                 C   sD   t | jf| j  }|t| j| j | j | j | j ks@t	d S r,   )
r   r   rV   r6   r   rU   rR   rT   rS   r=   r  r-   r-   r1   r`     s    z3TestFiberForceVelocityInverseDeGroote2016.test_doitc                 C   sL   t | jf| j jdd}|tt| j| j | j | j | j	 ksHt
d S ra   )r   r   rV   r6   r   r   rU   rR   rT   rS   r=   r  r-   r-   r1   rd     s    zBTestFiberForceVelocityInverseDeGroote2016.test_doit_evaluate_falsec                 C   sH   t dt dt dt df}t| jf| }t| j}||ksDtd S r   )r   r   r   rg   r=   )r4   rV   Zfv_M_inv_manualZfv_M_inv_constantsr-   r-   r1   rh     s    z<TestFiberForceVelocityInverseDeGroote2016.test_with_defaultsc                 C   sL   t | jf| j }t| j| j | j | j| j  }|| j|ksHtd S r,   	r   r   rV   r   rU   rR   rS   rj   r=   r4   r  r?   r-   r-   r1   test_differentiate_wrt_fv_M   s    "zETestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_fv_Mc                 C   s\   t | jf| j }| j| j t| j| j | j  | jd | j  }|| j|ksXtd S r   )	r   r   rV   rU   r   rR   rS   rj   r=   r  r-   r-   r1   rm     s    2zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c0c                 C   sP   t | jf| j }| jt| j| j | j  | jd  }|| j|ksLt	d S r   )
r   r   rV   rT   r   rU   rR   rS   rj   r=   r  r-   r-   r1   rn   
  s    &zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c1c                 C   s4   t | jf| j }d| j }|| j|ks0td S ro   )r   r   rV   rS   rj   rT   r=   r  r-   r-   r1   rq     s    
zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c2c                 C   sN   t | jf| j }t| j| j | j  | j| j  }|| j|ksJtd S r,   r  r  r-   r-   r1   rr     s    $zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c3c                 C   s&   t | jf| j }| tks"td S r,   )r   r   rV   rs   r   r=   r  r-   r-   r1   rt     s    z6TestFiberForceVelocityInverseDeGroote2016.test_inversec                 C   s.   t | jf| j }d}t ||ks*td S )Nz=\left( \operatorname{fv}^M \right)^{-1} \left( fv_{M} \right))r   r   rV   r   r<   r=   r  r-   r-   r1   ru     s    zCTestFiberForceVelocityInverseDeGroote2016.test_function_print_latexc                 C   s2   t | jf| j }d}t | |ks.td S )NzK\frac{- c_{2} + \sinh{\left(\frac{- c_{3} + fv_{M}}{c_{0}} \right)}}{c_{1}})r   r   rV   r   r<   r6   r=   r   r-   r-   r1   rv   "  s    zETestFiberForceVelocityInverseDeGroote2016.test_expression_print_latexr+   zV(-0.12271444348999878*(0.374 - sinh(3.1446540880503142*(fv_M - 0.88600000000000001))))z[(-0.12271444348999878*(0.374 - std::sinh(3.1446540880503142*(fv_M - 0.88600000000000001))))z[      (-0.122714443489999d0*(0.374d0 - sinh(3.1446540880503142d0*(fv_M -
     @ 0.886d0))))zD(-0.122714443489999*(0.374 - sinh(3.14465408805031*(fv_M - 0.886))))zI(-0.122714443489999*(0.374 - math.sinh(3.14465408805031*(fv_M - 0.886))))zJ(-0.122714443489999*(0.374 - numpy.sinh(3.14465408805031*(fv_M - 0.886))))zI(-0.122714443489999*(0.374 - cupy.sinh(3.14465408805031*(fv_M - 0.886))))zN(-0.122714443489999*(0.374 - jax.numpy.sinh(3.14465408805031*(fv_M - 0.886))))z(-mpmath.mpf((0, 8842507551592581, -56, 53))*(mpmath.mpf((0, 3368692521273131, -53, 52)) - mpmath.sinh(mpmath.mpf((0, 7081131489576251, -51, 53))*(fv_M + mpmath.mpf((1, 7980378539700519, -53, 53))))))c                 C   s$   t | j}| ||ks td S r,   )r   rg   r   r<   r=   )r4   r>   r?   r  r-   r-   r1   rw   '  s    Sz9TestFiberForceVelocityInverseDeGroote2016.test_print_codec                 C   s4   t | j}|| j}d}t ||ks0td S )NzE0.385894476383644*math.cosh(3.14465408805031*fv_M - 2.78616352201258))r   rg   r   rj   r&   r<   r=   )r4   r  Zdfv_M_inv_dfv_Mr?   r-   r-   r1   rx   }  s
    zDTestFiberForceVelocityInverseDeGroote2016.test_derivative_print_codec                 C   s2   t | j}t| j|}|dtdks.td S )Nry   gM8'$JO)r   rg   r   r'   rH   rz   r=   )r4   r  fv_M_inv_callabler-   r-   r1   r|     s    z7TestFiberForceVelocityInverseDeGroote2016.test_lambdifyNr}   r~   c                 C   sX   t | j}t| j|d}tdddddg}tddd	d
dg}tj||| d S )Nr)   r   r   ry   r   r   gUYm7H:Ʋ$JO^8?H?)r   rg   r   r'   r)   r   r   r   r4   r  r
  r   r?   r-   r-   r1   r     s    z=TestFiberForceVelocityInverseDeGroote2016.test_lambdify_numpyr   c                 C   sb   t | j}tt| j|d}tjdddddg}tjddd	d
dg}tj	||| d S )Nr(   r   r   ry   r   r   r  r  r  r  r  )
r   rg   r   r(   r   r'   r)   r   r   r   r  r-   r-   r1   r     s    z;TestFiberForceVelocityInverseDeGroote2016.test_lambdify_jax)-r7   r8   r9   rH   r   r   rG   rZ   r_   r`   rd   rh   r	  rm   rn   rq   rr   rt   ru   rv   rI   rJ   r   r   r   r   r   r   r   r    r&   r#   r$   r!   r"   r%   r   rw   rx   r|   r   r)   r   r(   r   r-   r-   r-   r1   r    s   


R
	
r  c                   @   sr   e Zd Zedd Zeejjdddd Zeej	dde
ie
eeeeeed	d
gdd Zedd Zd	S )!TestCharacteristicCurveCollectionc               	   C   s|   t tttttttd} | jtks$t	| j
tks2t	| jtks@t	| jtksNt	| jtks\t	| jtksjt	| jtksxt	d S N)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_inverse)r   r   r   r   r   r   r   r   r  r=   r  r  r  r  r  r  Zcurvesr-   r-   r1   test_valid_constructor  s     	z8TestCharacteristicCurveCollection.test_valid_constructorz.kw_only dataclasses only valid in Python >3.10r~   c               	   C   s.   t t ttttttt	t
} W 5 Q R X d S r,   )rH   raises	TypeErrorr   r   r   r   r   r   r   r   )_r-   r-   r1   %test_invalid_constructor_keyword_only  s    zGTestCharacteristicCurveCollection.test_invalid_constructor_keyword_onlyr5   r  N)r  r  r  r  r  r  r  Zextra_kwargc              	   C   s$   t t tf | }W 5 Q R X d S r,   )rH   r  r  r   )r5   r  r-   r-   r1   *test_invalid_constructor_wrong_number_args  s    zLTestCharacteristicCurveCollection.test_invalid_constructor_wrong_number_argsc               	   C   s   t tttttttd} t	t
 d | _W 5 Q R X t	t
 d | _W 5 Q R X t	t
 d | _W 5 Q R X t	t
 d | _W 5 Q R X t	t
 d | _W 5 Q R X t	t
 d | _W 5 Q R X t	t
 d | _W 5 Q R X d S r  )r   r   r   r   r   r   r   r   rH   r  AttributeErrorr  r  r  r  r  r  r  r  r-   r-   r1   test_instance_is_immutable  s.    	z<TestCharacteristicCurveCollection.test_instance_is_immutable)r7   r8   r9   rG   r  rH   rI   skipr  rJ   r   r   r   r   r   r   r   r   r"  r-   r-   r-   r1   r    s.   
r  )G__doc__rH   Zsympy.core.exprr   Zsympy.core.functionr   Zsympy.core.numbersr   r   Zsympy.core.symbolr   r   Zsympy.external.importtoolsr   Z&sympy.functions.elementary.exponentialr	   r
   Z%sympy.functions.elementary.hyperbolicr   r   Z(sympy.functions.elementary.miscellaneousr   Z sympy.physics.biomechanics.curver   r   r   r   r   r   r   r   r   Zsympy.printing.cr   r   r   Zsympy.printing.cxxr   r   r   Zsympy.printing.fortranr   Zsympy.printing.lambdareprr   Zsympy.printing.latexr   Zsympy.printing.octaver    Zsympy.printing.numpyr!   r"   r#   r$   Zsympy.printing.pycoder%   r&   Zsympy.utilities.lambdifyr'   r(   r)   configupdater*   rK   r   r   r   r   r   r  r  r-   r-   r-   r1   <module>   sR   ,* > B < 6   + f R