Ë
    qwjH  ã                   ó<   — d dl mZmZmZmZmZ d dlmZ dd„Zdd„Z	y)é    )ÚarangeÚnewaxisÚhstackÚprodÚarray)Úlinalgc                 óH  — | |dz   k  rt        d«      ‚| dz  dk(  rt        d«      ‚| dz	  }t        | |dz   «      }|dd…t        f   }|dz  }t        d| «      D ]  }t	        |||z  g«      }Œ t        t        d|dz   «      d¬	«      t        j                  |«      |   z  }|S )
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          úd/var/www/html/newmanjeet/manjet/venv/lib/python3.12/site-packages/scipy/stats/_finite_differences.pyÚ_central_diff_weightsr      sº   € ð^ 
ˆD�1‰H‚}ÜØIó
ð 	
ð 
ˆA�v�‚{ÜÐ<Ó=Ð=à	ˆq‰€BÜ�ˆs�B˜‘HÓ€AØ	Š!ŒWˆ*‰€AØ	ˆ3‰€AÜ�1�bŽ\ˆÜ�A�q˜!‘t�9Ó‰ð äŒV�A�t˜a‘xÓ  qÔ)¬F¯J©J°q«M¸$Ñ,?Ñ?€AØ€Hó    c                 ó”  — ||dz   k  rt        d«      ‚|dz  dk(  rt        d«      ‚|dk(  re|dk(  rt        g d¢«      dz  }nÂ|d	k(  rt        g d
¢«      dz  }n¬|dk(  rt        g d¢«      dz  }n–|dk(  rt        g d¢«      dz  }n€t        |d«      }ns|dk(  rb|dk(  rt        g d¢«      }n[|d	k(  rt        g d¢«      dz  }nE|dk(  rt        g d¢«      dz  }n/|dk(  rt        g d¢«      dz  }nt        |d«      }nt        ||«      }d}|dz	  }t        |«      D ]  }	|||	    | ||	|z
  |z  z   g|¢­Ž z  z  }Œ |t	        |f|z  d¬«      z  S )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 ˆq�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ä'¨¨qÓ1ˆØ
€CØ	�!‰€BÜ�5Ž\ˆØˆw�q‰z™D  q¨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   