ó
    EñiH  ã                   ó@   • S SK JrJrJrJrJr  S SKJr  SS jrSS jr	g)é    )ÚarangeÚnewaxisÚhstackÚprodÚarray)Úlinalgc                 óH  • XS-   :  a  [        S5      eU S-  S:X  a  [        S5      eU S-	  n[        U* US-   5      nUSS2[        4   nUS-  n[        SU 5       H  n[	        XCU-  /5      nM     [        [        SUS-   5      SS	9[        R                  " U5      U   -  nU$ )
a#  
Return weights for an Np-point central derivative.

Assumes equally-spaced function points.

If weights are in the vector w, then
derivative is w[0] * f(x-ho*dx) + ... + w[-1] * f(x+h0*dx)

Parameters
----------
Np : int
    Number of points for the central derivative.
ndiv : int, optional
    Number of divisions. Default is 1.

Returns
-------
w : ndarray
    Weights for an Np-point central derivative. Its size is `Np`.

Notes
-----
Can be inaccurate for a large number of points.

Examples
--------
We can calculate a derivative value of a function.

>>> def f(x):
...     return 2 * x**2 + 3
>>> x = 3.0 # derivative point
>>> h = 0.1 # differential step
>>> Np = 3 # point number for central derivative
>>> weights = _central_diff_weights(Np) # weights for first derivative
>>> vals = [f(x + (i - Np/2) * h) for i in range(Np)]
>>> sum(w * v for (w, v) in zip(weights, vals))/h
11.79999999999998

This value is close to the analytical solution:
f'(x) = 4x, so f'(3) = 12

References
----------
.. [1] https://en.wikipedia.org/wiki/Finite_difference

é   z;Number of points must be at least the derivative order + 1.é   r   z!The number of points must be odd.ç      ð?Nç        ©Úaxis)Ú
ValueErrorr   r   Úranger   r   r   Úinv)ÚNpÚndivÚhoÚxÚXÚkÚws          Ú\/home/mande/repo/quber/.venv/lib/python3.13/site-packages/scipy/stats/_finite_differences.pyÚ_central_diff_weightsr      s¶   € ð^ 
�1‰Hƒ}ÜØIó
ð 	
ð 
ˆA�v�ƒ{ÜÐ<Ó=Ð=à	ˆq‰€BÜ�ˆs�B˜‘HÓ€AØ	Š!ŒWˆ*‰€AØ	ˆ3‰€AÜ�1�bŽ\ˆÜ�A˜!‘t�9ÓŠñ äŒV�A�t˜a‘xÓ  qÑ)¬F¯JªJ°q«M¸$Ñ,?Ñ?€AØ€Hó    c                 ó¢  • XSS-   :  a  [        S5      eUS-  S:X  a  [        S5      eUS:X  ai  US:X  a  [        / SQ5      S-  nOÉUS	:X  a  [        / S
Q5      S-  nO²US:X  a  [        / SQ5      S-  nO›US:X  a  [        / SQ5      S-  nO„[        US5      nOwUS:X  af  US:X  a  [        / SQ5      nO]US	:X  a  [        / SQ5      S-  nOFUS:X  a  [        / SQ5      S-  nO/US:X  a  [        / SQ5      S-  nO[        US5      nO[        XS5      nSnUS-	  n[        U5       H  n	XvU	   U " XU-
  U-  -   /UQ76 -  -  nM     U[	        U4U-  SS9-  $ )až  
Find the nth derivative of a function at a point.

Given a function, use a central difference formula with spacing `dx` to
compute the nth derivative at `x0`.

Parameters
----------
func : function
    Input function.
x0 : float
    The point at which the nth derivative is found.
dx : float, optional
    Spacing.
n : int, optional
    Order of the derivative. Default is 1.
args : tuple, optional
    Arguments
order : int, optional
    Number of points to use, must be odd.

Notes
-----
Decreasing the step size too small can result in round-off error.

Examples
--------
>>> def f(x):
...     return x**3 + x**2
>>> _derivative(f, 1.0, dx=1e-6)
4.9999999999217337

r
   zm'order' (the number of points used to compute the derivative), must be at least the derivative order 'n' + 1.r   r   zJ'order' (the number of points used to compute the derivative) must be odd.é   )éÿÿÿÿr   r
   g       @é   )r
   iøÿÿÿr   é   r   g      (@é   )r   é	   iÓÿÿÿr   é-   é÷ÿÿÿr
   g      N@r#   )	r   iàÿÿÿé¨   i`ýÿÿr   i   iXÿÿÿé    éýÿÿÿg     @Š@)r
   g       Àr
   )r   é   iâÿÿÿr)   r   )r   éåÿÿÿé  iþÿÿr+   r*   r   g     €f@)	r%   é€   éüÿÿé€  iòÇÿÿr.   r-   r,   r%   g     °³@r   r   )r   r   r   r   r   )
ÚfuncÚx0ÚdxÚnÚargsÚorderÚweightsÚvalr   r   s
             r   Ú_derivativer7   E   s„  € ðD �1‰uƒ}Üð=ó
ð 	
ð ˆq�y�Aƒ~Üðó
ð 	
ð
 	ˆAƒvØ�A‹:ÜšJÓ'¨#Ñ-‰GØ�a‹ZÜÒ-Ó.°Ñ5‰GØ�a‹ZÜÒ6Ó7¸$Ñ>‰GØ�a‹ZÜÒEÓFÈÑN‰Gä+¨E°1Ó5‰GØ	
ˆa‹Ø�A‹:ÜšLÓ)‰GØ�a‹ZÜÒ1Ó2°TÑ9‰GØ�a‹ZÜÒ<Ó=ÀÑE‰GØ�a‹ZäÒJÓKØññ ô
 ,¨E°1Ó5‰Gä'¨Ó1ˆØ
€CØ	�!‰€BÜ�5Ž\ˆØ�q‰z™D ¨2¡v°¡mÑ!3Ð;°dÒ;Ñ;Ñ;Šñ à”�r�e˜a‘i aÑ(Ñ(Ð(r   N)r
   )r   r
   © r   )
Únumpyr   r   r   r   r   Úscipyr   r   r7   r8   r   r   Ú<module>r;      s   ðß 6Õ 6Ý ô=õ@L)r   