L i7(PddlZdZGddZGddZGddeZy) Nctj|}tj|jtjr|s t dt nt|jd}|jdk7r t dtj|js t dfd}||fS)z=Helper function for checking arguments common to all solvers.zX`y0` is complex, but the chosen solver does not support integration in a complex domain.F)copyz`y0` must be 1-dimensional.z8All components of the initial state `y0` must be finite.c@tj||S)N)dtype)npasarray)tyrfuns _/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/integrate/_ivp/base.py fun_wrappedz$check_arguments..fun_wrappedszz#a)511) rr issubdtypercomplexfloating ValueErrorcomplexfloatastypendimisfiniteall)r y0support_complexrrs` @r check_argumentsrs BB }}RXXr112LM M 5u %B ww!|677 ;;r?   STT2 ?rcFeZdZdZdZ d dZedZdZdZ dZ dZ y ) OdeSolveraJBase class for ODE solvers. In order to implement a new solver you need to follow the guidelines: 1. A constructor must accept parameters presented in the base class (listed below) along with any other parameters specific to a solver. 2. A constructor must accept arbitrary extraneous arguments ``**extraneous``, but warn that these arguments are irrelevant using `common.warn_extraneous` function. Do not pass these arguments to the base class. 3. A solver must implement a private method `_step_impl(self)` which propagates a solver one step further. It must return tuple ``(success, message)``, where ``success`` is a boolean indicating whether a step was successful, and ``message`` is a string containing description of a failure if a step failed or None otherwise. 4. A solver must implement a private method `_dense_output_impl(self)`, which returns a `DenseOutput` object covering the last successful step. 5. A solver must have attributes listed below in Attributes section. Note that ``t_old`` and ``step_size`` are updated automatically. 6. Use `fun(self, t, y)` method for the system rhs evaluation, this way the number of function evaluations (`nfev`) will be tracked automatically. 7. For convenience, a base class provides `fun_single(self, t, y)` and `fun_vectorized(self, t, y)` for evaluating the rhs in non-vectorized and vectorized fashions respectively (regardless of how `fun` from the constructor is implemented). These calls don't increment `nfev`. 8. If a solver uses a Jacobian matrix and LU decompositions, it should track the number of Jacobian evaluations (`njev`) and the number of LU decompositions (`nlu`). 9. By convention, the function evaluations used to compute a finite difference approximation of the Jacobian should not be counted in `nfev`, thus use `fun_single(self, t, y)` or `fun_vectorized(self, t, y)` when computing a finite difference approximation of the Jacobian. 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. vectorized : bool Whether `fun` can be called in a vectorized fashion. Default is False. 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 other methods. It can also result in slower overall execution for 'Radau' and 'BDF' in some circumstances (e.g. small ``len(y0)``). support_complex : bool, optional Whether integration in a complex domain should be supported. Generally determined by a derived solver class capabilities. 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 of the system's rhs evaluations. njev : int Number of the Jacobian evaluations. nlu : int Number of LU decompositions. z8Required step size is less than spacing between numbers.cd_|_t|||\__|_|_|rfd}j}nj}fd}fd}|_|_|_ ||k7rtj||z nd_ jj_d_d_d_d_y)NcRj||dddfjSN)_funravelr r selfs r fun_singlez&OdeSolver.__init__..fun_singles%yyAagJ/5577rctj|}t|jD]\}}j |||dd|f< |Sr )r empty_like enumerateTr!)r r fiyir$s r fun_vectorizedz*OdeSolver.__init__..fun_vectorizedsIMM!$&qss^/EAr"ii2.AadG/rcRxjdz c_j||S)Nr)nfevr%r#s r r zOdeSolver.__init__..funs! IINI??1a( (rrrunningr)t_oldr rr!r t_bound vectorizedr r%r-rsign directionsizenstatusr/njevnlu) r$r t0rr2r3rr%r-s ` r __init__zOdeSolver.__init__s +C_E 46 $  8!YYNJ   )$,29R-2.Q   rct|jytj|j|jz Sr )r1rabsr r$s r step_sizezOdeSolver.step_sizes+ :: 66$&&4::-. .rc|jdk7r td|jdk(s|j|jk(r-|j|_|j|_d}d|_|S|j}|j \}}|s d|_|S||_|j|j|jz zdk\rd|_|S)aPerform one integration step. Returns ------- message : string or None Report from the solver. Typically a reason for a failure if `self.status` is 'failed' after the step was taken or None otherwise. r0z/Attempt to step on a failed or finished solver.rNfinishedfailed)r8 RuntimeErrorr7r r2r1 _step_implr5)r$messager successs r stepzOdeSolver.steps ;;) # )* * 66Q;$&&DLL0DJ\\DFG$DKA#0 GW&   >>TVVdll%:;q@",DKrc|j td|jdk(s|j|jk(r+t |j|j|j S|j S)zCompute a local interpolant over the last successful step. Returns ------- sol : `DenseOutput` Local interpolant over the last successful step. z;Dense output is available after a successful step was made.r)r1rDr7r ConstantDenseOutputr _dense_output_implr?s r dense_outputzOdeSolver.dense_outputsf ::  01 1 66Q;$&&DJJ.&tzz466466B B**, ,rctr NotImplementedErrorr?s r rEzOdeSolver._step_impl!!rctr rNr?s r rKzOdeSolver._dense_output_implrPrN)F) __name__ __module__ __qualname____doc__TOO_SMALL_STEPr<propertyr@rHrLrErKrr rrsEcHPN"'#J// B-$""rrc"eZdZdZdZdZdZy) DenseOutputaOBase class for local interpolant over step made by an ODE solver. It interpolates between `t_min` and `t_max` (see Attributes below). Evaluation outside this interval is not forbidden, but the accuracy is not guaranteed. Attributes ---------- t_min, t_max : float Time range of the interpolation. cd||_||_t|||_t |||_yr )r1r mint_minmaxt_max)r$r1r s r r<zDenseOutput.__init__s* E] E] rctj|}|jdkDr td|j |S)aeEvaluate the interpolant. Parameters ---------- t : float or array_like with shape (n_points,) Points to evaluate the solution at. Returns ------- y : ndarray, shape (n,) or (n, n_points) Computed values. Shape depends on whether `t` was a scalar or a 1-D array. rz#`t` must be a float or a 1-D array.)rr rr _call_implr$r s r __call__zDenseOutput.__call__s7 JJqM 66A:BC Cq!!rctr rNrbs r razDenseOutput._call_implrPrN)rRrSrTrUr<rcrarXrr rZrZs # "&"rrZc(eZdZdZfdZdZxZS)rJzConstant value interpolator. This class used for degenerate integration cases: equal integration limits or a system with 0 equations. c4t|||||_yr )superr<value)r$r1r rh __class__s r r<zConstantDenseOutput.__init__s " rc|jdk(r |jStj|jjd|jdf}|jdddf|dd|S)Nr)rrhremptyshape)r$r rets r razConstantDenseOutput._call_impls\ 66Q;:: ((DJJ,,Q/<=CZZ4(CFJr)rRrSrTrUr<ra __classcell__)ris@r rJrJs rrJ)numpyrrrrZrJrXrr rps10J"J"Z&"&"R+r