+
    /iY                         ^ RI t^RIHtHt ^RIHtHtHtH	t	H
t
Ht ^RIHt RtRt^
tR t ! R R	]4      t ! R
 R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      tR# )    N)	OdeSolverDenseOutput)validate_max_stepvalidate_tolselect_initial_stepnormwarn_extraneousvalidate_first_step)dop853_coefficientsg?皙?c	                   W8^ &   \        \        VR,          VR,          4      ^R7       FT  w  p	w  r\        P                  ! VRV	 P                  V
RV	 4      V,          pV ! WV,          ,           W,,           4      W&   KV  	  W$\        P                  ! VRR P                  V4      ,          ,           pV ! W,           V4      pWR&   W3# )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.
:   NNstartN)	enumeratezipnpdotT)funtyfhABCKsacdyy_newf_news   &&&&&&&&&      U/var/www/html/photoedit/myenv/lib/python3.14/site-packages/scipy/integrate/_ivp/rk.pyrk_stepr'      s    ^ aDs1R5!B%0:	6AVVAbqEGGQrU#a'11u9af% ; BFF1Sb688Q'''EuEbE<    c                      a a ] tR t^Jt oRt]t]t]t]t	]t
]t]t]t]P                  RRRR3V 3R lltR tR tR	 tR
 tV3R ltRtVtV ;t# )
RungeKuttaz,Base class for explicit Runge-Kutta methods.MbP?ư>FNc
                  < \        V
4       \        SV `	  WW4VR R7       RV n        \	        V4      V n        \        WgV P                  4      w  V n        V n	        V P                  V P                  V P                  4      V n        V	fj   \        V P                  V P                  V P                  WEV P                  V P                  V P                   V P                  V P                  4
      V n        M\%        WV4      V n        \&        P(                  ! V P*                  ^,           V P                  3V P                  P,                  R7      V n        RV P                   ^,           ,          V n        RV n        R# )T)support_complexNdtyper   )r	   super__init__y_oldr   max_stepr   nrtolatolr   r   r   r   r   	directionerror_estimator_orderh_absr
   r   emptyn_stagesr0   r   error_exponent
h_previousselfr   t0y0t_boundr4   r6   r7   
vectorized
first_step
extraneous	__class__s   &&&&&&&&&&,r&   r2   RungeKutta.__init__U   s    	
#"z)- 	 	/
)(3+D?	49$&&$&&),$&&$&&'TVVT^^**DIItyyBDJ -ZWEDJ4==1,dff5TVV\\J D$>$>$BCr(   c                f    \         P                  ! VP                  V P                  4      V,          # N)r   r   r   E)r@   r   r   s   &&&r&   _estimate_errorRungeKutta._estimate_errori   s     vvacc466"Q&&r(   c                D    \        V P                  W4      V,          4      # rJ   )r   rL   )r@   r   r   scales   &&&&r&   _estimate_error_normRungeKutta._estimate_error_norml   s    D((.677r(   c                   V P                   pV P                  pV P                  pV P                  pV P                  p^
\
        P                  ! \
        P                  ! WP                  \
        P                  ,          4      V,
          4      ,          pV P                  V8  d   TpM V P                  V8  d   TpMV P                  pRpRp	V'       Eg   Wv8  d   RV P                  3# WpP                  ,          p
W,           pV P                  WP                  ,
          ,          ^ 8  d   V P                  pW,
          p
\
        P                  ! V
4      p\        V P                  WV P                  WP                   V P"                  V P$                  V P&                  4	      w  rV\
        P(                  ! \
        P                  ! V4      \
        P                  ! V4      4      V,          ,           pV P+                  V P&                  W4      pV^8  d\   V^ 8X  d   \,        pM+\/        \,        \0        WP2                  ,          ,          4      pV	'       d   \/        ^V4      pVV,          pRpEK  V\5        \6        \0        WP2                  ,          ,          4      ,          pRp	EK  X
V n        W n        XV n         XV n        Wpn
        XV n        R# )
   FT)TN)r   r   r4   r6   r7   r   abs	nextafterr8   infr:   TOO_SMALL_STEPrC   r'   r   r   r   r   r   r   maximumrP   
MAX_FACTORminSAFETYr=   max
MIN_FACTORr>   r3   )r@   r   r   r4   r6   r7   min_stepr:   step_acceptedstep_rejectedr   t_newr$   r%   rO   
error_normfactors   &                r&   
_step_implRungeKutta._step_implo   s   FFFF==yyyyr||A~~/FG!KLL:: EZZ("EJJE-d1111&AEE~~!56:	AFF1IE"488Q4661ff#'66466466;LE2::bffQi?$FFE224661DJA~?'F !'*8K8K*K!KMF ! F^F $Z#j4G4G&GGI I $

r(   c                    V P                   P                  P                  V P                  4      p\	        V P
                  V P                  V P                  V4      # rJ   )r   r   r   PRkDenseOutputt_oldr   r3   )r@   Qs   & r&   _dense_output_implRungeKutta._dense_output_impl   s9    FFHHLL TZZQ??r(   c                   < V ^8  d   Qh/ S[ P                  ;R&   S[ P                  ;R&   S[ P                  ;R&   S[ P                  ;R&   S[ P                  ;R&   S[;R&   S[;R&   S[;R&   # )	   r   r   r   rK   rg   orderr9   r<   )r   ndarrayint)format__classdict__s   "r&   __annotate__RungeKutta.__annotate__J   s     	zz"  
zz"  
zz"	 
 
zz"  
zz"    /  " r(   )r   r7   r=   r   r:   r>   r4   r6   r   r   r3   )__name__
__module____qualname____firstlineno____doc__NotImplementedr   r   r   rK   rg   ro   r9   r<   r   rV   r2   rL   rP   rd   rk   __annotate_func____static_attributes____classdictcell____classcell__rG   rs   s   @@r&   r*   r*   J   sf     6"A"A"A"A"AE!/"H68ff% ('8AF@Q  r(   r*   c                      ] tR t^tRt^t^t^t]P                  ! . RO4      t
]P                  ! . RO. RO. RO.4      t]P                  ! . RO4      t]P                  ! . R	O4      t]P                  ! . R
O. RO. RO. RO.4      tRtR# )RK23a  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.
 N)r         ?      ?)r   r   r   )r   r   r   )r   r   r   )gqq?gUUUUUU?gqq?)grqǱ?gUUUUUUgqqg      ?)r   gUUUUUUgrq?)r   r   gUUUUUU)r   gUUUUUU?gqq)r   r   r   rv   rw   rx   ry   rz   ro   r9   r<   r   arrayr   r   r   rK   rg   r}   r   r(   r&   r   r      s    [x EH
A
 	A
 	!A
)*A
$  	Ar(   r   c            
       4   ] tR tRtRt^t^t^t]P                  ! . RO4      t
]P                  ! . RO. RO. RO. R	O. R
O. RO.4      t]P                  ! . RO4      t]P                  ! . RO4      t]P                  ! . RO. RO. RO. RO. RO. RO. RO.4      tRtR# )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   N)r   r   g333333?g?gqq?r   )r   r   r   r   r   )r   r   r   r   r   )g333333?g?r   r   r   )gII?ggqq@r   r   )gq@g 1'gR<6R#@gE3ҿr   )g+@g>%gr!@gE]t?g/pѿ)gUUUUUU?r   gVI?gUUUUU?gϡԿg10?)g2Tr   gĿ
UZkq?ggX
?g{tg?)r   g#
!gJ<@gFC)r   r   r   r   )r   gF@gFj'NgDg@)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   r   r(   r&   r   r   %  s    Rf EH
,-A
#:= 	A 	BCA
  	A 		#	"	"	&NFH 	IAr(   r   c                     a a ] tR tRt oRt]P                  t^t^t	]P                  R]1R]13,          t
]P                  t]P                  R] t]P                  t]P                  t]P                  t]P                  ]^,           R t]P                  ]^,           R t]P&                  RRRR3V 3R lltR tR	 tR
 tRtVtV ;t# )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+   r,   Fc
                  < \         SV `  ! WW4WVVW3	/ V
B  \        P                  ! \        P
                  V P                  3V P                  P                  R 7      V n	        V P                  RV P                  ^,            V n        R# )r/   N)r1   r2   r   r;   r   N_STAGES_EXTENDEDr5   r   r0   
K_extendedr<   r   r?   s   &&&&&&&&&&,r&   r2   DOP853.__init__  sr     	"xt#	?3=	?(($7$I$I$(FF$,3766<<A!3$--!"34r(   c                   \         P                  ! VP                  V P                  4      p\         P                  ! VP                  V P                  4      p\         P
                  ! \         P                  ! V4      R \         P                  ! V4      ,          4      p\         P                  ! V4      pV^ 8  p\         P                  ! W7,          4      WW,          ,          Wg&   W#,          V,          # )g?)r   r   r   E5E3hypotrT   	ones_like)r@   r   r   err5err3denomcorrection_factormasks   &&&     r&   rL   DOP853._estimate_error  s    vvacc477#vvacc477#sRVVD\'9:LL.qy"$&&"4u{"Bx+++r(   c                2   \         P                  ! VP                  V P                  4      V,          p\         P                  ! VP                  V P                  4      V,          p\         P
                  P                  V4      ^,          p\         P
                  P                  V4      ^,          pV^ 8X  d
   V^ 8X  d   R# VRV,          ,           p\         P                  ! V4      V,          \         P                  ! V\        V4      ,          4      ,          # )rn   g        g{Gz?)
r   r   r   r   r   linalgr   rT   sqrtlen)	r@   r   r   rO   r   r   err5_norm_2err3_norm_2r   s	   &&&&     r&   rP   DOP853._estimate_error_norm  s    vvacc477#e+vvacc477#e+iinnT*A-iinnT*A-!q 0d[00vvay;&U1C)DDDr(   c                   V P                   pV P                  p\        \        V P                  V P
                  4      V P                  ^,           R7       Fr  w  pw  rE\        P                  ! VRV P                  VRV 4      V,          pV P                  V P                  WR,          ,           V P                  V,           4      W&   Kt  	  \        P                  ! \        P                  V P                   3V P                  P"                  R7      pV^ ,          pV P$                  V P                  ,
          p	W^ &   W(,          V	,
          V^&   ^V	,          W P&                  V,           ,          ,
          V^&   V\        P                  ! V P(                  V4      ,          VR&   \+        V P                  V P,                  V P                  V4      # )r   r   Nr/   :   NN)r   r>   r   r   A_EXTRAC_EXTRAr<   r   r   r   r   ri   r3   r;   r   INTERPOLATOR_POWERr5   r0   r   r   DDop853DenseOutputr   )
r@   r   r   r    r!   r"   r#   Ff_olddelta_ys
   &         r&   rk   DOP853._dense_output_impl  sJ   OOOO"3t||T\\#B)-):<IAv"12A'!+B88DJJ.

R@AD<
 HH)<<dffE::++- !&&4::%!y7"!7{Q&&5.11!BFF4661%%" TVVTZZCCr(   )r   r   )rv   rw   rx   ry   rz   r   N_STAGESr<   ro   r9   r   r   r   r   r   r   r   r   r   rV   r2   rL   rP   rk   r}   r~   r   r   s   @@r&   r   r     s     Pb #++HEixi(23AAix(A			B			BA!##HqLM2G!##HqLM2G68ff% 5,ED Dr(   r   c                   8   a a ] tR tRt oV 3R ltR tRtVtV ;t# )rh   i(  c                   < \         SV `  W4       W!,
          V n        W@n        VP                  ^,          ^,
          V n        W0n        R# )r   N)r1   r2   r   rj   shapero   r3   )r@   ri   r   r3   rj   rG   s   &&&&&r&   r2   RkDenseOutput.__init__)  s6    "WWQZ!^

r(   c                L   WP                   ,
          V P                  ,          pVP                  ^ 8X  d?   \        P                  ! W P
                  ^,           4      p\        P                  ! V4      pMA\        P                  ! W P
                  ^,           ^34      p\        P                  ! V^ R7      pV P                  \        P                  ! V P                  V4      ,          pVP                  ^8X  d   W@P                  R,          ,          pV# W@P                  ,          pV# )r   )axis:NNNN)
ri   r   ndimr   tilero   cumprodr   rj   r3   )r@   r   xpr   s   &&   r&   
_call_implRkDenseOutput._call_impl0  s    ^tvv%66Q;::>*A

1AJJNA./A

11%AFFRVVDFFA&&66Q;G$$A  OAr(   )rj   r   ro   r3   	rv   rw   rx   ry   r2   r   r}   r~   r   r   s   @@r&   rh   rh   (  s      r(   rh   c                   8   a a ] tR tRt oV 3R ltR tRtVtV ;t# )r   iA  c                X   < \         SV `  W4       W!,
          V n        W@n        W0n        R # rJ   )r1   r2   r   r   r3   )r@   ri   r   r3   r   rG   s   &&&&&r&   r2   Dop853DenseOutput.__init__B  s#    "
r(   c                <   WP                   ,
          V P                  ,          pVP                  ^ 8X  d"   \        P                  ! V P
                  4      pMSVR,          p\        P                  ! \        V4      \        V P
                  4      3V P
                  P                  R7      p\        \        V P                  4      4       F5  w  rEW5,          pV^,          ^ 8X  d   W2,          pK%  V^V,
          ,          pK7  	  W0P
                  ,          pVP                  # )r   r/   r   )ri   r   r   r   
zeros_liker3   zerosr   r0   r   reversedr   r   )r@   r   r   r   ir   s   &&    r&   r   Dop853DenseOutput._call_implH  s    ^tvv%66Q;djj)A'
A#a&#djj/2$**:J:JKAhtvv./DAFA1uzQU
 0 	
ZZss
r(   )r   r   r3   r   r   s   @@r&   r   r   A  s      r(   r   )numpyr   baser   r   commonr   r   r   r   r	   r
    r   r[   r]   rY   r'   r*   r   r   r   rh   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(   