
    sg/                    H   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:jx                  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*      ZFy)+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
                  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y)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      \  }}}}}} |||      }	 |||      }
 |||      } |        j                  |	|
z  |z        |k(  sJ y )Nc                   "    e Zd Zed        Zd Zy)UTestCharacteristicCurveFunction.test_print_code_parenthesize.<locals>.ExampleFunctionc                      y N )clsabs      ^/var/www/html/venv/lib/python3.12/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    yy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   sp    .	9 	 ##5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(                  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(                  jQ                  e)du d       d!        Z*ej(                  jQ                  e+du d"       d#        Z,y)$!TestTendonForceLengthDeGroote2016Tautousec                 
   t        d      | _        t        d      | _        t        d      | _        t        d      | _        t        d      | _        | j                  | j                  | j                  | j
                  f| _        y )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^   Z    ,----''477DGGTWW=r:   c                      t        t        t              sJ t        t        t              sJ t        j                  dk(  sJ y )Nr   )
issubclassr   r   r   r@   r4   r:   r8   
test_classz,TestTendonForceLengthDeGroote2016.test_classg   s:    7BBB79TUUU,559XXXXr:   c                     t        | j                  g| j                   }t        |t               sJ t	        |      dk(  sJ y )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   s=    ,T^^MdnnM$ =>>>4yZZZZr:   c                     t        | j                  g| j                   j                         }|| j                  t        | j                  | j                  | j                  z
  z        z  | j                  z
  k(  sJ y r3   )	r   rY   rb   r?   r^   r
   ra   r_   r`   rl   s     r8   	test_doitz+TestTendonForceLengthDeGroote2016.test_doitr   s]    ,T^^MdnnMRRTtwws477DNNTWW,D#EFFPPPPr:   c           	         t        | j                  g| j                   j                  d      }|| j                  t        | j                  t        | j                  | j                  z
        z        z  | j                  z
  k(  sJ y NFevaluate)
r   rY   rb   r?   r^   r
   ra   r   r_   r`   rl   s     r8   test_doit_evaluate_falsez:TestTendonForceLengthDeGroote2016.test_doit_evaluate_falsev   sk    ,T^^MdnnMRR\aRbtwws477?4>>DGG;S+T#TUUX\X_X_____r:   c                     t        d      t        d      t        d      t        d      f}t        | j                  g| }t        j                  | j                        }||k(  sJ y 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   s^    %L'N&M%&	
	 4DNNOYO6DDT^^Tn,,,r:   c                 *   t        | j                  g| j                   }| j                  | j                  z  t        | j                  t        | j                   | j                  z         z        z  }|j                  | j                        |k(  sJ y 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   sl    ,T^^MdnnM77477?3twwx$..?X/Y'Y#ZZyy(H444r:   c                     t        | j                  g| j                   }t        | j                  t        | j                   | j                  z         z        }|j                  | j                        |k(  sJ y r3   )	r   rY   rb   r
   ra   r   r_   r   r^   r   s      r8   test_differentiate_wrt_c0z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c0   s[    ,T^^MdnnMtwwx$../HIIJyy!X---r:   c                 *   t        | j                  g| j                   }| j                   | j                  z  t        | j                  t        | j                  | j                  z
        z        z  }|j                  | j                        |k(  sJ y r3   r~   r   s      r8   test_differentiate_wrt_c1z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c1   sp    ,T^^MdnnMGG8DGG#CQUQXQX@X0Y(Y$ZZyy!X---r:   c                     t        | j                  g| j                   }t        d      }|j	                  | j
                        |k(  sJ y N)r   rY   rb   r   r   r`   r   s      r8   test_differentiate_wrt_c2z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c2   s=    ,T^^MdnnM2;yy!X---r:   c                 B   t        | j                  g| j                   }| j                  | j                  | j                  z
  z  t        | j                  t        | j                  | j                  z
        z        z  }|j                  | j                        |k(  sJ y r3   )	r   rY   rb   r^   r_   r
   ra   r   r   r   s      r8   test_differentiate_wrt_c3z;TestTendonForceLengthDeGroote2016.test_differentiate_wrt_c3   sz    ,T^^MdnnM77DNNTWW45c$''/RVR`R`cgcjcjRjBk:k6llyy!X---r:   c                 t    t        | j                  g| j                   }|j                         t        u sJ y r3   )r   rY   rb   inverser   rl   s     r8   test_inversez.TestTendonForceLengthDeGroote2016.test_inverse   s.    ,T^^MdnnM||~!EEEEr:   c                     t        | j                  g| j                   }d}t               j	                  |      |k(  sJ y )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   s9    ,T^^MdnnMD~%%d+x777r:   c                     t        | j                  g| j                   }d}t               j	                  |j                               |k(  sJ y )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   s?    ,T^^MdnnMP~%%diik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                 x    t        j                  | j                        } |       j                  |      |k(  sJ y r3   )r   ry   rY   rE   )r=   rF   rG   rm   s       r8   test_print_codez1TestTendonForceLengthDeGroote2016.test_print_code   s4    H -::4>>J~%%d+x777r:   c                     t        j                  | j                        }|j                  | j                        }d}t	               j                  |      |k(  sJ y )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   sK    ,::4>>J99T^^4V "**+;<HHHr:   c                     t        j                  | j                        }t        | j                  |      } |d      t	        j
                  d      k(  sJ y )N      ?g A)r   ry   rY   r(   rQ   approx)r=   rm   fl_T_callables      r8   test_lambdifyz/TestTendonForceLengthDeGroote2016.test_lambdify   sC    ,::4>>J 6S!V]]3H%IIIIr:   NNumPy not installedreasonc                    t        j                  | j                        }t        | j                  |d      }t        j                  g d      }t        j                  g d      }t        j                  j                   ||      |       y )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   se    ,::4>>J w?KK 78	;;  
  	%%mI&>Ir:   JAX not installedc                 f   t        j                  | j                        }t        j	                  t        | j                  |d            }t        j                  j                  g d      }t        j                  j                  g d      }t        j                  j                   ||      |       y )Nr)   r   r   )
r   ry   rY   r)   jitr(   r*   r   r   r   r   s        r8   test_lambdify_jaxz3TestTendonForceLengthDeGroote2016.test_lambdify_jax  sv    ,::4>>Ju EFIIOO$;<	99?? $
  	%%mI&>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
[
Q`	-5
.
.
.
.
F8
?
 [[  Z
 Z
 Z
 !Z
 !_
 !_
 X
 "J
 "O
 P
 P
 O
 T
 @ Ow?	
BF8GBF8IJ
 [[.CD
J E
J [[t,?@
J A
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(                  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(                  jQ                  e)du d       d!        Z*ej(                  jQ                  e+du d"       d#        Z,y)$(TestTendonForceLengthInverseDeGroote2016TrV   c                 
   t        d      | _        t        d      | _        t        d      | _        t        d      | _        t        d      | _        | j                  | j                  | j                  | j
                  f| _        y )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  Y    6N	----''477DGGTWW=r:   c                      t        t        t              sJ t        t        t              sJ t        j                  dk(  sJ y )Nr   )rg   r   r   r   r@   r4   r:   r8   rh   z3TestTendonForceLengthInverseDeGroote2016.test_class$  s:    >III>@[\\\3<<@ffffr:   c                     t        | j                  g| j                   }t        |t               sJ t	        |      dk(  sJ y )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*  s=    7		SDNNS($HIII8} ````r:   c                     t        | j                  g| j                   j                         }|t	        | j                  | j
                  z   | j                  z        | j                  z  | j                  z   k(  sJ y r3   )	r   rm   rb   r?   r   r`   r^   ra   r_   r   s     r8   rp   z2TestTendonForceLengthInverseDeGroote2016.test_doit/  s]    7		SDNNSXXZ3		DGG 3TWW<=dggEOOOOr:   c                    t        | j                  g| j                   j                  d      }|t	        t        | j                  | j                  z   | j                  z              | j                  z  | j                  z   k(  sJ y rr   )
r   rm   rb   r?   r   r   r`   r^   ra   r_   r   s     r8   ru   zATestTendonForceLengthInverseDeGroote2016.test_doit_evaluate_false3  sk    7		SDNNSXXbgXh3		DGG0CTWW/LMNtwwVY]Y`Y`````r:   c                     t        d      t        d      t        d      t        d      f}t        | j                  g| }t        j                  | j                        }||k(  sJ y rw   )r   r   rm   ry   )r=   rb   fl_T_inv_manualfl_T_inv_constantss       r8   r|   z;TestTendonForceLengthInverseDeGroote2016.test_with_defaults7  sc    %L'N&M%&	
	 ?tyyU9UAOOPTPYPYZ"4444r:   c                     t        | j                  g| j                   }d| j                  | j                  | j                  z   z  z  }|j                  | j                        |k(  sJ y N   r   rm   rb   ra   r`   r   r=   r   rG   s      r8   test_differentiate_wrt_fl_TzDTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_fl_TB  sT    7		SDNNSdggtyy477234}}TYY'8333r:   c                     t        | j                  g| j                   }d| j                  | j                  z  z  }|j                  | j                        |k(  sJ y r   )r   rm   rb   r^   ra   r   r   s      r8   r   zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c0G  sJ    7		SDNNStwwtww'}}TWW%111r:   c                     t        | j                  g| j                   }t        d      }|j	                  | j
                        |k(  sJ y r   )r   rm   rb   r   r   r_   r   s      r8   r   zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c1L  s=    7		SDNNS1:}}TWW%111r:   c                     t        | j                  g| j                   }d| j                  | j                  | j                  z   z  z  }|j                  | j                        |k(  sJ y r   r   r   s      r8   r   zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c2Q  sT    7		SDNNSdggtyy477234}}TWW%111r:   c                    t        | j                  g| j                   }t        t	        | j                  | j
                  z   | j                  z               | j                  dz  z  }|j                  | j                        |k(  sJ y N   )	r   rm   rb   r   r   r`   r^   ra   r   r   s      r8   r   zBTestTendonForceLengthInverseDeGroote2016.test_differentiate_wrt_c3V  sj    7		SDNNSTWW)<dgg(EFGGQR
R}}TWW%111r:   c                 t    t        | j                  g| j                   }|j                         t        u sJ y r3   )r   rm   rb   r   r   r   s     r8   r   z5TestTendonForceLengthInverseDeGroote2016.test_inverse[  s1    7		SDNNS!%BBBBr:   c                     t        | j                  g| j                   }d}t               j	                  |      |k(  sJ y )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_  s9    7		SDNNSS~%%h/8;;;r:   c                     t        | j                  g| j                   }d}t               j	                  |j                               |k(  sJ y )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  s?    3DIIOO\~%%diik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                 x    t        j                  | j                        } |       j                  |      |k(  sJ y r3   )r   ry   rm   rE   )r=   rF   rG   r   s       r8   r   z8TestTendonForceLengthInverseDeGroote2016.test_print_codei  s4    H 8EEdiiP~%%h/8;;;r:   c                     t        j                  | j                        }|j                  | j                        }d}t	               j                  |      |k(  sJ y )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  sI    7EEdiiP"--		2C "**?;xGGGr:   c                     t        j                  | j                        }t        | j                  |      } |d      t	        j
                  d      k(  sJ y )N        mIs?)r   ry   rm   r(   rQ   r   )r=   r   fl_T_inv_callables      r8   r   z6TestTendonForceLengthInverseDeGroote2016.test_lambdify  sC    7EEdiiP$TYY9 %|)DDDDr:   Nr   r   c                    t        j                  | j                        }t        | j                  |d      }t        j                  g d      }t        j                  g d      }t        j                  j                   ||      |       y )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  sg    7EEdiiP$TYY'B{{?@;;  
  	%%&7&=xHr:   r   c                 f   t        j                  | j                        }t        j	                  t        | j                  |d            }t        j                  j                  g d      }t        j                  j                  g d      }t        j                  j                   ||      |       y )Nr)   r   r   )
r   ry   rm   r)   r   r(   r*   r   r   r   r   s        r8   r   z:TestTendonForceLengthInverseDeGroote2016.test_lambdify_jax  sx    7EEdiiPGGHTYY%$HIyyCD99?? $
  	%%&7&=x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
a
Pa	54
2
2
2
2
C<
?
 [[  E
 E
 E
 !E
 !J
 !J
 R
 "D
 "I
 J
 J
 I
 N
 Z Iw?	
BF<GBF<HE
 [[.CDI EI [[t,?@I A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$                  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$                  jM                  e'du d      d        Z(ej$                  jM                  e)du d       d!        Z*y)"'TestFiberForceLengthPassiveDeGroote2016TrV   c                     t        d      | _        t        d      | _        t        d      | _        | j                  | j                  f| _        y )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  s8    ,--''477+r:   c                      t        t        t              sJ t        t        t              sJ t        j                  dk(  sJ y )Nr   )rg   r   r   r   r@   r4   r:   r8   rh   z2TestFiberForceLengthPassiveDeGroote2016.test_class  s:    =xHHH=?Z[[[2;;?ddddr:   c                     t        | j                  g| j                   }t        |t               sJ t	        |      dk(  sJ y )Nz8FiberForceLengthPassiveDeGroote2016(l_M_tilde, c_0, c_1))r   r   rb   rj   rk   r=   fl_M_pass     r8   rn   z5TestFiberForceLengthPassiveDeGroote2016.test_instance  s=    6t~~WW($GHHH8} ZZZZr:   c                    t        | j                  g| j                   j                         }|t	        | j
                  | j                  dz
  z  | j                  z        dz
  t	        | j
                        dz
  z  k(  sJ y r   )r   r   rb   r?   r
   r_   r^   r   s     r8   rp   z1TestFiberForceLengthPassiveDeGroote2016.test_doit  sk    6t~~WW\\^C$..1*<!=tww FG!KcRVRYRYl]^N^____r:   c                    t        | j                  g| j                   j                  d      }|t	        | j
                  t        | j                  dz
        z  | j                  z        dz
  t	        | j
                        dz
  z  k(  sJ y NFrs   r   )r   r   rb   r?   r
   r_   r   r^   r   s     r8   ru   z@TestFiberForceLengthPassiveDeGroote2016.test_doit_evaluate_false  sy    6t~~WW\\fk\lC!9K)L!Ldgg UVYZZ]`aeahah]ilm]mnnnnr:   c                     t        d      t        d      f}t        | j                  g| }t        j                  | j                        }||k(  sJ y 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  sP    %L%L
	 >dnnYyY@NNt~~^"4444r:   c                 `   t        | j                  g| j                   }| j                  t	        | j                  t        | j                  dz
        z  | j                  z        z  | j                  t	        | j                        dz
  z  z  }|j                  | j                        |k(  sJ y 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773twwt~~7I'JJ477RSSUYU\U\^abfbibi^jmn^nUop}}T^^,888r:   c                    t        | j                  g| j                   }| 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                  | j                        |k(  sJ y Nr   r   r   r   s      r8   r   zATestFiberForceLengthPassiveDeGroote2016.test_differentiate_wrt_c0  s    6t~~WWWWHS!1C!DDTWWLMMT^^a/0126''1*c$''lQ>N2OQ 	 }}TWW%111r:   c           	      J   t        | j                  g| j                   }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                  | j                        |k(  sJ y )Nr   r   r   )r   r   rb   r
   r_   r   r^   r   r   s      r8   r   zATestFiberForceLengthPassiveDeGroote2016.test_differentiate_wrt_c1  s    6t~~WW\M2DGGODNNQ<N,O$OPTPWPW$W XXY[^_c_f_f[gjk[knoZoo$''/$..1*<==dggEFYZHZ[]a]d]dfijnjqjqfruvfv]wxy 	 }}TWW%111r:   c                 t    t        | j                  g| j                   }|j                         t        u sJ y r3   )r   r   rb   r   r   r   s     r8   r   z4TestFiberForceLengthPassiveDeGroote2016.test_inverse  s1    6t~~WW!%OOOOr:   c                     t        | j                  g| j                   }d}t               j	                  |      |k(  sJ y )Nz4\operatorname{fl}^M_{pas} \left( l_{M tilde} \right))r   r   rb   r    rE   r   s      r8   r   zATestFiberForceLengthPassiveDeGroote2016.test_function_print_latex  s9    6t~~WWJ~%%h/8;;;r:   c                     t        | j                  g| j                   }d}t               j	                  |j                               |k(  sJ y )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  s?    6t~~WWd~%%hmmo6(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                 x    t        j                  | j                        } |       j                  |      |k(  sJ y r3   )r   ry   r   rE   )r=   rF   rG   r   s       r8   r   z7TestFiberForceLengthPassiveDeGroote2016.test_print_code"  s4    H 7DDT^^T~%%h/8;;;r:   c                     t        j                  | j                        }|j                  | j                        }d}t	               j                  |      |k(  sJ y )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  sK    6DDT^^T&mmDNN;P "**+>?8KKKr:   c                     t        j                  | j                        }t        | j                  |      } |d      t	        j
                  d      k(  sJ y )Nr   r   )r   ry   r   r(   rQ   r   )r=   r   fl_M_pas_callables      r8   r   z5TestFiberForceLengthPassiveDeGroote2016.test_lambdifyo  sC    6DDT^^T$T^^X> %s);;;;r:   Nr   r   c                    t        j                  | j                        }t        | j                  |d      }t        j                  g d      }t        j                  g d      }t        j                  j                   ||      |       y )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  sg    6DDT^^T$T^^XwGKK CD	;;  
  	%%&7	&BHMr:   r   c                 f   t        j                  | j                        }t        j	                  t        | j                  |d            }t        j                  j                  g d      }t        j                  j                  g d      }t        j                  j                   ||      |       y )Nr)   r   r  )
r   ry   r   r)   r   r(   r*   r   r   r   r  s        r8   r   z9TestFiberForceLengthPassiveDeGroote2016.test_lambdify_jax  sx    6DDT^^TGGHT^^Xu$MNIIOO$GH	99?? $
  	%%&7	&BH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
[
`o59
22P<
C
 [[  U
 U
 U
 !U
 !Z
 !Z
  "S
 "X
 Y
 Y
 X
 ]
 P Xw?	
BF<GBF<L<
 [[.CDN EN [[t,?@N A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$                  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$                  jM                  e'du d      d        Z(ej$                  jM                  e)du d       d!        Z*y)".TestFiberForceLengthPassiveInverseDeGroote2016TrV   c                     t        d      | _        t        d      | _        t        d      | _        | j                  | j                  f| _        y )Nr   rZ   r[   )r   r   r^   r_   rb   rc   s    r8   r   z\TestFiberForceLengthPassiveInverseDeGroote2016._fiber_force_length_passive_arguments_fixture  s8    z*--''477+r:   c                      t        t        t              sJ t        t        t              sJ t        j                  dk(  sJ y )Nr   )rg   r   r   r   r@   r4   r:   r8   rh   z9TestFiberForceLengthPassiveInverseDeGroote2016.test_class  s:    DhOOODFabbb9BBFrrrrr:   c                     t        | j                  g| j                   }t        |t               sJ t	        |      dk(  sJ y )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  sA    A$--aRVR`R`a,(RSSS< $ddddr:   c                    t        | j                  g| j                   j                         }|| j                  t        | j                  t        | j                        dz
  z  dz         z  | j                  z  dz   k(  sJ y r   )r   r   rb   r?   r^   r   r
   r_   r	  s     r8   rp   z8TestFiberForceLengthPassiveInverseDeGroote2016.test_doit  sn    A$--aRVR`R`affhtwws4==#dgg,:J+Ka+O'PPQUQXQXX[\\\\\r:   c           
         t        | j                  g| j                   j                  d      }|| j                  t        t        | j                  t        | j                        dz
  z        dz         z  | j                  z  dz   k(  sJ y r   )	r   r   rb   r?   r^   r   r   r
   r_   r	  s     r8   ru   zGTestFiberForceLengthPassiveInverseDeGroote2016.test_doit_evaluate_false  s{    A$--aRVR`R`affpufvtwws?4==#dgg,YZJZ;[+\_`+`'aabfbibiilmmmmmr:   c                     t        d      t        d      f}t        | j                  g| }t        j                  | j                        }||k(  sJ y r   )r   r   r   ry   )r=   rb   fl_M_pas_inv_manualfl_M_pas_inv_constantss       r8   r|   zATestFiberForceLengthPassiveInverseDeGroote2016.test_with_defaults  sV    %L%L
	 IcYbc!K!Y!YZ^ZgZg!h"&<<<<r:   c                 :   t        | j                  g| j                   }| j                  t	        | j
                        dz
  z  | j
                  | j                  t	        | j
                        dz
  z  dz   z  z  }|j                  | j                        |k(  sJ y r   )r   r   rb   r^   r
   r_   r   r=   r
  rG   s      r8   r   zJTestFiberForceLengthPassiveInverseDeGroote2016.test_differentiate_wrt_fl_T  s    A$--aRVR`R`a77CL1,-twws477|VWGW8X[\8\/]^  /8;;;r:   c                     t        | j                  g| j                   }t        | j                  t	        | j
                        dz
  z  dz         | j
                  z  }|j                  | j                        |k(  sJ y r   )r   r   rb   r   r
   r_   r   r^   r  s      r8   r   zHTestFiberForceLengthPassiveInverseDeGroote2016.test_differentiate_wrt_c0  sg    A$--aRVR`R`at}}c$''lQ&67!;<TWWD  )X555r:   c                    t        | j                  g| j                   }| 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                  | j
                        |k(  sJ y r   )r   r   rb   r^   r
   r_   r   r   r  s      r8   r   zHTestFiberForceLengthPassiveInverseDeGroote2016.test_differentiate_wrt_c1  s    A$--aRVR`R`aGGDMM!#dgg,.DGGWXHX9Y\]9]0^_ggc$--TWW)9:Q>??
JK 	   )X555r:   c                 t    t        | j                  g| j                   }|j                         t        u sJ y r3   )r   r   rb   r   r   r	  s     r8   r   z;TestFiberForceLengthPassiveInverseDeGroote2016.test_inverse  s4    A$--aRVR`R`a##%)LLLLr:   c                     t        | j                  g| j                   }d}t               j	                  |      |k(  sJ y )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  s<    A$--aRVR`R`a]~%%l3x???r:   c                     t        | j                  g| j                   }d}t               j	                  |j                               |k(  sJ y )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  s?    9$--Y$..Yk~%%diik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                 x    t        j                  | j                        } |       j                  |      |k(  sJ y r3   )r   ry   r   rE   )r=   rF   rG   r
  s       r8   r   z>TestFiberForceLengthPassiveInverseDeGroote2016.test_print_code  s8    F BOOPTP]P]^~%%l3x???r:   c                     t        j                  | j                        }|j                  | j                        }d}t	               j                  |      |k(  sJ y )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   sP    AOOPTP]P]^*//>G "**+>?8KKKr:   c                     t        j                  | j                        }t        | j                  |      } |d      t	        j
                  d      k(  sJ y )Nr   r   )r   ry   r   r(   rQ   r   )r=   r
  fl_M_pas_inv_callables      r8   r   z<TestFiberForceLengthPassiveInverseDeGroote2016.test_lambdify&  sF    AOOPTP]P]^ ( E$S)V]]3-????r:   Nr   r   c                    t        j                  | j                        }t        | j                  |d      }t        j                  g d      }t        j                  g d      }t        j                  j                   ||      |       y )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+  sj    AOOPTP]P]^ (g N;;BC;;  
  	%%&;H&ExPr:   r   c                 f   t        j                  | j                        }t        j	                  t        | j                  |d            }t        j                  j                  g d      }t        j                  j                  g d      }t        j                  j                   ||      |       y )Nr)   r  r  )
r   ry   r   r)   r   r(   r*   r   r   r   r  s        r8   r   z@TestFiberForceLengthPassiveInverseDeGroote2016.test_lambdify_jax:  s{    AOOPTP]P]^ #e(T U99??#FG99?? $
  	%%&;H&Ex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
e
]n=<
6
6M@
?
 [[  P
 P
 P
 !P
 !U
 !U
 M
 "?
 "D
 E
 E
 D
 I
 I Du>	
AD@EAD@L@
 [[.CDQ EQ [[t,?@Q A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j6                  j9                  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j6                  j_                  e0d&u d'(      d)        Z1ej6                  j_                  e2d&u d*(      d+        Z3y&),&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| _        y )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    ,----------&>&>GGTWWdggtwwGGTWWdggtww$((
r:   c                      t        t        t              sJ t        t        t              sJ t        j                  dk(  sJ y )Nr   )rg   r   r   r   r@   r4   r:   r8   rh   z1TestFiberForceLengthActiveDeGroote2016.test_class`  s:    <hGGG<>YZZZ1::>bbbbr:   c                     t        | j                  g| j                   }t        |t               sJ t	        |      dk(  sJ y )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  sE    5dnnVt~~V($FGGG8}8
 	
 
r:   c           	         t        | j                  g| j                   j                         }|| 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 y 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   5dnnVt~~V[[]GGCDNNTWW4twwAW7WX[\\]^__``ggcdnntww64774>>CY9YZ]^^_`aabbcggcdnntww6DHHT^^D[9[\_``abccdde
 	
 
r:   c           	         t        | j                  g| j                   j                  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 y )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?   5dnnVt~~V[[ej[kGGC?4>>DGG+CDdggPTPWPWX\XfXfPfFfgjkklmnnooggc_T^^dgg-EFRVRYRYZ^ZhZhRhHhilmmnoppqqrggc_T^^dgg-EFSWS[S[\`\j\jSjHjknoopqrrsst
 	
 
r:   c                 p   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| }t        j                  | j                        }||k(  sJ y )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    'N&M'N(O'N'N)%L%L%L'N%L
	 =T^^XiX?MMdnn]"4444r:   c           	      X   t        | j                  g| j                   }| 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!                  | j                        |k(  sJ y 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  s   5dnnVt~~VGG$''1A55twwAW7WZ[6[[77T^^+tww9O/ORS.STU DNNTWW,q00!TWWtwwt~~?U5UXY4Y2YZ[\ gg$''1A55twwAW7WZ[6[[77T^^+tww9O/ORS.STU DNNTWW,q00!TWWtwwt~~?U5UXY4Y2YZ[\	\ gg$..4772Q66488DNNCZ8Z]^7^^77T^^+txx$((4>>:Q/QTU.UVW DNNTWW,q00!TXX@W5WZ[4[2[\]^^ 	 }}T^^,888r:   c                 F   t        | j                  g| j                   }t        | j                  | j                  z
  dz   d| j
                  | j                  | j                  z  z   dz  z  z        }|j                         j                  | j                        |k(  sJ y r   )
r   r   rb   r
   r_   r`   ra   r?   r   r^   rA  s      r8   r   z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c0  s    5dnnVt~~V$''1A55q$''DGGDNNDZ:Z]^9^7^_`}}##DGG,888r:   c                    t        | j                  g| j                   }| 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                  | j                        |k(  sJ y r   	r   r   rb   r^   r_   r`   ra   r
   r   rA  s      r8   r   z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c1      5dnnVt~~VGGT^^dgg-.$''$..:P0PST/TT4>>DGG+a//DGGdggdnn>T4TWX3X1XYZ[ 	 }}TWW%111r:   c                    t        | j                  g| j                   }| 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                  | j
                        |k(  sJ y r?  rD  rA  s      r8   r   z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c2      5dnnVt~~VGGT^^dgg-11477TWWT^^=S3SVW2WW4>>DGG+a//DGGdggdnn>T4TWX3X1XYZ[ 	 }}TWW%111r:   c                    t        | j                  g| j                   }| 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                  | j                        |k(  sJ y r?  rD  rA  s      r8   r   z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c3      5dnnVt~~VGGDNN"DNNTWW$<q#@@$''DGGTXTbTbLbBbefAff4>>DGG+a//DGGdggdnn>T4TWX3X1XYZ[ 	 }}TWW%111r:   c                 *   t        | j                  g| j                   }t        | j                  | j                  z
  dz   d| j
                  | j                  | j                  z  z   dz  z  z        }|j                  | j                        |k(  sJ y r   )	r   r   rb   r
   r-  r.  r/  r   r,  rA  s      r8   test_differentiate_wrt_c4z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c4  sy    5dnnVt~~V$''1A55q$''DGGDNNDZ:Z]^9^7^_`}}TWW%111r:   c                    t        | j                  g| j                   }| 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                  | j                        |k(  sJ y 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                   }| 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                  | j
                        |k(  sJ y r?  rM  rA  s      r8   test_differentiate_wrt_c6z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c6  rG  r:   c                    t        | j                  g| j                   }| 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                  | j                        |k(  sJ y r?  rM  rA  s      r8   test_differentiate_wrt_c7z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c7  rI  r:   c                 *   t        | j                  g| j                   }t        | j                  | j                  z
  dz   d| j
                  | j                  | j                  z  z   dz  z  z        }|j                  | j                        |k(  sJ y r   )	r   r   rb   r
   r1  r2  r3  r   r0  rA  s      r8   test_differentiate_wrt_c8z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c8  sy    5dnnVt~~V$''1A55q$((TXXdnnE\:\_`9`7`ab}}TWW%111r:   c                    t        | j                  g| j                   }| 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                  | j                        |k(  sJ y r   	r   r   rb   r0  r1  r2  r3  r
   r   rA  s      r8   test_differentiate_wrt_c9z@TestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c9  s    5dnnVt~~VGGT^^dgg-.488DNN;R0RUV/VV4>>DGG+a//DHHtxx?V4VYZ3Z1Z[\] 	 }}TWW%111r:   c                    t        | j                  g| j                   }| 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                  | j
                        |k(  sJ y r?  rV  rA  s      r8   test_differentiate_wrt_c10zATestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c10  s    5dnnVt~~VGGT^^dgg-11488dhht~~>U3UXY2YY4>>DGG+a//DHHtxx?V4VYZ3Z1Z[\] 	 }}TXX&(222r:   c                    t        | j                  g| j                   }| 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                  | j                        |k(  sJ y r?  rV  rA  s      r8   test_differentiate_wrt_c11zATestFiberForceLengthActiveDeGroote2016.test_differentiate_wrt_c11  s    5dnnVt~~VGGDNN"DNNTWW$<q#@@$((TXXVZVdVdMdBdghAhh4>>DGG+a//DHHtxx?V4VYZ3Z1Z[\] 	 }}TXX&(222r:   c                     t        | j                  g| j                   }d}t               j	                  |      |k(  sJ y )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  s9    5dnnVt~~VJ~%%h/8;;;r:   c                     t        | j                  g| j                   }d}t               j	                  |j                               |k(  sJ y )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  sG    5dnnVt~~V{ 	
 ~%%hmmo6(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                 x    t        j                  | j                        } |       j                  |      |k(  sJ y r3   )r   ry   r   rE   )r=   rF   rG   r8  s       r8   r   z6TestFiberForceLengthActiveDeGroote2016.test_print_code  s4    h 6CCDNNS~%%h/8;;;r:   c                     t        j                  | j                        }|j                  | j                        }d}t	               j                  |      |k(  sJ y )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  sR    5CCDNNS&mmDNN;	5 	 !"**+>?8KKKr:   c                     t        j                  | j                        }t        | j                  |      } |d      t	        j
                  d      k(  sJ y )Nr   s?)r   ry   r   r(   rQ   r   )r=   r8  fl_M_act_callables      r8   r   z4TestFiberForceLengthActiveDeGroote2016.test_lambdify  sC    5CCDNNS$T^^X> %|)DDDDr:   Nr   r   c                    t        j                  | j                        }t        | j                  |d      }t        j                  g d      }t        j                  g d      }t        j                  j                   ||      |       y )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  sg    5CCDNNS$T^^XwGKK 9:	;;  
  	%%&7	&BHMr:   r   c                 f   t        j                  | j                        }t        j	                  t        | j                  |d            }t        j                  j                  g d      }t        j                  j                  g d      }t        j                  j                   ||      |       y )Nr)   re  rf  )
r   ry   r   r)   r   r(   r*   r   r   r   rg  s        r8   r   z8TestFiberForceLengthActiveDeGroote2016.test_lambdify_jax  sx    5CCDNNSGGHT^^Xu$MNIIOO$=>	99?? $
  	%%&7	&BH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



5&9$9
2222
2222
233<
C [[  1 1 1 !6 !6 !6 5	 "I	 "N	 O	 O	 N	 S	 
C" N	Ko	
rf<grf<L"E
 [[.CDN EN [[t,?@N A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(                  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(                  jQ                  e)d u d!"      d#        Z*ej(                  jQ                  e+d u d$"      d%        Z,y )&"TestFiberForceVelocityDeGroote2016TrV   c                 
   t        d      | _        t        d      | _        t        d      | _        t        d      | _        t        d      | _        | j                  | j                  | j                  | j
                  f| _        y )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 y )Nr   )rg   r   r   r   r@   r4   r:   r8   rh   z-TestFiberForceVelocityDeGroote2016.test_class  s:    8(CCC8:UVVV-66:ZZZZr:   c                     t        | j                  g| j                   }t        |t               sJ t	        |      dk(  sJ y )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  s=    -dnnNt~~N$ >???4y[[[[r:   c                 l   t        | j                  g| j                   j                         }| j                  t        | j                  | j                  z  | j                  z   t        | j                  | j                  z  | j                  z   dz  dz         z         z  | j                  z   }||k(  sJ y Nr   r   )
r   rl  rb   r?   r^   r   r_   r`   r   ra   r=   rq  rG   s      r8   rp   z,TestFiberForceVelocityDeGroote2016.test_doit  s    -dnnNt~~NSSUGGc477T^^3dgg=DGGdnn,tww6:Q>?@ A ACG77K 	 xr:   c           
         t        | j                  g| j                   j                  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 y )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    -dnnNt~~NSS]bScGGc477T^^3dgg=?477T^^#;dgg#EFIAMNO P PRVRYRYZ 	 xr:   c                     t        d      t        d      t        d      t        d      f}t        | j                  g| }t        j                  | j                        }||k(  sJ y 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  s\    (O(O(O'N	
	 5T^^PiP7EEdnnUn,,,r:   c                 4   t        | j                  g| j                   }| j                  | j                  z  t        t        | j                  | j                  z  | j                  z         dz  dz         z  }|j                  | j                        |k(  sJ y 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}    -dnnNt~~NGGDGGO/$''$.."8477"BCQFJKL 	 yy(H444r:   c           	      `   t        | j                  g| j                   }t        | j                  | j                  z  | j
                  z   t        t        | j                  | j                  z  | j
                  z         dz  dz         z         }|j                  | j                        |k(  sJ y rs  )
r   rl  rb   r   r_   r`   r   r   r   r^   rt  s      r8   r   z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c0+  s    -dnnNt~~NGGDNN"TWW,?4774>>#9DGG#CDaG!KLM
 yy!X---r:   c                 4   t        | j                  g| j                   }| j                  | j                  z  t	        t        | j                  | j                  z  | j                  z         dz  dz         z  }|j                  | j                        |k(  sJ y rs  	r   rl  rb   r^   r   r   r_   r`   r   rt  s      r8   r   z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c13  s~    -dnnNt~~NGGDNN"/$''$.."8477"BCQFJKL 	 yy!X---r:   c                    t        | j                  g| j                   }| j                  t	        t        | j                  | j                  z  | j                  z         dz  dz         z  }|j                  | j                        |k(  sJ y rs  r~  rt  s      r8   r   z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c2;  su    -dnnNt~~NGG/$''$.."8477"BCQFJKL 	 yy!X---r:   c                     t        | j                  g| j                   }t        d      }|j	                  | j
                        |k(  sJ y r   )r   rl  rb   r   r   ra   rt  s      r8   r   z<TestFiberForceVelocityDeGroote2016.test_differentiate_wrt_c3C  s=    -dnnNt~~N1:yy!X---r:   c                 t    t        | j                  g| j                   }|j                         t        u sJ y r3   )r   rl  rb   r   r   rp  s     r8   r   z/TestFiberForceVelocityDeGroote2016.test_inverseH  s.    -dnnNt~~N||~!FFFFr:   c                     t        | j                  g| j                   }d}t               j	                  |      |k(  sJ y )Nz.\operatorname{fv}^M \left( v_{M tilde} \right))r   rl  rb   r    rE   rt  s      r8   r   z<TestFiberForceVelocityDeGroote2016.test_function_print_latexL  s9    -dnnNt~~ND~%%d+x777r:   c                     t        | j                  g| j                   }d}t               j	                  |j                               |k(  sJ y )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  sG    -dnnNt~~ND 	 ~%%diik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                 x    t        j                  | j                        } |       j                  |      |k(  sJ y r3   )r   ry   rl  rE   )r=   rF   rG   rq  s       r8   r   z2TestFiberForceVelocityDeGroote2016.test_print_codeY  s4    j .;;DNNK~%%d+x777r:   c                     t        j                  | j                        }|j                  | j                        }d}t	               j                  |      |k(  sJ y )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  sK    -;;DNNK99T^^4I "**+;<HHHr:   c                     t        j                  | j                        }t        | j                  |      } |d      t	        j
                  d      k(  sJ y )Nr   gJ<_Y	?)r   ry   rl  r(   rQ   r   )r=   rq  fv_M_callables      r8   r   z0TestFiberForceVelocityDeGroote2016.test_lambdify  sC    -;;DNNK 6S!V]]3D%EEEEr:   Nr   r   c                    t        j                  | j                        }t        | j                  |d      }t        j                  g d      }t        j                  g d      }t        j                  j                   ||      |       y )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  se    -;;DNNK w?KK 67	;;  
  	%%mI&>Ir:   r   c                 f   t        j                  | j                        }t        j	                  t        | j                  |d            }t        j                  j                  g d      }t        j                  j                  g d      }t        j                  j                   ||      |       y )Nr)   r  r  )
r   ry   rl  r)   r   r(   r*   r   r   r   r  s        r8   r   z4TestFiberForceVelocityDeGroote2016.test_lambdify_jax  sv    -;;DNNKu EFIIOO$:;	99?? $
  	%%mI&>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....
G8
? [[  V V V !` !` !` K "> "C D D C H F >WP	
Sh8iSh8IF
 [[.CD
J E
J [[t,?@
J A
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(                  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(                  jQ                  e)du d       d!        Z*ej(                  jQ                  e+du d"       d#        Z,y)$)TestFiberForceVelocityInverseDeGroote2016TrV   c                 
   t        d      | _        t        d      | _        t        d      | _        t        d      | _        t        d      | _        | j                  | j                  | j                  | j
                  f| _        y )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 y )Nr   )rg   r   r   r   r@   r4   r:   r8   rh   z4TestFiberForceVelocityInverseDeGroote2016.test_class  s:    ?JJJ?A\]]]4==Ahhhhr:   c                     t        | j                  g| j                   }t        |t               sJ t	        |      dk(  sJ y )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  s=    8TT^^T($IJJJ8} aaaar:   c                     t        | j                  g| j                   j                         }|t	        | j                  | j
                  z
  | j                  z        | j                  z
  | j                  z  k(  sJ y r3   )	r   rq  rb   r?   r   ra   r^   r`   r_   r  s     r8   rp   z3TestFiberForceVelocityInverseDeGroote2016.test_doit  s]    8TT^^TYY[D$))dgg"5tww!>?$''I477RRRRr:   c                    t        | j                  g| j                   j                  d      }|t	        t        | j                  | j                  z
        | j                  z        | j                  z
  | j                  z  k(  sJ y rr   )
r   rq  rb   r?   r   r   ra   r^   r`   r_   r  s     r8   ru   zBTestFiberForceVelocityInverseDeGroote2016.test_doit_evaluate_false  sn    8TT^^TYYchYiDTWW1D!Edgg!MNQUQXQXXZ^ZaZaaaaar:   c                     t        d      t        d      t        d      t        d      f}t        | j                  g| }t        j                  | j                        }||k(  sJ y rw  )r   r   rq  ry   )r=   rb   fv_M_inv_manualfv_M_inv_constantss       r8   r|   z<TestFiberForceVelocityInverseDeGroote2016.test_with_defaults  sb    (O(O(O'N	
	 @		VIVBPPQUQZQZ["4444r:   c                    t        | j                  g| j                   }t        | j                  | j                  z
  | j
                  z        | j
                  | j                  z  z  }|j                  | j                        |k(  sJ y r3   r   rq  rb   r   ra   r^   r_   r   r=   r  rG   s      r8   test_differentiate_wrt_fv_MzETestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_fv_M   se    8TT^^TTWW,dgg56H}}TYY'8333r:   c                 P   t        | j                  g| j                   }| j                  | j                  z
  t	        | j                  | j                  z
  | j
                  z        z  | j
                  dz  | j                  z  z  }|j                  | j
                        |k(  sJ y r   )r   rq  rb   ra   r   r^   r_   r   r  s      r8   r   zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c0  s    8TT^^TGGdii'tyy477/BDGG.K)LLdggWXjY]Y`Y`N`a}}TWW%111r:   c                    t        | j                  g| j                   }| j                  t	        | j                  | j
                  z
  | j                  z        z
  | j                  dz  z  }|j                  | j                        |k(  sJ y r   )	r   rq  rb   r`   r   ra   r^   r_   r   r  s      r8   r   zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c1
  sj    8TT^^TGGdDII$7#@AA477A:M}}TWW%111r:   c                     t        | j                  g| j                   }d| j                  z  }|j	                  | j
                        |k(  sJ y r   )r   rq  rb   r_   r   r`   r  s      r8   r   zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c2  sA    8TT^^Tdgg:}}TWW%111r:   c                    t        | j                  g| j                   }t        | j                  | j                  z
  | j
                  z         | j
                  | j                  z  z  }|j                  | j                        |k(  sJ y r3   r  r  s      r8   r   zCTestFiberForceVelocityInverseDeGroote2016.test_differentiate_wrt_c3  sh    8TT^^T$))dgg-tww677I}}TWW%111r:   c                 t    t        | j                  g| j                   }|j                         t        u sJ y r3   )r   rq  rb   r   r   r  s     r8   r   z6TestFiberForceVelocityInverseDeGroote2016.test_inverse  s1    8TT^^T!%CCCCr:   c                     t        | j                  g| j                   }d}t               j	                  |      |k(  sJ y )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  s9    8TT^^TS~%%h/8;;;r:   c                     t        | j                  g| j                   }d}t               j	                  |j                               |k(  sJ y )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"  s?    4TYYPPa~%%diik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                 x    t        j                  | j                        } |       j                  |      |k(  sJ y r3   )r   ry   rq  rE   )r=   rF   rG   r  s       r8   r   z9TestFiberForceVelocityInverseDeGroote2016.test_print_code'  s4    f 9FFtyyQ~%%h/8;;;r:   c                     t        j                  | j                        }|j                  | j                        }d}t	               j                  |      |k(  sJ y )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}  sP    8FFtyyQ"--		2" 	 !"**?;xGGGr:   c                     t        j                  | j                        }t        | j                  |      } |d      t	        j
                  d      k(  sJ y )Nr   gM8'$JO)r   ry   rq  r(   rQ   r   )r=   r  fv_M_inv_callables      r8   r   z7TestFiberForceVelocityInverseDeGroote2016.test_lambdify  sD    8FFtyyQ$TYY9 %7M)NNNNr:   Nr   r   c                    t        j                  | j                        }t        | j                  |d      }t        j                  g d      }t        j                  g d      }t        j                  j                   ||      |       y )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  sg    8FFtyyQ$TYY'B{{45;;  
  	%%&7&=xHr:   r   c                 f   t        j                  | j                        }t        j	                  t        | j                  |d            }t        j                  j                  g d      }t        j                  j                  g d      }t        j                  j                   ||      |       y )Nr)   r  r  )
r   ry   rq  r)   r   r(   r*   r   r   r   r  s        r8   r   z;TestFiberForceVelocityInverseDeGroote2016.test_lambdify_jax  sx    8FFtyyQGGHTYY%$HIyy8999?? $
  	%%&7&=x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
b
Sb	54
2
2
2
2
D<
?
 [[  , , , !, !3 !3 % " " % %  % 2 SN	
Qd<eQd<HO
 [[.CDI EI [[t,?@I AIr:   r  c                       e Zd Zed        Zeej                  j                  d      d               Zeej                  j                  dde
ie
eeeeeeddg      d	               Zed
        Zy)!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 y 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115YYYY004WWWW88<ffff//3UUUU**.LLLL2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        y # 1 sw Y   y xY wr3   )rQ   raises	TypeErrorr   r   r   r   r   r   r   r   )_s    r8   %test_invalid_constructor_keyword_onlyzGTestCharacteristicCurveCollection.test_invalid_constructor_keyword_only  sD     ]]9% 		--43:2.5A		 		 		s   .AAr>   r  N)r  r  r  r  r  r  r  extra_kwargc                 v    t        j                  t              5  t        di | }d d d        y # 1 sw Y   y xY w)Nr4   )rQ   r  r  r   )r>   r  s     r8   *test_invalid_constructor_wrong_number_argszLTestCharacteristicCurveCollection.test_invalid_constructor_wrong_number_args  s2    $ ]]9% 	8-77A	8 	8 	8s   /8c            	      H   t        t        t        t        t        t
        t        t              } t        j                  t              5  d | _        d d d        t        j                  t              5  d | _        d d d        t        j                  t              5  d | _        d d d        t        j                  t              5  d | _        d d d        t        j                  t              5  d | _        d d d        t        j                  t              5  d | _        d d d        t        j                  t              5  d | _        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   pxY w# 1 sw Y   y xY w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  sG   . =(L'J/Y&H!?)N
 ]]>* 	.)-F&	.]]>* 	615F.	6]]>* 	504F-	5]]>* 	=8<F5	=]]>* 	4/3F,	4]]>* 	/*.F'	/]]>* 	726F/	7 	7	. 	.	6 	6	5 	5	= 	=	4 	4	/ 	/	7 	7sT   E1EE(E4,F F>FEE%(E14E= F	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
 O 
 [["$AB'D/S.Q6`-O(F0U#		
 8! "8 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     s   L  + ( - - 4 ; < 9
 
 
 L K 
 0 3 - 3  C -EgJJ&-'< '<TzJ zJz~I ~IBxN xNvrQ rQjeN eNPbJ bJJNI NIbP7 P7r:   