ó
    EñiY  ã                   óÞ   • S SK rSSKJrJr  SSKJrJrJrJ	r	J
r
Jr  SSKJr  SrSrSrS	 r " S
 S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)é    Né   )Ú	OdeSolverÚDenseOutput)Úvalidate_max_stepÚvalidate_tolÚselect_initial_stepÚnormÚwarn_extraneousÚvalidate_first_step)Údop853_coefficientsgÍÌÌÌÌÌì?çš™™™™™É?é
   c	                 óD  • X8S'   [        [        USS USS 5      SS9 HD  u  n	u  p«[        R                  " USU	 R                  U
SU	 5      U-  nU " XU-  -   X,-   5      X‰'   MF     X$[        R                  " USS R                  U5      -  -   nU " X-   U5      nXèS'   XÞ4$ )a˜  Perform a single Runge-Kutta step.

This function computes a prediction of an explicit Runge-Kutta method and
also estimates the error of a less accurate method.

Notation for Butcher tableau is as in [1]_.

Parameters
----------
fun : callable
    Right-hand side of the system.
t : float
    Current time.
y : ndarray, shape (n,)
    Current state.
f : ndarray, shape (n,)
    Current value of the derivative, i.e., ``fun(x, y)``.
h : float
    Step to use.
A : ndarray, shape (n_stages, n_stages)
    Coefficients for combining previous RK stages to compute the next
    stage. For explicit methods the coefficients at and above the main
    diagonal are zeros.
B : ndarray, shape (n_stages,)
    Coefficients for combining RK stages for computing the final
    prediction.
C : ndarray, shape (n_stages,)
    Coefficients for incrementing time for consecutive RK stages.
    The value for the first stage is always zero.
K : ndarray, shape (n_stages + 1, n)
    Storage array for putting RK stages here. Stages are stored in rows.
    The last row is a linear combination of the previous rows with
    coefficients

Returns
-------
y_new : ndarray, shape (n,)
    Solution at t + h computed with a higher accuracy.
f_new : ndarray, shape (n,)
    Derivative ``fun(t + h, y_new)``.

References
----------
.. [1] E. Hairer, S. P. Norsett G. Wanner, "Solving Ordinary Differential
       Equations I: Nonstiff Problems", Sec. II.4.
r   r   N©Ústartéÿÿÿÿ)Ú	enumerateÚzipÚnpÚdotÚT)ÚfunÚtÚyÚfÚhÚAÚBÚCÚKÚsÚaÚcÚdyÚy_newÚf_news                  ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/scipy/integrate/_ivp/rk.pyÚrk_stepr(      s²   € ð^ €a�DÜœs 1 Q R 5¨!¨A¨B¨%Ó0¸Ô:‰	ˆ‰6ˆAÜ�VŠV�A�b�q�E—G‘G˜Q˜r ˜UÓ# aÑ'ˆÙ�1˜1‘u‘9˜a™fÓ%ˆ‹ñ ;ð ”B—F’F˜1˜S˜b˜6Ÿ8™8 QÓ'Ñ'Ñ'€EÙ�‘�uÓ€Eà€b�Eàˆ<Ðó    c                   ó<  ^ • \ rS rSr% Sr\r\R                  \	S'   \r
\R                  \	S'   \r\R                  \	S'   \r\R                  \	S'   \r\R                  \	S'   \r\\	S'   \r\\	S	'   \r\\	S
'   \R$                  SSSS4U 4S jjrS rS rS rS rSrU =r$ )Ú
RungeKuttaéJ   z,Base class for explicit Runge-Kutta methods.r   r   r   ÚEÚPÚorderÚerror_estimator_orderÚn_stagesçü©ñÒMbP?ç�íµ ÷Æ°>FNc
                 óÊ  >• [        U
5        [        TU ]	  XX4USS9  S U l        [	        U5      U l        [        XgU R                  5      u  U l        U l	        U R                  U R                  U R                  5      U l        U	ci  [        U R                  U R                  U R                  XEU R                  U R                  U R                   U R                  U R                  5
      U l        O[%        X’U5      U l        [&        R(                  " U R*                  S-   U R                  4U R                  R,                  S9U l        SU R                   S-   -  U l        S U l        g )NT)Úsupport_complexr   ©Údtyper   )r
   ÚsuperÚ__init__Úy_oldr   Úmax_stepr   ÚnÚrtolÚatolr   r   r   r   r   Ú	directionr0   Úh_absr   r   Úemptyr1   r7   r    Úerror_exponentÚ
h_previous©Úselfr   Út0Úy0Út_boundr;   r=   r>   Ú
vectorizedÚ
first_stepÚ
extraneousÚ	__class__s              €r'   r9   ÚRungeKutta.__init__U   s  ø€ ô 	˜
Ô#Ü‰Ñ˜ "¨zØ)-ð 	ñ 	/àˆŒ
Ü)¨(Ó3ˆŒÜ+¨D¸¿¹Ó?ÑˆŒ	�4”9Ø—‘˜$Ÿ&™& $§&¡&Ó)ˆŒØÑÜ,Ø—‘˜$Ÿ&™& $§&¡&¨'¸T¿V¹VÀTÇ^Á^Ø×*Ñ*¨D¯I©I°t·y±yóBˆD�Jô -¨Z¸WÓEˆDŒJÜ—’˜4Ÿ=™=¨1Ñ,¨d¯f©fÐ5¸T¿V¹V¿\¹\ÑJˆŒØ  D×$>Ñ$>ÀÑ$BÑCˆÔØˆ�r)   c                 ó^   • [         R                  " UR                  U R                  5      U-  $ ©N)r   r   r   r-   )rE   r    r   s      r'   Ú_estimate_errorÚRungeKutta._estimate_errori   s    € Ü�vŠv�a—c‘c˜4Ÿ6™6Ó" QÑ&Ð&r)   c                 ó<   • [        U R                  X5      U-  5      $ rO   )r	   rP   )rE   r    r   Úscales       r'   Ú_estimate_error_normÚRungeKutta._estimate_error_norml   s   € Ü�D×(Ñ(¨Ó.°Ñ6Ó7Ð7r)   c                 ó  • U R                   nU R                  nU R                  nU R                  nU R                  nS[
        R                  " [
        R                  " XR                  [
        R                  -  5      U-
  5      -  nU R                  U:”  a  UnOU R                  U:  a  UnOU R                  nSnSn	U(       Gd�  Xv:  a  SU R                  4$ XpR                  -  n
X-   nU R                  X°R                  -
  -  S:”  a  U R                  nX±-
  n
[
        R                  " U
5      n[        U R                  XU R                  X R                   U R"                  U R$                  U R&                  5	      u  pÍU[
        R(                  " [
        R                  " U5      [
        R                  " U5      5      U-  -   nU R+                  U R&                  X®5      nUS:  aK  US:X  a  [,        nO#[/        [,        [0        XðR2                  -  -  5      nU	(       a  [/        SU5      nUU-  nSnO(U[5        [6        [0        XðR2                  -  -  5      -  nSn	U(       d  GM�  W
U l        X l        WU l         WU l        Xpl
        WU l        g)Nr   Fr   r   T)TN)r   r   r;   r=   r>   r   ÚabsÚ	nextafterr?   Úinfr@   ÚTOO_SMALL_STEPrH   r(   r   r   r   r   r   r    ÚmaximumrT   Ú
MAX_FACTORÚminÚSAFETYrB   ÚmaxÚ
MIN_FACTORrC   r:   )rE   r   r   r;   r=   r>   Úmin_stepr@   Ústep_acceptedÚstep_rejectedr   Út_newr%   r&   rS   Ú
error_normÚfactors                    r'   Ú
_step_implÚRungeKutta._step_implo   s  € Ø�F‰FˆØ�F‰Fˆà—=‘=ˆØ�y‰yˆØ�y‰yˆàœŸšœrŸ|š|¨A¯~©~ÄÇÁÑ/FÓGÈ!ÑKÓLÑLˆà�:‰:˜Ó Ø‰EØ�Z‰Z˜(Ó"Ø‰Eà—J‘JˆEàˆØˆçØÓØ˜d×1Ñ1Ð1Ð1àŸ™Ñ&ˆAØ‘EˆEà�~‰~ ¯©Ñ!5Ñ6¸Ó:ØŸ™�à‘	ˆAÜ—F’F˜1“IˆEä" 4§8¡8¨Q°4·6±6¸1¿f¹fØ#'§6¡6¨4¯6©6°4·6±6ó;‰LˆEàœ2Ÿ:š:¤b§f¢f¨Q£i´·²¸³Ó?À$ÑFÑFˆEØ×2Ñ2°4·6±6¸1ÓDˆJà˜A‹~Ø “?Ü'‘Fä ¤Ü!'¨*×8KÑ8KÑ*KÑ!KóM�Fö !Ü   F›^�Fà˜‘�à $‘àœœZÜ# j×4GÑ4GÑ&GÑGóIñ I�à $�÷E  ‘-ðH ˆŒØŒ
àˆŒØˆŒàŒ
ØˆŒàr)   c                 ó¸   • U R                   R                  R                  U R                  5      n[	        U R
                  U R                  U R                  U5      $ rO   )r    r   r   r.   ÚRkDenseOutputÚt_oldr   r:   )rE   ÚQs     r'   Ú_dense_output_implÚRungeKutta._dense_output_impl²   s9   € Ø�F‰F�H‰H�L‰L˜Ÿ™Ó ˆÜ˜TŸZ™Z¨¯©°·±¸QÓ?Ð?r)   )r    r>   rB   r   r@   rC   r;   r=   r   r   r:   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚNotImplementedr   r   ÚndarrayÚ__annotations__r   r   r-   r.   r/   Úintr0   r1   rY   r9   rP   rT   rg   rm   Ú__static_attributes__Ú__classcell__©rL   s   @r'   r+   r+   J   sž   ø‡ Ù6Ø"€A€r‡z�zÓ"Ø"€A€r‡z�zÓ"Ø"€A€r‡z�zÓ"Ø"€A€r‡z�zÓ"Ø"€A€r‡z�zÓ"Ø€Eˆ3ÓØ!/Ð˜3Ó/Ø"€HˆcÓ"à68·f±fØ °%Ø ÷ò('ò8òA÷F@ð @r)   r+   c                   ó  • \ rS rSrSrSrSrSr\R                  " / SQ5      r
\R                  " / SQ/ SQ/ SQ/5      r\R                  " / S	Q5      r\R                  " / S
Q5      r\R                  " / SQ/ SQ/ SQ/ SQ/5      rSrg)ÚRK23é·   aÄ  Explicit Runge-Kutta method of order 3(2).

This uses the Bogacki-Shampine pair of formulas [1]_. The error is controlled
assuming accuracy of the second-order method, but steps are taken using the
third-order accurate formula (local extrapolation is done). A cubic Hermite
polynomial is used for the dense output.

Can be applied in the complex domain.

Parameters
----------
fun : callable
    Right-hand side of the system: the time derivative of the state ``y``
    at time ``t``. The calling signature is ``fun(t, y)``, where ``t`` is a
    scalar and ``y`` is an ndarray with ``len(y) = len(y0)``. ``fun`` must
    return an array of the same shape as ``y``. See `vectorized` for more
    information.
t0 : float
    Initial time.
y0 : array_like, shape (n,)
    Initial state.
t_bound : float
    Boundary time - the integration won't continue beyond it. It also
    determines the direction of the integration.
first_step : float or None, optional
    Initial step size. Default is ``None`` which means that the algorithm
    should choose.
max_step : float, optional
    Maximum allowed step size. Default is np.inf, i.e., the step size is not
    bounded and determined solely by the solver.
rtol, atol : float and array_like, optional
    Relative and absolute tolerances. The solver keeps the local error
    estimates less than ``atol + rtol * abs(y)``. Here `rtol` controls a
    relative accuracy (number of correct digits), while `atol` controls
    absolute accuracy (number of correct decimal places). To achieve the
    desired `rtol`, set `atol` to be smaller than the smallest value that
    can be expected from ``rtol * abs(y)`` so that `rtol` dominates the
    allowable error. If `atol` is larger than ``rtol * abs(y)`` the
    number of correct digits is not guaranteed. Conversely, to achieve the
    desired `atol` set `rtol` such that ``rtol * abs(y)`` is always smaller
    than `atol`. If components of y have different scales, it might be
    beneficial to set different `atol` values for different components by
    passing array_like with shape (n,) for `atol`. Default values are
    1e-3 for `rtol` and 1e-6 for `atol`.
vectorized : bool, optional
    Whether `fun` may be called in a vectorized fashion. False (default)
    is recommended for this solver.

    If ``vectorized`` is False, `fun` will always be called with ``y`` of
    shape ``(n,)``, where ``n = len(y0)``.

    If ``vectorized`` is True, `fun` may be called with ``y`` of shape
    ``(n, k)``, where ``k`` is an integer. In this case, `fun` must behave
    such that ``fun(t, y)[:, i] == fun(t, y[:, i])`` (i.e. each column of
    the returned array is the time derivative of the state corresponding
    with a column of ``y``).

    Setting ``vectorized=True`` allows for faster finite difference
    approximation of the Jacobian by methods 'Radau' and 'BDF', but
    will result in slower execution for this solver.

Attributes
----------
n : int
    Number of equations.
status : string
    Current status of the solver: 'running', 'finished' or 'failed'.
t_bound : float
    Boundary time.
direction : float
    Integration direction: +1 or -1.
t : float
    Current time.
y : ndarray
    Current state.
t_old : float
    Previous time. None if no steps were made yet.
step_size : float
    Size of the last successful step. None if no steps were made yet.
nfev : int
    Number evaluations of the system's right-hand side.
njev : int
    Number of evaluations of the Jacobian.
    Is always 0 for this solver as it does not use the Jacobian.
nlu : int
    Number of LU decompositions. Is always 0 for this solver.

References
----------
.. [1] P. Bogacki, L.F. Shampine, "A 3(2) Pair of Runge-Kutta Formulas",
       Appl. Math. Lett. Vol. 2, No. 4. pp. 321-325, 1989.
é   é   )r   ç      à?ç      è?)r   r   r   )r€   r   r   )r   r�   r   )gÇqÇqÌ?gUUUUUUÕ?gÇqÇqÜ?)grÇqÇ±?gUUUUUUµ¿gÇqÇq¼¿g      À?)r   gUUUUUUõ¿grÇqÇá?)r   r   gUUUUUUå¿)r   gUUUUUUõ?gÇqÇqì¿)r   r   r   © N©ro   rp   rq   rr   rs   r/   r0   r1   r   Úarrayr   r   r   r-   r.   rx   r‚   r)   r'   r|   r|   ·   sƒ   † ñ[ðx €EØÐØ€HØ
�Š’Ó€AØ
�ŠÚÚÚðó 	€Að
 	�Š’Ó!€AØ
�ŠÒ)Ó*€AØ
�ŠÒ$ÚÚ Úðó 	ƒAr)   r|   c            
       ó2  • \ rS rSrSrSrSrSr\R                  " / SQ5      r
\R                  " / SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/5      r\R                  " / SQ5      r\R                  " / SQ5      r\R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      rSrg)ÚRK45i%  a¬  Explicit Runge-Kutta method of order 5(4).

This uses the Dormand-Prince pair of formulas [1]_. The error is controlled
assuming accuracy of the fourth-order method accuracy, but steps are taken
using the fifth-order accurate formula (local extrapolation is done).
A quartic interpolation polynomial is used for the dense output [2]_.

Can be applied in the complex domain.

Parameters
----------
fun : callable
    Right-hand side of the system. The calling signature is ``fun(t, y)``.
    Here ``t`` is a scalar, and there are two options for the ndarray ``y``:
    It can either have shape (n,); then ``fun`` must return array_like with
    shape (n,). Alternatively it can have shape (n, k); then ``fun``
    must return an array_like with shape (n, k), i.e., each column
    corresponds to a single column in ``y``. The choice between the two
    options is determined by `vectorized` argument (see below).
t0 : float
    Initial time.
y0 : array_like, shape (n,)
    Initial state.
t_bound : float
    Boundary time - the integration won't continue beyond it. It also
    determines the direction of the integration.
first_step : float or None, optional
    Initial step size. Default is ``None`` which means that the algorithm
    should choose.
max_step : float, optional
    Maximum allowed step size. Default is np.inf, i.e., the step size is not
    bounded and determined solely by the solver.
rtol, atol : float and array_like, optional
    Relative and absolute tolerances. The solver keeps the local error
    estimates less than ``atol + rtol * abs(y)``. Here `rtol` controls a
    relative accuracy (number of correct digits), while `atol` controls
    absolute accuracy (number of correct decimal places). To achieve the
    desired `rtol`, set `atol` to be smaller than the smallest value that
    can be expected from ``rtol * abs(y)`` so that `rtol` dominates the
    allowable error. If `atol` is larger than ``rtol * abs(y)`` the
    number of correct digits is not guaranteed. Conversely, to achieve the
    desired `atol` set `rtol` such that ``rtol * abs(y)`` is always smaller
    than `atol`. If components of y have different scales, it might be
    beneficial to set different `atol` values for different components by
    passing array_like with shape (n,) for `atol`. Default values are
    1e-3 for `rtol` and 1e-6 for `atol`.
vectorized : bool, optional
    Whether `fun` is implemented in a vectorized fashion. Default is False.

Attributes
----------
n : int
    Number of equations.
status : string
    Current status of the solver: 'running', 'finished' or 'failed'.
t_bound : float
    Boundary time.
direction : float
    Integration direction: +1 or -1.
t : float
    Current time.
y : ndarray
    Current state.
t_old : float
    Previous time. None if no steps were made yet.
step_size : float
    Size of the last successful step. None if no steps were made yet.
nfev : int
    Number evaluations of the system's right-hand side.
njev : int
    Number of evaluations of the Jacobian.
    Is always 0 for this solver as it does not use the Jacobian.
nlu : int
    Number of LU decompositions. Is always 0 for this solver.

References
----------
.. [1] J. R. Dormand, P. J. Prince, "A family of embedded Runge-Kutta
       formulae", Journal of Computational and Applied Mathematics, Vol. 6,
       No. 1, pp. 19-26, 1980.
.. [2] L. W. Shampine, "Some Practical Runge-Kutta Formulas", Mathematics
       of Computation,, Vol. 46, No. 173, pp. 135-150, 1986.
é   é   é   )r   r   g333333Ó?gš™™™™™é?gÇqÇqì?r   )r   r   r   r   r   )r   r   r   r   r   )g333333³?gÍÌÌÌÌÌÌ?r   r   r   )gŸôIŸôIï?gÞÝÝÝÝÝÀgÇqÇq@r   r   )g�qÃìž@gä •Ò1'Àg�R<6R¥#@gE3ºžœÒ¿r   )g°¨õ+Å@g„>øàƒ%Àg‹r£Ð!@gÑE]tÑÑ?g/ÌÙp‰�Ñ¿)gUUUUUU·?r   gûVšIÀÜ?gUUUUUÕä?gŒ·²Ï¡Ô¿g1Ã0ÃÀ?)g‡©Ëí2T¿r   gÄ¿
UZkq?gïîîîîî¢¿gXÊÒÑ
ª?gâðÚ{Št¥¿gš™™™™™™?)r   g#Ð
É!ÔÀgñJÀ<î’@gF ’Cò¿)r   r   r   r   )r   gãõÌF°@gFj'NÿÀg‡©¹óDg@)r   gdD�õÛÀga‡÷P#$@g2¢Çú½À)r   g¸’ý<p@g›@ê°˜Àg’Œ—àê,@)r   gRqÖ#¤ýõ¿g_40g.
@gå•¶ÈFü¿)r   g'’¾—ö?g'’¾—ÀgÉßK@r‚   Nrƒ   r‚   r)   r'   r†   r†   %  s§   † ñRðf €EØÐØ€HØ
�ŠÒ,Ó-€AØ
�ŠÚÚÚÚ#Ú:Ú=ðó 	€Að 	�ŠÒBÓC€AØ
�Šò ó 	€Að 	�Šò	#âò	"ò	"ò	&âNÚFðHó 	IƒAr)   r†   c                   óp  ^ • \ rS rSrSr\R                  rSrSr	\R                  S\2S\24   r
\R                  r\R                  S\ r\R                  r\R                  r\R                  r\R                  \S-   S r\R                  \S-   S r\R&                  SSS	S4U 4S
 jjrS rS rS rSrU =r$ )ÚDOP853i—  aö  Explicit Runge-Kutta method of order 8.

This is a Python implementation of "DOP853" algorithm originally written
in Fortran [1]_, [2]_. Note that this is not a literal translation, but
the algorithmic core and coefficients are the same.

Can be applied in the complex domain.

Parameters
----------
fun : callable
    Right-hand side of the system. The calling signature is ``fun(t, y)``.
    Here, ``t`` is a scalar, and there are two options for the ndarray ``y``:
    It can either have shape (n,); then ``fun`` must return array_like with
    shape (n,). Alternatively it can have shape (n, k); then ``fun``
    must return an array_like with shape (n, k), i.e. each column
    corresponds to a single column in ``y``. The choice between the two
    options is determined by `vectorized` argument (see below).
t0 : float
    Initial time.
y0 : array_like, shape (n,)
    Initial state.
t_bound : float
    Boundary time - the integration won't continue beyond it. It also
    determines the direction of the integration.
first_step : float or None, optional
    Initial step size. Default is ``None`` which means that the algorithm
    should choose.
max_step : float, optional
    Maximum allowed step size. Default is np.inf, i.e. the step size is not
    bounded and determined solely by the solver.
rtol, atol : float and array_like, optional
    Relative and absolute tolerances. The solver keeps the local error
    estimates less than ``atol + rtol * abs(y)``. Here `rtol` controls a
    relative accuracy (number of correct digits), while `atol` controls
    absolute accuracy (number of correct decimal places). To achieve the
    desired `rtol`, set `atol` to be smaller than the smallest value that
    can be expected from ``rtol * abs(y)`` so that `rtol` dominates the
    allowable error. If `atol` is larger than ``rtol * abs(y)`` the
    number of correct digits is not guaranteed. Conversely, to achieve the
    desired `atol` set `rtol` such that ``rtol * abs(y)`` is always smaller
    than `atol`. If components of y have different scales, it might be
    beneficial to set different `atol` values for different components by
    passing array_like with shape (n,) for `atol`. Default values are
    1e-3 for `rtol` and 1e-6 for `atol`.
vectorized : bool, optional
    Whether `fun` is implemented in a vectorized fashion. Default is False.

Attributes
----------
n : int
    Number of equations.
status : string
    Current status of the solver: 'running', 'finished' or 'failed'.
t_bound : float
    Boundary time.
direction : float
    Integration direction: +1 or -1.
t : float
    Current time.
y : ndarray
    Current state.
t_old : float
    Previous time. None if no steps were made yet.
step_size : float
    Size of the last successful step. None if no steps were made yet.
nfev : int
    Number evaluations of the system's right-hand side.
njev : int
    Number of evaluations of the Jacobian. Is always 0 for this solver
    as it does not use the Jacobian.
nlu : int
    Number of LU decompositions. Is always 0 for this solver.

References
----------
.. [1] E. Hairer, S. P. Norsett G. Wanner, "Solving Ordinary Differential
       Equations I: Nonstiff Problems", Sec. II.
.. [2] `Page with original Fortran code of DOP853
        <http://www.unige.ch/~hairer/software.html>`_.
é   é   Nr   r2   r3   Fc
                 ó  >• [         TU ]  " XX4XVUX‰4	0 U
D6  [        R                  " [        R
                  U R                  4U R                  R                  S9U l	        U R                  S U R                  S-    U l        g )Nr6   r   )r8   r9   r   rA   r   ÚN_STAGES_EXTENDEDr<   r   r7   Ú
K_extendedr1   r    rD   s              €r'   r9   ÚDOP853.__init__ö  sr   ø€ ô 	‰Ò˜ "¨x¸tØ#ñ	?Ø3=ò	?äŸ(š(Ô$7×$IÑ$IØ$(§F¡Fð$,Ø37·6±6·<±<ñAˆŒà—‘Ð!3 $§-¡-°!Ñ"3Ð4ˆ�r)   c                 ó´  • [         R                  " UR                  U R                  5      n[         R                  " UR                  U R                  5      n[         R
                  " [         R                  " U5      S[         R                  " U5      -  5      n[         R                  " U5      nUS:„  n[         R                  " X7   5      XW   -  Xg'   X#-  U-  $ )Ngš™™™™™¹?r   )r   r   r   ÚE5ÚE3ÚhypotrW   Ú	ones_like)rE   r    r   Úerr5Úerr3ÚdenomÚcorrection_factorÚmasks           r'   rP   ÚDOP853._estimate_errorÿ  s˜   € Ü�vŠv�a—c‘c˜4Ÿ7™7Ó#ˆÜ�vŠv�a—c‘c˜4Ÿ7™7Ó#ˆÜ—’œŸš › s¬R¯VªV°D«\Ñ'9Ó:ˆÜŸLšL¨Ó.ÐØ�q‰yˆÜ"$§&¢&¨©Ó"4°u±{Ñ"BÐÑØ‰xÐ+Ñ+Ð+r)   c                 óä  • [         R                  " UR                  U R                  5      U-  n[         R                  " UR                  U R                  5      U-  n[         R
                  R                  U5      S-  n[         R
                  R                  U5      S-  nUS:X  a  US:X  a  gUSU-  -   n[         R                  " U5      U-  [         R                  " U[        U5      -  5      -  $ )Nr   r   g        g{®Gáz„?)
r   r   r   r“   r”   Úlinalgr	   rW   ÚsqrtÚlen)	rE   r    r   rS   r—   r˜   Úerr5_norm_2Úerr3_norm_2r™   s	            r'   rT   ÚDOP853._estimate_error_norm  sµ   € Ü�vŠv�a—c‘c˜4Ÿ7™7Ó# eÑ+ˆÜ�vŠv�a—c‘c˜4Ÿ7™7Ó# eÑ+ˆÜ—i‘i—n‘n TÓ*¨AÑ-ˆÜ—i‘i—n‘n TÓ*¨AÑ-ˆØ˜!Ó ¨qÓ 0ØØ˜d [Ñ0Ñ0ˆÜ�vŠv�a‹y˜;Ñ&¬¯ª°¼¸U»Ñ1CÓ)DÑDÐDr)   c                 ó   • U R                   nU R                  n[        [        U R                  U R
                  5      U R                  S-   S9 Hb  u  nu  pE[        R                  " US U R                  US U 5      U-  nU R                  U R                  XR-  -   U R                  U-   5      X'   Md     [        R                  " [        R                  U R                   4U R                  R"                  S9nUS   nU R$                  U R                  -
  n	X—S'   X(-  U	-
  US'   SU	-  X R&                  U-   -  -
  US'   U[        R                  " U R(                  U5      -  USS & [+        U R                  U R,                  U R                  U5      $ )Nr   r   r6   r   r   r~   )r�   rC   r   r   ÚA_EXTRAÚC_EXTRAr1   r   r   r   r   rk   r:   rA   r   ÚINTERPOLATOR_POWERr<   r7   r   r   ÚDÚDop853DenseOutputr   )
rE   r    r   r!   r"   r#   r$   ÚFÚf_oldÚdelta_ys
             r'   rm   ÚDOP853._dense_output_impl  sL  € Ø�O‰OˆØ�O‰OˆÜ"¤3 t§|¡|°T·\±\Ó#BØ)-¯©¸Ñ):ô<‰IˆA‰v�ä—’˜˜"˜1˜Ÿ™  2 A Ó'¨!Ñ+ˆBØ—8‘8˜DŸJ™J¨©Ñ.°·
±
¸R±Ó@ˆA‹Dñ<ô
 �HŠHÔ)×<Ñ<¸d¿f¹fÐEØŸ:™:×+Ñ+ñ-ˆð �!‘ˆØ—&‘&˜4Ÿ:™:Ñ%ˆàˆ!‰Ø‰y˜7Ñ"ˆˆ!‰Ø�7‰{˜Q§&¡&¨5¡.Ñ1Ñ1ˆˆ!‰Ø”B—F’F˜4Ÿ6™6 1Ó%Ñ%ˆˆ!ˆ"ˆä  §¡¨T¯V©V°T·Z±ZÀÓCÐCr)   )r    r�   )ro   rp   rq   rr   rs   r   ÚN_STAGESr1   r/   r0   r   r   r   r”   r“   r¨   r¥   r¦   r   rY   r9   rP   rT   rm   rx   ry   rz   s   @r'   r‹   r‹   —  sÖ   ø† ñPðb #×+Ñ+€HØ€EØÐØ×Ñ˜i˜x˜i¨¨(¨Ð2Ñ3€AØ×Ñ€AØ×Ñ˜i˜xÐ(€AØ	×	Ñ	€BØ	×	Ñ	€BØ×Ñ€Aà!×#Ñ# H¨q¡L MÐ2€GØ!×#Ñ# H¨q¡L MÐ2€Gà68·f±fØ °%Ø ÷5ò,òE÷Dð Dr)   r‹   c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )rj   i(  c                 ó|   >• [         TU ]  X5        X!-
  U l        X@l        UR                  S   S-
  U l        X0l        g )Nr   )r8   r9   r   rl   Úshaper/   r:   )rE   rk   r   r:   rl   rL   s        €r'   r9   ÚRkDenseOutput.__init__)  s6   ø€ Ü‰Ñ˜Ô"Ø‘ˆŒØŒØ—W‘W˜Q‘Z !‘^ˆŒ
Ø�
r)   c                 ó
  • XR                   -
  U R                  -  nUR                  S:X  a:  [        R                  " X R
                  S-   5      n[        R                  " U5      nO:[        R                  " X R
                  S-   S45      n[        R                  " USS9nU R                  [        R                  " U R                  U5      -  nUR                  S:X  a  X@R                  S S 2S 4   -  nU$ X@R                  -  nU$ )Nr   r   )Úaxisr   )
rk   r   Úndimr   Útiler/   Úcumprodr   rl   r:   )rE   r   ÚxÚpr   s        r'   Ú
_call_implÚRkDenseOutput._call_impl0  sÅ   € Ø—‘‰^˜tŸv™vÑ%ˆØ�6‰6�Q‹;Ü—’˜Ÿ:™:¨™>Ó*ˆAÜ—
’
˜1“‰Aä—’˜ŸJ™J¨™N¨AÐ.Ó/ˆAÜ—
’
˜1 1Ñ%ˆAØ�F‰F”R—V’V˜DŸF™F AÓ&Ñ&ˆØ�6‰6�Q‹;Ø—‘šA˜t˜GÑ$Ñ$ˆAð ˆð —‘‰OˆAàˆr)   )rl   r   r/   r:   ©ro   rp   rq   rr   r9   rº   rx   ry   rz   s   @r'   rj   rj   (  s   ø† õ÷ð r)   rj   c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )r©   iA  c                 óN   >• [         TU ]  X5        X!-
  U l        X@l        X0l        g rO   )r8   r9   r   rª   r:   )rE   rk   r   r:   rª   rL   s        €r'   r9   ÚDop853DenseOutput.__init__B  s#   ø€ Ü‰Ñ˜Ô"Ø‘ˆŒØŒØ�
r)   c                 óò  • XR                   -
  U R                  -  nUR                  S:X  a!  [        R                  " U R
                  5      nOPUS S 2S 4   n[        R                  " [        U5      [        U R
                  5      4U R
                  R                  S9n[        [        U R                  5      5       H   u  pEX5-  nUS-  S:X  a  X2-  nM  USU-
  -  nM"     X0R
                  -  nUR                  $ )Nr   r6   r   r   )rk   r   rµ   r   Ú
zeros_liker:   Úzerosr    r7   r   Úreversedrª   r   )rE   r   r¸   r   Úir   s         r'   rº   ÚDop853DenseOutput._call_implH  sÁ   € Ø—‘‰^˜tŸv™vÑ%ˆà�6‰6�Q‹;Ü—’˜dŸj™jÓ)‰Aà’!�T�'‘
ˆAÜ—’œ#˜a›&¤# d§j¡j£/Ð2¸$¿*¹*×:JÑ:JÑKˆAäœh t§v¡vÓ.Ö/‰DˆAØ‰FˆAØ�1‰u˜‹zØ‘’à�Q˜‘U‘
’ñ 0ð 	
�Z‰Z‰ˆà�s‰sˆ
r)   )rª   r   r:   r¼   rz   s   @r'   r©   r©   A  s   ø† õ÷ð r)   r©   )Únumpyr   Úbaser   r   Úcommonr   r   r   r	   r
   r   Ú r   r^   r`   r\   r(   r+   r|   r†   r‹   rj   r©   r‚   r)   r'   Ú<module>rÊ      s‹   ðÛ ß (÷A÷ Aå !ð 
€à€
Ø€
ò9ôxj@�ô j@ôZkˆ:ô kô\oIˆ:ô oIôdNDˆZô NDôb�Kô ô2˜õ r)   