
    g/                       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:re:j<        =                    dd            G d d          Z> G d d          Z? G d d          Z@ G d d           ZA G d! d"          ZB G d# d$          ZC G d% d&          ZD G d' d(          ZE G 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numpyjax_enable_x64Tc                       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                         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                      G d dt                     }t          d          \  }}}}}} |||          }	 |||          }
 |||          } |                                 |	|
z  |z            |k    sJ d S )Nc                   *    e Zd Zed             Zd ZdS )UTestCharacteristicCurveFunction.test_print_code_parenthesize.<locals>.ExampleFunctionc                     d S N )clsabs      g/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/physics/biomechanics/tests/test_curve.pyevalzZTestCharacteristicCurveFunction.test_print_code_parenthesize.<locals>.ExampleFunction.evalM   s        c                      | j         \  }}||z   S r3   )args)selfkwargsr6   r7   s       r8   doitzZTestCharacteristicCurveFunction.test_print_code_parenthesize.<locals>.ExampleFunction.doitQ   s    y11ur:   N)__name__
__module____qualname__classmethodr9   r?   r4   r:   r8   ExampleFunctionr1   K   s<          [    r:   rD   za, b, c, d, e, f)r   r   doprint)code_printerexpectedrD   r6   r7   cdeff1f2f3s               r8   test_print_code_parenthesizez<TestCharacteristicCurveFunction.test_print_code_parenthesize4   s    .	 	 	 	 	9 	 	 	 ##5661aAq_Q""_Q""_Q""|~~%%beBh//8;;;;;;r:   N)r@   rA   rB   staticmethodpytestmarkparametrizer   r   r   r   r   r   r   r!   r'   r$   r%   r"   r#   r&   r   rO   r4   r:   r8   r-   r-   2   s        [ 676767898989:; ;< 9:454534235656	
 (< <)  \*< < <r:   r-   c                      e Zd Z ej        d          d             Zed             Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Z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             Z%d Z&d Z'ej        (                    e)du d           d!             Z*ej        (                    e+du d"           d#             Z,dS )$!TestTendonForceLengthDeGroote2016Tautousec                    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   rY   c0c1c2c3	constantsr=   s    r8   &_tendon_force_length_arguments_fixturezHTestTendonForceLengthDeGroote2016._tendon_force_length_arguments_fixture^   a    ,,--------'47DGTW=r:   c                      t          t          t                    sJ t          t          t                    sJ t          j        dk    sJ d S )Nr   )
issubclassr   r   r   r@   r4   r:   r8   
test_classz,TestTendonForceLengthDeGroote2016.test_classg   sL    7BBBBB79TUUUUU,59XXXXXXXr:   c                     t          | j        g| j        R  }t          |t                     sJ t	          |          dk    sJ d S )Nz<TendonForceLengthDeGroote2016(l_T_tilde, c_0, c_1, c_2, c_3))r   rY   rb   
isinstancestrr=   fl_Ts     r8   test_instancez/TestTendonForceLengthDeGroote2016.test_instancem   sP    ,T^MdnMMM$ =>>>>>4yyZZZZZZZr:   c                     t          | j        g| j        R                                  }|| j        t          | j        | j        | j        z
  z            z  | j        z
  k    sJ d S r3   )	r   rY   rb   r?   r^   r
   ra   r_   r`   rl   s     r8   	test_doitz+TestTendonForceLengthDeGroote2016.test_doitr   sd    ,T^MdnMMMRRTTtws47DNTW,D#EFFFPPPPPPPr:   c           	          t          | j        g| j        R                      d          }|| j        t          | j        t          | j        | j        z
            z            z  | j	        z
  k    sJ d S NFevaluate)
r   rY   rb   r?   r^   r
   ra   r   r_   r`   rl   s     r8   test_doit_evaluate_falsez:TestTendonForceLengthDeGroote2016.test_doit_evaluate_falsev   st    ,T^MdnMMMRR\aRbbtws47?4>DG;S+T+T#TUUUX\X________r:   c                     t          d          t          d          t          d          t          d          f}t          | j        g|R  }t          j        | j                  }||k    sJ d S N0.2z0.995z0.25z33.93669377311689)r   r   rY   with_defaults)r=   rb   fl_T_manualfl_T_constantss       r8   test_with_defaultsz4TestTendonForceLengthDeGroote2016.test_with_defaultsz   sr    %LL'NN&MM%&&	
	 4DNOYOOO6DT^TTn,,,,,,r:   c                     t          | j        g| j        R  }| j        | j        z  t          | j        t          | j         | j        z             z            z  }|                    | j                  |k    sJ d S r3   	r   rY   rb   r^   ra   r
   r   r_   diffr=   rm   rG   s      r8    test_differentiate_wrt_l_T_tildezBTestTendonForceLengthDeGroote2016.test_differentiate_wrt_l_T_tilde   st    ,T^MdnMMM747?3twx$.?X/Y/Y'Y#Z#ZZyy((H444444r:   c                     t          | j        g| j        R  }t          | j        t          | j         | j        z             z            }|                    | j                  |k    sJ d S r3   )	r   rY   rb   r
   ra   r   r_   r   r^   r   s      r8   test_differentiate_wrt_c0z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c0   sg    ,T^MdnMMMtwx$./HIIIJJyy!!X------r:   c                     t          | j        g| j        R  }| j         | j        z  t          | j        t          | j        | j        z
            z            z  }|                    | j                  |k    sJ d S r3   r~   r   s      r8   test_differentiate_wrt_c1z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c1   sw    ,T^MdnMMMG8DG#CQUQX@X0Y0Y(Y$Z$ZZyy!!X------r:   c                     t          | j        g| j        R  }t          d          }|                    | j                  |k    sJ d S N)r   rY   rb   r   r   r`   r   s      r8   test_differentiate_wrt_c2z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c2   sK    ,T^MdnMMM2;;yy!!X------r:   c                    t          | j        g| j        R  }| j        | j        | j        z
  z  t          | j        t          | j        | j        z
            z            z  }|                    | j                  |k    sJ d S r3   )	r   rY   rb   r^   r_   r
   ra   r   r   r   s      r8   test_differentiate_wrt_c3z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c3   s~    ,T^MdnMMM7DNTW45c$'/RVR`cgcjRjBkBk:k6l6llyy!!X------r:   c                 n    t          | j        g| j        R  }|                                t          u sJ d S r3   )r   rY   rb   inverser   rl   s     r8   test_inversez.TestTendonForceLengthDeGroote2016.test_inverse   s;    ,T^MdnMMM||~~!EEEEEEEr:   c                     t          | j        g| j        R  }d}t                                          |          |k    sJ d S )Nz.\operatorname{fl}^T \left( l_{T tilde} \right))r   rY   rb   r    rE   r   s      r8   test_function_print_latexz;TestTendonForceLengthDeGroote2016.test_function_print_latex   sI    ,T^MdnMMMD~~%%d++x777777r:   c                     t          | j        g| j        R  }d}t                                          |                                          |k    sJ d S )Nz:c_{0} e^{c_{3} \left(- c_{1} + l_{T tilde}\right)} - c_{2})r   rY   rb   r    rE   r?   r   s      r8   test_expression_print_latexz=TestTendonForceLengthDeGroote2016.test_expression_print_latex   sQ    ,T^MdnMMMP~~%%diikk22h>>>>>>r:   r.   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                 ~    t          j        | j                  } |                                |          |k    sJ d S r3   )r   ry   rY   rE   )r=   rF   rG   rm   s       r8   test_print_codez1TestTendonForceLengthDeGroote2016.test_print_code   sB    H -:4>JJ|~~%%d++x777777r:   c                     t          j        | j                  }|                    | j                  }d}t	                                          |          |k    sJ d S )NzA6.787338754623378*math.exp(33.93669377311689*(l_T_tilde - 0.995)))r   ry   rY   r   r'   rE   )r=   rm   dfl_T_dl_T_tilderG   s       r8   test_derivative_print_codez<TestTendonForceLengthDeGroote2016.test_derivative_print_code   sY    ,:4>JJ99T^44V ""**+;<<HHHHHHr:   c                     t          j        | j                  }t          | j        |          } |d          t	          j        d          k    sJ d S )N      ?g A)r   ry   rY   r(   rQ   approx)r=   rm   fl_T_callables      r8   test_lambdifyz/TestTendonForceLengthDeGroote2016.test_lambdify   sQ    ,:4>JJ 66}S!!V]3H%I%IIIIIIIr:   NNumPy not installedreasonc                 &   t          j        | j                  }t          | j        |d          }t                              g d          }t                              g d          }t          j                             ||          |           d S )Nr*   gffffff?r   )\(??gOpʿg Agg.?gY估?)r   ry   rY   r(   r*   arraytestingassert_allcloser=   rm   r   rY   rG   s        r8   test_lambdify_numpyz5TestTendonForceLengthDeGroote2016.test_lambdify_numpy   s    ,:4>JJ w??KK 7 7 788	;;  
  
  
   	%%mmI&>&>IIIIIr:   JAX not installedc                 j   t          j        | j                  }t                              t          | j        |d                    }t          j                            g d          }t          j                            g d          }t          j        	                     ||          |           d S )Nr)   r   r   )
r   ry   rY   r)   jitr(   r*   r   r   r   r   s        r8   test_lambdify_jaxz3TestTendonForceLengthDeGroote2016.test_lambdify_jax  s    ,:4>JJu E EFFIOO$;$;$;<<	9?? $
 $
 $
   	%%mmI&>&>IIIIIr:   )-r@   rA   rB   rQ   fixturerd   rP   rh   rn   rp   ru   r|   r   r   r   r   r   r   r   r   rR   rS   r   r   r   r   r   r   r   r!   r'   r$   r%   r"   r#   r&   r   r   r   r   skipifr*   r   r)   r   r4   r:   r8   rU   rU   \   s       V^D!!!> > "!> Y Y \Y
[ [ [
Q Q Q` ` `	- 	- 	-5 5 5
. . .
. . .
. . .
. . .
F F F8 8 8
? ? ?
 [  Z
 Z
 Z
 !Z
 !_
 !_
 X
 "J
 "O
 P
 P
 O
 T
 @ Ow?	
B BF8 8GB BF8I I IJ J J
 [.CDD
J 
J ED
J [t,?@@
J 
J A@
J 
J 
Jr:   rU   c                      e Zd Z ej        d          d             Zed             Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Z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             Z%d Z&d Z'ej        (                    e)du d           d!             Z*ej        (                    e+du d"           d#             Z,dS )$(TestTendonForceLengthInverseDeGroote2016TrV   c                    t          d          | _        t          d          | _        t          d          | _        t          d          | _        t          d          | _        | j        | j        | j        | j        f| _        d S )Nrm   rZ   r[   r\   r]   )r   rm   r^   r_   r`   ra   rb   rc   s    r8   ._tendon_force_length_inverse_arguments_fixturezWTestTendonForceLengthInverseDeGroote2016._tendon_force_length_inverse_arguments_fixture  _    6NN	--------'47DGTW=r:   c                      t          t          t                    sJ t          t          t                    sJ t          j        dk    sJ d S )Nr   )rg   r   r   r   r@   r4   r:   r8   rh   z3TestTendonForceLengthInverseDeGroote2016.test_class$  sL    >IIIII>@[\\\\\3<@fffffffr:   c                     t          | j        g| j        R  }t          |t                     sJ t	          |          dk    sJ d S )Nz>TendonForceLengthInverseDeGroote2016(fl_T, c_0, c_1, c_2, c_3))r   rm   rb   rj   rk   r=   fl_T_invs     r8   rn   z6TestTendonForceLengthInverseDeGroote2016.test_instance*  sP    7	SDNSSS($HIIIII8}} ```````r:   c                     t          | j        g| j        R                                  }|t	          | j        | j        z   | j        z            | j        z  | j        z   k    sJ d S r3   )	r   rm   rb   r?   r   r`   r^   ra   r_   r   s     r8   rp   z2TestTendonForceLengthInverseDeGroote2016.test_doit/  sd    7	SDNSSSXXZZ3	DG 3TW<==dgEOOOOOOOr:   c                     t          | j        g| j        R                      d          }|t	          t          | j        | j        z   | j        z                      | j        z  | j	        z   k    sJ d S rr   )
r   rm   rb   r?   r   r   r`   r^   ra   r_   r   s     r8   ru   zATestTendonForceLengthInverseDeGroote2016.test_doit_evaluate_false3  st    7	SDNSSSXXbgXhh3	DG0CTW/LMMNNtwVY]Y````````r:   c                     t          d          t          d          t          d          t          d          f}t          | j        g|R  }t          j        | j                  }||k    sJ d S rw   )r   r   rm   ry   )r=   rb   fl_T_inv_manualfl_T_inv_constantss       r8   r|   z;TestTendonForceLengthInverseDeGroote2016.test_with_defaults7  sv    %LL'NN&MM%&&	
	 ?tyU9UUUAOPTPYZZ"4444444r:   c                     t          | j        g| j        R  }d| j        | j        | j        z   z  z  }|                    | j                  |k    sJ d S N   r   rm   rb   ra   r`   r   r=   r   rG   s      r8   test_differentiate_wrt_fl_TzDTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_fl_TB  sZ    7	SDNSSSdgty47234}}TY''8333333r:   c                     t          | j        g| j        R  }d| j        | j        z  z  }|                    | j                  |k    sJ d S r   )r   rm   rb   r^   ra   r   r   s      r8   r   zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c0G  sR    7	SDNSSStwtw'}}TW%%111111r:   c                     t          | j        g| j        R  }t          d          }|                    | j                  |k    sJ d S r   )r   rm   rb   r   r   r_   r   s      r8   r   zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c1L  sK    7	SDNSSS1::}}TW%%111111r:   c                     t          | j        g| j        R  }d| j        | j        | j        z   z  z  }|                    | j                  |k    sJ d S r   r   r   s      r8   r   zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c2Q  sZ    7	SDNSSSdgty47234}}TW%%111111r:   c                     t          | j        g| j        R  }t          t	          | j        | j        z   | j        z                       | j        dz  z  }|                    | j                  |k    sJ d S N   )	r   rm   rb   r   r   r`   r^   ra   r   r   s      r8   r   zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c3V  st    7	SDNSSSTW)<dg(EFFGGGQR
R}}TW%%111111r:   c                 n    t          | j        g| j        R  }|                                t          u sJ d S r3   )r   rm   rb   r   r   r   s     r8   r   z5TestTendonForceLengthInverseDeGroote2016.test_inverse[  s?    7	SDNSSS!!%BBBBBBBr:   c                     t          | j        g| j        R  }d}t                                          |          |k    sJ d S )Nz=\left( \operatorname{fl}^T \right)^{-1} \left( fl_{T} \right))r   rm   rb   r    rE   r   s      r8   r   zBTestTendonForceLengthInverseDeGroote2016.test_function_print_latex_  sI    7	SDNSSSS~~%%h//8;;;;;;r:   c                     t          | j        g| j        R  }d}t                                          |                                          |k    sJ d S )NzFc_{1} + \frac{\log{\left(\frac{c_{2} + fl_{T}}{c_{0}} \right)}}{c_{3}})r   rm   rb   r    rE   r?   r   s      r8   r   zDTestTendonForceLengthInverseDeGroote2016.test_expression_print_latexd  sQ    3DIOOOO\~~%%diikk22h>>>>>>r:   r.   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                 ~    t          j        | j                  } |                                |          |k    sJ d S r3   )r   ry   rm   rE   )r=   rF   rG   r   s       r8   r   z8TestTendonForceLengthInverseDeGroote2016.test_print_codei  sB    H 8EdiPP|~~%%h//8;;;;;;r:   c                     t          j        | j                  }|                    | j                  }d}t	                                          |          |k    sJ d S )Nz.1/(33.93669377311689*fl_T + 8.484173443279222))r   ry   rm   r   r'   rE   )r=   r   dfl_T_inv_dfl_TrG   s       r8   r   zCTestTendonForceLengthInverseDeGroote2016.test_derivative_print_code  sW    7EdiPP"--	22C ""**?;;xGGGGGGr:   c                     t          j        | j                  }t          | j        |          } |d          t	          j        d          k    sJ d S )N        mIs?)r   ry   rm   r(   rQ   r   )r=   r   fl_T_inv_callables      r8   r   z6TestTendonForceLengthInverseDeGroote2016.test_lambdify  sR    7EdiPP$TY99  %%|)D)DDDDDDDr:   Nr   r   c                 &   t          j        | 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   ry   rm   r(   r*   r   r   r   r=   r   r   rm   rG   s        r8   r   z<TestTendonForceLengthInverseDeGroote2016.test_lambdify_numpy  s    7EdiPP$TY'BB{{???@@;;  
  
  
   	%%&7&7&=&=xHHHHHr:   r   c                 j   t          j        | j                  }t                              t          | j        |d                    }t          j                            g d          }t          j                            g d          }t          j        	                     ||          |           d S )Nr)   r   r   )
r   ry   rm   r)   r   r(   r*   r   r   r   r   s        r8   r   z:TestTendonForceLengthInverseDeGroote2016.test_lambdify_jax  s    7EdiPPGGHTY%$H$HIIyCCCDD9?? $
 $
 $
   	%%&7&7&=&=xHHHHHr:   )-r@   rA   rB   rQ   r   r   rP   rh   rn   rp   ru   r|   r   r   r   r   r   r   r   r   rR   rS   r   r   r   r   r   r   r   r!   r'   r$   r%   r"   r#   r&   r   r   r   r   r   r*   r   r)   r   r4   r:   r8   r   r     s       V^D!!!> > "!> g g \g
a a a
P P Pa a a	5 	5 	54 4 4
2 2 2
2 2 2
2 2 2
2 2 2
C C C< < <
? ? ?
 [  E
 E
 E
 !E
 !J
 !J
 R
 "D
 "I
 J
 J
 I
 N
 Z Iw?	
B BF< <GB BF<H H HE E E
 [.CDDI I EDI [t,?@@I I A@I I Ir:   r   c                      e Zd Z ej        d          d             Zed             Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Z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             Z#d Z$d Z%ej        &                    e'du d          d             Z(ej        &                    e)du d           d!             Z*dS )"'TestFiberForceLengthPassiveDeGroote2016TrV   c                     t          d          | _        t          d          | _        t          d          | _        | j        | j        f| _        d S )N	l_M_tilderZ   r[   )r   r   r^   r_   rb   rc   s    r8   -_fiber_force_length_passive_arguments_fixturezUTestFiberForceLengthPassiveDeGroote2016._fiber_force_length_passive_arguments_fixture  s?    ,,----'47+r:   c                      t          t          t                    sJ t          t          t                    sJ t          j        dk    sJ d S )Nr   )rg   r   r   r   r@   r4   r:   r8   rh   z2TestFiberForceLengthPassiveDeGroote2016.test_class  sL    =xHHHHH=?Z[[[[[2;?dddddddr:   c                     t          | j        g| j        R  }t          |t                     sJ t	          |          dk    sJ d S )Nz8FiberForceLengthPassiveDeGroote2016(l_M_tilde, c_0, c_1))r   r   rb   rj   rk   r=   fl_M_pass     r8   rn   z5TestFiberForceLengthPassiveDeGroote2016.test_instance  sP    6t~WWWW($GHHHHH8}} ZZZZZZZr:   c                     t          | j        g| j        R                                  }|t	          | j        | j        dz
  z  | j        z            dz
  t	          | j                  dz
  z  k    sJ d S r   )r   r   rb   r?   r
   r_   r^   r   s     r8   rp   z1TestFiberForceLengthPassiveDeGroote2016.test_doit  su    6t~WWWW\\^^C$.1*<!=tw FGG!KcRVRYll]^N^_______r:   c                    t          | j        g| j        R                      d          }|t	          | j        t          | j        dz
            z  | j        z            dz
  t	          | j                  dz
  z  k    sJ d S NFrs   r   )r   r   rb   r?   r
   r_   r   r^   r   s     r8   ru   z@TestFiberForceLengthPassiveDeGroote2016.test_doit_evaluate_false  s    6t~WWWW\\fk\llC!9K)L)L!Ldg UVVYZZ]`aeah]i]ilm]mnnnnnnnr:   c                     t          d          t          d          f}t          | j        g|R  }t          j        | j                  }||k    sJ d S Nz0.6z4.0)r   r   r   ry   )r=   rb   fl_M_pas_manualfl_M_pas_constantss       r8   r|   z:TestFiberForceLengthPassiveDeGroote2016.test_with_defaults  s_    %LL%LL
	 >dnYyYYY@Nt~^^"4444444r:   c                 ,   t          | j        g| j        R  }| j        t	          | j        t          | j        dz
            z  | j        z            z  | j        t	          | j                  dz
  z  z  }|                    | j                  |k    sJ d S r   r   r   rb   r_   r
   r   r^   r   r=   r   rG   s      r8    test_differentiate_wrt_l_M_tildezHTestFiberForceLengthPassiveDeGroote2016.test_differentiate_wrt_l_M_tilde  s    6t~WWWW73twt~7I'J'JJ47RSSSUYU\^abfbi^j^jmn^nUop}}T^,,888888r:   c                 d   t          | j        g| j        R  }| j         t	          | j        t          | j        dz
            z  | j        z            z  t          | j        dz
            z  | j        dz  t	          | j                  dz
  z  z  }|                    | j                  |k    sJ d S Nr   r   r   r   s      r8   r   zATestFiberForceLengthPassiveDeGroote2016.test_differentiate_wrt_c0  s    6t~WWWWWHS!1C!D!DDTWLMMMT^a/00126'1*c$'llQ>N2OQ 	 }}TW%%111111r:   c           	         t          | j        g| j        R  }t          | j                   dt          | j        t          | j        dz
            z  | j        z            z   z  t          | j                  dz
  dz  z  t          | j        t          | j        dz
            z  | j        z            | j        dz
  z  | j        t          | j                  dz
  z  z  z   }|                    | j                  |k    sJ d S )Nr   r   r   )r   r   rb   r
   r_   r   r^   r   r   s      r8   r   zATestFiberForceLengthPassiveDeGroote2016.test_differentiate_wrt_c1  s    6t~WWWW\\M2DGODNQ<N,O,O$OPTPW$W X XXY[^_c_f[g[gjk[knoZoo$'/$.1*<===dgEFFYZHZ[]a]dfijnjqfrfruvfv]wxy 	 }}TW%%111111r:   c                 n    t          | j        g| j        R  }|                                t          u sJ d S r3   )r   r   rb   r   r   r   s     r8   r   z4TestFiberForceLengthPassiveDeGroote2016.test_inverse  s?    6t~WWWW!!%OOOOOOOr:   c                     t          | j        g| j        R  }d}t                                          |          |k    sJ d S )Nz4\operatorname{fl}^M_{pas} \left( l_{M tilde} \right))r   r   rb   r    rE   r   s      r8   r   zATestFiberForceLengthPassiveDeGroote2016.test_function_print_latex  sI    6t~WWWWJ~~%%h//8;;;;;;r:   c                     t          | j        g| j        R  }d}t                                          |                                          |k    sJ d S )NzN\frac{e^{\frac{c_{1} \left(l_{M tilde} - 1\right)}{c_{0}}} - 1}{e^{c_{1}} - 1})r   r   rb   r    rE   r?   r   s      r8   r   zCTestFiberForceLengthPassiveDeGroote2016.test_expression_print_latex  sQ    6t~WWWWd~~%%hmmoo66(BBBBBBr:   r.   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                 ~    t          j        | j                  } |                                |          |k    sJ d S r3   )r   ry   r   rE   )r=   rF   rG   r   s       r8   r   z7TestFiberForceLengthPassiveDeGroote2016.test_print_code"  sB    H 7DT^TT|~~%%h//8;;;;;;r:   c                     t          j        | j                  }|                    | j                  }d}t	                                          |          |k    sJ d S )Nz;0.12438240242516*math.exp(6.66666666666667*(l_M_tilde - 1)))r   ry   r   r   r'   rE   )r=   r   fl_M_pas_dl_M_tilderG   s       r8   r   zBTestFiberForceLengthPassiveDeGroote2016.test_derivative_print_codei  sY    6DT^TT&mmDN;;P ""**+>??8KKKKKKr:   c                     t          j        | j                  }t          | j        |          } |d          t	          j        d          k    sJ d S )Nr   r   )r   ry   r   r(   rQ   r   )r=   r   fl_M_pas_callables      r8   r   z5TestFiberForceLengthPassiveDeGroote2016.test_lambdifyo  sR    6DT^TT$T^X>>  %%s););;;;;;;r:   Nr   r   c                 &   t          j        | j                  }t          | j        |d          }t                              g d          }t                              g d          }t          j                             ||          |           d S )Nr*         ?皙??r   皙?333333?      ?g1olgx#^#ggΫr   g4],eI?g-˯?gO#?)r   ry   r   r(   r*   r   r   r   r=   r   r   r   rG   s        r8   r   z;TestFiberForceLengthPassiveDeGroote2016.test_lambdify_numpyt  s    6DT^TT$T^XwGGKK C C CDD	;;  
  
  
   	%%&7&7	&B&BHMMMMMr:   r   c                 j   t          j        | j                  }t                              t          | j        |d                    }t          j                            g d          }t          j                            g d          }t          j        	                     ||          |           d S )Nr)   r   r  )
r   ry   r   r)   r   r(   r*   r   r   r   r  s        r8   r   z9TestFiberForceLengthPassiveDeGroote2016.test_lambdify_jax  s    6DT^TTGGHT^Xu$M$MNNIOO$G$G$GHH	9?? $
 $
 $
   	%%&7&7	&B&BHMMMMMr:   )+r@   rA   rB   rQ   r   r   rP   rh   rn   rp   ru   r|   r   r   r   r   r   r   rR   rS   r   r   r   r   r   r   r   r!   r'   r$   r%   r"   r#   r&   r   r   r   r   r   r*   r   r)   r   r4   r:   r8   r   r     s       V^D!!!, , "!, e e \e
[ [ [
` ` `o o o5 5 59 9 9
2 2 22 2 2P P P< < <
C C C
 [  U
 U
 U
 !U
 !Z
 !Z
  "S
 "X
 Y
 Y
 X
 ]
 P Xw?	
B BF< <GB BF<L L L< < <
 [.CDDN N EDN [t,?@@N N A@N N Nr:   r   c                      e Zd Z ej        d          d             Zed             Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Z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             Z#d Z$d Z%ej        &                    e'du d          d             Z(ej        &                    e)du d           d!             Z*dS )".TestFiberForceLengthPassiveInverseDeGroote2016TrV   c                     t          d          | _        t          d          | _        t          d          | _        | j        | j        f| _        d S )Nr   rZ   r[   )r   r   r^   r_   rb   rc   s    r8   r   z\TestFiberForceLengthPassiveInverseDeGroote2016._fiber_force_length_passive_arguments_fixture  s?    z**----'47+r:   c                      t          t          t                    sJ t          t          t                    sJ t          j        dk    sJ d S )Nr   )rg   r   r   r   r@   r4   r:   r8   rh   z9TestFiberForceLengthPassiveInverseDeGroote2016.test_class  sL    DhOOOOODFabbbbb9BFrrrrrrrr:   c                     t          | j        g| j        R  }t          |t                     sJ t	          |          dk    sJ d S )Nz>FiberForceLengthPassiveInverseDeGroote2016(fl_M_pas, c_0, c_1))r   r   rb   rj   rk   r=   fl_M_pas_invs     r8   rn   z<TestFiberForceLengthPassiveInverseDeGroote2016.test_instance  sT    A$-aRVR`aaa,(RSSSSS<  $dddddddr:   c                     t          | j        g| j        R                                  }|| j        t          | j        t          | j                  dz
  z  dz             z  | j        z  dz   k    sJ d S r   )r   r   rb   r?   r^   r   r
   r_   r	  s     r8   rp   z8TestFiberForceLengthPassiveInverseDeGroote2016.test_doit  sw    A$-aRVR`aaaffhhtws4=#dg,,:J+Ka+O'P'PPQUQXX[\\\\\\\\r:   c           
         t          | j        g| j        R                      d          }|| j        t          t          | j        t          | j                  dz
  z            dz             z  | j        z  dz   k    sJ d S r   )	r   r   rb   r?   r^   r   r   r
   r_   r	  s     r8   ru   zGTestFiberForceLengthPassiveInverseDeGroote2016.test_doit_evaluate_false  s    A$-aRVR`aaaffpufvvtws?4=#dg,,YZJZ;[+\+\_`+`'a'aabfbiilmmmmmmmmr:   c                     t          d          t          d          f}t          | j        g|R  }t          j        | j                  }||k    sJ d S r   )r   r   r   ry   )r=   rb   fl_M_pas_inv_manualfl_M_pas_inv_constantss       r8   r|   zATestFiberForceLengthPassiveInverseDeGroote2016.test_with_defaults  sd    %LL%LL
	 IcYbccc!K!YZ^Zg!h!h"&<<<<<<<r:   c                    t          | j        g| j        R  }| j        t	          | j                  dz
  z  | j        | j        t	          | j                  dz
  z  dz   z  z  }|                    | j                  |k    sJ d S r   )r   r   rb   r^   r
   r_   r   r=   r
  rG   s      r8   r   zJTestFiberForceLengthPassiveInverseDeGroote2016.test_differentiate_wrt_fl_T  s    A$-aRVR`aaa7CLL1,-tws47||VWGW8X[\8\/]^  //8;;;;;;r:   c                     t          | j        g| j        R  }t          | j        t	          | j                  dz
  z  dz             | j        z  }|                    | j                  |k    sJ d S r   )r   r   rb   r   r
   r_   r   r^   r  s      r8   r   zHTestFiberForceLengthPassiveInverseDeGroote2016.test_differentiate_wrt_c0  sq    A$-aRVR`aaat}c$'llQ&67!;<<TWD  ))X555555r:   c                    t          | j        g| j        R  }| j        | j        z  t	          | j                  z  | j        | j        t	          | j                  dz
  z  dz   z  z  | j        t          | j        t	          | j                  dz
  z  dz             z  | j        dz  z  z
  }|                    | j                  |k    sJ d S r   )r   r   rb   r^   r
   r_   r   r   r  s      r8   r   zHTestFiberForceLengthPassiveInverseDeGroote2016.test_differentiate_wrt_c1  s    A$-aRVR`aaaGDM!#dg,,.DGWXHX9Y\]9]0^_gc$-TW)9:Q>???
JK 	   ))X555555r:   c                 n    t          | j        g| j        R  }|                                t          u sJ d S r3   )r   r   rb   r   r   r	  s     r8   r   z;TestFiberForceLengthPassiveInverseDeGroote2016.test_inverse  sA    A$-aRVR`aaa##%%)LLLLLLLr:   c                     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   rb   r    rE   r  s      r8   r   zHTestFiberForceLengthPassiveInverseDeGroote2016.test_function_print_latex  sK    A$-aRVR`aaa]~~%%l33x??????r:   c                     t          | j        g| j        R  }d}t                                          |                                          |k    sJ d S )NzU\frac{c_{0} \log{\left(fl_{M pas} \left(e^{c_{1}} - 1\right) + 1 \right)}}{c_{1}} + 1)r   r   rb   r    rE   r?   r   s      r8   r   zJTestFiberForceLengthPassiveInverseDeGroote2016.test_expression_print_latex  sQ    9$-Y$.YYYk~~%%diikk22h>>>>>>r:   r.   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                 ~    t          j        | j                  } |                                |          |k    sJ d S r3   )r   ry   r   rE   )r=   rF   rG   r
  s       r8   r   z>TestFiberForceLengthPassiveInverseDeGroote2016.test_print_code  sE    F BOPTP]^^|~~%%l33x??????r:   c                     t          j        | j                  }|                    | j                  }d}t	                                          |          |k    sJ d S )Nz232.1588900198865/(214.392600132577*fl_M_pas + 4.0))r   ry   r   r   r'   rE   )r=   r
  dfl_M_pas_inv_dfl_TrG   s       r8   r   zITestFiberForceLengthPassiveInverseDeGroote2016.test_derivative_print_code   s]    AOPTP]^^*//>>G ""**+>??8KKKKKKr:   c                     t          j        | j                  }t          | j        |          } |d          t	          j        d          k    sJ d S )Nr   r   )r   ry   r   r(   rQ   r   )r=   r
  fl_M_pas_inv_callables      r8   r   z<TestFiberForceLengthPassiveInverseDeGroote2016.test_lambdify&  sT    AOPTP]^^ ( E E$$S))V]3-?-???????r:   Nr   r   c                 &   t          j        | 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?r   g>7?g,5?gx~ ?ghlp?)r   ry   r   r(   r*   r   r   r   r=   r
  r  r   rG   s        r8   r   zBTestFiberForceLengthPassiveInverseDeGroote2016.test_lambdify_numpy+  s    AOPTP]^^ (g N N;;BBBCC;;  
  
  
   	%%&;&;H&E&ExPPPPPr:   r   c                 j   t          j        | j                  }t                              t          | j        |d                    }t          j                            g d          }t          j                            g d          }t          j        	                     ||          |           d S )Nr)   r  r  )
r   ry   r   r)   r   r(   r*   r   r   r   r  s        r8   r   z@TestFiberForceLengthPassiveInverseDeGroote2016.test_lambdify_jax:  s    AOPTP]^^ #e(T(T U U9??#F#F#FGG9?? $
 $
 $
   	%%&;&;H&E&ExPPPPPr:   )+r@   rA   rB   rQ   r   r   rP   rh   rn   rp   ru   r|   r   r   r   r   r   r   rR   rS   r   r   r   r   r   r   r   r!   r'   r$   r%   r"   r#   r&   r   r   r   r   r   r*   r   r)   r   r4   r:   r8   r  r    s       V^D!!!, , "!, s s \s
e e e
] ] ]n n n= = =< < <
6 6 6
6 6 6M M M@ @ @
? ? ?
 [  P
 P
 P
 !P
 !U
 !U
 M
 "?
 "D
 E
 E
 D
 I
 I Du>	
A AD@ @EA AD@L L L@ @ @
 [.CDDQ Q EDQ [t,?@@Q Q A@Q Q Qr:   r  c                      e Zd Z ej        d          d             Zed             Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z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#             Z,d$ Z-d% Z.ej        /                    e0d&u d'(          d)             Z1ej        /                    e2d&u d*(          d+             Z3d&S ),&TestFiberForceLengthActiveDeGroote2016TrV   c                    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   rZ   r[   r\   r]   c_4c_5c_6c_7c_8c_9c_10c_11)r   r   r^   r_   r`   ra   c4c5c6c7c8c9c10c11rb   rc   s    r8   ,_fiber_force_length_active_arguments_fixturezSTestFiberForceLengthActiveDeGroote2016._fiber_force_length_active_arguments_fixtureL  s    ,,--------------------&>>&>>GTWdgtwGTWdgtw$(
r:   c                      t          t          t                    sJ t          t          t                    sJ t          j        dk    sJ d S )Nr   )rg   r   r   r   r@   r4   r:   r8   rh   z1TestFiberForceLengthActiveDeGroote2016.test_class`  sL    <hGGGGG<>YZZZZZ1:>bbbbbbbr:   c                     t          | j        g| j        R  }t          |t                     sJ t	          |          dk    sJ 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   rb   rj   rk   r=   fl_M_acts     r8   rn   z4TestFiberForceLengthActiveDeGroote2016.test_instancef  s^    5dnVt~VVV($FGGGGG8}}8
 
 
 
 
 
r:   c           	         t          | j        g| j        R                                  }|| j        t          | j        | j        z
  | j        | j        | j        z  z   z  dz   dz            z  | j	        t          | j        | j
        z
  | j        | j        | j        z  z   z  dz   dz            z  z   | j        t          | j        | j        z
  | j        | j        | j        z  z   z  dz   dz            z  z   k    sJ d S r   )r   r   rb   r?   r^   r
   r_   r`   ra   r,  r-  r.  r/  r0  r1  r2  r3  r7  s     r8   rp   z0TestFiberForceLengthActiveDeGroote2016.test_doitn  s   5dnVt~VVV[[]]GCDNTW4twAW7WX[\\]^__```gcdntw6474>CY9YZ]^^_`aabbbcgcdntw6DHT^D[9[\_``abccddde
 
 
 
 
 
r:   c           	      L   t          | j        g| j        R                      d          }|| j        t          t          | j        | j        z
            | j        | j	        | j        z  z   z  dz   dz            z  | j
        t          t          | j        | j        z
            | j        | j        | j        z  z   z  dz   dz            z  z   | j        t          t          | j        | j        z
            | j        | j        | j        z  z   z  dz   dz            z  z   k    sJ d S )NFrs   r   )r   r   rb   r?   r^   r
   r   r_   r`   ra   r,  r-  r.  r/  r0  r1  r2  r3  r7  s     r8   ru   z?TestFiberForceLengthActiveDeGroote2016.test_doit_evaluate_falsev  s;   5dnVt~VVV[[ej[kkGC?4>DG+CDDdgPTPWX\XfPfFfgjkklmnnooogc_T^dg-EFFRVRYZ^ZhRhHhilmmnoppqqqrgc_T^dg-EFFSWS[\`\jSjHjknoopqrrssst
 
 
 
 
 
r:   c                    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        | j                  }||k    sJ d S )Nz0.814z1.06z0.162z0.0633z0.433z0.717z-0.0299rx   z0.1z1.0z0.354z0.0)r   r   r   ry   )r=   rb   fl_M_act_manualfl_M_act_constantss       r8   r|   z9TestFiberForceLengthActiveDeGroote2016.test_with_defaults~  s    'NN&MM'NN(OO'NN'NN)%LL%LL%LL'NN%LL
	 =T^XiXXX?Mdn]]"4444444r:   c           	      b   t          | j        g| j        R  }| j        | j        | j        | j        z
  dz  z  | j        | j        | j        z  z   dz  z  | j        | j        z
  | j        | j        | j        z  z   dz  z  z   z  t          | j        | j        z
  dz   d| j        | j        | j        z  z   dz  z  z            z  | j        | j	        | j        | j
        z
  dz  z  | j        | j	        | j        z  z   dz  z  | j
        | j        z
  | j        | j	        | j        z  z   dz  z  z   z  t          | j        | j
        z
  dz   d| j        | j	        | j        z  z   dz  z  z            z  z   | j        | j        | j        | j        z
  dz  z  | j        | j        | j        z  z   dz  z  | j        | j        z
  | j        | j        | j        z  z   dz  z  z   z  t          | j        | j        z
  dz   d| j        | j        | j        z  z   dz  z  z            z  z   }|                    | j                  |k    sJ d S Nr      )r   r   rb   r^   ra   r_   r`   r
   r,  r/  r-  r.  r0  r3  r1  r2  r   r=   r8  rG   s      r8   r   zGTestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_l_M_tilde  sa   5dnVt~VVVG$'1A55twAW7WZ[6[[7T^+tw9O/ORS.STU DNTW,q00!TWtwt~?U5UXY4Y2YZ[[\ g$'1A55twAW7WZ[6[[7T^+tw9O/ORS.STU DNTW,q00!TWtwt~?U5UXY4Y2YZ[[\	\ g$.472Q6648DNCZ8Z]^7^^7T^+tx$(4>:Q/QTU.UVW DNTW,q00!TX@W5WZ[4[2[\]]^^ 	 }}T^,,888888r:   c                    t          | j        g| j        R  }t          | j        | j        z
  dz   d| j        | j        | j        z  z   dz  z  z            }|                                                    | j	                  |k    sJ d S r   )
r   r   rb   r
   r_   r`   ra   r?   r   r^   rA  s      r8   r   z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c0  s    5dnVt~VVV$'1A55q$'DGDNDZ:Z]^9^7^_``}}##DG,,888888r:   c                 V   t          | j        g| j        R  }| j        | j        | j        z
  z  | j        | j        | j        z  z   dz  z  t          | j        | j        z
  dz   d| j        | j        | j        z  z   dz  z  z            z  }|                    | j                  |k    sJ d S r   	r   r   rb   r^   r_   r`   ra   r
   r   rA  s      r8   r   z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c1      5dnVt~VVVGT^dg-.$'$.:P0PST/TT4>DG+a//DGdgdn>T4TWX3X1XYZZ[ 	 }}TW%%111111r:   c                 \   t          | j        g| j        R  }| j        | j        | j        z
  dz  z  | j        | j        | j        z  z   dz  z  t          | j        | j        z
  dz   d| j        | j        | j        z  z   dz  z  z            z  }|                    | j                  |k    sJ d S r?  rD  rA  s      r8   r   z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c2      5dnVt~VVVGT^dg-1147TWT^=S3SVW2WW4>DG+a//DGdgdn>T4TWX3X1XYZZ[ 	 }}TW%%111111r:   c                 l   t          | j        g| j        R  }| j        | j        z  | j        | j        z
  dz  z  | j        | j        | j        z  z   dz  z  t          | j        | j        z
  dz   d| j        | j        | j        z  z   dz  z  z            z  }|                    | j                  |k    sJ d S r?  rD  rA  s      r8   r   z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c3      5dnVt~VVVGDN"DNTW$<q#@@$'DGTXTbLbBbefAff4>DG+a//DGdgdn>T4TWX3X1XYZZ[ 	 }}TW%%111111r:   c                     t          | j        g| j        R  }t          | j        | j        z
  dz   d| j        | j        | j        z  z   dz  z  z            }|                    | j                  |k    sJ d S r   )	r   r   rb   r
   r-  r.  r/  r   r,  rA  s      r8   test_differentiate_wrt_c4z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c4  s~    5dnVt~VVV$'1A55q$'DGDNDZ:Z]^9^7^_``}}TW%%111111r:   c                 V   t          | j        g| j        R  }| j        | j        | j        z
  z  | j        | j        | j        z  z   dz  z  t          | j        | j        z
  dz   d| j        | j        | j        z  z   dz  z  z            z  }|                    | j                  |k    sJ d S r   	r   r   rb   r,  r-  r.  r/  r
   r   rA  s      r8   test_differentiate_wrt_c5z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c5  rE  r:   c                 \   t          | j        g| j        R  }| j        | j        | j        z
  dz  z  | j        | j        | j        z  z   dz  z  t          | j        | j        z
  dz   d| j        | j        | j        z  z   dz  z  z            z  }|                    | j                  |k    sJ d S r?  rM  rA  s      r8   test_differentiate_wrt_c6z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c6  rG  r:   c                 l   t          | j        g| j        R  }| j        | j        z  | j        | j        z
  dz  z  | j        | j        | j        z  z   dz  z  t          | j        | j        z
  dz   d| j        | j        | j        z  z   dz  z  z            z  }|                    | j                  |k    sJ d S r?  rM  rA  s      r8   test_differentiate_wrt_c7z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c7  rI  r:   c                     t          | j        g| j        R  }t          | j        | j        z
  dz   d| j        | j        | j        z  z   dz  z  z            }|                    | j                  |k    sJ d S r   )	r   r   rb   r
   r1  r2  r3  r   r0  rA  s      r8   test_differentiate_wrt_c8z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c8  s~    5dnVt~VVV$'1A55q$(TXdnE\:\_`9`7`abb}}TW%%111111r:   c                 V   t          | j        g| j        R  }| j        | j        | j        z
  z  | j        | j        | j        z  z   dz  z  t          | j        | j        z
  dz   d| j        | j        | j        z  z   dz  z  z            z  }|                    | j                  |k    sJ d S r   	r   r   rb   r0  r1  r2  r3  r
   r   rA  s      r8   test_differentiate_wrt_c9z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c9  s    5dnVt~VVVGT^dg-.48DN;R0RUV/VV4>DG+a//DHtx?V4VYZ3Z1Z[\\] 	 }}TW%%111111r:   c                 \   t          | j        g| j        R  }| j        | j        | j        z
  dz  z  | j        | j        | j        z  z   dz  z  t          | j        | j        z
  dz   d| j        | j        | j        z  z   dz  z  z            z  }|                    | j                  |k    sJ d S r?  rV  rA  s      r8   test_differentiate_wrt_c10zATestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c10  s    5dnVt~VVVGT^dg-1148dht~>U3UXY2YY4>DG+a//DHtx?V4VYZ3Z1Z[\\] 	 }}TX&&(222222r:   c                 l   t          | j        g| j        R  }| j        | j        z  | j        | j        z
  dz  z  | j        | j        | j        z  z   dz  z  t          | j        | j        z
  dz   d| j        | j        | j        z  z   dz  z  z            z  }|                    | j                  |k    sJ d S r?  rV  rA  s      r8   test_differentiate_wrt_c11zATestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c11  s    5dnVt~VVVGDN"DNTW$<q#@@$(TXVZVdMdBdghAhh4>DG+a//DHtx?V4VYZ3Z1Z[\\] 	 }}TX&&(222222r:   c                     t          | j        g| j        R  }d}t                                          |          |k    sJ d S )Nz4\operatorname{fl}^M_{act} \left( l_{M tilde} \right))r   r   rb   r    rE   rA  s      r8   r   z@TestFiberForceLengthActiveDeGroote2016.test_function_print_latex  sI    5dnVt~VVVJ~~%%h//8;;;;;;r:   c                     t          | j        g| j        R  }d}t                                          |                                          |k    sJ 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   rb   r    rE   r?   rA  s      r8   r   zBTestFiberForceLengthActiveDeGroote2016.test_expression_print_latex  sY    5dnVt~VVV{ 	
 ~~%%hmmoo66(BBBBBBr:   r.   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                 ~    t          j        | j                  } |                                |          |k    sJ d S r3   )r   ry   r   rE   )r=   rF   rG   r8  s       r8   r   z6TestFiberForceLengthActiveDeGroote2016.test_print_code  sB    h 6CDNSS|~~%%h//8;;;;;;r:   c                     t          j        | j                  }|                    | j                  }d}t	                                          |          |k    sJ 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   ry   r   r   r'   rE   )r=   r8  fl_M_act_dl_M_tilderG   s       r8   r   zATestFiberForceLengthActiveDeGroote2016.test_derivative_print_code  s`    5CDNSS&mmDN;;	5 	 !""**+>??8KKKKKKr:   c                     t          j        | j                  }t          | j        |          } |d          t	          j        d          k    sJ d S )Nr   s?)r   ry   r   r(   rQ   r   )r=   r8  fl_M_act_callables      r8   r   z4TestFiberForceLengthActiveDeGroote2016.test_lambdify  sR    5CDNSS$T^X>>  %%|)D)DDDDDDDr:   Nr   r   c                 &   t          j        | j                  }t          | j        |d          }t                              g d          }t                              g d          }t          j                             ||          |           d S )Nr*   r   r   r   r   g       @g	> P^?g]Q?rb  g)`?gߌ'|?)r   ry   r   r(   r*   r   r   r   r=   r8  rc  r   rG   s        r8   r   z:TestFiberForceLengthActiveDeGroote2016.test_lambdify_numpy  s    5CDNSS$T^XwGGKK 9 9 9::	;;  
  
  
   	%%&7&7	&B&BHMMMMMr:   r   c                 j   t          j        | j                  }t                              t          | j        |d                    }t          j                            g d          }t          j                            g d          }t          j        	                     ||          |           d S )Nr)   re  rf  )
r   ry   r   r)   r   r(   r*   r   r   r   rg  s        r8   r   z8TestFiberForceLengthActiveDeGroote2016.test_lambdify_jax  s    5CDNSSGGHT^Xu$M$MNNIOO$=$=$=>>	9?? $
 $
 $
   	%%&7&7	&B&BHMMMMMr:   )4r@   rA   rB   rQ   r   r4  rP   rh   rn   rp   ru   r|   r   r   r   r   r   rK  rN  rP  rR  rT  rW  rY  r[  r   r   rR   rS   r   r   r   r   r   r   r   r!   r'   r$   r%   r"   r#   r&   r   r   r   r   r   r*   r   r)   r   r4   r:   r8   r"  r"  J  s?       V^D!!!
 
 "!
& c c \c

 
 

 
 

 
 
5 5 5&9 9 9$9 9 9
2 2 22 2 22 2 22 2 2
2 2 22 2 22 2 22 2 2
2 2 23 3 33 3 3< < <
C C C [  1 1 1 !6 !6 !6 5	 "I	 "N	 O	 O	 N	 S	 
C" N	Ko	
r rf< <gr rf<L L L"E E E
 [.CDDN N EDN [t,?@@N N A@N N Nr:   r"  c                      e Zd Z ej        d          d             Zed             Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Z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             Z%d Z&d Z'ej        (                    e)d u d!"          d#             Z*ej        (                    e+d u d$"          d%             Z,d S )&"TestFiberForceVelocityDeGroote2016TrV   c                    t          d          | _        t          d          | _        t          d          | _        t          d          | _        t          d          | _        | j        | j        | j        | j        f| _        d S )N	v_M_tilderZ   r[   r\   r]   )r   rl  r^   r_   r`   ra   rb   rc   s    r8   ._muscle_fiber_force_velocity_arguments_fixturezQTestFiberForceVelocityDeGroote2016._muscle_fiber_force_velocity_arguments_fixture  re   r:   c                      t          t          t                    sJ t          t          t                    sJ t          j        dk    sJ d S )Nr   )rg   r   r   r   r@   r4   r:   r8   rh   z-TestFiberForceVelocityDeGroote2016.test_class  sL    8(CCCCC8:UVVVVV-6:ZZZZZZZr:   c                     t          | j        g| j        R  }t          |t                     sJ t	          |          dk    sJ d S )Nz=FiberForceVelocityDeGroote2016(v_M_tilde, c_0, c_1, c_2, c_3))r   rl  rb   rj   rk   r=   fv_Ms     r8   rn   z0TestFiberForceVelocityDeGroote2016.test_instance  sP    -dnNt~NNN$ >?????4yy[[[[[[[r:   c                 &   t          | j        g| j        R                                  }| j        t          | j        | j        z  | j        z   t          | j        | j        z  | j        z   dz  dz             z             z  | j	        z   }||k    sJ d S Nr   r   )
r   rl  rb   r?   r^   r   r_   r`   r   ra   r=   rq  rG   s      r8   rp   z,TestFiberForceVelocityDeGroote2016.test_doit  s    -dnNt~NNNSSUUGc47T^3dg=DGdn,tw6:Q>??@ A A ACG7K 	 xr:   c           
      D   t          | j        g| j        R                      d          }| j        t          | j        | j        z  | j        z   t          t          | j        | j        z  | j        z             dz  dz             z             z  | j
        z   }||k    sJ d S )NFrs   r   r   )r   rl  rb   r?   r^   r   r_   r`   r   r   ra   rt  s      r8   ru   z;TestFiberForceVelocityDeGroote2016.test_doit_evaluate_false  s    -dnNt~NNNSS]bSccGc47T^3dg=?47T^#;dg#EFFIAMNNO P P PRVRYZ 	 xr:   c                     t          d          t          d          t          d          t          d          f}t          | j        g|R  }t          j        | j                  }||k    sJ d S Nz-0.318z-8.149z-0.374z0.886)r   r   rl  ry   )r=   rb   fv_M_manualfv_M_constantss       r8   r|   z5TestFiberForceVelocityDeGroote2016.test_with_defaults  so    (OO(OO(OO'NN	
	 5T^PiPPP7EdnUUn,,,,,,r:   c                    t          | j        g| j        R  }| j        | j        z  t          t          | j        | j        z  | j        z             dz  dz             z  }|                    | j                  |k    sJ d S rs  )	r   rl  rb   r^   r_   r   r   r`   r   rt  s      r8    test_differentiate_wrt_v_M_tildezCTestFiberForceVelocityDeGroote2016.test_differentiate_wrt_v_M_tilde#  s    -dnNt~NNNGDGO/$'$."847"BCCQFJKKL 	 yy((H444444r:   c           	      ,   t          | j        g| j        R  }t          | j        | j        z  | j        z   t          t          | j        | j        z  | j        z             dz  dz             z             }|                    | j	                  |k    sJ d S rs  )
r   rl  rb   r   r_   r`   r   r   r   r^   rt  s      r8   r   z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c0+  s    -dnNt~NNNGDN"TW,?474>#9DG#CDDaG!KLLM
 
 yy!!X------r:   c                    t          | j        g| j        R  }| j        | j        z  t	          t          | j        | j        z  | j        z             dz  dz             z  }|                    | j                  |k    sJ d S rs  	r   rl  rb   r^   r   r   r_   r`   r   rt  s      r8   r   z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c13  s    -dnNt~NNNGDN"/$'$."847"BCCQFJKKL 	 yy!!X------r:   c                     t          | j        g| j        R  }| j        t	          t          | j        | j        z  | j        z             dz  dz             z  }|                    | j                  |k    sJ d S rs  r~  rt  s      r8   r   z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c2;  s    -dnNt~NNNG/$'$."847"BCCQFJKKL 	 yy!!X------r:   c                     t          | j        g| j        R  }t          d          }|                    | j                  |k    sJ d S r   )r   rl  rb   r   r   ra   rt  s      r8   r   z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c3C  sK    -dnNt~NNN1::yy!!X------r:   c                 n    t          | j        g| j        R  }|                                t          u sJ d S r3   )r   rl  rb   r   r   rp  s     r8   r   z/TestFiberForceVelocityDeGroote2016.test_inverseH  s;    -dnNt~NNN||~~!FFFFFFFr:   c                     t          | j        g| j        R  }d}t                                          |          |k    sJ d S )Nz.\operatorname{fv}^M \left( v_{M tilde} \right))r   rl  rb   r    rE   rt  s      r8   r   z<TestFiberForceVelocityDeGroote2016.test_function_print_latexL  sI    -dnNt~NNND~~%%d++x777777r:   c                     t          | j        g| j        R  }d}t                                          |                                          |k    sJ 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   rl  rb   r    rE   r?   rt  s      r8   r   z>TestFiberForceVelocityDeGroote2016.test_expression_print_latexQ  sY    -dnNt~NNND 	 ~~%%diikk22h>>>>>>r:   r.   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                 ~    t          j        | j                  } |                                |          |k    sJ d S r3   )r   ry   rl  rE   )r=   rF   rG   rq  s       r8   r   z2TestFiberForceVelocityDeGroote2016.test_print_codeY  sB    j .;DNKK|~~%%d++x777777r:   c                     t          j        | j                  }|                    | j                  }d}t	                                          |          |k    sJ d S )Nz42.591382*(1 + (-8.149*v_M_tilde - 0.374)**2)**(-1/2))r   ry   rl  r   r'   rE   )r=   rq  dfv_M_dv_M_tilderG   s       r8   r   z=TestFiberForceVelocityDeGroote2016.test_derivative_print_code  sY    -;DNKK99T^44I ""**+;<<HHHHHHr:   c                     t          j        | j                  }t          | j        |          } |d          t	          j        d          k    sJ d S )Nr   gJ<_Y	?)r   ry   rl  r(   rQ   r   )r=   rq  fv_M_callables      r8   r   z0TestFiberForceVelocityDeGroote2016.test_lambdify  sQ    -;DNKK 66}S!!V]3D%E%EEEEEEEr:   Nr   r   c                 &   t          j        | 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   ry   rl  r(   r*   r   r   r   r=   rq  r  rl  rG   s        r8   r   z6TestFiberForceVelocityDeGroote2016.test_lambdify_numpy  s    -;DNKK w??KK 6 6 677	;;  
  
  
   	%%mmI&>&>IIIIIr:   r   c                 j   t          j        | j                  }t                              t          | j        |d                    }t          j                            g d          }t          j                            g d          }t          j        	                     ||          |           d S )Nr)   r  r  )
r   ry   rl  r)   r   r(   r*   r   r   r   r  s        r8   r   z4TestFiberForceVelocityDeGroote2016.test_lambdify_jax  s    -;DNKKu E EFFIOO$:$:$:;;	9?? $
 $
 $
   	%%mmI&>&>IIIIIr:   )-r@   rA   rB   rQ   r   rm  rP   rh   rn   rp   ru   r|   r{  r   r   r   r   r   r   r   rR   rS   r   r   r   r   r   r   r   r!   r'   r$   r%   r"   r#   r&   r   r   r   r   r   r*   r   r)   r   r4   r:   r8   rj  rj    s       V^D!!!> > "!> [ [ \[
\ \ \
          	- 	- 	-5 5 5. . .. . .. . .. . .
G G G8 8 8
? ? ? [  V V V !` !` !` K "> "C D D C H F >WP	
S Sh8 8iS Sh8I I IF F F
 [.CDD
J 
J ED
J [t,?@@
J 
J A@
J 
J 
Jr:   rj  c                      e Zd Z ej        d          d             Zed             Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Z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             Z%d Z&d Z'ej        (                    e)du d           d!             Z*ej        (                    e+du d"           d#             Z,dS )$)TestFiberForceVelocityInverseDeGroote2016TrV   c                    t          d          | _        t          d          | _        t          d          | _        t          d          | _        t          d          | _        | j        | j        | j        | j        f| _        d S )Nrq  rZ   r[   r\   r]   )r   rq  r^   r_   r`   ra   rb   rc   s    r8   r   zXTestFiberForceVelocityInverseDeGroote2016._tendon_force_length_inverse_arguments_fixture  r   r:   c                      t          t          t                    sJ t          t          t                    sJ t          j        dk    sJ d S )Nr   )rg   r   r   r   r@   r4   r:   r8   rh   z4TestFiberForceVelocityInverseDeGroote2016.test_class  sL    ?JJJJJ?A\]]]]]4=Ahhhhhhhr:   c                     t          | j        g| j        R  }t          |t                     sJ t	          |          dk    sJ d S )Nz?FiberForceVelocityInverseDeGroote2016(fv_M, c_0, c_1, c_2, c_3))r   rq  rb   rj   rk   r=   fv_M_invs     r8   rn   z7TestFiberForceVelocityInverseDeGroote2016.test_instance  sP    8TT^TTT($IJJJJJ8}} aaaaaaar:   c                     t          | j        g| j        R                                  }|t	          | j        | j        z
  | j        z            | j        z
  | j        z  k    sJ d S r3   )	r   rq  rb   r?   r   ra   r^   r`   r_   r  s     r8   rp   z3TestFiberForceVelocityInverseDeGroote2016.test_doit  sd    8TT^TTTYY[[D$)dg"5tw!>??$'I47RRRRRRRr:   c                     t          | j        g| j        R                      d          }|t	          t          | j        | j        z
            | j        z            | j        z
  | j	        z  k    sJ d S rr   )
r   rq  rb   r?   r   r   ra   r^   r`   r_   r  s     r8   ru   zBTestFiberForceVelocityInverseDeGroote2016.test_doit_evaluate_false  sv    8TT^TTTYYchYiiDTW1D!E!Edg!MNNQUQXXZ^Zaaaaaaaar:   c                     t          d          t          d          t          d          t          d          f}t          | j        g|R  }t          j        | j                  }||k    sJ d S rw  )r   r   rq  ry   )r=   rb   fv_M_inv_manualfv_M_inv_constantss       r8   r|   z<TestFiberForceVelocityInverseDeGroote2016.test_with_defaults  st    (OO(OO(OO'NN	
	 @	VIVVVBPQUQZ[["4444444r:   c                     t          | j        g| j        R  }t          | j        | j        z
  | j        z            | j        | j        z  z  }|                    | j                  |k    sJ d S r3   r   rq  rb   r   ra   r^   r_   r   r=   r  rG   s      r8   test_differentiate_wrt_fv_MzETestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_fv_M   sj    8TT^TTTTW,dg566H}}TY''8333333r:   c                    t          | j        g| j        R  }| j        | j        z
  t	          | j        | j        z
  | j        z            z  | j        dz  | j        z  z  }|                    | j                  |k    sJ d S r   )r   rq  rb   ra   r   r^   r_   r   r  s      r8   r   zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c0  s    8TT^TTTGdi'ty47/BDG.K)L)LLdgWXjY]Y`N`a}}TW%%111111r:   c                     t          | j        g| j        R  }| j        t	          | j        | j        z
  | j        z            z
  | j        dz  z  }|                    | j                  |k    sJ d S r   )	r   rq  rb   r`   r   ra   r^   r_   r   r  s      r8   r   zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c1
  so    8TT^TTTGdDI$7#@AAA47A:M}}TW%%111111r:   c                     t          | j        g| j        R  }d| j        z  }|                    | j                  |k    sJ d S r   )r   rq  rb   r_   r   r`   r  s      r8   r   zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c2  sK    8TT^TTTdg:}}TW%%111111r:   c                     t          | j        g| j        R  }t          | j        | j        z
  | j        z             | j        | j        z  z  }|                    | j                  |k    sJ d S r3   r  r  s      r8   r   zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c3  sm    8TT^TTT$)dg-tw6777I}}TW%%111111r:   c                 n    t          | j        g| j        R  }|                                t          u sJ d S r3   )r   rq  rb   r   r   r  s     r8   r   z6TestFiberForceVelocityInverseDeGroote2016.test_inverse  s?    8TT^TTT!!%CCCCCCCr:   c                     t          | j        g| j        R  }d}t                                          |          |k    sJ d S )Nz=\left( \operatorname{fv}^M \right)^{-1} \left( fv_{M} \right))r   rq  rb   r    rE   r  s      r8   r   zCTestFiberForceVelocityInverseDeGroote2016.test_function_print_latex  sI    8TT^TTTS~~%%h//8;;;;;;r:   c                     t          | j        g| j        R  }d}t                                          |                                          |k    sJ d S )NzK\frac{- c_{2} + \sinh{\left(\frac{- c_{3} + fv_{M}}{c_{0}} \right)}}{c_{1}})r   rq  rb   r    rE   r?   rt  s      r8   r   zETestFiberForceVelocityInverseDeGroote2016.test_expression_print_latex"  sQ    4TYPPPPa~~%%diikk22h>>>>>>r:   r.   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                 ~    t          j        | j                  } |                                |          |k    sJ d S r3   )r   ry   rq  rE   )r=   rF   rG   r  s       r8   r   z9TestFiberForceVelocityInverseDeGroote2016.test_print_code'  sB    f 9FtyQQ|~~%%h//8;;;;;;r:   c                     t          j        | j                  }|                    | j                  }d}t	                                          |          |k    sJ d S )NzE0.385894476383644*math.cosh(3.14465408805031*fv_M - 2.78616352201258))r   ry   rq  r   r'   rE   )r=   r  dfv_M_inv_dfv_MrG   s       r8   r   zDTestFiberForceVelocityInverseDeGroote2016.test_derivative_print_code}  s^    8FtyQQ"--	22" 	 !""**?;;xGGGGGGr:   c                     t          j        | j                  }t          | j        |          } |d          t	          j        d          k    sJ d S )Nr   gM8'$JO)r   ry   rq  r(   rQ   r   )r=   r  fv_M_inv_callables      r8   r   z7TestFiberForceVelocityInverseDeGroote2016.test_lambdify  sS    8FtyQQ$TY99  %%7M)N)NNNNNNNr:   Nr   r   c                 &   t          j        | j                  }t          | j        |d          }t                              g d          }t                              g d          }t          j                             ||          |           d S )Nr*   r   r   r   r   r   ggUYgm7H:gƲ$JOg^8?gH?)r   ry   rq  r(   r*   r   r   r   r=   r  r  rq  rG   s        r8   r   z=TestFiberForceVelocityInverseDeGroote2016.test_lambdify_numpy  s    8FtyQQ$TY'BB{{44455;;  
  
  
   	%%&7&7&=&=xHHHHHr:   r   c                 j   t          j        | j                  }t                              t          | j        |d                    }t          j                            g d          }t          j                            g d          }t          j        	                     ||          |           d S )Nr)   r  r  )
r   ry   rq  r)   r   r(   r*   r   r   r   r  s        r8   r   z;TestFiberForceVelocityInverseDeGroote2016.test_lambdify_jax  s    8FtyQQGGHTY%$H$HIIy888999?? $
 $
 $
   	%%&7&7&=&=xHHHHHr:   )-r@   rA   rB   rQ   r   r   rP   rh   rn   rp   ru   r|   r  r   r   r   r   r   r   r   rR   rS   r   r   r   r   r   r   r   r!   r'   r$   r%   r"   r#   r&   r   r   r   r   r   r*   r   r)   r   r4   r:   r8   r  r    s       V^D!!!> > "!> i i \i
b b b
S S Sb b b	5 	5 	54 4 4
2 2 2
2 2 2
2 2 2
2 2 2
D D D< < <
? ? ?
 [  , , , !, !3 !3 % " " % %  % 2 SN	
Q Qd< <eQ Qd<H H HO O O
 [.CDDI I EDI [t,?@@I I A@I I Ir:   r  c                      e Zd Zed             Zeej                            d          d                         Zeej        	                    dde
ie
eeeeeeddg          d	                         Zed
             ZdS )!TestCharacteristicCurveCollectionc            	      X   t          t          t          t          t          t
          t          t                    } | j        t          u sJ | j	        t          u sJ | j
        t          u sJ | j        t          u sJ | j        t
          u sJ | j        t          u sJ | j        t          u sJ 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  curvess    r8   test_valid_constructorz8TestCharacteristicCurveCollection.test_valid_constructor  s    . =(L'J/Y&H!?)N
 
 
 )-JJJJJ15YYYYY04WWWWW8<fffff/3UUUUU*.LLLLL26[[[[[[[r:   z.kw_only dataclasses only valid in Python >3.10r   c            
          t          j        t                    5  t          t          t
          t          t          t          t          t                    } d d d            d S # 1 swxY w Y   d S r3   )rQ   raises	TypeErrorr   r   r   r   r   r   r   r   )_s    r8   %test_invalid_constructor_keyword_onlyzGTestCharacteristicCurveCollection.test_invalid_constructor_keyword_only  s     ]9%% 		 		--43:2.5 A		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		s   9A  A$'A$r>   r  N)r  r  r  r  r  r  r  extra_kwargc                     t          j        t                    5  t          di | }d d d            d S # 1 swxY w Y   d S )Nr4   )rQ   r  r  r   )r>   r  s     r8   *test_invalid_constructor_wrong_number_argszLTestCharacteristicCurveCollection.test_invalid_constructor_wrong_number_args  s    $ ]9%% 	8 	8-7777A	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   488c            	         t          t          t          t          t          t
          t          t                    } t          j	        t                    5  d | _        d d d            n# 1 swxY w Y   t          j	        t                    5  d | _        d d d            n# 1 swxY w Y   t          j	        t                    5  d | _        d d d            n# 1 swxY w Y   t          j	        t                    5  d | _        d d d            n# 1 swxY w Y   t          j	        t                    5  d | _        d d d            n# 1 swxY w Y   t          j	        t                    5  d | _        d d d            n# 1 swxY w Y   t          j	        t                    5  d | _        d d d            d S # 1 swxY w Y   d S r  )r   r   r   r   r   r   r   r   rQ   r  AttributeErrorr  r  r  r  r  r  r  r  s    r8   test_instance_is_immutablez<TestCharacteristicCurveCollection.test_instance_is_immutable  s7   . =(L'J/Y&H!?)N
 
 
 ]>** 	. 	.)-F&	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.]>** 	6 	615F.	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6]>** 	5 	504F-	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5]>** 	= 	=8<F5	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=]>** 	4 	4/3F,	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4]>** 	/ 	/*.F'	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/]>** 	7 	726F/	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s~   A''A+.A+BB#&B#CCC;DDD3EEE+E??FF#F88F<?F<)r@   rA   rB   rP   r  rQ   rR   skipr  rS   r   r   r   r   r   r   r   r  r  r4   r:   r8   r  r    s        \ \ \\$ [MNN
 
 ON \
 ["$AB'D/S.Q6`-O(F0U#	 		
  8 8!  \"8 7 7 \7 7 7r:   r  )G__doc__rQ   sympy.core.exprr   sympy.core.functionr   sympy.core.numbersr   r   sympy.core.symbolr   r   sympy.external.importtoolsr	   &sympy.functions.elementary.exponentialr
   r   %sympy.functions.elementary.hyperbolicr   r   (sympy.functions.elementary.miscellaneousr    sympy.physics.biomechanics.curver   r   r   r   r   r   r   r   r   sympy.printing.cr   r   r   sympy.printing.cxxr   r   r   sympy.printing.fortranr   sympy.printing.lambdareprr   sympy.printing.latexr    sympy.printing.octaver!   sympy.printing.numpyr"   r#   r$   r%   sympy.printing.pycoder&   r'   sympy.utilities.lambdifyr(   r)   r*   configupdater-   rU   r   r   r  r"  rj  r  r  r4   r:   r8   <module>r     sc   L L  + + + + + + ( ( ( ( ( ( - - - - - - - - - - - - - - - - 4 4 4 4 4 4 ; ; ; ; ; ; ; ; < < < < < < < < 9 9 9 9 9 9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 L K K K K K K K K K         
 0 / / / / / 3 3 3 3 3 3 - - - - - - 3 3 3 3 3 3            C B B B B B B B - - - - - -mEg .J&---'< '< '< '< '< '< '< '<TzJ zJ zJ zJ zJ zJ zJ zJz~I ~I ~I ~I ~I ~I ~I ~IBxN xN xN xN xN xN xN xNvrQ rQ rQ rQ rQ rQ rQ rQjeN eN eN eN eN eN eN eNPbJ bJ bJ bJ bJ bJ bJ bJJNI NI NI NI NI NI NI NIbP7 P7 P7 P7 P7 P7 P7 P7 P7 P7r:   