a
    kh(                    @   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^J 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-   Y/var/www/auris/lib/python3.9/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)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   rE   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/u d0d1d2d3 Z*ejj(e+d/u 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   rL   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J t ttsJ tjdks*J d S )Nr   )
issubclassr   r   r   r7   r-   r-   r-   r1   
test_classg   s    z,TestTendonForceLengthDeGroote2016.test_classc                 C   s6   t | jg| jR  }t|t s"J t|dks2J d S )Nz<TendonForceLengthDeGroote2016(l_T_tilde, c_0, c_1, c_2, c_3))r   rL   rU   
isinstancestrr4   fl_Tr-   r-   r1   test_instancem   s    z/TestTendonForceLengthDeGroote2016.test_instancec                 C   sF   t | jg| jR   }|| jt| j| j| j   | j ksBJ d S r,   )	r   rL   rU   r6   rQ   r	   rT   rR   rS   r\   r-   r-   r1   	test_doitr   s    z+TestTendonForceLengthDeGroote2016.test_doitc                 C   sN   t | jg| jR  jdd}|| jt| jt| j| j   | j	 ksJJ d S NFevaluate)
r   rL   rU   r6   rQ   r	   rT   r   rR   rS   r\   r-   r-   r1   test_doit_evaluate_falsev   s    z:TestTendonForceLengthDeGroote2016.test_doit_evaluate_falsec                 C   sJ   t dt dt dt df}t| jg|R  }t| j}||ksFJ d S N0.2z0.995z0.25z33.93669377311689)r   r   rL   with_defaults)r4   rU   Zfl_T_manualZfl_T_constantsr-   r-   r1   test_with_defaultsz   s    z4TestTendonForceLengthDeGroote2016.test_with_defaultsc                 C   sT   t | jg| jR  }| j| j t| jt| j | j   }|| j|ksPJ d S r,   	r   rL   rU   rQ   rT   r	   r   rR   diffr4   r]   r>   r-   r-   r1    test_differentiate_wrt_l_T_tilde   s    (zBTestTendonForceLengthDeGroote2016.test_differentiate_wrt_l_T_tildec                 C   sH   t | jg| jR  }t| jt| j | j  }|| j|ksDJ d S r,   )	r   rL   rU   r	   rT   r   rR   ri   rQ   rj   r-   r-   r1   test_differentiate_wrt_c0   s    z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c0c                 C   sT   t | jg| jR  }| j | j t| jt| j| j   }|| j|ksPJ d S r,   rh   rj   r-   r-   r1   test_differentiate_wrt_c1   s    (z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c1c                 C   s4   t | jg| jR  }td}|| j|ks0J d S N)r   rL   rU   r   ri   rS   rj   r-   r-   r1   test_differentiate_wrt_c2   s    z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c2c                 C   sX   t | jg| jR  }| j| j| j  t| jt| j| j   }|| j|ksTJ d S r,   )	r   rL   rU   rQ   rR   r	   rT   r   ri   rj   r-   r-   r1   test_differentiate_wrt_c3   s    ,z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c3c                 C   s(   t | jg| jR  }| tu s$J d S r,   )r   rL   rU   inverser   r\   r-   r-   r1   test_inverse   s    z.TestTendonForceLengthDeGroote2016.test_inversec                 C   s0   t | jg| jR  }d}t ||ks,J d S )Nz.\operatorname{fl}^T \left( l_{T tilde} \right))r   rL   rU   r   r<   rj   r-   r-   r1   test_function_print_latex   s    z;TestTendonForceLengthDeGroote2016.test_function_print_latexc                 C   s4   t | jg| jR  }d}t | |ks0J d S )Nz:c_{0} e^{c_{3} \left(- c_{1} + l_{T tilde}\right)} - c_{2})r   rL   rU   r   r<   r6   rj   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 J d S r,   )r   rf   rL   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s0J d S )NzA6.787338754623378*math.exp(33.93669377311689*(l_T_tilde - 0.995)))r   rf   rL   ri   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.J d S )N      ?g A)r   rf   rL   r'   rG   approx)r4   r]   fl_T_callabler-   r-   r1   test_lambdify   s    z/TestTendonForceLengthDeGroote2016.test_lambdifyNNumPy not installedreasonc                 C   sL   t | j}t| j|d}tg d}tg d}tj||| d S )Nr)   gffffff?rx   )\(??gOpʿg Agg.?gY估?)r   rf   rL   r'   r)   arraytestingassert_allcloser4   r]   rz   rL   r>   r-   r-   r1   test_lambdify_numpy   s
    z5TestTendonForceLengthDeGroote2016.test_lambdify_numpyJAX not installedc                 C   sV   t | j}tt| j|d}tjg d}tjg d}tj	||| d S )Nr(   r   r   )
r   rf   rL   r(   jitr'   r)   r   r   r   r   r-   r-   r1   test_lambdify_jax  s
    z3TestTendonForceLengthDeGroote2016.test_lambdify_jax)-r7   r8   r9   rG   fixturerW   rF   rY   r^   r_   rc   rg   rk   rl   rm   rp   rq   rs   rt   ru   rH   rI   r   r   r   r   r   r   r   r    r&   r#   r$   r!   r"   r%   r   rv   rw   r{   skipifr)   r   r(   r   r-   r-   r-   r1   rJ   \   s   


C

rJ   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/u d0d1d2d3 Z*ejj(e+d/u d4d1d5d6 Z,d/S )7(TestTendonForceLengthInverseDeGroote2016TrK   c                 C   sL   t d| _t d| _t d| _t d| _t d| _| j| j| j| jf| _d S )Nr]   rM   rN   rO   rP   )r   r]   rQ   rR   rS   rT   rU   rV   r-   r-   r1   ._tendon_force_length_inverse_arguments_fixture  s    




zWTestTendonForceLengthInverseDeGroote2016._tendon_force_length_inverse_arguments_fixturec                   C   s.   t ttsJ t ttsJ tjdks*J d S )Nr   )rX   r   r   r   r7   r-   r-   r-   r1   rY   $  s    z3TestTendonForceLengthInverseDeGroote2016.test_classc                 C   s6   t | jg| jR  }t|t s"J t|dks2J d S )Nz>TendonForceLengthInverseDeGroote2016(fl_T, c_0, c_1, c_2, c_3))r   r]   rU   rZ   r[   r4   fl_T_invr-   r-   r1   r^   *  s    z6TestTendonForceLengthInverseDeGroote2016.test_instancec                 C   sF   t | jg| jR   }|t| j| j | j | j | j ksBJ d S r,   )	r   r]   rU   r6   r
   rS   rQ   rT   rR   r   r-   r-   r1   r_   /  s    z2TestTendonForceLengthInverseDeGroote2016.test_doitc                 C   sN   t | jg| jR  jdd}|tt| j| j | j | j | j	 ksJJ d S r`   )
r   r]   rU   r6   r
   r   rS   rQ   rT   rR   r   r-   r-   r1   rc   3  s    zATestTendonForceLengthInverseDeGroote2016.test_doit_evaluate_falsec                 C   sJ   t dt dt dt df}t| jg|R  }t| j}||ksFJ d S rd   )r   r   r]   rf   )r4   rU   Zfl_T_inv_manualZfl_T_inv_constantsr-   r-   r1   rg   7  s    z;TestTendonForceLengthInverseDeGroote2016.test_with_defaultsc                 C   sB   t | jg| jR  }d| j| j| j   }|| j|ks>J d S N   r   r]   rU   rT   rS   ri   r4   r   r>   r-   r-   r1   test_differentiate_wrt_fl_TB  s    zDTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_fl_Tc                 C   s<   t | jg| jR  }d| j| j  }|| j|ks8J d S rn   )r   r]   rU   rQ   rT   ri   r   r-   r-   r1   rl   G  s    zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c0c                 C   s4   t | jg| jR  }td}|| j|ks0J d S r   )r   r]   rU   r   ri   rR   r   r-   r-   r1   rm   L  s    zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c1c                 C   sB   t | jg| jR  }d| j| j| j   }|| j|ks>J d S r   r   r   r-   r-   r1   rp   Q  s    zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c2c                 C   sR   t | jg| jR  }tt| j| j | j  | jd  }|| j|ksNJ d S N   )	r   r]   rU   r
   r   rS   rQ   rT   ri   r   r-   r-   r1   rq   V  s    &zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c3c                 C   s(   t | jg| jR  }| tu s$J d S r,   )r   r]   rU   rr   r   r   r-   r-   r1   rs   [  s    z5TestTendonForceLengthInverseDeGroote2016.test_inversec                 C   s0   t | jg| jR  }d}t ||ks,J d S )Nz=\left( \operatorname{fl}^T \right)^{-1} \left( fl_{T} \right))r   r]   rU   r   r<   r   r-   r-   r1   rt   _  s    zBTestTendonForceLengthInverseDeGroote2016.test_function_print_latexc                 C   s4   t | jg| jR  }d}t | |ks0J d S )NzFc_{1} + \frac{\log{\left(\frac{c_{2} + fl_{T}}{c_{0}} \right)}}{c_{3}})r   r]   rU   r   r<   r6   rj   r-   r-   r1   ru   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 J d S r,   )r   rf   r]   r<   )r4   r=   r>   r   r-   r-   r1   rv   i  s    Dz8TestTendonForceLengthInverseDeGroote2016.test_print_codec                 C   s4   t | j}|| j}d}t ||ks0J d S )Nz.1/(33.93669377311689*fl_T + 8.484173443279222))r   rf   r]   ri   r&   r<   )r4   r   Zdfl_T_inv_dfl_Tr>   r-   r-   r1   rw     s    zCTestTendonForceLengthInverseDeGroote2016.test_derivative_print_codec                 C   s2   t | j}t| j|}|dtdks.J d S )N        mIs?)r   rf   r]   r'   rG   ry   )r4   r   fl_T_inv_callabler-   r-   r1   r{     s    z6TestTendonForceLengthInverseDeGroote2016.test_lambdifyNr|   r}   c                 C   sL   t | j}t| j|d}tg d}tg d}tj||| d S )Nr)   gɿ{Gzr   r   gRQ?r   gPgf?g}?r   gyl?g­?gp?)r   rf   r]   r'   r)   r   r   r   r4   r   r   r]   r>   r-   r-   r1   r     s
    z<TestTendonForceLengthInverseDeGroote2016.test_lambdify_numpyr   c                 C   sV   t | j}tt| j|d}tjg d}tjg d}tj	||| d S )Nr(   r   r   )
r   rf   r]   r(   r   r'   r)   r   r   r   r   r-   r-   r1   r     s
    z:TestTendonForceLengthInverseDeGroote2016.test_lambdify_jax)-r7   r8   r9   rG   r   r   rF   rY   r^   r_   rc   rg   r   rl   rm   rp   rq   rs   rt   ru   rH   rI   r   r   r   r   r   r   r   r    r&   r#   r$   r!   r"   r%   r   rv   rw   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+u d,d-d.d/ Z(ejj&e)d+u d0d-d1d2 Z*d+S )3'TestFiberForceLengthPassiveDeGroote2016TrK   c                 C   s0   t d| _t d| _t d| _| j| jf| _d S )N	l_M_tilderM   rN   )r   r   rQ   rR   rU   rV   r-   r-   r1   -_fiber_force_length_passive_arguments_fixture  s    


zUTestFiberForceLengthPassiveDeGroote2016._fiber_force_length_passive_arguments_fixturec                   C   s.   t ttsJ t ttsJ tjdks*J d S )Nr   )rX   r   r   r   r7   r-   r-   r-   r1   rY     s    z2TestFiberForceLengthPassiveDeGroote2016.test_classc                 C   s6   t | jg| jR  }t|t s"J t|dks2J d S )Nz8FiberForceLengthPassiveDeGroote2016(l_M_tilde, c_0, c_1))r   r   rU   rZ   r[   r4   fl_M_pasr-   r-   r1   r^     s    z5TestFiberForceLengthPassiveDeGroote2016.test_instancec                 C   sP   t | jg| jR   }|t| j| jd  | j d t| jd  ksLJ d S r   )r   r   rU   r6   r	   rR   rQ   r   r-   r-   r1   r_     s    z1TestFiberForceLengthPassiveDeGroote2016.test_doitc                 C   sX   t | jg| jR  jdd}|t| jt| jd  | j d t| jd  ksTJ d S NFra   r   )r   r   rU   r6   r	   rR   r   rQ   r   r-   r-   r1   rc     s    z@TestFiberForceLengthPassiveDeGroote2016.test_doit_evaluate_falsec                 C   s>   t dt df}t| jg|R  }t| j}||ks:J d S Nz0.6z4.0)r   r   r   rf   )r4   rU   Zfl_M_pas_manualZfl_M_pas_constantsr-   r-   r1   rg     s    z:TestFiberForceLengthPassiveDeGroote2016.test_with_defaultsc                 C   sd   t | jg| jR  }| jt| jt| jd  | j  | jt| jd   }|| j|ks`J d S r   r   r   rU   rR   r	   r   rQ   ri   r4   r   r>   r-   r-   r1    test_differentiate_wrt_l_M_tilde  s    8zHTestFiberForceLengthPassiveDeGroote2016.test_differentiate_wrt_l_M_tildec                 C   sx   t | jg| jR  }| j t| jt| jd  | j  t| jd  | jd t| jd   }|| j|kstJ d S Nr   r   r   r   r-   r-   r1   rl     s    $zATestFiberForceLengthPassiveDeGroote2016.test_differentiate_wrt_c0c                 C   s   t | jg| jR  }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sJ d S )Nro   r   r   )r   r   rU   r	   rR   r   rQ   ri   r   r-   r-   r1   rm     s    >:zATestFiberForceLengthPassiveDeGroote2016.test_differentiate_wrt_c1c                 C   s(   t | jg| jR  }| tu s$J d S r,   )r   r   rU   rr   r   r   r-   r-   r1   rs     s    z4TestFiberForceLengthPassiveDeGroote2016.test_inversec                 C   s0   t | jg| jR  }d}t ||ks,J d S )Nz4\operatorname{fl}^M_{pas} \left( l_{M tilde} \right))r   r   rU   r   r<   r   r-   r-   r1   rt     s    zATestFiberForceLengthPassiveDeGroote2016.test_function_print_latexc                 C   s4   t | jg| jR  }d}t | |ks0J d S )NzN\frac{e^{\frac{c_{1} \left(l_{M tilde} - 1\right)}{c_{0}}} - 1}{e^{c_{1}} - 1})r   r   rU   r   r<   r6   r   r-   r-   r1   ru     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 J d S r,   )r   rf   r   r<   )r4   r=   r>   r   r-   r-   r1   rv   "  s    Dz7TestFiberForceLengthPassiveDeGroote2016.test_print_codec                 C   s4   t | j}|| j}d}t ||ks0J d S )Nz;0.12438240242516*math.exp(6.66666666666667*(l_M_tilde - 1)))r   rf   r   ri   r&   r<   )r4   r   Zfl_M_pas_dl_M_tilder>   r-   r-   r1   rw   i  s    zBTestFiberForceLengthPassiveDeGroote2016.test_derivative_print_codec                 C   s2   t | j}t| j|}|dtdks.J d S )Nrx   r   )r   rf   r   r'   rG   ry   )r4   r   fl_M_pas_callabler-   r-   r1   r{   o  s    z5TestFiberForceLengthPassiveDeGroote2016.test_lambdifyNr|   r}   c                 C   sL   t | j}t| j|d}tg d}tg d}tj||| d S )Nr)         ?皙??rx   皙?333333?      ?g1olgx#^#ggΫr   g4],eI?g-˯?gO#?)r   rf   r   r'   r)   r   r   r   r4   r   r   r   r>   r-   r-   r1   r   t  s
    	z;TestFiberForceLengthPassiveDeGroote2016.test_lambdify_numpyr   c                 C   sV   t | j}tt| j|d}tjg d}tjg d}tj	||| d S )Nr(   r   r   )
r   rf   r   r(   r   r'   r)   r   r   r   r   r-   r-   r1   r     s
    	z9TestFiberForceLengthPassiveDeGroote2016.test_lambdify_jax)+r7   r8   r9   rG   r   r   rF   rY   r^   r_   rc   rg   r   rl   rm   rs   rt   ru   rH   rI   r   r   r   r   r   r   r   r    r&   r#   r$   r!   r"   r%   r   rv   rw   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+u d,d-d.d/ Z(ejj&e)d+u d0d-d1d2 Z*d+S )3.TestFiberForceLengthPassiveInverseDeGroote2016TrK   c                 C   s0   t d| _t d| _t d| _| j| jf| _d S )Nr   rM   rN   )r   r   rQ   rR   rU   rV   r-   r-   r1   r     s    


z\TestFiberForceLengthPassiveInverseDeGroote2016._fiber_force_length_passive_arguments_fixturec                   C   s.   t ttsJ t ttsJ tjdks*J d S )Nr   )rX   r   r   r   r7   r-   r-   r-   r1   rY     s    z9TestFiberForceLengthPassiveInverseDeGroote2016.test_classc                 C   s6   t | jg| jR  }t|t s"J t|dks2J d S )Nz>FiberForceLengthPassiveInverseDeGroote2016(fl_M_pas, c_0, c_1))r   r   rU   rZ   r[   r4   fl_M_pas_invr-   r-   r1   r^     s    z<TestFiberForceLengthPassiveInverseDeGroote2016.test_instancec                 C   sP   t | jg| jR   }|| jt| jt| jd  d  | j d ksLJ d S r   )r   r   rU   r6   rQ   r
   r	   rR   r   r-   r-   r1   r_     s    z8TestFiberForceLengthPassiveInverseDeGroote2016.test_doitc                 C   sX   t | jg| jR  jdd}|| jtt| jt| jd  d  | j d ksTJ d S r   )	r   r   rU   r6   rQ   r
   r   r	   rR   r   r-   r-   r1   rc     s    zGTestFiberForceLengthPassiveInverseDeGroote2016.test_doit_evaluate_falsec                 C   s>   t dt df}t| jg|R  }t| j}||ks:J d S r   )r   r   r   rf   )r4   rU   Zfl_M_pas_inv_manualZfl_M_pas_inv_constantsr-   r-   r1   rg     s    zATestFiberForceLengthPassiveInverseDeGroote2016.test_with_defaultsc                 C   s^   t | jg| jR  }| jt| jd  | j| jt| jd  d   }|| j|ksZJ d S r   )r   r   rU   rQ   r	   rR   ri   r4   r   r>   r-   r-   r1   r     s    2zJTestFiberForceLengthPassiveInverseDeGroote2016.test_differentiate_wrt_fl_Tc                 C   sN   t | jg| jR  }t| jt| jd  d | j }|| j|ksJJ d S r   )r   r   rU   r
   r	   rR   ri   rQ   r   r-   r-   r1   rl     s    "zHTestFiberForceLengthPassiveInverseDeGroote2016.test_differentiate_wrt_c0c                 C   s   t | jg| jR  }| j| j t| j | j| jt| jd  d   | jt| jt| jd  d  | jd   }|| j|ksJ d S r   )r   r   rU   rQ   r	   rR   r
   ri   r   r-   r-   r1   rm     s    2*zHTestFiberForceLengthPassiveInverseDeGroote2016.test_differentiate_wrt_c1c                 C   s(   t | jg| jR  }| tu s$J d S r,   )r   r   rU   rr   r   r   r-   r-   r1   rs     s    z;TestFiberForceLengthPassiveInverseDeGroote2016.test_inversec                 C   s0   t | jg| jR  }d}t ||ks,J d S )NzG\left( \operatorname{fl}^M_{pas} \right)^{-1} \left( fl_{M pas} \right))r   r   rU   r   r<   r   r-   r-   r1   rt     s    zHTestFiberForceLengthPassiveInverseDeGroote2016.test_function_print_latexc                 C   s4   t | jg| jR  }d}t | |ks0J d S )NzU\frac{c_{0} \log{\left(fl_{M pas} \left(e^{c_{1}} - 1\right) + 1 \right)}}{c_{1}} + 1)r   r   rU   r   r<   r6   rj   r-   r-   r1   ru     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 J d S r,   )r   rf   r   r<   )r4   r=   r>   r   r-   r-   r1   rv     s    Cz>TestFiberForceLengthPassiveInverseDeGroote2016.test_print_codec                 C   s4   t | j}|| j}d}t ||ks0J d S )Nz232.1588900198865/(214.392600132577*fl_M_pas + 4.0))r   rf   r   ri   r&   r<   )r4   r   Zdfl_M_pas_inv_dfl_Tr>   r-   r-   r1   rw      s    zITestFiberForceLengthPassiveInverseDeGroote2016.test_derivative_print_codec                 C   s2   t | j}t| j|}|dtdks.J d S )Nr   rx   )r   rf   r   r'   rG   ry   )r4   r   fl_M_pas_inv_callabler-   r-   r1   r{   &  s    z<TestFiberForceLengthPassiveInverseDeGroote2016.test_lambdifyNr|   r}   c                 C   sL   t | j}t| j|d}tg d}tg d}tj||| d S )Nr)   r   r   g{Gz?g{Gz?g?g?gL}P?rx   g>7?g,5?gx~ ?ghlp?)r   rf   r   r'   r)   r   r   r   r4   r   r   r   r>   r-   r-   r1   r   +  s
    zBTestFiberForceLengthPassiveInverseDeGroote2016.test_lambdify_numpyr   c                 C   sV   t | j}tt| j|d}tjg d}tjg d}tj	||| d S )Nr(   r   r   )
r   rf   r   r(   r   r'   r)   r   r   r   r   r-   r-   r1   r   :  s
    z@TestFiberForceLengthPassiveInverseDeGroote2016.test_lambdify_jax)+r7   r8   r9   rG   r   r   rF   rY   r^   r_   rc   rg   r   rl   rm   rs   rt   ru   rH   rI   r   r   r   r   r   r   r   r    r&   r#   r$   r!   r"   r%   r   rv   rw   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>u d?d@dAdB Z1ejj/e2d>u dCd@dDdE Z3d>S )F&TestFiberForceLengthActiveDeGroote2016TrK   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   rM   rN   rO   rP   Zc_4Zc_5Zc_6Zc_7Zc_8Zc_9Zc_10Zc_11)r   r   rQ   rR   rS   rT   c4c5c6c7c8c9c10c11rU   rV   r-   r-   r1   ,_fiber_force_length_active_arguments_fixtureL  s     












zSTestFiberForceLengthActiveDeGroote2016._fiber_force_length_active_arguments_fixturec                   C   s.   t ttsJ t ttsJ tjdks*J d S )Nr   )rX   r   r   r   r7   r-   r-   r-   r1   rY   `  s    z1TestFiberForceLengthActiveDeGroote2016.test_classc                 C   s6   t | jg| jR  }t|t s"J t|dks2J 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   rU   rZ   r[   r4   fl_M_actr-   r-   r1   r^   f  s
    z4TestFiberForceLengthActiveDeGroote2016.test_instancec                 C   s   t | jg| jR   }|| 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sJ d S r   )r   r   rU   r6   rQ   r	   rR   rS   rT   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g| jR  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sJ d S )NFra   r   )r   r   rU   r6   rQ   r	   r   rR   rS   rT   r   r   r   r   r   r   r   r   r   r-   r-   r1   rc   v  s    444z?TestFiberForceLengthActiveDeGroote2016.test_doit_evaluate_falsec                 C   sz   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g|R  }t| j}||ksvJ d S )Nz0.814z1.06z0.162z0.0633z0.433z0.717z-0.0299re   z0.1z1.0z0.354z0.0)r   r   r   rf   )r4   rU   Zfl_M_act_manualZfl_M_act_constantsr-   r-   r1   rg   ~  s     z9TestFiberForceLengthActiveDeGroote2016.test_with_defaultsc                 C   s  t | jg| jR  }| 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sJ d S Nr      )r   r   rU   rQ   rT   rR   rS   r	   r   r   r   r   r   r   r   r   ri   r4   r   r>   r-   r-   r1   r     s4    * .* .* .zGTestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_l_M_tildec                 C   s`   t | jg| jR  }t| j| j d  d| j| j| j  d   }| | j	|ks\J d S r   )
r   r   rU   r	   rR   rS   rT   r6   ri   rQ   r   r-   r-   r1   rl     s    0z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c0c                 C   s   t | jg| jR  }| j| j| j  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|ksJ d S r   	r   r   rU   rQ   rR   rS   rT   r	   ri   r   r-   r-   r1   rm     s    &.z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c1c                 C   s   t | jg| jR  }| j| j| j d  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|ksJ d S r   r   r   r-   r-   r1   rp     s    *.z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c2c                 C   s   t | jg| jR  }| j| j | j| j d  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|ksJ d S r   r   r   r-   r-   r1   rq     s    0.z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c3c                 C   s\   t | jg| jR  }t| j| j d  d| j| j| j  d   }|| j|ksXJ d S r   )	r   r   rU   r	   r   r   r   ri   r   r   r-   r-   r1   test_differentiate_wrt_c4  s    0z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c4c                 C   s   t | jg| jR  }| j| j| j  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|ksJ d S r   	r   r   rU   r   r   r   r   r	   ri   r   r-   r-   r1   test_differentiate_wrt_c5  s    &.z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c5c                 C   s   t | jg| jR  }| j| j| j d  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|ksJ d S r   r   r   r-   r-   r1   test_differentiate_wrt_c6  s    *.z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c6c                 C   s   t | jg| jR  }| j| j | j| j d  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|ksJ d S r   r   r   r-   r-   r1   test_differentiate_wrt_c7  s    0.z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c7c                 C   s\   t | jg| jR  }t| j| j d  d| j| j| j  d   }|| j|ksXJ d S r   )	r   r   rU   r	   r   r   r   ri   r   r   r-   r-   r1   test_differentiate_wrt_c8  s    0z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c8c                 C   s   t | jg| jR  }| j| j| j  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|ksJ d S r   	r   r   rU   r   r   r   r   r	   ri   r   r-   r-   r1   test_differentiate_wrt_c9  s    &.z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c9c                 C   s   t | jg| jR  }| j| j| j d  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|ksJ d S r   r   r   r-   r-   r1   test_differentiate_wrt_c10  s    *.zATestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c10c                 C   s   t | jg| jR  }| j| j | j| j d  | j| j| j  d  t| j| j d  d| j| j| j  d    }|| j|ksJ d S r   r   r   r-   r-   r1   test_differentiate_wrt_c11  s    0.zATestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c11c                 C   s0   t | jg| jR  }d}t ||ks,J d S )Nz4\operatorname{fl}^M_{act} \left( l_{M tilde} \right))r   r   rU   r   r<   r   r-   r-   r1   rt     s    z@TestFiberForceLengthActiveDeGroote2016.test_function_print_latexc                 C   s4   t | jg| jR  }d}t | |ks0J 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   rU   r   r<   r6   r   r-   r-   r1   ru     s    zBTestFiberForceLengthActiveDeGroote2016.test_expression_print_latexr+   aI  (0.81399999999999995*exp(-1.0/2.0*pow(l_M_tilde - 1.0600000000000001, 2)/pow(0.063299999999999995*l_M_tilde + 0.16200000000000001, 2)) + 0.433*exp(-1.0/2.0*pow(l_M_tilde - 0.71699999999999997, 2)/pow(0.20000000000000001*l_M_tilde - 0.029899999999999999, 2)) + 0.10000000000000001*exp(-3.9899134986753491*pow(l_M_tilde - 1.0, 2)))ab  (0.81399999999999995*exp(-1.0/2.0*std::pow(l_M_tilde - 1.0600000000000001, 2)/std::pow(0.063299999999999995*l_M_tilde + 0.16200000000000001, 2)) + 0.433*exp(-1.0/2.0*std::pow(l_M_tilde - 0.71699999999999997, 2)/std::pow(0.20000000000000001*l_M_tilde - 0.029899999999999999, 2)) + 0.10000000000000001*exp(-3.9899134986753491*std::pow(l_M_tilde - 1.0, 2)))aq  (0.81399999999999995*std::exp(-1.0/2.0*std::pow(l_M_tilde - 1.0600000000000001, 2)/std::pow(0.063299999999999995*l_M_tilde + 0.16200000000000001, 2)) + 0.433*std::exp(-1.0/2.0*std::pow(l_M_tilde - 0.71699999999999997, 2)/std::pow(0.20000000000000001*l_M_tilde - 0.029899999999999999, 2)) + 0.10000000000000001*std::exp(-3.9899134986753491*std::pow(l_M_tilde - 1.0, 2)))a6        (0.814d0*exp(-0.5d0*(l_M_tilde - 1.06d0)**2/(
     @ 0.063299999999999995d0*l_M_tilde + 0.16200000000000001d0)**2) +
     @ 0.433d0*exp(-0.5d0*(l_M_tilde - 0.717d0)**2/(
     @ 0.20000000000000001d0*l_M_tilde - 0.029899999999999999d0)**2) +
     @ 0.1d0*exp(-3.9899134986753491d0*(l_M_tilde - 1.0d0)**2))z(0.814*exp(-(l_M_tilde - 1.06).^2./(2*(0.0633*l_M_tilde + 0.162).^2)) + 0.433*exp(-(l_M_tilde - 0.717).^2./(2*(0.2*l_M_tilde - 0.0299).^2)) + 0.1*exp(-3.98991349867535*(l_M_tilde - 1.0).^2))z(0.814*math.exp(-1/2*(l_M_tilde - 1.06)**2/(0.0633*l_M_tilde + 0.162)**2) + 0.433*math.exp(-1/2*(l_M_tilde - 0.717)**2/(0.2*l_M_tilde - 0.0299)**2) + 0.1*math.exp(-3.98991349867535*(l_M_tilde - 1.0)**2))z(0.814*numpy.exp(-1/2*(l_M_tilde - 1.06)**2/(0.0633*l_M_tilde + 0.162)**2) + 0.433*numpy.exp(-1/2*(l_M_tilde - 0.717)**2/(0.2*l_M_tilde - 0.0299)**2) + 0.1*numpy.exp(-3.98991349867535*(l_M_tilde - 1.0)**2))z(0.814*cupy.exp(-1/2*(l_M_tilde - 1.06)**2/(0.0633*l_M_tilde + 0.162)**2) + 0.433*cupy.exp(-1/2*(l_M_tilde - 0.717)**2/(0.2*l_M_tilde - 0.0299)**2) + 0.1*cupy.exp(-3.98991349867535*(l_M_tilde - 1.0)**2))z(0.814*jax.numpy.exp(-1/2*(l_M_tilde - 1.06)**2/(0.0633*l_M_tilde + 0.162)**2) + 0.433*jax.numpy.exp(-1/2*(l_M_tilde - 0.717)**2/(0.2*l_M_tilde - 0.0299)**2) + 0.1*jax.numpy.exp(-3.98991349867535*(l_M_tilde - 1.0)**2))a  (mpmath.mpf((0, 7331860193359167, -53, 53))*mpmath.exp(-mpmath.mpf(1)/mpmath.mpf(2)*(l_M_tilde + mpmath.mpf((1, 2386907802506363, -51, 52)))**2/(mpmath.mpf((0, 2280622851300419, -55, 52))*l_M_tilde + mpmath.mpf((0, 5836665117072163, -55, 53)))**2) + mpmath.mpf((0, 7800234554605699, -54, 53))*mpmath.exp(-mpmath.mpf(1)/mpmath.mpf(2)*(l_M_tilde + mpmath.mpf((1, 6458161865649291, -53, 53)))**2/(mpmath.mpf((0, 3602879701896397, -54, 52))*l_M_tilde + mpmath.mpf((1, 8618088246936181, -58, 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 J d S r,   )r   rf   r   r<   )r4   r=   r>   r   r-   r-   r1   rv     s    dz6TestFiberForceLengthActiveDeGroote2016.test_print_codec                 C   s4   t | j}|| j}d}t ||ks0J d S )Na  (0.79798269973507 - 0.79798269973507*l_M_tilde)*math.exp(-3.98991349867535*(l_M_tilde - 1.0)**2) + (0.433*(0.717 - l_M_tilde)/(0.2*l_M_tilde - 0.0299)**2 + 0.0866*(l_M_tilde - 0.717)**2/(0.2*l_M_tilde - 0.0299)**3)*math.exp(-1/2*(l_M_tilde - 0.717)**2/(0.2*l_M_tilde - 0.0299)**2) + (0.814*(1.06 - l_M_tilde)/(0.0633*l_M_tilde + 0.162)**2 + 0.0515262*(l_M_tilde - 1.06)**2/(0.0633*l_M_tilde + 0.162)**3)*math.exp(-1/2*(l_M_tilde - 1.06)**2/(0.0633*l_M_tilde + 0.162)**2))r   rf   r   ri   r&   r<   )r4   r   Zfl_M_act_dl_M_tilder>   r-   r-   r1   rw   o  s
    zATestFiberForceLengthActiveDeGroote2016.test_derivative_print_codec                 C   s2   t | j}t| j|}|dtdks.J d S )Nrx   s?)r   rf   r   r'   rG   ry   )r4   r   fl_M_act_callabler-   r-   r1   r{   w  s    z4TestFiberForceLengthActiveDeGroote2016.test_lambdifyNr|   r}   c                 C   sL   t | j}t| j|d}tg d}tg d}tj||| d S )Nr)   r   r   rx   r   g       @g	> P^?g]Q?r   g)`?gߌ'|?)r   rf   r   r'   r)   r   r   r   r4   r   r   r   r>   r-   r-   r1   r   |  s
    z:TestFiberForceLengthActiveDeGroote2016.test_lambdify_numpyr   c                 C   sV   t | j}tt| j|d}tjg d}tjg d}tj	||| d S )Nr(   r   r   )
r   rf   r   r(   r   r'   r)   r   r   r   r   r-   r-   r1   r     s
    z8TestFiberForceLengthActiveDeGroote2016.test_lambdify_jax)4r7   r8   r9   rG   r   r   rF   rY   r^   r_   rc   rg   r   rl   rm   rp   rq   r   r   r   r   r   r   r   r   rt   ru   rH   rI   r   r   r   r   r   r   r   r    r&   r#   r$   r!   r"   r%   r   rv   rw   r{   r   r)   r   r(   r   r-   r-   r-   r1   r   J  s   


	c

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)d1u d2d3d4d5 Z*ejj(e+d1u d6d3d7d8 Z,d1S )9"TestFiberForceVelocityDeGroote2016TrK   c                 C   sL   t d| _t d| _t d| _t d| _t d| _| j| j| j| jf| _d S )N	v_M_tilderM   rN   rO   rP   )r   r   rQ   rR   rS   rT   rU   rV   r-   r-   r1   ._muscle_fiber_force_velocity_arguments_fixture  s    




zQTestFiberForceVelocityDeGroote2016._muscle_fiber_force_velocity_arguments_fixturec                   C   s.   t ttsJ t ttsJ tjdks*J d S )Nr   )rX   r   r   r   r7   r-   r-   r-   r1   rY     s    z-TestFiberForceVelocityDeGroote2016.test_classc                 C   s6   t | jg| jR  }t|t s"J t|dks2J d S )Nz=FiberForceVelocityDeGroote2016(v_M_tilde, c_0, c_1, c_2, c_3))r   r   rU   rZ   r[   r4   fv_Mr-   r-   r1   r^     s    z0TestFiberForceVelocityDeGroote2016.test_instancec                 C   sh   t | jg| jR   }| jt| j| j | j t| j| j | j d d   | j	 }||ksdJ d S Nr   r   )
r   r   rU   r6   rQ   r
   rR   rS   r   rT   r4   r   r>   r-   r-   r1   r_     s    z,TestFiberForceVelocityDeGroote2016.test_doitc                 C   sp   t | jg| jR  jdd}| jt| j| j | j tt	| j| j | j d d   | j
 }||kslJ d S )NFra   r   r   )r   r   rU   r6   rQ   r
   rR   rS   r   r   rT   r   r-   r-   r1   rc     s     z;TestFiberForceVelocityDeGroote2016.test_doit_evaluate_falsec                 C   sJ   t dt dt dt df}t| jg|R  }t| j}||ksFJ d S Nz-0.318z-8.149z-0.374z0.886)r   r   r   rf   )r4   rU   Zfv_M_manualZfv_M_constantsr-   r-   r1   rg     s    z5TestFiberForceVelocityDeGroote2016.test_with_defaultsc                 C   sZ   t | jg| jR  }| j| j tt| j| j | j d d  }|| j|ksVJ d S r   )	r   r   rU   rQ   rR   r   r   rS   ri   r   r-   r-   r1    test_differentiate_wrt_v_M_tilde  s    
 zCTestFiberForceVelocityDeGroote2016.test_differentiate_wrt_v_M_tildec                 C   sd   t | jg| jR  }t| j| j | j tt| j| j | j d d  }|| j	|ks`J d S r   )
r   r   rU   r
   rR   rS   r   r   ri   rQ   r   r-   r-   r1   rl     s     z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c0c                 C   sZ   t | jg| jR  }| j| j tt| j| j | j d d  }|| j|ksVJ d S r   	r   r   rU   rQ   r   r   rR   rS   ri   r   r-   r-   r1   rm     s    
 z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c1c                 C   sT   t | jg| jR  }| jtt| j| j | j d d  }|| j|ksPJ d S r   r   r   r-   r-   r1   rp     s     z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c2c                 C   s4   t | jg| jR  }td}|| j|ks0J d S r   )r   r   rU   r   ri   rT   r   r-   r-   r1   rq     s    z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c3c                 C   s(   t | jg| jR  }| tu s$J d S r,   )r   r   rU   rr   r   r   r-   r-   r1   rs     s    z/TestFiberForceVelocityDeGroote2016.test_inversec                 C   s0   t | jg| jR  }d}t ||ks,J d S )Nz.\operatorname{fv}^M \left( v_{M tilde} \right))r   r   rU   r   r<   r   r-   r-   r1   rt     s    z<TestFiberForceVelocityDeGroote2016.test_function_print_latexc                 C   s4   t | jg| jR  }d}t | |ks0J 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   rU   r   r<   r6   r   r-   r-   r1   ru     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 J d S r,   )r   rf   r   r<   )r4   r=   r>   r   r-   r-   r1   rv      s    Uz2TestFiberForceVelocityDeGroote2016.test_print_codec                 C   s4   t | j}|| j}d}t ||ks0J d S )Nz42.591382*(1 + (-8.149*v_M_tilde - 0.374)**2)**(-1/2))r   rf   r   ri   r&   r<   )r4   r   Zdfv_M_dv_M_tilder>   r-   r-   r1   rw   X  s    z=TestFiberForceVelocityDeGroote2016.test_derivative_print_codec                 C   s2   t | j}t| j|}|dtdks.J d S )Nr   gJ<_Y	?)r   rf   r   r'   rG   ry   )r4   r   fv_M_callabler-   r-   r1   r{   ^  s    z0TestFiberForceVelocityDeGroote2016.test_lambdifyNr|   r}   c                 C   sL   t | j}t| j|d}tg d}tg d}tj||| d S )Nr)   g      g      r   r   g$bG?g5?g[Y	?gŇ^)\?)r   rf   r   r'   r)   r   r   r   r4   r   r   r   r>   r-   r-   r1   r   c  s
    z6TestFiberForceVelocityDeGroote2016.test_lambdify_numpyr   c                 C   sV   t | j}tt| j|d}tjg d}tjg d}tj	||| d S )Nr(   r   r   )
r   rf   r   r(   r   r'   r)   r   r   r   r   r-   r-   r1   r   p  s
    z4TestFiberForceVelocityDeGroote2016.test_lambdify_jax)-r7   r8   r9   rG   r   r   rF   rY   r^   r_   rc   rg   r   rl   rm   rp   rq   rs   rt   ru   rH   rI   r   r   r   r   r   r   r   r    r&   r#   r$   r!   r"   r%   r   rv   rw   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/u d0d1d2d3 Z*ejj(e+d/u d4d1d5d6 Z,d/S )7)TestFiberForceVelocityInverseDeGroote2016TrK   c                 C   sL   t d| _t d| _t d| _t d| _t d| _| j| j| j| jf| _d S )Nr   rM   rN   rO   rP   )r   r   rQ   rR   rS   rT   rU   rV   r-   r-   r1   r     s    




zXTestFiberForceVelocityInverseDeGroote2016._tendon_force_length_inverse_arguments_fixturec                   C   s.   t ttsJ t ttsJ tjdks*J d S )Nr   )rX   r   r   r   r7   r-   r-   r-   r1   rY     s    z4TestFiberForceVelocityInverseDeGroote2016.test_classc                 C   s6   t | jg| jR  }t|t s"J t|dks2J d S )Nz?FiberForceVelocityInverseDeGroote2016(fv_M, c_0, c_1, c_2, c_3))r   r   rU   rZ   r[   r4   fv_M_invr-   r-   r1   r^     s    z7TestFiberForceVelocityInverseDeGroote2016.test_instancec                 C   sF   t | jg| jR   }|t| j| j | j | j | j ksBJ d S r,   )	r   r   rU   r6   r   rT   rQ   rS   rR   r   r-   r-   r1   r_     s    z3TestFiberForceVelocityInverseDeGroote2016.test_doitc                 C   sN   t | jg| jR  jdd}|tt| j| j | j | j | j	 ksJJ d S r`   )
r   r   rU   r6   r   r   rT   rQ   rS   rR   r   r-   r-   r1   rc     s    zBTestFiberForceVelocityInverseDeGroote2016.test_doit_evaluate_falsec                 C   sJ   t dt dt dt df}t| jg|R  }t| j}||ksFJ d S r   )r   r   r   rf   )r4   rU   Zfv_M_inv_manualZfv_M_inv_constantsr-   r-   r1   rg     s    z<TestFiberForceVelocityInverseDeGroote2016.test_with_defaultsc                 C   sN   t | jg| jR  }t| j| j | j | j| j  }|| j|ksJJ d S r,   r   r   rU   r   rT   rQ   rR   ri   r4   r   r>   r-   r-   r1   test_differentiate_wrt_fv_M  s    "zETestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_fv_Mc                 C   s^   t | jg| jR  }| j| j t| j| j | j  | jd | j  }|| j|ksZJ d S r   )r   r   rU   rT   r   rQ   rR   ri   r   r-   r-   r1   rl     s    2zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c0c                 C   sR   t | jg| jR  }| jt| j| j | j  | jd  }|| j|ksNJ d S r   )	r   r   rU   rS   r   rT   rQ   rR   ri   r   r-   r-   r1   rm     s    &zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c1c                 C   s6   t | jg| jR  }d| j }|| j|ks2J d S rn   )r   r   rU   rR   ri   rS   r   r-   r-   r1   rp     s    
zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c2c                 C   sP   t | jg| jR  }t| j| j | j  | j| j  }|| j|ksLJ d S r,   r   r   r-   r-   r1   rq     s    $zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c3c                 C   s(   t | jg| jR  }| tu s$J d S r,   )r   r   rU   rr   r   r   r-   r-   r1   rs     s    z6TestFiberForceVelocityInverseDeGroote2016.test_inversec                 C   s0   t | jg| jR  }d}t ||ks,J d S )Nz=\left( \operatorname{fv}^M \right)^{-1} \left( fv_{M} \right))r   r   rU   r   r<   r   r-   r-   r1   rt     s    zCTestFiberForceVelocityInverseDeGroote2016.test_function_print_latexc                 C   s4   t | jg| jR  }d}t | |ks0J d S )NzK\frac{- c_{2} + \sinh{\left(\frac{- c_{3} + fv_{M}}{c_{0}} \right)}}{c_{1}})r   r   rU   r   r<   r6   r   r-   r-   r1   ru     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 J d S r,   )r   rf   r   r<   )r4   r=   r>   r   r-   r-   r1   rv     s    Sz9TestFiberForceVelocityInverseDeGroote2016.test_print_codec                 C   s4   t | j}|| j}d}t ||ks0J d S )NzE0.385894476383644*math.cosh(3.14465408805031*fv_M - 2.78616352201258))r   rf   r   ri   r&   r<   )r4   r   Zdfv_M_inv_dfv_Mr>   r-   r-   r1   rw   $  s
    zDTestFiberForceVelocityInverseDeGroote2016.test_derivative_print_codec                 C   s2   t | j}t| j|}|dtdks.J d S )Nrx   gM8'$JO)r   rf   r   r'   rG   ry   )r4   r   fv_M_inv_callabler-   r-   r1   r{   -  s    z7TestFiberForceVelocityInverseDeGroote2016.test_lambdifyNr|   r}   c                 C   sL   t | j}t| j|d}tg d}tg d}tj||| d S )Nr)   r   r   rx   r   r   ggUYgm7H:gƲ$JOg^8?gH?)r   rf   r   r'   r)   r   r   r   r4   r   r   r   r>   r-   r-   r1   r   2  s
    z=TestFiberForceVelocityInverseDeGroote2016.test_lambdify_numpyr   c                 C   sV   t | j}tt| j|d}tjg d}tjg d}tj	||| d S )Nr(   r   r   )
r   rf   r   r(   r   r'   r)   r   r   r   r   r-   r-   r1   r   @  s
    z;TestFiberForceVelocityInverseDeGroote2016.test_lambdify_jax)-r7   r8   r9   rG   r   r   rF   rY   r^   r_   rc   rg   r   rl   rm   rp   rq   rs   rt   ru   rH   rI   r   r   r   r   r   r   r   r    r&   r#   r$   r!   r"   r%   r   rv   rw   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u s$J | j	tu s2J | j
tu s@J | jtu sNJ | jtu s\J | jtu sjJ | jtu sxJ 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   Zcurvesr-   r-   r1   test_valid_constructorQ  s     	z8TestCharacteristicCurveCollection.test_valid_constructorz.kw_only dataclasses only valid in Python >3.10r}   c               	   C   sB   t t$ ttttttt	t
} W d    n1 s40    Y  d S r,   )rG   raises	TypeErrorr   r   r   r   r   r   r   r   )_r-   r-   r1   %test_invalid_constructor_keyword_onlyd  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 i | }W d    n1 s.0    Y  d S r,   )rG   r   r   r   )r5   r   r-   r-   r1   *test_invalid_constructor_wrong_number_argsr  s    zLTestCharacteristicCurveCollection.test_invalid_constructor_wrong_number_argsc               	   C   sn  t tttttttd} t	t
 d | _W d    n1 s<0    Y  t	t
 d | _W d    n1 sl0    Y  t	t
 d | _W d    n1 s0    Y  t	t
 d | _W d    n1 s0    Y  t	t
 d | _W d    n1 s0    Y  t	t
 d | _W d    n1 s.0    Y  t	t
 d | _W d    n1 s`0    Y  d S r   )r   r   r   r   r   r   r   r   rG   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   rF   r   rG   rH   skipr  rI   r   r   r   r   r   r   r   r  r  r-   r-   r-   r1   r   O  s.   
r   )G__doc__rG   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*   rJ   r   r   r   r   r   r   r   r-   r-   r-   r1   <module>   sP   ,* > B < 6  Q f R