U
    ZÊ¹jã/ ã                   @   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-   új/var/www/html/bwave/python/venv/lib/python3.8/site-packages/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ç        ç¡mIÏsð?)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)   çš™™™™™É¿ç{®Gáz„¿rœ   r�   çR¸…ëQð?r‚   çP×gÊfˆî?ç´ß}†ð?r�   ççy¬lªÉð?ççªÂ­žÊð?çº‚Ê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s¢t‚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ó?ç      ø?ç1ÙýÄol’¿çx¿Ø#^#Œ¿ç‘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s†t‚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œ   ç{®Gáz„?ç{®Gáz”?çš™™™™™©?çš™™™™™¹?ç‘°L}Pì?ry   ç>7Š®ñ?ç,à5––¿ñ?çÝx¹€~ ó?çh¾lº£pô?)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s´t‚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sÄt‚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�s´t‚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s‚t	‚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sˆt	‚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s‚t	‚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sˆt	‚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s‚t	‚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sˆt	‚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   g±M8'$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ËUY´¿çm7éH:»¤¿çÆ²È$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