
    (ph             
          S SK rS SKrS SKrS SKJr  S SKJrJr  S SK J	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJr  SSKJr  SSKJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&  SSK'J(r(J)r)J*r*J+r+  SS	K,J-r-  SS
KJ.r.  SSK/J0r0  SSK1J2r2J3r3  S SK4J5r5  / SQr6Sr7SSSSSSSSSS.	r8SSSSSSS S!S"S.	r9S# r:S$ r;S% r<S& r=S' r>S( r?S) r@SmS+ jrASmS, jrBSmS- jrCS. rDSnS/ jrESnS0 jrFSnS1 jrGSnS2 jrHSnS3 jrISnS4 jrJS5 rKS6 rLS7 rMS8 rNS9 rOS: rPSoS; jrQ\rRS< rSS= rTS> rU\5" \7R                  S?S@5      5      SA 5       rW\5" \7R                  SBS@5      5      SpSC j5       rXSD rYSE rZSF r[\5" \7R                  SGSH5      5      SI 5       r\SJ r]SK r^SL r_SM r`SN raSO rbSP rcSQ rdSR reSS rfST rgSU rhSV riSW rjSX rkSY rlSZ rmS[ rnS*S*S\.S] jroSmS^ jrpSnS_ jrqSnS` jrrSa rsSb rtSc ruSd rvSe rwSqSf jrxSqSg jrySqSh jrzS*Si.Sj jr{SrSk jr|Sl r}g)s    N)defaultdict)heapifyheappop)piasarrayfloorisscalarsqrtwheresinplace
issubdtypeextractinexactnanzerossinc   )_ufuncs)	mathieu_a	mathieu_bivjvgammargammapsihankel1hankel2yvkvpochbinom_stirling2_inexact)_lqn_lqmn_rctj_rcty)_nonneg_int_or_fail)_specfun)	_comb_int)assoc_legendre_p_alllegendre_p_all)_deprecated)<ai_zerosassoc_laguerre	bei_zeros
beip_zeros	ber_zeros	bernoulli
berp_zerosbi_zerosclpmncombdigammadiric	erf_zeroseuler	factorial
factorial2
factorialkfresnel_zerosfresnelc_zerosfresnels_zerosh1vph2vpivpjn_zerosjnjnp_zeros	jnp_zeros
jnyn_zerosjvp	kei_zeros
keip_zeroskelvin_zeros	ker_zeros
kerp_zeroskvplmbdalpmnlpnlqmnlqnmathieu_even_coefmathieu_odd_coef
obl_cv_seqpbdn_seqpbdv_seqpbvv_seqperm	polygamma
pro_cv_seq
riccati_jn
riccati_ynr   softplus	stirling2y0_zerosy1_zeros	y1p_zerosyn_zeros	ynp_zerosyvpzetaz`scipy.special.{}` is deprecated as of SciPy 1.15.0 and will be removed in SciPy 1.17.0. Please use `scipy.special.{}` instead.   !   ,   6   A   J   T   ]   e   )	r                        	               %   +   /   3   8   c           
      ^   [        U 5      [        U5      p[        XU -
  -   5      n[        XU-
  -   5      n [        U R                  [        5      (       a  U R                  nO[        n[        U R                  U5      n[        R                  " U5      R                  S:  a  SnO)[        R                  " U5      R                  S:  a  SnOSnUS:*  U[        U5      :g  -  n[        X5[        5        U S-  n [        U 5      nSU-
  [        U5      U:  -  n[        Xp5      n[        Xq5      n	U[         -  n
[        X7[#        S	[        R$                  " U
5      U	S-
  -  5      5        SU-
  SU-
  -  n[        X5      n[        X5      n	[        X5      n[        X;[        X-  5      X-  -  5        U$ )
ag  Periodic sinc function, also called the Dirichlet function.

The Dirichlet function is defined as::

    diric(x, n) = sin(x * n/2) / (n * sin(x / 2)),

where `n` is a positive integer.

Parameters
----------
x : array_like
    Input data
n : int
    Integer defining the periodicity.

Returns
-------
diric : ndarray

Examples
--------
>>> import numpy as np
>>> from scipy import special
>>> import matplotlib.pyplot as plt

>>> x = np.linspace(-8*np.pi, 8*np.pi, num=201)
>>> plt.figure(figsize=(8, 8));
>>> for idx, n in enumerate([2, 3, 4, 9]):
...     plt.subplot(2, 2, idx+1)
...     plt.plot(x, special.diric(x, n))
...     plt.title('diric, n={}'.format(n))
>>> plt.show()

The following example demonstrates that `diric` gives the magnitudes
(modulo the sign and scaling) of the Fourier coefficients of a
rectangular pulse.

Suppress output of values that are effectively 0:

>>> np.set_printoptions(suppress=True)

Create a signal `x` of length `m` with `k` ones:

>>> m = 8
>>> k = 3
>>> x = np.zeros(m)
>>> x[:k] = 1

Use the FFT to compute the Fourier transform of `x`, and
inspect the magnitudes of the coefficients:

>>> np.abs(np.fft.fft(x))
array([ 3.        ,  2.41421356,  1.        ,  0.41421356,  1.        ,
        0.41421356,  1.        ,  2.41421356])

Now find the same values (up to sign) using `diric`. We multiply
by `k` to account for the different scaling conventions of
`numpy.fft.fft` and `diric`:

>>> theta = np.linspace(0, 2*np.pi, m, endpoint=False)
>>> k * special.diric(theta, k)
array([ 3.        ,  2.41421356,  1.        , -0.41421356, -1.        ,
       -0.41421356,  1.        ,  2.41421356])
gC]r2<gdy=gV瞯<gHz>gMbP?r   rr   r   )r   r   dtyper   floatr   shapenpfinfoepsr   r   r   r   absr   r   powround)xnytypeyminvalmask1denommask2xsubnsubzsubmaskdsubs                G/var/www/html/venv/lib/python3.13/site-packages/scipy/special/_basic.pyr9   r9   h   st   B 1:wqzqqS	AqS	A!''7##agguA 
xxU"	%		u	$!VU1X&E	!C	AAFEuWUf,-E5D5D"9D	!CBHHTNDF345eG% D4D4D4D	!3ty>49-.H    c                     [        U 5      (       a  [        U 5      U :w  d  U S:  a  [        S5      e[        U 5      n [        R
                  " U 5      u  pp4USU S-    USU  USU  USU  4$ )a  Compute zeros of integer-order Bessel functions Jn and Jn'.

Results are arranged in order of the magnitudes of the zeros.

Parameters
----------
nt : int
    Number (<=1200) of zeros to compute

Returns
-------
zo[l-1] : ndarray
    Value of the lth zero of Jn(x) and Jn'(x). Of length `nt`.
n[l-1] : ndarray
    Order of the Jn(x) or Jn'(x) associated with lth zero. Of length `nt`.
m[l-1] : ndarray
    Serial number of the zeros of Jn(x) or Jn'(x) associated
    with lth zero. Of length `nt`.
t[l-1] : ndarray
    0 if lth zero in zo is zero of Jn(x), 1 if it is a zero of Jn'(x). Of
    length `nt`.

See Also
--------
jn_zeros, jnp_zeros : to get separated arrays of zeros.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 5.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

i  zNumber must be integer <= 1200.r   N)r	   r   
ValueErrorintr)   jdzo)ntr   mtzos        r   rF   rF      sp    D B<<E"IOd:;;	RB--#KA!a1:q"vq"vq"v--r   c                    [        U5      (       a  [        U 5      (       d  [        S5      e[        U 5      U :w  d  [        U5      U:w  a  [        S5      eUS::  a  [        S5      e[        R                  " [        U 5      U5      $ )a  Compute nt zeros of Bessel functions Jn(x), Jn'(x), Yn(x), and Yn'(x).

Returns 4 arrays of length `nt`, corresponding to the first `nt`
zeros of Jn(x), Jn'(x), Yn(x), and Yn'(x), respectively. The zeros
are returned in ascending order.

Parameters
----------
n : int
    Order of the Bessel functions
nt : int
    Number (<=1200) of zeros to compute

Returns
-------
Jn : ndarray
    First `nt` zeros of Jn
Jnp : ndarray
    First `nt` zeros of Jn'
Yn : ndarray
    First `nt` zeros of Yn
Ynp : ndarray
    First `nt` zeros of Yn'

See Also
--------
jn_zeros, jnp_zeros, yn_zeros, ynp_zeros

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 5.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

Examples
--------
Compute the first three roots of :math:`J_1`, :math:`J_1'`,
:math:`Y_1` and :math:`Y_1'`.

>>> from scipy.special import jnyn_zeros
>>> jn_roots, jnp_roots, yn_roots, ynp_roots = jnyn_zeros(1, 3)
>>> jn_roots, yn_roots
(array([ 3.83170597,  7.01558667, 10.17346814]),
 array([2.19714133, 5.42968104, 8.59600587]))

Plot :math:`J_1`, :math:`J_1'`, :math:`Y_1`, :math:`Y_1'` and their roots.

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.special import jnyn_zeros, jvp, jn, yvp, yn
>>> jn_roots, jnp_roots, yn_roots, ynp_roots = jnyn_zeros(1, 3)
>>> fig, ax = plt.subplots()
>>> xmax= 11
>>> x = np.linspace(0, xmax)
>>> x[0] += 1e-15
>>> ax.plot(x, jn(1, x), label=r"$J_1$", c='r')
>>> ax.plot(x, jvp(1, x, 1), label=r"$J_1'$", c='b')
>>> ax.plot(x, yn(1, x), label=r"$Y_1$", c='y')
>>> ax.plot(x, yvp(1, x, 1), label=r"$Y_1'$", c='c')
>>> zeros = np.zeros((3, ))
>>> ax.scatter(jn_roots, zeros, s=30, c='r', zorder=5,
...            label=r"$J_1$ roots")
>>> ax.scatter(jnp_roots, zeros, s=30, c='b', zorder=5,
...            label=r"$J_1'$ roots")
>>> ax.scatter(yn_roots, zeros, s=30, c='y', zorder=5,
...            label=r"$Y_1$ roots")
>>> ax.scatter(ynp_roots, zeros, s=30, c='c', zorder=5,
...            label=r"$Y_1'$ roots")
>>> ax.hlines(0, 0, xmax, color='k')
>>> ax.set_ylim(-0.6, 0.6)
>>> ax.set_xlim(0, xmax)
>>> ax.legend(ncol=2, bbox_to_anchor=(1., 0.75))
>>> plt.tight_layout()
>>> plt.show()
Arguments must be scalars.zArguments must be integers.r   znt > 0)r	   r   r   r)   jyzor   r   r   s     r   rH   rH      sj    X RLLXa[[566aA59?677
a""==Q$$r   c                     [        X5      S   $ )ak  Compute zeros of integer-order Bessel functions Jn.

Compute `nt` zeros of the Bessel functions :math:`J_n(x)` on the
interval :math:`(0, \infty)`. The zeros are returned in ascending
order. Note that this interval excludes the zero at :math:`x = 0`
that exists for :math:`n > 0`.

Parameters
----------
n : int
    Order of Bessel function
nt : int
    Number of zeros to return

Returns
-------
ndarray
    First `nt` zeros of the Bessel function.

See Also
--------
jv: Real-order Bessel functions of the first kind
jnp_zeros: Zeros of :math:`Jn'`

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 5.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

Examples
--------
Compute the first four positive roots of :math:`J_3`.

>>> from scipy.special import jn_zeros
>>> jn_zeros(3, 4)
array([ 6.3801619 ,  9.76102313, 13.01520072, 16.22346616])

Plot :math:`J_3` and its first four positive roots. Note
that the root located at 0 is not returned by `jn_zeros`.

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.special import jn, jn_zeros
>>> j3_roots = jn_zeros(3, 4)
>>> xmax = 18
>>> xmin = -1
>>> x = np.linspace(xmin, xmax, 500)
>>> fig, ax = plt.subplots()
>>> ax.plot(x, jn(3, x), label=r'$J_3$')
>>> ax.scatter(j3_roots, np.zeros((4, )), s=30, c='r',
...            label=r"$J_3$_Zeros", zorder=5)
>>> ax.scatter(0, 0, s=30, c='k',
...            label=r"Root at 0", zorder=5)
>>> ax.hlines(0, 0, xmax, color='k')
>>> ax.set_xlim(xmin, xmax)
>>> plt.legend()
>>> plt.show()
r   rH   r   s     r   rE   rE   L      x aQr   c                     [        X5      S   $ )a  Compute zeros of integer-order Bessel function derivatives Jn'.

Compute `nt` zeros of the functions :math:`J_n'(x)` on the
interval :math:`(0, \infty)`. The zeros are returned in ascending
order. Note that this interval excludes the zero at :math:`x = 0`
that exists for :math:`n > 1`.

Parameters
----------
n : int
    Order of Bessel function
nt : int
    Number of zeros to return

Returns
-------
ndarray
    First `nt` zeros of the Bessel function.

See Also
--------
jvp: Derivatives of integer-order Bessel functions of the first kind
jv: Float-order Bessel functions of the first kind

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 5.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

Examples
--------
Compute the first four roots of :math:`J_2'`.

>>> from scipy.special import jnp_zeros
>>> jnp_zeros(2, 4)
array([ 3.05423693,  6.70613319,  9.96946782, 13.17037086])

As `jnp_zeros` yields the roots of :math:`J_n'`, it can be used to
compute the locations of the peaks of :math:`J_n`. Plot
:math:`J_2`, :math:`J_2'` and the locations of the roots of :math:`J_2'`.

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.special import jn, jnp_zeros, jvp
>>> j2_roots = jnp_zeros(2, 4)
>>> xmax = 15
>>> x = np.linspace(0, xmax, 500)
>>> fig, ax = plt.subplots()
>>> ax.plot(x, jn(2, x), label=r'$J_2$')
>>> ax.plot(x, jvp(2, x, 1), label=r"$J_2'$")
>>> ax.hlines(0, 0, xmax, color='k')
>>> ax.scatter(j2_roots, np.zeros((4, )), s=30, c='r',
...            label=r"Roots of $J_2'$", zorder=5)
>>> ax.set_ylim(-0.4, 0.8)
>>> ax.set_xlim(0, xmax)
>>> plt.legend()
>>> plt.show()
r   r   r   s     r   rG   rG     r   r   c                     [        X5      S   $ )a  Compute zeros of integer-order Bessel function Yn(x).

Compute `nt` zeros of the functions :math:`Y_n(x)` on the interval
:math:`(0, \infty)`. The zeros are returned in ascending order.

Parameters
----------
n : int
    Order of Bessel function
nt : int
    Number of zeros to return

Returns
-------
ndarray
    First `nt` zeros of the Bessel function.

See Also
--------
yn: Bessel function of the second kind for integer order
yv: Bessel function of the second kind for real order

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 5.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

Examples
--------
Compute the first four roots of :math:`Y_2`.

>>> from scipy.special import yn_zeros
>>> yn_zeros(2, 4)
array([ 3.38424177,  6.79380751, 10.02347798, 13.20998671])

Plot :math:`Y_2` and its first four roots.

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.special import yn, yn_zeros
>>> xmin = 2
>>> xmax = 15
>>> x = np.linspace(xmin, xmax, 500)
>>> fig, ax = plt.subplots()
>>> ax.hlines(0, xmin, xmax, color='k')
>>> ax.plot(x, yn(2, x), label=r'$Y_2$')
>>> ax.scatter(yn_zeros(2, 4), np.zeros((4, )), s=30, c='r',
...            label='Roots', zorder=5)
>>> ax.set_ylim(-0.4, 0.4)
>>> ax.set_xlim(xmin, xmax)
>>> plt.legend()
>>> plt.show()
rr   r   r   s     r   re   re     s    n aQr   c                     [        X5      S   $ )a  Compute zeros of integer-order Bessel function derivatives Yn'(x).

Compute `nt` zeros of the functions :math:`Y_n'(x)` on the
interval :math:`(0, \infty)`. The zeros are returned in ascending
order.

Parameters
----------
n : int
    Order of Bessel function
nt : int
    Number of zeros to return

Returns
-------
ndarray
    First `nt` zeros of the Bessel derivative function.


See Also
--------
yvp

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 5.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

Examples
--------
Compute the first four roots of the first derivative of the
Bessel function of second kind for order 0 :math:`Y_0'`.

>>> from scipy.special import ynp_zeros
>>> ynp_zeros(0, 4)
array([ 2.19714133,  5.42968104,  8.59600587, 11.74915483])

Plot :math:`Y_0`, :math:`Y_0'` and confirm visually that the roots of
:math:`Y_0'` are located at local extrema of :math:`Y_0`.

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.special import yn, ynp_zeros, yvp
>>> zeros = ynp_zeros(0, 4)
>>> xmax = 13
>>> x = np.linspace(0, xmax, 500)
>>> fig, ax = plt.subplots()
>>> ax.plot(x, yn(0, x), label=r'$Y_0$')
>>> ax.plot(x, yvp(0, x, 1), label=r"$Y_0'$")
>>> ax.scatter(zeros, np.zeros((4, )), s=30, c='r',
...            label=r"Roots of $Y_0'$", zorder=5)
>>> for root in zeros:
...     y0_extremum =  yn(0, root)
...     lower = min(0, y0_extremum)
...     upper = max(0, y0_extremum)
...     ax.vlines(root, lower, upper, color='r')
>>> ax.hlines(0, 0, xmax, color='k')
>>> ax.set_ylim(-0.6, 0.6)
>>> ax.set_xlim(0, xmax)
>>> plt.legend()
>>> plt.show()
rs   r   r   s     r   rf   rf     s    @ aQr   Fc                     [        U 5      (       a  [        U 5      U :w  d  U S::  a  [        S5      eSnU(       + n[        R                  " XU5      $ )a  Compute nt zeros of Bessel function Y0(z), and derivative at each zero.

The derivatives are given by Y0'(z0) = -Y1(z0) at each zero z0.

Parameters
----------
nt : int
    Number of zeros to return
complex : bool, default False
    Set to False to return only the real zeros; set to True to return only
    the complex zeros with negative real part and positive imaginary part.
    Note that the complex conjugates of the latter are also zeros of the
    function, but are not returned by this routine.

Returns
-------
z0n : ndarray
    Location of nth zero of Y0(z)
y0pz0n : ndarray
    Value of derivative Y0'(z0) for nth zero

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 5.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

Examples
--------
Compute the first 4 real roots and the derivatives at the roots of
:math:`Y_0`:

>>> import numpy as np
>>> from scipy.special import y0_zeros
>>> zeros, grads = y0_zeros(4)
>>> with np.printoptions(precision=5):
...     print(f"Roots: {zeros}")
...     print(f"Gradients: {grads}")
Roots: [ 0.89358+0.j  3.95768+0.j  7.08605+0.j 10.22235+0.j]
Gradients: [-0.87942+0.j  0.40254+0.j -0.3001 +0.j  0.2497 +0.j]

Plot the real part of :math:`Y_0` and the first four computed roots.

>>> import matplotlib.pyplot as plt
>>> from scipy.special import y0
>>> xmin = 0
>>> xmax = 11
>>> x = np.linspace(xmin, xmax, 500)
>>> fig, ax = plt.subplots()
>>> ax.hlines(0, xmin, xmax, color='k')
>>> ax.plot(x, y0(x), label=r'$Y_0$')
>>> zeros, grads = y0_zeros(4)
>>> ax.scatter(zeros.real, np.zeros((4, )), s=30, c='r',
...            label=r'$Y_0$_zeros', zorder=5)
>>> ax.set_ylim(-0.5, 0.6)
>>> ax.set_xlim(xmin, xmax)
>>> plt.legend(ncol=2)
>>> plt.show()

Compute the first 4 complex roots and the derivatives at the roots of
:math:`Y_0` by setting ``complex=True``:

>>> y0_zeros(4, True)
(array([ -2.40301663+0.53988231j,  -5.5198767 +0.54718001j,
         -8.6536724 +0.54841207j, -11.79151203+0.54881912j]),
 array([ 0.10074769-0.88196771j, -0.02924642+0.5871695j ,
         0.01490806-0.46945875j, -0.00937368+0.40230454j]))
r   *Arguments must be scalar positive integer.r	   r   r   r)   cyzor   complexkfkcs       r   rb   rb   G  sG    J B<<E"IOqEFF	
BB==$$r   c                     [        U 5      (       a  [        U 5      U :w  d  U S::  a  [        S5      eSnU(       + n[        R                  " XU5      $ )a
	  Compute nt zeros of Bessel function Y1(z), and derivative at each zero.

The derivatives are given by Y1'(z1) = Y0(z1) at each zero z1.

Parameters
----------
nt : int
    Number of zeros to return
complex : bool, default False
    Set to False to return only the real zeros; set to True to return only
    the complex zeros with negative real part and positive imaginary part.
    Note that the complex conjugates of the latter are also zeros of the
    function, but are not returned by this routine.

Returns
-------
z1n : ndarray
    Location of nth zero of Y1(z)
y1pz1n : ndarray
    Value of derivative Y1'(z1) for nth zero

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 5.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

Examples
--------
Compute the first 4 real roots and the derivatives at the roots of
:math:`Y_1`:

>>> import numpy as np
>>> from scipy.special import y1_zeros
>>> zeros, grads = y1_zeros(4)
>>> with np.printoptions(precision=5):
...     print(f"Roots: {zeros}")
...     print(f"Gradients: {grads}")
Roots: [ 2.19714+0.j  5.42968+0.j  8.59601+0.j 11.74915+0.j]
Gradients: [ 0.52079+0.j -0.34032+0.j  0.27146+0.j -0.23246+0.j]

Extract the real parts:

>>> realzeros = zeros.real
>>> realzeros
array([ 2.19714133,  5.42968104,  8.59600587, 11.74915483])

Plot :math:`Y_1` and the first four computed roots.

>>> import matplotlib.pyplot as plt
>>> from scipy.special import y1
>>> xmin = 0
>>> xmax = 13
>>> x = np.linspace(xmin, xmax, 500)
>>> zeros, grads = y1_zeros(4)
>>> fig, ax = plt.subplots()
>>> ax.hlines(0, xmin, xmax, color='k')
>>> ax.plot(x, y1(x), label=r'$Y_1$')
>>> ax.scatter(zeros.real, np.zeros((4, )), s=30, c='r',
...            label=r'$Y_1$_zeros', zorder=5)
>>> ax.set_ylim(-0.5, 0.5)
>>> ax.set_xlim(xmin, xmax)
>>> plt.legend()
>>> plt.show()

Compute the first 4 complex roots and the derivatives at the roots of
:math:`Y_1` by setting ``complex=True``:

>>> y1_zeros(4, True)
(array([ -0.50274327+0.78624371j,  -3.83353519+0.56235654j,
         -7.01590368+0.55339305j, -10.17357383+0.55127339j]),
 array([-0.45952768+1.31710194j,  0.04830191-0.69251288j,
        -0.02012695+0.51864253j,  0.011614  -0.43203296j]))
r   r   r   r   r   s       r   rc   rc     sG    V B<<E"IOqEFF	
BB==$$r   c                     [        U 5      (       a  [        U 5      U :w  d  U S::  a  [        S5      eSnU(       + n[        R                  " XU5      $ )a  Compute nt zeros of Bessel derivative Y1'(z), and value at each zero.

The values are given by Y1(z1) at each z1 where Y1'(z1)=0.

Parameters
----------
nt : int
    Number of zeros to return
complex : bool, default False
    Set to False to return only the real zeros; set to True to return only
    the complex zeros with negative real part and positive imaginary part.
    Note that the complex conjugates of the latter are also zeros of the
    function, but are not returned by this routine.

Returns
-------
z1pn : ndarray
    Location of nth zero of Y1'(z)
y1z1pn : ndarray
    Value of derivative Y1(z1) for nth zero

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 5.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

Examples
--------
Compute the first four roots of :math:`Y_1'` and the values of
:math:`Y_1` at these roots.

>>> import numpy as np
>>> from scipy.special import y1p_zeros
>>> y1grad_roots, y1_values = y1p_zeros(4)
>>> with np.printoptions(precision=5):
...     print(f"Y1' Roots: {y1grad_roots.real}")
...     print(f"Y1 values: {y1_values.real}")
Y1' Roots: [ 3.68302  6.9415  10.1234  13.28576]
Y1 values: [ 0.41673 -0.30317  0.25091 -0.21897]

`y1p_zeros` can be used to calculate the extremal points of :math:`Y_1`
directly. Here we plot :math:`Y_1` and the first four extrema.

>>> import matplotlib.pyplot as plt
>>> from scipy.special import y1, yvp
>>> y1_roots, y1_values_at_roots = y1p_zeros(4)
>>> real_roots = y1_roots.real
>>> xmax = 15
>>> x = np.linspace(0, xmax, 500)
>>> x[0] += 1e-15
>>> fig, ax = plt.subplots()
>>> ax.plot(x, y1(x), label=r'$Y_1$')
>>> ax.plot(x, yvp(1, x, 1), label=r"$Y_1'$")
>>> ax.scatter(real_roots, np.zeros((4, )), s=30, c='r',
...            label=r"Roots of $Y_1'$", zorder=5)
>>> ax.scatter(real_roots, y1_values_at_roots.real, s=30, c='k',
...            label=r"Extrema of $Y_1$", zorder=5)
>>> ax.hlines(0, 0, xmax, color='k')
>>> ax.set_ylim(-0.5, 0.5)
>>> ax.set_xlim(0, xmax)
>>> ax.legend(ncol=2, bbox_to_anchor=(1., 0.75))
>>> plt.tight_layout()
>>> plt.show()
r   r   rr   r   r   s       r   rd   rd     sG    D B<<E"IOqEFF	
BB==$$r   c                     [        U 5      n SnU" X-
  U5      n[        SUS-   5       H(  nXEX'-
  S-   -  -  U-  nXeU" X-
  US-  -   U5      -  -  nM*     USU-  -  $ )N      ?r   rr   g       @)r   range)vzr   Lphasepsis           r   _bessel_diff_formular   .  sw    
 	
AA	!#q	A1ac]!#a%[!A%	qqsA  A;r   c                 `    [        US5      nUS:X  a  [        X5      $ [        XU[        S5      $ )a  Compute derivatives of Bessel functions of the first kind.

Compute the nth derivative of the Bessel function `Jv` with
respect to `z`.

Parameters
----------
v : array_like or float
    Order of Bessel function
z : complex
    Argument at which to evaluate the derivative; can be real or
    complex.
n : int, default 1
    Order of derivative. For 0 returns the Bessel function `jv` itself.

Returns
-------
scalar or ndarray
    Values of the derivative of the Bessel function.

Notes
-----
The derivative is computed using the relation DLFM 10.6.7 [2]_.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 5.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

.. [2] NIST Digital Library of Mathematical Functions.
       https://dlmf.nist.gov/10.6.E7

Examples
--------

Compute the Bessel function of the first kind of order 0 and
its first two derivatives at 1.

>>> from scipy.special import jvp
>>> jvp(0, 1, 0), jvp(0, 1, 1), jvp(0, 1, 2)
(0.7651976865579666, -0.44005058574493355, -0.3251471008130331)

Compute the first derivative of the Bessel function of the first
kind for several orders at 1 by providing an array for `v`.

>>> jvp([0, 1, 2], 1, 1)
array([-0.44005059,  0.3251471 ,  0.21024362])

Compute the first derivative of the Bessel function of the first
kind of order 0 at several points by providing an array for `z`.

>>> import numpy as np
>>> points = np.array([0., 1.5, 3.])
>>> jvp(0, points, 1)
array([-0.        , -0.55793651, -0.33905896])

Plot the Bessel function of the first kind of order 1 and its
first three derivatives.

>>> import matplotlib.pyplot as plt
>>> x = np.linspace(-10, 10, 1000)
>>> fig, ax = plt.subplots()
>>> ax.plot(x, jvp(1, x, 0), label=r"$J_1$")
>>> ax.plot(x, jvp(1, x, 1), label=r"$J_1'$")
>>> ax.plot(x, jvp(1, x, 2), label=r"$J_1''$")
>>> ax.plot(x, jvp(1, x, 3), label=r"$J_1'''$")
>>> plt.legend()
>>> plt.show()
r   r   r   )r(   r   r   r   r   r   s      r   rI   rI   <  s2    N 	As#AAv!x#A!R44r   c                 `    [        US5      nUS:X  a  [        X5      $ [        XU[        S5      $ )a  Compute derivatives of Bessel functions of the second kind.

Compute the nth derivative of the Bessel function `Yv` with
respect to `z`.

Parameters
----------
v : array_like of float
    Order of Bessel function
z : complex
    Argument at which to evaluate the derivative
n : int, default 1
    Order of derivative. For 0 returns the BEssel function `yv`

Returns
-------
scalar or ndarray
    nth derivative of the Bessel function.

See Also
--------
yv : Bessel functions of the second kind

Notes
-----
The derivative is computed using the relation DLFM 10.6.7 [2]_.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 5.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

.. [2] NIST Digital Library of Mathematical Functions.
       https://dlmf.nist.gov/10.6.E7

Examples
--------
Compute the Bessel function of the second kind of order 0 and
its first two derivatives at 1.

>>> from scipy.special import yvp
>>> yvp(0, 1, 0), yvp(0, 1, 1), yvp(0, 1, 2)
(0.088256964215677, 0.7812128213002889, -0.8694697855159659)

Compute the first derivative of the Bessel function of the second
kind for several orders at 1 by providing an array for `v`.

>>> yvp([0, 1, 2], 1, 1)
array([0.78121282, 0.86946979, 2.52015239])

Compute the first derivative of the Bessel function of the
second kind of order 0 at several points by providing an array for `z`.

>>> import numpy as np
>>> points = np.array([0.5, 1.5, 3.])
>>> yvp(0, points, 1)
array([ 1.47147239,  0.41230863, -0.32467442])

Plot the Bessel function of the second kind of order 1 and its
first three derivatives.

>>> import matplotlib.pyplot as plt
>>> x = np.linspace(0, 5, 1000)
>>> x[0] += 1e-15
>>> fig, ax = plt.subplots()
>>> ax.plot(x, yvp(1, x, 0), label=r"$Y_1$")
>>> ax.plot(x, yvp(1, x, 1), label=r"$Y_1'$")
>>> ax.plot(x, yvp(1, x, 2), label=r"$Y_1''$")
>>> ax.plot(x, yvp(1, x, 3), label=r"$Y_1'''$")
>>> ax.set_ylim(-10, 10)
>>> plt.legend()
>>> plt.show()
r   r   r   )r(   r   r   r   s      r   rg   rg     s2    V 	As#AAv!x#A!R44r   c                 l    [        US5      nUS:X  a  [        X5      $ SU-  [        XU[        S5      -  $ )a  Compute derivatives of real-order modified Bessel function Kv(z)

Kv(z) is the modified Bessel function of the second kind.
Derivative is calculated with respect to `z`.

Parameters
----------
v : array_like of float
    Order of Bessel function
z : array_like of complex
    Argument at which to evaluate the derivative
n : int, default 1
    Order of derivative. For 0 returns the Bessel function `kv` itself.

Returns
-------
out : ndarray
    The results

See Also
--------
kv

Notes
-----
The derivative is computed using the relation DLFM 10.29.5 [2]_.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 6.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

.. [2] NIST Digital Library of Mathematical Functions.
       https://dlmf.nist.gov/10.29.E5

Examples
--------
Compute the modified bessel function of the second kind of order 0 and
its first two derivatives at 1.

>>> from scipy.special import kvp
>>> kvp(0, 1, 0), kvp(0, 1, 1), kvp(0, 1, 2)
(0.42102443824070834, -0.6019072301972346, 1.0229316684379428)

Compute the first derivative of the modified Bessel function of the second
kind for several orders at 1 by providing an array for `v`.

>>> kvp([0, 1, 2], 1, 1)
array([-0.60190723, -1.02293167, -3.85158503])

Compute the first derivative of the modified Bessel function of the
second kind of order 0 at several points by providing an array for `z`.

>>> import numpy as np
>>> points = np.array([0.5, 1.5, 3.])
>>> kvp(0, points, 1)
array([-1.65644112, -0.2773878 , -0.04015643])

Plot the modified bessel function of the second kind and its
first three derivatives.

>>> import matplotlib.pyplot as plt
>>> x = np.linspace(0, 5, 1000)
>>> fig, ax = plt.subplots()
>>> ax.plot(x, kvp(1, x, 0), label=r"$K_1$")
>>> ax.plot(x, kvp(1, x, 1), label=r"$K_1'$")
>>> ax.plot(x, kvp(1, x, 2), label=r"$K_1''$")
>>> ax.plot(x, kvp(1, x, 3), label=r"$K_1'''$")
>>> ax.set_ylim(-2.5, 2.5)
>>> plt.legend()
>>> plt.show()
r   r   r   r   )r(   r    r   r   s      r   rO   rO     s<    T 	As#AAv!xQw-aAr1===r   c                 `    [        US5      nUS:X  a  [        X5      $ [        XU[        S5      $ )a!  Compute derivatives of modified Bessel functions of the first kind.

Compute the nth derivative of the modified Bessel function `Iv`
with respect to `z`.

Parameters
----------
v : array_like or float
    Order of Bessel function
z : array_like
    Argument at which to evaluate the derivative; can be real or
    complex.
n : int, default 1
    Order of derivative. For 0, returns the Bessel function `iv` itself.

Returns
-------
scalar or ndarray
    nth derivative of the modified Bessel function.

See Also
--------
iv

Notes
-----
The derivative is computed using the relation DLFM 10.29.5 [2]_.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 6.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

.. [2] NIST Digital Library of Mathematical Functions.
       https://dlmf.nist.gov/10.29.E5

Examples
--------
Compute the modified Bessel function of the first kind of order 0 and
its first two derivatives at 1.

>>> from scipy.special import ivp
>>> ivp(0, 1, 0), ivp(0, 1, 1), ivp(0, 1, 2)
(1.2660658777520084, 0.565159103992485, 0.7009067737595233)

Compute the first derivative of the modified Bessel function of the first
kind for several orders at 1 by providing an array for `v`.

>>> ivp([0, 1, 2], 1, 1)
array([0.5651591 , 0.70090677, 0.29366376])

Compute the first derivative of the modified Bessel function of the
first kind of order 0 at several points by providing an array for `z`.

>>> import numpy as np
>>> points = np.array([0., 1.5, 3.])
>>> ivp(0, points, 1)
array([0.        , 0.98166643, 3.95337022])

Plot the modified Bessel function of the first kind of order 1 and its
first three derivatives.

>>> import matplotlib.pyplot as plt
>>> x = np.linspace(-5, 5, 1000)
>>> fig, ax = plt.subplots()
>>> ax.plot(x, ivp(1, x, 0), label=r"$I_1$")
>>> ax.plot(x, ivp(1, x, 1), label=r"$I_1'$")
>>> ax.plot(x, ivp(1, x, 2), label=r"$I_1''$")
>>> ax.plot(x, ivp(1, x, 3), label=r"$I_1'''$")
>>> plt.legend()
>>> plt.show()
r   r   r   )r(   r   r   r   s      r   rD   rD   -  s2    T 	As#AAv!x#A!R33r   c                 `    [        US5      nUS:X  a  [        X5      $ [        XU[        S5      $ )a  Compute derivatives of Hankel function H1v(z) with respect to `z`.

Parameters
----------
v : array_like
    Order of Hankel function
z : array_like
    Argument at which to evaluate the derivative. Can be real or
    complex.
n : int, default 1
    Order of derivative. For 0 returns the Hankel function `h1v` itself.

Returns
-------
scalar or ndarray
    Values of the derivative of the Hankel function.

See Also
--------
hankel1

Notes
-----
The derivative is computed using the relation DLFM 10.6.7 [2]_.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 5.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

.. [2] NIST Digital Library of Mathematical Functions.
       https://dlmf.nist.gov/10.6.E7

Examples
--------
Compute the Hankel function of the first kind of order 0 and
its first two derivatives at 1.

>>> from scipy.special import h1vp
>>> h1vp(0, 1, 0), h1vp(0, 1, 1), h1vp(0, 1, 2)
((0.7651976865579664+0.088256964215677j),
 (-0.44005058574493355+0.7812128213002889j),
 (-0.3251471008130329-0.8694697855159659j))

Compute the first derivative of the Hankel function of the first kind
for several orders at 1 by providing an array for `v`.

>>> h1vp([0, 1, 2], 1, 1)
array([-0.44005059+0.78121282j,  0.3251471 +0.86946979j,
       0.21024362+2.52015239j])

Compute the first derivative of the Hankel function of the first kind
of order 0 at several points by providing an array for `z`.

>>> import numpy as np
>>> points = np.array([0.5, 1.5, 3.])
>>> h1vp(0, points, 1)
array([-0.24226846+1.47147239j, -0.55793651+0.41230863j,
       -0.33905896-0.32467442j])
r   r   r   )r(   r   r   r   s      r   rB   rB   ~  3    | 	As#AAvq}#A!Wb99r   c                 `    [        US5      nUS:X  a  [        X5      $ [        XU[        S5      $ )a  Compute derivatives of Hankel function H2v(z) with respect to `z`.

Parameters
----------
v : array_like
    Order of Hankel function
z : array_like
    Argument at which to evaluate the derivative. Can be real or
    complex.
n : int, default 1
    Order of derivative. For 0 returns the Hankel function `h2v` itself.

Returns
-------
scalar or ndarray
    Values of the derivative of the Hankel function.

See Also
--------
hankel2

Notes
-----
The derivative is computed using the relation DLFM 10.6.7 [2]_.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 5.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

.. [2] NIST Digital Library of Mathematical Functions.
       https://dlmf.nist.gov/10.6.E7

Examples
--------
Compute the Hankel function of the second kind of order 0 and
its first two derivatives at 1.

>>> from scipy.special import h2vp
>>> h2vp(0, 1, 0), h2vp(0, 1, 1), h2vp(0, 1, 2)
((0.7651976865579664-0.088256964215677j),
 (-0.44005058574493355-0.7812128213002889j),
 (-0.3251471008130329+0.8694697855159659j))

Compute the first derivative of the Hankel function of the second kind
for several orders at 1 by providing an array for `v`.

>>> h2vp([0, 1, 2], 1, 1)
array([-0.44005059-0.78121282j,  0.3251471 -0.86946979j,
       0.21024362-2.52015239j])

Compute the first derivative of the Hankel function of the second kind
of order 0 at several points by providing an array for `z`.

>>> import numpy as np
>>> points = np.array([0.5, 1.5, 3.])
>>> h2vp(0, points, 1)
array([-0.24226846-1.47147239j, -0.55793651-0.41230863j,
       -0.33905896+0.32467442j])
r   r   r   )r(   r   r   r   s      r   rC   rC     r   r   c                 4   [        U 5      (       a  [        U5      (       d  [        S5      e[        U SSS9n U S:X  a  SnOU n[        R                  " US-   4[        R
                  S9n[        R                  " U5      n[        XU4S9  US	U S-    US	U S-    4$ )
aO  Compute Ricatti-Bessel function of the first kind and its derivative.

The Ricatti-Bessel function of the first kind is defined as :math:`x
j_n(x)`, where :math:`j_n` is the spherical Bessel function of the first
kind of order :math:`n`.

This function computes the value and first derivative of the
Ricatti-Bessel function for all orders up to and including `n`.

Parameters
----------
n : int
    Maximum order of function to compute
x : float
    Argument at which to evaluate

Returns
-------
jn : ndarray
    Value of j0(x), ..., jn(x)
jnp : ndarray
    First derivative j0'(x), ..., jn'(x)

Notes
-----
The computation is carried out via backward recurrence, using the
relation DLMF 10.51.1 [2]_.

Wrapper for a Fortran routine created by Shanjie Zhang and Jianming
Jin [1]_.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html
.. [2] NIST Digital Library of Mathematical Functions.
       https://dlmf.nist.gov/10.51.E1

arguments must be scalars.r   Fstrictr   r   r   outN)r	   r   r(   r   emptyfloat64
empty_liker&   )r   r   n1jnjnps        r   r^   r^     s    R QKKHQKK566As51A	Q	26)2::	.B
--
C	!cf!:s6QqS{""r   c                 4   [        U 5      (       a  [        U5      (       d  [        S5      e[        U SSS9n U S:X  a  SnOU n[        R                  " US-   4[        R
                  S9n[        R                  " U5      n[        XU4S9  US	U S-    US	U S-    4$ )
a  Compute Ricatti-Bessel function of the second kind and its derivative.

The Ricatti-Bessel function of the second kind is defined here as :math:`+x
y_n(x)`, where :math:`y_n` is the spherical Bessel function of the second
kind of order :math:`n`. *Note that this is in contrast to a common convention
that includes a minus sign in the definition.*

This function computes the value and first derivative of the function for
all orders up to and including `n`.

Parameters
----------
n : int
    Maximum order of function to compute
x : float
    Argument at which to evaluate

Returns
-------
yn : ndarray
    Value of y0(x), ..., yn(x)
ynp : ndarray
    First derivative y0'(x), ..., yn'(x)

Notes
-----
The computation is carried out via ascending recurrence, using the
relation DLMF 10.51.1 [2]_.

Wrapper for a Fortran routine created by Shanjie Zhang and Jianming
Jin [1]_.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html
.. [2] NIST Digital Library of Mathematical Functions.
       https://dlmf.nist.gov/10.51.E1

r   r   Fr   r   r   r   r   N)r	   r   r(   r   r   r   r   r'   )r   r   r   ynynps        r   r_   r_   @  s    T QKKHQKK566As51A	Q	26)2::	.B
--
C	!cf!:s6QqS{""r   c                     [        U 5      U :w  d  U S::  d  [        U 5      (       d  [        S5      e[        R                  " U 5      $ )a]  Compute the first nt zero in the first quadrant, ordered by absolute value.

Zeros in the other quadrants can be obtained by using the symmetries
erf(-z) = erf(z) and erf(conj(z)) = conj(erf(z)).


Parameters
----------
nt : int
    The number of zeros to compute

Returns
-------
The locations of the zeros of erf : ndarray (complex)
    Complex values at which zeros of erf(z)

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

Examples
--------
>>> from scipy import special
>>> special.erf_zeros(1)
array([1.45061616+1.880943j])

Check that erf is (close to) zero for the value returned by erf_zeros

>>> special.erf(special.erf_zeros(1))
array([4.95159469e-14-1.16407394e-16j])

r   )Argument must be positive scalar integer.)r   r	   r   r)   cerzor   s    r   r:   r:   y  s9    F 	b	RR1WXb\\DEE>>"r   c                     [        U 5      U :w  d  U S::  d  [        U 5      (       d  [        S5      e[        R                  " SU 5      $ )a  Compute nt complex zeros of cosine Fresnel integral C(z).

Parameters
----------
nt : int
    Number of zeros to compute

Returns
-------
fresnelc_zeros: ndarray
    Zeros of the cosine Fresnel integral

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   r   r   r   r	   r   r)   fcszor   s    r   r@   r@     :    ( 	b	RR1WXb\\DEE>>!R  r   c                     [        U 5      U :w  d  U S::  d  [        U 5      (       d  [        S5      e[        R                  " SU 5      $ )a  Compute nt complex zeros of sine Fresnel integral S(z).

Parameters
----------
nt : int
    Number of zeros to compute

Returns
-------
fresnels_zeros: ndarray
    Zeros of the sine Fresnel integral

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   r   rr   r   r   s    r   rA   rA     r   r   c                     [        U 5      U :w  d  U S::  d  [        U 5      (       d  [        S5      e[        R                  " SU 5      [        R                  " SU 5      4$ )a  Compute nt complex zeros of sine and cosine Fresnel integrals S(z) and C(z).

Parameters
----------
nt : int
    Number of zeros to compute

Returns
-------
zeros_sine: ndarray
    Zeros of the sine Fresnel integral
zeros_cosine : ndarray
    Zeros of the cosine Fresnel integral

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   r   rr   r   r   r   s    r   r?   r?     sJ    , 	b	RR1WXb\\DEE>>!R (..B"777r   c                 0    [         R                  " XU 5      $ )ax  Compute the generalized (associated) Laguerre polynomial of degree n and order k.

The polynomial :math:`L^{(k)}_n(x)` is orthogonal over ``[0, inf)``,
with weighting function ``exp(-x) * x**k`` with ``k > -1``.

Parameters
----------
x : float or ndarray
    Points where to evaluate the Laguerre polynomial
n : int
    Degree of the Laguerre polynomial
k : int
    Order of the Laguerre polynomial

Returns
-------
assoc_laguerre: float or ndarray
    Associated laguerre polynomial values

Notes
-----
`assoc_laguerre` is a simple wrapper around `eval_genlaguerre`, with
reversed argument order ``(x, n, k=0.0) --> (n, k, x)``.

)r   eval_genlaguerre)r   r   ks      r   r/   r/     s    4 ##A!,,r   c                     [        U 5      [        U5      pSU S-   -  [        U S-   5      -  [        U S-   U5      -  n[        U S:H  [	        U5      U5      $ )a  Polygamma functions.

Defined as :math:`\psi^{(n)}(x)` where :math:`\psi` is the
`digamma` function. See [dlmf]_ for details.

Parameters
----------
n : array_like
    The order of the derivative of the digamma function; must be
    integral
x : array_like
    Real valued input

Returns
-------
ndarray
    Function results

See Also
--------
digamma

References
----------
.. [dlmf] NIST, Digital Library of Mathematical Functions,
    https://dlmf.nist.gov/5.15

Examples
--------
>>> from scipy import special
>>> x = [2, 3, 25.5]
>>> special.polygamma(1, x)
array([ 0.64493407,  0.39493407,  0.03999467])
>>> special.polygamma(0, x) == special.psi(x)
array([ True,  True,  True], dtype=bool)

g      r   r   r   )r   r   rh   r   r   )r   r   fac2s      r   r\   r\     sT    L 1:wqzqAaC=53<'$qsA,6DaQ&&r   c                 `   [        U 5      (       a  [        U5      (       d  [        S5      eUS:  a  [        S5      eU [        U 5      :w  d  U S:  a  [        S5      eUS::  a*  SS[        U5      -  -   SU-  -
  S	[        U5      -  U-  -   nO)S
S[        U5      -  -   SU-  -
  S[        U5      -  U-  -   n[	        USU -  -   5      nUS:  a  [
        R                  " S[        SS9  Sn[	        [        U 5      5      n U S-  (       a  Sn[        X5      n[        R                  " X@X5      nUSU $ )a:  Fourier coefficients for even Mathieu and modified Mathieu functions.

The Fourier series of the even solutions of the Mathieu differential
equation are of the form

.. math:: \mathrm{ce}_{2n}(z, q) = \sum_{k=0}^{\infty} A_{(2n)}^{(2k)} \cos 2kz

.. math:: \mathrm{ce}_{2n+1}(z, q) =
          \sum_{k=0}^{\infty} A_{(2n+1)}^{(2k+1)} \cos (2k+1)z

This function returns the coefficients :math:`A_{(2n)}^{(2k)}` for even
input m=2n, and the coefficients :math:`A_{(2n+1)}^{(2k+1)}` for odd input
m=2n+1.

Parameters
----------
m : int
    Order of Mathieu functions.  Must be non-negative.
q : float (>=0)
    Parameter of Mathieu functions.  Must be non-negative.

Returns
-------
Ak : ndarray
    Even or odd Fourier coefficients, corresponding to even or odd m.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html
.. [2] NIST Digital Library of Mathematical Functions
       https://dlmf.nist.gov/28.4#i

m and q must be scalars.r   q >=0zm must be an integer >=0.r         @L@fffff`@̬V@      1@@T㥛 ?笭_vOn?      ?    Too many predicted coefficients.rr   
stacklevelN)r	   r   r   r
   r   warningswarnRuntimeWarningr   r)   fcoef)r   qqmkmkdafcs          r   rU   rU   9  s   H QKKHQKK344	A!!	U1X1q5455	Q4Q<%')DaLN:CQK$q&(5a=?:	R#a%ZB	Cx8.UVW	
BE!HA1u!A	q	$Bcr7Nr   c                 `   [        U 5      (       a  [        U5      (       d  [        S5      eUS:  a  [        S5      eU [        U 5      :w  d  U S::  a  [        S5      eUS::  a*  SS[        U5      -  -   SU-  -
  S	[        U5      -  U-  -   nO)S
S[        U5      -  -   SU-  -
  S[        U5      -  U-  -   n[	        USU -  -   5      nUS:  a  [
        R                  " S[        SS9  Sn[	        [        U 5      5      n U S-  (       a  Sn[        X5      n[        R                  " X@X5      nUSU $ )a  Fourier coefficients for even Mathieu and modified Mathieu functions.

The Fourier series of the odd solutions of the Mathieu differential
equation are of the form

.. math:: \mathrm{se}_{2n+1}(z, q) =
          \sum_{k=0}^{\infty} B_{(2n+1)}^{(2k+1)} \sin (2k+1)z

.. math:: \mathrm{se}_{2n+2}(z, q) =
          \sum_{k=0}^{\infty} B_{(2n+2)}^{(2k+2)} \sin (2k+2)z

This function returns the coefficients :math:`B_{(2n+2)}^{(2k+2)}` for even
input m=2n+2, and the coefficients :math:`B_{(2n+1)}^{(2k+1)}` for odd
input m=2n+1.

Parameters
----------
m : int
    Order of Mathieu functions.  Must be non-negative.
q : float (>=0)
    Parameter of Mathieu functions.  Must be non-negative.

Returns
-------
Bk : ndarray
    Even or odd Fourier coefficients, corresponding to even or odd m.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   r   r   zm must be an integer > 0r   r   r   r   r   r   r   r   r   r   r   r   rr   r   rt   rs   N)r	   r   r   r
   r   r   r   r   r   r)   r   )r   r   r   r  r  br  s          r   rV   rV   u  s   F QKKHQKK344	A!!	U1X16344	Q4Q<%')DaLN:CQK$q&(5a=?:	R#a%ZB	Cx8.UVW	
BE!HA1u!A	q	$Bcr7Nr   rQ   r+   c                 r   [        USSS9n[        U 5      U:  a  [        S5      e[        R                  " U5      (       a  [        S5      e[        U 5      [        U5      p[        R                  " [        R                  " U5      S:*  SS5      n[        U[        U 5      X#SS	9u  pE[        R                  " US
S5      n[        R                  " US
S5      nU S
:  a  USU S-    nUSU S-    nXE4$ [        R                  " USU S-
  S2   S
US
   S
S9n[        R                  " USU S-
  S2   S
US
   S
S9nXE4$ )a^  Sequence of associated Legendre functions of the first kind.

Computes the associated Legendre function of the first kind of order m and
degree n, ``Pmn(z)`` = :math:`P_n^m(z)`, and its derivative, ``Pmn'(z)``.
Returns two arrays of size ``(m+1, n+1)`` containing ``Pmn(z)`` and
``Pmn'(z)`` for all orders from ``0..m`` and degrees from ``0..n``.

This function takes a real argument ``z``. For complex arguments ``z``
use clpmn instead.

.. deprecated:: 1.15.0
    This function is deprecated and will be removed in SciPy 1.17.0.
    Please `scipy.special.assoc_legendre_p_all` instead.

Parameters
----------
m : int
   ``|m| <= n``; the order of the Legendre function.
n : int
   where ``n >= 0``; the degree of the Legendre function.  Often
   called ``l`` (lower case L) in descriptions of the associated
   Legendre function
z : array_like
    Input value.

Returns
-------
Pmn_z : (m+1, n+1) array
   Values for all orders 0..m and degrees 0..n
Pmn_d_z : (m+1, n+1) array
   Derivatives for all orders 0..m and degrees 0..n

See Also
--------
clpmn: associated Legendre functions of the first kind for complex z

Notes
-----
In the interval (-1, 1), Ferrer's function of the first kind is
returned. The phase convention used for the intervals (1, inf)
and (-inf, -1) is such that the result is always real.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html
.. [2] NIST Digital Library of Mathematical Functions
       https://dlmf.nist.gov/14.3

r   Fr   m must be <= n.z)Argument must be real. Use clpmn instead.r   rr   rs   
branch_cutdiff_nr   Nr   axis)
r(   r   r   r   iscomplexobjr   r   r+   swapaxesinsert)r   r   r   r
  r   pds         r   rQ   rQ     s/   l 	As51AA
*++	qDEEq63q6q"&&)q.!Q/J CFAQOEA
Aq!A	RA	B	QhAK!a%\
 5L IIa!a%na1A6YYr+AE2+2a5q95Lr   r6   c                 H   [        U 5      U:  a  [        S5      eUS:X  d  US:X  d  [        S5      e[        U 5      [        U5      p[        R                  " U5      (       d  [        R
                  " U[        S9n[        U[        U 5      X#SS9u  pE[        R                  " USS5      n[        R                  " USS5      nU S:  a  US	U S-    nUS	U S-    nXE4$ [        R                  " US	U S-
  S
2   SUS   SS9n[        R                  " US	U S-
  S
2   SUS   SS9nXE4$ )a  Associated Legendre function of the first kind for complex arguments.

Computes the associated Legendre function of the first kind of order m and
degree n, ``Pmn(z)`` = :math:`P_n^m(z)`, and its derivative, ``Pmn'(z)``.
Returns two arrays of size ``(m+1, n+1)`` containing ``Pmn(z)`` and
``Pmn'(z)`` for all orders from ``0..m`` and degrees from ``0..n``.

.. deprecated:: 1.15.0
    This function is deprecated and will be removed in SciPy 1.17.0.
    Please use `scipy.special.assoc_legendre_p_all` instead.

Parameters
----------
m : int
   ``|m| <= n``; the order of the Legendre function.
n : int
   where ``n >= 0``; the degree of the Legendre function.  Often
   called ``l`` (lower case L) in descriptions of the associated
   Legendre function
z : array_like, float or complex
    Input value.
type : int, optional
   takes values 2 or 3
   2: cut on the real axis ``|x| > 1``
   3: cut on the real axis ``-1 < x < 1`` (default)

Returns
-------
Pmn_z : (m+1, n+1) array
   Values for all orders ``0..m`` and degrees ``0..n``
Pmn_d_z : (m+1, n+1) array
   Derivatives for all orders ``0..m`` and degrees ``0..n``

See Also
--------
lpmn: associated Legendre functions of the first kind for real z

Notes
-----
By default, i.e. for ``type=3``, phase conventions are chosen according
to [1]_ such that the function is analytic. The cut lies on the interval
(-1, 1). Approaching the cut from above or below in general yields a phase
factor with respect to Ferrer's function of the first kind
(cf. `lpmn`).

For ``type=2`` a cut at ``|x| > 1`` is chosen. Approaching the real values
on the interval (-1, 1) in the complex plane yields Ferrer's function
of the first kind.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html
.. [2] NIST Digital Library of Mathematical Functions
       https://dlmf.nist.gov/14.21

r  rr   rs   ztype must be either 2 or 3.r   r   r	  r   Nr   r  )
r   r   r   r   r  r   r   r+   r  r  )r   r   r   typer   out_jacs         r   r6   r6      s%   z 	A
*++AI677q63q6q??1JJq('3q61aPLC
++c1a
 Ckk'1a(G	Q(AEm(AE#
 < iiKa!eRK(!SV!<))GKa!eRK0!WQZaH<r   c           	         [        U 5      (       a  U S:  a  [        S5      e[        U5      (       a  US:  a  [        S5      e[        U 5      [        U5      p[        SU 5      n[        SU5      n[        R
                  " U5      n[        R                  " UR                  [        R                  5      (       d  UR                  [        R                  5      n[        R                  " U5      (       a9  [        R                  " US-   US-   4UR                  -   [        R                  S9nO8[        R                  " US-   US-   4UR                  -   [        R                  S9n[        R                  " U5      nUR                   S:X  a  [#        X%U4S9  O8[#        U[        R$                  " USS5      [        R$                  " USS5      4S9  US	U S-   2S	US-   24   US	U S-   2S	US-   24   4$ )
a  Sequence of associated Legendre functions of the second kind.

Computes the associated Legendre function of the second kind of order m and
degree n, ``Qmn(z)`` = :math:`Q_n^m(z)`, and its derivative, ``Qmn'(z)``.
Returns two arrays of size ``(m+1, n+1)`` containing ``Qmn(z)`` and
``Qmn'(z)`` for all orders from ``0..m`` and degrees from ``0..n``.

Parameters
----------
m : int
   ``|m| <= n``; the order of the Legendre function.
n : int
   where ``n >= 0``; the degree of the Legendre function.  Often
   called ``l`` (lower case L) in descriptions of the associated
   Legendre function
z : array_like, complex
    Input value.

Returns
-------
Qmn_z : (m+1, n+1) array
   Values for all orders 0..m and degrees 0..n
Qmn_d_z : (m+1, n+1) array
   Derivatives for all orders 0..m and degrees 0..n

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   z!m must be a non-negative integer.!n must be a non-negative integer.r   r   r   )r   r   )r   N)r	   r   r   maxr   r   r   r   r   astyper   r  r   r   
complex128r   ndimr%   moveaxis)r   r   r   mmnnr   qds          r   rS   rS   V  s   B A;;1q5<==A;;1q5<==q63q6q	QB	QB


1AMM!''2::..HHRZZ 	qHHb1fb1f%/r}}EHHb1fb1f%/rzzB	q	B	!aW 	a;;q&(3;;r6846	7 VqsVVqsV^b1Q31Q3000r   c                     [        U 5      (       a  U S:  a  [        S5      e[        U 5      n U S:  a  SnOU n[        R                  " [        U5      5      SU S-    $ )a  Bernoulli numbers B0..Bn (inclusive).

Parameters
----------
n : int
    Indicated the number of terms in the Bernoulli series to generate.

Returns
-------
ndarray
    The Bernoulli numbers ``[B(0), B(1), ..., B(n)]``.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html
.. [2] "Bernoulli number", Wikipedia, https://en.wikipedia.org/wiki/Bernoulli_number

Examples
--------
>>> import numpy as np
>>> from scipy.special import bernoulli, zeta
>>> bernoulli(4)
array([ 1.        , -0.5       ,  0.16666667,  0.        , -0.03333333])

The Wikipedia article ([2]_) points out the relationship between the
Bernoulli numbers and the zeta function, ``B_n^+ = -n * zeta(1 - n)``
for ``n > 0``:

>>> n = np.arange(1, 5)
>>> -n * zeta(1 - n)
array([ 0.5       ,  0.16666667, -0.        , -0.03333333])

Note that, in the notation used in the wikipedia article,
`bernoulli` computes ``B_n^-`` (i.e. it used the convention that
``B_1`` is -1/2).  The relation given above is for ``B_n^+``, so the
sign of 0.5 does not match the output of ``bernoulli(4)``.

r   r  rr   Nr   )r	   r   r   r)   bernobr   r   s     r   r3   r3     sX    R A;;1q5<==AA	A??3r7#Fac++r   c                     [        U 5      (       a  U S:  a  [        S5      e[        U 5      n U S:  a  SnOU n[        R                  " U5      SU S-    $ )a  Euler numbers E(0), E(1), ..., E(n).

The Euler numbers [1]_ are also known as the secant numbers.

Because ``euler(n)`` returns floating point values, it does not give
exact values for large `n`.  The first inexact value is E(22).

Parameters
----------
n : int
    The highest index of the Euler number to be returned.

Returns
-------
ndarray
    The Euler numbers [E(0), E(1), ..., E(n)].
    The odd Euler numbers, which are all zero, are included.

References
----------
.. [1] Sequence A122045, The On-Line Encyclopedia of Integer Sequences,
       https://oeis.org/A122045
.. [2] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

Examples
--------
>>> import numpy as np
>>> from scipy.special import euler
>>> euler(6)
array([  1.,   0.,  -1.,   0.,   5.,   0., -61.])

>>> euler(13).astype(np.int64)
array([      1,       0,      -1,       0,       5,       0,     -61,
             0,    1385,       0,  -50521,       0, 2702765,       0])

>>> euler(22)[-1]  # Exact value of E(22) is -69348874393137901.
-69348874393137976.0

r   r  rr   Nr   )r	   r   r   r)   eulerbr"  s     r   r;   r;     sT    T A;;1q5<==AA	A??2v1&&r   rR   r,   c                     [        XSS9$ )aU  Legendre function of the first kind.

Compute sequence of Legendre functions of the first kind (polynomials),
Pn(z) and derivatives for all degrees from 0 to n (inclusive).

See also special.legendre for polynomial class.

.. deprecated:: 1.15.0
    This function is deprecated and will be removed in SciPy 1.17.0.
    Please use `scipy.special.legendre_p_all` instead.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html
r   )r  )r,   )r   r   s     r   rR   rR     s    ( !q))r   c           	         [        U SSS9n U S:  a  SnOU n[        R                  " U5      n[        R                  " UR                  [        R
                  5      (       d  UR                  [        5      n[        R                  " U5      (       a5  [        R                  " US-   4UR                  -   [        R                  S9nO4[        R                  " US-   4UR                  -   [        R                  S9n[        R                  " U5      nUR                  S:X  a  [        XU4S9  O8[        U[        R                   " USS5      [        R                   " USS5      4S9  US	U S-    US	U S-    4$ )
a  Legendre function of the second kind.

Compute sequence of Legendre functions of the second kind, Qn(z) and
derivatives for all degrees from 0 to n (inclusive).

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   Fr   r   r   r   r   r   N)r(   r   r   r   r   r   r  r   r  r   r   r  r   r   r  r$   r  )r   r   r   qnr  s        r   rT   rT     s"    	As51A	A


1AMM!''2::..HHUO	qXXrAvi!'')?XXrAvi!'')<	r	B	!QH 	Q++b!R(++b!R(*	+ f!:r&AaCz!!r   c                     Sn[        U 5      (       a  [        U 5      U :w  d  U S::  a  [        S5      e[        R                  " X5      $ )ah  
Compute `nt` zeros and values of the Airy function Ai and its derivative.

Computes the first `nt` zeros, `a`, of the Airy function Ai(x);
first `nt` zeros, `ap`, of the derivative of the Airy function Ai'(x);
the corresponding values Ai(a');
and the corresponding values Ai'(a).

Parameters
----------
nt : int
    Number of zeros to compute

Returns
-------
a : ndarray
    First `nt` zeros of Ai(x)
ap : ndarray
    First `nt` zeros of Ai'(x)
ai : ndarray
    Values of Ai(x) evaluated at first `nt` zeros of Ai'(x)
aip : ndarray
    Values of Ai'(x) evaluated at first `nt` zeros of Ai(x)

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

Examples
--------
>>> from scipy import special
>>> a, ap, ai, aip = special.ai_zeros(3)
>>> a
array([-2.33810741, -4.08794944, -5.52055983])
>>> ap
array([-1.01879297, -3.24819758, -4.82009921])
>>> ai
array([ 0.53565666, -0.41901548,  0.38040647])
>>> aip
array([ 0.70121082, -0.80311137,  0.86520403])

r   r   %nt must be a positive integer scalar.r	   r   r   r)   airyzor   r   s     r   r.   r.   :  >    Z 
BB<<E"IOq@AA??2""r   c                     Sn[        U 5      (       a  [        U 5      U :w  d  U S::  a  [        S5      e[        R                  " X5      $ )ad  
Compute `nt` zeros and values of the Airy function Bi and its derivative.

Computes the first `nt` zeros, b, of the Airy function Bi(x);
first `nt` zeros, b', of the derivative of the Airy function Bi'(x);
the corresponding values Bi(b');
and the corresponding values Bi'(b).

Parameters
----------
nt : int
    Number of zeros to compute

Returns
-------
b : ndarray
    First `nt` zeros of Bi(x)
bp : ndarray
    First `nt` zeros of Bi'(x)
bi : ndarray
    Values of Bi(x) evaluated at first `nt` zeros of Bi'(x)
bip : ndarray
    Values of Bi'(x) evaluated at first `nt` zeros of Bi(x)

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

Examples
--------
>>> from scipy import special
>>> b, bp, bi, bip = special.bi_zeros(3)
>>> b
array([-1.17371322, -3.2710933 , -4.83073784])
>>> bp
array([-2.29443968, -4.07315509, -5.51239573])
>>> bi
array([-0.45494438,  0.39652284, -0.36796916])
>>> bip
array([ 0.60195789, -0.76031014,  0.83699101])

rr   r   r)  r*  r,  s     r   r5   r5   m  r-  r   c                 Z   [        U 5      (       a  [        U5      (       d  [        S5      eU S:  a  [        S5      e[        U 5      nX-
  nUS:  a  SnOUnXC-   nU [        U 5      :w  a  [        R
                  " XQ5      u  pgnO[        R                  " XQ5      u  pgnUSUS-    USUS-    4$ )a  Jahnke-Emden Lambda function, Lambdav(x).

This function is defined as [2]_,

.. math:: \Lambda_v(x) = \Gamma(v+1) \frac{J_v(x)}{(x/2)^v},

where :math:`\Gamma` is the gamma function and :math:`J_v` is the
Bessel function of the first kind.

Parameters
----------
v : float
    Order of the Lambda function
x : float
    Value at which to evaluate the function and derivatives

Returns
-------
vl : ndarray
    Values of Lambda_vi(x), for vi=v-int(v), vi=1+v-int(v), ..., vi=v.
dl : ndarray
    Derivatives Lambda_vi'(x), for vi=v-int(v), vi=1+v-int(v), ..., vi=v.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html
.. [2] Jahnke, E. and Emde, F. "Tables of Functions with Formulae and
       Curves" (4th ed.), Dover, 1945
r   r   zargument must be > 0.r   N)r	   r   r   r   r)   lamvlamn)	r   r   r   v0r   v1vmvldls	            r   rP   rP     s    @ QKKHQKK566	A011AA	
B	A	B	U1X]]2)
]]2)
f!:r&AaCz!!r   c                     [        U 5      (       a  [        U5      (       d  [        S5      e[        U 5      nX-
  nUS:  a  SnOUnXC-   n[        R                  " XQ5      u  pgpUSUS-    USUS-    4$ )aj  Parabolic cylinder functions Dv(x) and derivatives.

Parameters
----------
v : float
    Order of the parabolic cylinder function
x : float
    Value at which to evaluate the function and derivatives

Returns
-------
dv : ndarray
    Values of D_vi(x), for vi=v-int(v), vi=1+v-int(v), ..., vi=v.
dp : ndarray
    Derivatives D_vi'(x), for vi=v-int(v), vi=1+v-int(v), ..., vi=v.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 13.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   r   N)r	   r   r   r)   pbdv
r   r   r   r2  r   r3  dvdppdfpdds
             r   rY   rY     s{    0 QKKHQKK566AA	
B	A	B}}R+BCer!t9b"Q$ir   c                     [        U 5      (       a  [        U5      (       d  [        S5      e[        U 5      nX-
  nUS::  a  SnOUnXC-   n[        R                  " XQ5      u  pgpUSUS-    USUS-    4$ )aj  Parabolic cylinder functions Vv(x) and derivatives.

Parameters
----------
v : float
    Order of the parabolic cylinder function
x : float
    Value at which to evaluate the function and derivatives

Returns
-------
dv : ndarray
    Values of V_vi(x), for vi=v-int(v), vi=1+v-int(v), ..., vi=v.
dp : ndarray
    Derivatives V_vi'(x), for vi=v-int(v), vi=1+v-int(v), ..., vi=v.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 13.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   r   N)r	   r   r   r)   pbvvr9  s
             r   rZ   rZ     s{    0 QKKHQKK566AA	
B	Q	B}}R+BCer!t9b"Q$ir   c                    [        U 5      (       a  [        U5      (       d  [        S5      e[        U 5      U :w  a  [        S5      e[        U 5      S::  a  SnOU n[        R
                  " X!5      u  p4USUS-    USUS-    4$ )a8  Parabolic cylinder functions Dn(z) and derivatives.

Parameters
----------
n : int
    Order of the parabolic cylinder function
z : complex
    Value at which to evaluate the function and derivatives

Returns
-------
dv : ndarray
    Values of D_i(z), for i=0, ..., i=n.
dp : ndarray
    Derivatives D_i'(z), for i=0, ..., i=n.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996, chapter 13.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   zn must be an integer.r   N)r	   r   r   r   r)   cpbdn)r   r   r   cpbcpds        r   rX   rX   	  s|    0 QKKHQKK566aA011A!~~b$HCu1:s5BqDz!!r   c                     [        U 5      (       a  [        U 5      U :w  d  U S::  a  [        S5      e[        R                  " U S5      $ )a  Compute nt zeros of the Kelvin function ber.

Parameters
----------
nt : int
    Number of zeros to compute. Must be positive.

Returns
-------
ndarray
    First `nt` zeros of the Kelvin function.

See Also
--------
ber

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   #nt must be positive integer scalar.r   r	   r   r   r)   klvnzor   s    r   r2   r2   @	  :    0 B<<E"IOq>????2q!!r   c                     [        U 5      (       a  [        U 5      U :w  d  U S::  a  [        S5      e[        R                  " U S5      $ )a  Compute nt zeros of the Kelvin function bei.

Parameters
----------
nt : int
    Number of zeros to compute. Must be positive.

Returns
-------
ndarray
    First `nt` zeros of the Kelvin function.

See Also
--------
bei

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   rE  rr   rF  r   s    r   r0   r0   ]	  rH  r   c                     [        U 5      (       a  [        U 5      U :w  d  U S::  a  [        S5      e[        R                  " U S5      $ )a  Compute nt zeros of the Kelvin function ker.

Parameters
----------
nt : int
    Number of zeros to compute. Must be positive.

Returns
-------
ndarray
    First `nt` zeros of the Kelvin function.

See Also
--------
ker

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   rE  rs   rF  r   s    r   rM   rM   z	  rH  r   c                     [        U 5      (       a  [        U 5      U :w  d  U S::  a  [        S5      e[        R                  " U S5      $ )a  Compute nt zeros of the Kelvin function kei.

Parameters
----------
nt : int
    Number of zeros to compute. Must be positive.

Returns
-------
ndarray
    First `nt` zeros of the Kelvin function.

See Also
--------
kei

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   rE  rt   rF  r   s    r   rJ   rJ   	  rH  r   c                     [        U 5      (       a  [        U 5      U :w  d  U S::  a  [        S5      e[        R                  " U S5      $ )a  Compute nt zeros of the derivative of the Kelvin function ber.

Parameters
----------
nt : int
    Number of zeros to compute. Must be positive.

Returns
-------
ndarray
    First `nt` zeros of the derivative of the Kelvin function.

See Also
--------
ber, berp

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html


Examples
--------
Compute the first 5 zeros of the derivative of the Kelvin function.

>>> from scipy.special import berp_zeros
>>> berp_zeros(5)
array([ 6.03871081, 10.51364251, 14.96844542, 19.41757493, 23.86430432])

r   rE  ru   rF  r   s    r   r4   r4   	  s;    B B<<E"IOq>????2q!!r   c                     [        U 5      (       a  [        U 5      U :w  d  U S::  a  [        S5      e[        R                  " U S5      $ )a  Compute nt zeros of the derivative of the Kelvin function bei.

Parameters
----------
nt : int
    Number of zeros to compute. Must be positive.

Returns
-------
ndarray
    First `nt` zeros of the derivative of the Kelvin function.

See Also
--------
bei, beip

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   rE  rv   rF  r   s    r   r1   r1   	  rH  r   c                     [        U 5      (       a  [        U 5      U :w  d  U S::  a  [        S5      e[        R                  " U S5      $ )a  Compute nt zeros of the derivative of the Kelvin function ker.

Parameters
----------
nt : int
    Number of zeros to compute. Must be positive.

Returns
-------
ndarray
    First `nt` zeros of the derivative of the Kelvin function.

See Also
--------
ker, kerp

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   rE  rw   rF  r   s    r   rN   rN   	  rH  r   c                     [        U 5      (       a  [        U 5      U :w  d  U S::  a  [        S5      e[        R                  " U S5      $ )a  Compute nt zeros of the derivative of the Kelvin function kei.

Parameters
----------
nt : int
    Number of zeros to compute. Must be positive.

Returns
-------
ndarray
    First `nt` zeros of the derivative of the Kelvin function.

See Also
--------
kei, keip

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   rE  rx   rF  r   s    r   rK   rK   
  rH  r   c                    [        U 5      (       a  [        U 5      U :w  d  U S::  a  [        S5      e[        R                  " U S5      [        R                  " U S5      [        R                  " U S5      [        R                  " U S5      [        R                  " U S5      [        R                  " U S5      [        R                  " U S	5      [        R                  " U S
5      4$ )a  Compute nt zeros of all Kelvin functions.

Returned in a length-8 tuple of arrays of length nt.  The tuple contains
the arrays of zeros of (ber, bei, ker, kei, ber', bei', ker', kei').

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   rE  r   rr   rs   rt   ru   rv   rw   rx   rF  r   s    r   rL   rL   1
  s     B<<E"IOq>??OOB"OOB"OOB"OOB"OOB"OOB"OOB"OOB"$ $r   c                 :   [        U 5      (       a   [        U5      (       a  [        U5      (       d  [        S5      eU[        U5      :w  d  U [        U 5      :w  a  [        S5      eX-
  S:  a  [        S5      eX-
  S-   n[        R                  " XUS5      S   SU $ )a  Characteristic values for prolate spheroidal wave functions.

Compute a sequence of characteristic values for the prolate
spheroidal wave functions for mode m and n'=m..n and spheroidal
parameter c.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   Modes must be integers.   (Difference between n and m is too large.r   Nr	   r   r   r)   segvr   r   cmaxLs       r   r]   r]   J
  s     QKKHQKKHQKK566	U1X1a=233	c	CDD3q5D==q!$Q'..r   c                 :   [        U 5      (       a   [        U5      (       a  [        U5      (       d  [        S5      eU[        U5      :w  d  U [        U 5      :w  a  [        S5      eX-
  S:  a  [        S5      eX-
  S-   n[        R                  " XUS5      S   SU $ )a  Characteristic values for oblate spheroidal wave functions.

Compute a sequence of characteristic values for the oblate
spheroidal wave functions for mode m and n'=m..n and spheroidal
parameter c.

References
----------
.. [1] Zhang, Shanjie and Jin, Jianming. "Computation of Special
       Functions", John Wiley and Sons, 1996.
       https://people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html

r   rR  rS  rT  r   r   NrU  rW  s       r   rW   rW   b
  s     QKKHQKKHQKK566	U1X1a=233	c	CDD3q5D==q"%a($//r   )exact
repetitionc                   U(       a  [        X-   S-
  XS9$ U(       aP  [        U 5      U :X  a  [        U5      U:X  a  [        X5      $ Sn[        R                  " U[
        SS9  [        X5      $ [        U5      [        U 5      pX:*  U S:  -  US:  -  n[        X5      n[        U[        R                  5      (       a  SXe) '   U$ U(       d  [        R                  " S5      nU$ )a  The number of combinations of N things taken k at a time.

This is often expressed as "N choose k".

Parameters
----------
N : int, ndarray
    Number of things.
k : int, ndarray
    Number of elements taken.
exact : bool, optional
    For integers, if `exact` is False, then floating point precision is
    used, otherwise the result is computed exactly.

    .. deprecated:: 1.14.0
        ``exact=True`` is deprecated for non-integer `N` and `k` and will raise an
        error in SciPy 1.16.0
repetition : bool, optional
    If `repetition` is True, then the number of combinations with
    repetition is computed.

Returns
-------
val : int, float, ndarray
    The total number of combinations.

See Also
--------
binom : Binomial coefficient considered as a function of two real
        variables.

Notes
-----
- Array arguments accepted only for exact=False case.
- If N < 0, or k < 0, then 0 is returned.
- If k > N and repetition=False, then 0 is returned.

Examples
--------
>>> import numpy as np
>>> from scipy.special import comb
>>> k = np.array([3, 4])
>>> n = np.array([10, 10])
>>> comb(n, k, exact=False)
array([ 120.,  210.])
>>> comb(10, 3, exact=True)
120
>>> comb(10, 3, exact=True, repetition=True)
220

r   r[  z^`exact=True` is deprecated for non-integer `N` and `k` and will raise an error in SciPy 1.16.0rr   r   r   )r7   r   r*   r   r   DeprecationWarningr   r"   
isinstancer   ndarrayr   )Nr   r[  r\  msgcondvalss          r   r7   r7   z
  s    h AEAIq..q6Q;3q6Q;Q?"*c-!<Azqz71:116"a1f-Q{dBJJ''DK  ::a=Dr   c                    U(       a  [         R                  " U 5      S   n [         R                  " U5      S   n[        U 5      (       a  [        U5      (       d  [        S5      e[	        U 5      [	        U5      pCX0:H  =(       a    XA:H  (       + nX:  d  U S:  d  US:  a$  U(       a  Sn[
        R                  " U[        SS9  gU(       a  [        S5      eSn[        X4-
  S-   US-   5       H  nXx-  nM	     U$ [        U5      [        U 5      pX:*  U S:  -  US:  -  n	[        X-
  S-   U5      n
[        U
[         R                  5      (       a  SX) '   U
$ U	(       d  [         R                  " S5      n
U
$ )	aj  Permutations of N things taken k at a time, i.e., k-permutations of N.

It's also known as "partial permutations".

Parameters
----------
N : int, ndarray
    Number of things.
k : int, ndarray
    Number of elements taken.
exact : bool, optional
    If ``True``, calculate the answer exactly using long integer arithmetic (`N`
    and `k` must be scalar integers). If ``False``, a floating point approximation
    is calculated (more rapidly) using `poch`. Default is ``False``.

Returns
-------
val : int, ndarray
    The number of k-permutations of N.

Notes
-----
- Array arguments accepted only for exact=False case.
- If k > N, N < 0, or k < 0, then a 0 is returned.

Examples
--------
>>> import numpy as np
>>> from scipy.special import perm
>>> k = np.array([3, 4])
>>> n = np.array([10, 10])
>>> perm(n, k)
array([  720.,  5040.])
>>> perm(10, 3, exact=True)
720

 z6`N` and `k` must scalar integers be with `exact=True`.r   z`Non-integer `N` and `k` with `exact=True` is deprecated and will raise an error in SciPy 1.16.0.rr   r   z;Non-integer `N` and `k` with `exact=True` is not supported.r   )r   squeezer	   r   r   r   r   r_  r   r   r!   r`  ra  r   )rb  r   r[  floor_Nfloor_knon_integralrc  valr   rd  re  s              r   r[   r[   
  sM   L JJqM"JJqM"UVVq63q6#L9W\:Eq1u!a%>c#5!D * + +w(1,gk:AHC ;
qz71:116"a1f-AEAIq!dBJJ''DK  ::a=Dr   c                     U S:X  a  US:X  a  [         R                  " U5      $ X-   U:  a2  X-   S-  nUS:  a
  X3U-
  U-  -
  n[        XU5      [        X2-   X5      -  $ X-   U:X  a  X-  $ U$ )a{  
Product of a range of numbers spaced k apart (from hi).

For k=1, this returns the product of
lo * (lo+1) * (lo+2) * ... * (hi-2) * (hi-1) * hi
= hi! / (lo-1)!

For k>1, it correspond to taking only every k'th number when
counting down from hi - e.g. 18!!!! = _range_prod(1, 18, 4).

Breaks into smaller products first for speed:
_range_prod(2, 9) = ((2*3)*(4*5))*((6*7)*(8*9))
r   rr   )mathr<   _range_prod)lohir   mids       r   ro  ro    s{     
Qw16~~b!!	v{w1nq5(a(C2A&SWb)DDD	2w	r   c           	      $   [         R                  " U 5      nU[         R                  " U5      )    n[         R                  " U 5      R                  5       (       a  [        nOmU[
        R                  5       ;   aO  US   [
        U   :  a  [        nO>US   [        U   :  a  [         R                  nO[         R                  " S5      nO[        n[         R                  " XS9nX"S:     nSX@S:  '   SX@S:  '   [        SU5       H  nUS:  a
  X"U-  U:H     OUnUR                  (       d  M(  [        S[        US   5      US9nXtXS   :H  '   [        [!        U5      S-
  5       H7  nXh   n	XhS-      n
U[        [        U	S-   5      [        U
5      US9-  nXtX
:H  '   M9     M     [         R                  " U 5      R                  5       (       aF  UR#                  [         R$                  5      n[         R&                  U[         R                  " U 5      '   U$ )a~  
Exact computation of factorial for an array.

The factorials are computed in incremental fashion, by taking
the sorted unique values of n and multiplying the intervening
numbers between the different unique values.

In other words, the factorial for the largest input is only
computed once, with each other result computed in the process.

k > 1 corresponds to the multifactorial.
r   longr   r   rr   r   r   )r   uniqueisnananyr   _FACTORIALK_LIMITS_64BITSkeysobject_FACTORIALK_LIMITS_32BITSint64r   r   r   sizero  r   lenr  r   r   )r   r   undtr   laneulrl  r   prevcurrents              r   _factorialx_array_exactr  )  s    
1B 
RXXb\M	B 
xx{	
',,.	.b6-a00BV/22B&!B 
--
$C 
FBCAJCAJ
 a%&URaD !777 aRUq1C!U
O3r7Q;' uU) {3tax=#g,!DD$'AL! ( $ 
xx{jj$66BHHQKJr   c           
          US:X  a
  [        XUS9$ [        U R                  5      n[        U[        R
                  " U 5      [        R                  5        U S:  n[        X@5      n[        X4[        XQUS95        U$ )z{
Calculate approximation to multifactorial for array n and integer k.

Ensure that values aren't calculated unnecessarily.
r   r   extendr   )_factorialx_approx_corer   r   r   r   rw  r   r   )r   r   r  resultrd  n_to_computes         r   _factorialx_array_approxr  n  sj     &qf== 177^F	&"((1+rvv&FD4#L	&/&QRMr   c                 2   [        U S-   5      n[        U[        R                  5      (       a2  [	        U R
                  S5      (       d  [        R                  XS:H  '   U$ [        R                  " U5      (       a  U S:X  a  [        R                  " S5      nU$ )zG
returns gamma(n+1), though with NaN at -1 instead of inf, c.f. #21827
r   rX  r   r   )	r   r`  r   ra  _is_subdtyper   r   isinfr   )re  ress     r   _gamma1pr    ss     q/C #rzz""DJJ,, ffC
O J 
#42:jjJr   c           
      \   US:X  aB  [        U 5      n[        U [        R                  5      (       a  [        R                  " U5      nU$ US:X  a  [        [        U5      S5      (       d  US:  a  [        OSn[        R                  " 5          [        R                  " S[        5        [        R                  " XU-  US9[        X-  5      -  nU[        SU-  S-   5      [        R                  " USU-  US9-  -  nSSS5        [        U [        R                  5      (       a  [        R                  " W5      nW$ X-  n[        U [        R                  5      (       dK  [        R                  " XU-
  U-  5      [        X-  S-   5      -  [        XQ-  S-   5      -  [        US5      -  $ [        R                  " XU-  5      [        X-  S-   5      -  nS n[        R                   " U5       H*  nUS:X  a  M  X5U:H  ==   U" U[#        U5      5      -  ss'   M,     U$ ! , (       d  f       GN'= f)	zA
Core approximation to multifactorial for array n and integer k.
r   r   rX  r   Nignorer   c                 ^    [         R                  " X* U -  5      [        X-  S-   5      -  U-  $ )Nr   )r   powerr   )r   rs     r   corr%_factorialx_approx_core.<locals>.corr  s+    288ArAv.quqy1AAAEEr   )r  r`  r   ra  arrayr  r  r   r   catch_warningssimplefilterr   r  r   r   r  rv  r   )r   r   r  r  p_dtypen_mod_kr  r  s           r   r  r    s    	Av !a$$XXf%F*47C88AE'$$&!!(N;XXaQg6!%HFfQUQY'"((1a!e7*KKKF ' a$$XXf%F eG a$$HHQW)*AEAI!&w{Q!78'1o	
 XXaQ%	"22F FYYw6!|QA/	  
 MA '&s   A0H
H+c                 *  ^  [        U[        5      (       a  UOU/n[        R                  [        R                  [        R
                  [        R                  S.nU Vs/ s H  o2R                  X35      PM     nn[        U 4S jU 5       5      $ s  snf )a  
Shorthand for calculating whether dtype is subtype of some dtypes.

Also allows specifying a list instead of just a single dtype.

Additionaly, the most important supertypes from
    https://numpy.org/doc/stable/reference/arrays.scalars.html
can optionally be specified using abbreviations as follows:
    "i": np.integer
    "f": np.floating
    "c": np.complexfloating
    "n": np.number (contains the other three)
)r   frX  r   c              3   R   >#    U  H  n[         R                  " TU5      v   M     g 7f)N)r   r   ).0r  r   s     r   	<genexpr>_is_subdtype.<locals>.<genexpr>  s     9&Br}}UB''&s   $')	r`  listr   integerfloatingcomplexfloatingnumbergetrx  )r   dtypesmappingr   s   `   r   r  r    st     "&$//VfXF ZZ[[YY	G *00Akk!F09&999 1s   Bc           	      n   US;  a  [        SU 35      eU(       a  US:X  a  [        S5      eSnU S:X  a  US-  nOUS-  nS	nS
nU S:X  a  US-  nOU S:X  a  US-  n[        [        U5      / SQ5      (       d#  [        UR                  SU [        U5      S95      e[        [        U5      SS/5      (       a  US:w  a  [        U5      eUS:X  a  US:  a  SU 3n[        U5      eUS:X  a  [        S5      eU S:X  a  SOSS/n	[        R
                  " U5      S:X  Ga  [        U[        R                  5      (       Gd  [        [        U5      SSS[        S5      /5      (       d#  [        UR                  SU [        U5      S95      e[        [        U5      U	5      (       a  US:w  a  [        U5      eUb  [        R                  " U5      (       aT  US:H  =(       a    [        [        U5      S5      n
U
(       a  [        R                  " S5      $ [        R                  " S5      $ US:X  a%  US:  a  U(       a  S$ [        R                  " S5      $ US;   a  U(       a  S$ [        R                  " S5      $ U(       a$  [        [        U5      S5      (       a
  [        SXS9$ U(       a!  [        UR                  [        U5      S 95      e[        XUS!9$ [        U5      n[        UR                  / SQ5      (       d#  [        UR                  SXR                  S95      e[        UR                  U	5      (       a  US:w  a  [        U5      eU(       a>  [        UR                  S/5      (       a"  [        UR                  UR                  S 95      eUR                  S:X  a  U$ U(       a	  [!        XS9$ [#        XUS!9$ )"z?
Shared implementation for factorial, factorial2 & factorialk.
)zeror   z@argument `extend` must be either 'zero' or 'complex', received: r   z9Incompatible options: `exact=True` and `extend='complex'`z6Unsupported data type for {vname} in {fname}: {dtype}
r<   zxPermitted data types are integers and floating point numbers, as well as complex numbers if `extend='complex' is passed.zxPermitted data types are integers, as well as floating point numbers and complex numbers if `extend='complex' is passed.zA`exact=True` only supports integers, cannot use data type {dtype}zIn order to use non-integer arguments, you must opt into this by passing `extend='complex'`. Note that this changes the result for all negative arguments (which by default return 0).r=   zm Additionally, it will rescale the values of the double factorial at even integers by a factor of sqrt(2/pi).r>   z^ Additionally, it will perturb the values of the multifactorial at most positive integers `n`.)r   r  rX  z`k`)vnamefnamer   r  rX  r  r   z=For `extend='zero'`, k must be a positive integer, received: r   zParameter k cannot be zero!r   Nz`n`znan+nanjr   >   r   r   ru  r   r  )r   r  r  formatr   r  r`  ra  rw  r  r   ro  r  r   r   r~  r  r  )r  r   r   r[  r  	msg_unsupmsg_exact_not_possiblemsg_needs_complexrc  types_requiring_complex
complexifys              r   _factorialx_wrapperr    s    ((NvhW
 	
 9$TUU 	B  I	
	
 	J	
	
 	L 	1   W 	X	,	 O 	P DG_55Y--EdSTg-VWW$q'C:..6Y3F.//VAQRSQTUCS/!!V:;; &+k%9cSz 
wwqzQz!RZZ88DGc3T$Z%@AAY--EdSTg-VWW$q'#:;;)@S.//Y"((1++ I-M<Q3MJ0:2==,Q

5@QQv!a%102::a=0&[102::a=0|DGS11q!))3::a:IJJ&qf== 	
A11))U'')RSS	agg6	7	7Fi<O*++	<#///66QWW6EFFvv{	&q..#A6::r   c                     [        SU SXS9$ )a  
The factorial of a number or array of numbers.

The factorial of non-negative integer `n` is the product of all
positive integers less than or equal to `n`::

    n! = n * (n - 1) * (n - 2) * ... * 1

Parameters
----------
n : int or float or complex (or array_like thereof)
    Input values for ``n!``. Complex values require ``extend='complex'``.
    By default, the return value for ``n < 0`` is 0.
exact : bool, optional
    If ``exact`` is set to True, calculate the answer exactly using
    integer arithmetic, otherwise approximate using the gamma function
    (faster, but yields floats instead of integers).
    Default is False.
extend : string, optional
    One of ``'zero'`` or ``'complex'``; this determines how values ``n<0``
    are handled - by default they are 0, but it is possible to opt into the
    complex extension of the factorial (see below).

Returns
-------
nf : int or float or complex or ndarray
    Factorial of ``n``, as integer, float or complex (depending on ``exact``
    and ``extend``). Array inputs are returned as arrays.

Notes
-----
For arrays with ``exact=True``, the factorial is computed only once, for
the largest input, with each other result computed in the process.
The output dtype is increased to ``int64`` or ``object`` if necessary.

With ``exact=False`` the factorial is approximated using the gamma
function (which is also the definition of the complex extension):

.. math:: n! = \Gamma(n+1)

Examples
--------
>>> import numpy as np
>>> from scipy.special import factorial
>>> arr = np.array([3, 4, 5])
>>> factorial(arr, exact=False)
array([   6.,   24.,  120.])
>>> factorial(arr, exact=True)
array([  6,  24, 120])
>>> factorial(5, exact=True)
120

r<   r   r   r[  r  r  r   r[  r  s      r   r<   r<   @  s    l {A%OOr   c                     [        SU SXS9$ )a  Double factorial.

This is the factorial with every second value skipped.  E.g., ``7!! = 7 * 5
* 3 * 1``.  It can be approximated numerically as::

  n!! = 2 ** (n / 2) * gamma(n / 2 + 1) * sqrt(2 / pi)  n odd
      = 2 ** (n / 2) * gamma(n / 2 + 1)                 n even
      = 2 ** (n / 2) * (n / 2)!                         n even

The formula for odd ``n`` is the basis for the complex extension.

Parameters
----------
n : int or float or complex (or array_like thereof)
    Input values for ``n!!``. Non-integer values require ``extend='complex'``.
    By default, the return value for ``n < 0`` is 0.
exact : bool, optional
    If ``exact`` is set to True, calculate the answer exactly using
    integer arithmetic, otherwise use above approximation (faster,
    but yields floats instead of integers).
    Default is False.
extend : string, optional
    One of ``'zero'`` or ``'complex'``; this determines how values ``n<0``
    are handled - by default they are 0, but it is possible to opt into the
    complex extension of the double factorial. This also enables passing
    complex values to ``n``.

    .. warning::

       Using the ``'complex'`` extension also changes the values of the
       double factorial for even integers, reducing them by a factor of
       ``sqrt(2/pi) ~= 0.79``, see [1].

Returns
-------
nf : int or float or complex or ndarray
    Double factorial of ``n``, as integer, float or complex (depending on
    ``exact`` and ``extend``). Array inputs are returned as arrays.

Examples
--------
>>> from scipy.special import factorial2
>>> factorial2(7, exact=False)
array(105.00000000000001)
>>> factorial2(7, exact=True)
105

References
----------
.. [1] Complex extension to double factorial
        https://en.wikipedia.org/wiki/Double_factorial#Complex_arguments
r=   rr   r  r  r  s      r   r=   r=   y  s    j |Q!5PPr   c                     [        SXX#S9$ )a  Multifactorial of n of order k, n(!!...!).

This is the multifactorial of n skipping k values.  For example,

  factorialk(17, 4) = 17!!!! = 17 * 13 * 9 * 5 * 1

In particular, for any integer ``n``, we have

  factorialk(n, 1) = factorial(n)

  factorialk(n, 2) = factorial2(n)

Parameters
----------
n : int or float or complex (or array_like thereof)
    Input values for multifactorial. Non-integer values require
    ``extend='complex'``. By default, the return value for ``n < 0`` is 0.
n : int or float or complex (or array_like thereof)
    Order of multifactorial. Non-integer values require ``extend='complex'``.
exact : bool, optional
    If ``exact`` is set to True, calculate the answer exactly using
    integer arithmetic, otherwise use an approximation (faster,
    but yields floats instead of integers)
    Default is False.
extend : string, optional
    One of ``'zero'`` or ``'complex'``; this determines how values ``n<0`` are
    handled - by default they are 0, but it is possible to opt into the complex
    extension of the multifactorial. This enables passing complex values,
    not only to ``n`` but also to ``k``.

    .. warning::

       Using the ``'complex'`` extension also changes the values of the
       multifactorial at integers ``n != 1 (mod k)`` by a factor depending
       on both ``k`` and ``n % k``, see below or [1].

Returns
-------
nf : int or float or complex or ndarray
    Multifactorial (order ``k``) of ``n``, as integer, float or complex (depending
    on ``exact`` and ``extend``). Array inputs are returned as arrays.

Examples
--------
>>> from scipy.special import factorialk
>>> factorialk(5, k=1, exact=True)
120
>>> factorialk(5, k=3, exact=True)
10
>>> factorialk([5, 7, 9], k=3, exact=True)
array([ 10,  28, 162])
>>> factorialk([5, 7, 9], k=3, exact=False)
array([ 10.,  28., 162.])

Notes
-----
While less straight-forward than for the double-factorial, it's possible to
calculate a general approximation formula of n!(k) by studying ``n`` for a given
remainder ``r < k`` (thus ``n = m * k + r``, resp. ``r = n % k``), which can be
put together into something valid for all integer values ``n >= 0`` & ``k > 0``::

  n!(k) = k ** ((n - r)/k) * gamma(n/k + 1) / gamma(r/k + 1) * max(r, 1)

This is the basis of the approximation when ``exact=False``.

In principle, any fixed choice of ``r`` (ignoring its relation ``r = n%k``
to ``n``) would provide a suitable analytic continuation from integer ``n``
to complex ``z`` (not only satisfying the functional equation but also
being logarithmically convex, c.f. Bohr-Mollerup theorem) -- in fact, the
choice of ``r`` above only changes the function by a constant factor. The
final constraint that determines the canonical continuation is ``f(1) = 1``,
which forces ``r = 1`` (see also [1]).::

  z!(k) = k ** ((z - 1)/k) * gamma(z/k + 1) / gamma(1/k + 1)

References
----------
.. [1] Complex extension to multifactorial
        https://en.wikipedia.org/wiki/Double_factorial#Alternative_extension_of_the_multifactorial
r>   r  r  )r   r   r[  r  s       r   r>   r>     s    b |Q5PPr   r^  c                Z   [         R                  " U 5      =(       a    [         R                  " U5      n[        U 5      [        U5      p[         R                  " U R                  [         R
                  5      (       d  [        S5      e[         R                  " UR                  [         R
                  5      (       d  [        S5      eU(       d2  [        U R                  [        5      UR                  [        5      5      $ [        [        [         R                  " X/S/5       VVs/ s H'  u  pEUR                  S5      UR                  S5      4PM)     snn5      5      n[        U5        [        [         5      nS H  nSXx'   M	     S/ SQpU(       a  [#        U5      u  pEUS:  d  XT:  d  US::  a  M'  XT:X  d  US:X  a  SXtU4'   M:  XI:w  ab  XI-
  nUS:  aO  U
R%                  S5        ['        [)        U
5      S-
  SS	5       H  nX   U-  XS-
     -   X'   M     US-  nUS:  a  MO  X   XtU4'   OX   XtU4'   XJpU(       a  M  U(       a  [*        [*        [*        /O[        [        [        /n[         R                  " XS
/SS/S/S/SS//US9nU   UR,                  (       dE  U[!        US   5      [!        US   5      4   US'   UR/                  5         UR,                  (       d  ME  UR0                  S   nU(       a  UR                  S5      nS
S
S
5        U$ s  snnf ! , (       d  f       W$ = f)a  Generate Stirling number(s) of the second kind.

Stirling numbers of the second kind count the number of ways to
partition a set with N elements into K non-empty subsets.

The values this function returns are calculated using a dynamic
program which avoids redundant computation across the subproblems
in the solution. For array-like input, this implementation also
avoids redundant computation across the different Stirling number
calculations.

The numbers are sometimes denoted

.. math::

    {N \brace{K}}

see [1]_ for details. This is often expressed-verbally-as
"N subset K".

Parameters
----------
N : int, ndarray
    Number of things.
K : int, ndarray
    Number of non-empty subsets taken.
exact : bool, optional
    Uses dynamic programming (DP) with floating point
    numbers for smaller arrays and uses a second order approximation due to
    Temme for larger entries  of `N` and `K` that allows trading speed for
    accuracy. See [2]_ for a description. Temme approximation is used for
    values ``n>50``. The max error from the DP has max relative error
    ``4.5*10^-16`` for ``n<=50`` and the max error from the Temme approximation
    has max relative error ``5*10^-5`` for ``51 <= n < 70`` and
    ``9*10^-6`` for ``70 <= n < 101``. Note that these max relative errors will
    decrease further as `n` increases.

Returns
-------
val : int, float, ndarray
    The number of partitions.

See Also
--------
comb : The number of combinations of N things taken k at a time.

Notes
-----
- If N < 0, or K < 0, then 0 is returned.
- If K > N, then 0 is returned.

The output type will always be `int` or ndarray of `object`.
The input must contain either numpy or python integers otherwise a
TypeError is raised.

References
----------
.. [1] R. L. Graham, D. E. Knuth and O. Patashnik, "Concrete
    Mathematics: A Foundation for Computer Science," Addison-Wesley
    Publishing Company, Boston, 1989. Chapter 6, page 258.

.. [2] Temme, Nico M. "Asymptotic estimates of Stirling numbers."
    Studies in Applied Mathematics 89.3 (1993): 233-243.

Examples
--------
>>> import numpy as np
>>> from scipy.special import stirling2
>>> k = np.array([3, -1, 3])
>>> n = np.array([10, 10, 9])
>>> stirling2(n, k)
array([9330.0, 0.0, 3025.0])

z'Argument `N` must contain only integersz'Argument `K` must contain only integersrefs_okr   ))r   r   )r   r   )rr   r   )rr   rr   r   rr   )r   r   r   r   Nbufferedreadonly	writeonlyallocate)	op_dtypes)r   r	   r   r   r   r  	TypeErrorr#   r  r   r  setnditertaker   r   r   r   appendr   r  r{  finishediternextoperands)rb  Kr[  output_is_scalarr   r   nk_pairs	snsk_valspairn_oldn_row	num_itersj	out_typesitoutputs                   r   ra   ra     s   V {{1~8"++a.1:wqzq=="**--ABB=="**--ABB "!((5/188E?CCA6I;797 ffQi#79 	:H HC I0	 1 i5
x q5AEQ!VVqAv !I!fZ	Ia-Qs5z!|Q3A$xzEA#J6EH 4Q	 a- !&I!f %I!fu% (& -2(ue7LI		
t	Y

|k:%>?	
B 
++s2a5z3r!u:67BqEKKM +++ Q[[^F 
 M[9J 
 Ms   &.LAL$'L
L*c                 b    Uc  [         R                  " X5      $ [         R                  " XU5      $ )aA  
Riemann or Hurwitz zeta function.

Parameters
----------
x : array_like of float or complex.
    Input data
q : array_like of float, optional
    Input data, must be real.  Defaults to Riemann zeta. When `q` is
    ``None``, complex inputs `x` are supported. If `q` is not ``None``,
    then currently only real inputs `x` with ``x >= 1`` are supported,
    even when ``q = 1.0`` (corresponding to the Riemann zeta function).

out : ndarray, optional
    Output array for the computed values.

Returns
-------
out : array_like
    Values of zeta(x).

See Also
--------
zetac

Notes
-----
The two-argument version is the Hurwitz zeta function

.. math::

    \zeta(x, q) = \sum_{k=0}^{\infty} \frac{1}{(k + q)^x};

see [dlmf]_ for details. The Riemann zeta function corresponds to
the case when ``q = 1``.

For complex inputs with ``q = None``, points with
``abs(z.imag) > 1e9`` and ``0 <= abs(z.real) < 2.5`` are currently not
supported due to slow convergence causing excessive runtime.

References
----------
.. [dlmf] NIST, Digital Library of Mathematical Functions,
    https://dlmf.nist.gov/25.11#i

Examples
--------
>>> import numpy as np
>>> from scipy.special import zeta, polygamma, factorial

Some specific values:

>>> zeta(2), np.pi**2/6
(1.6449340668482266, 1.6449340668482264)

>>> zeta(4), np.pi**4/90
(1.0823232337111381, 1.082323233711138)

First nontrivial zero:

>>> zeta(0.5 + 14.134725141734695j)
0 + 0j

Relation to the `polygamma` function:

>>> m = 3
>>> x = 1.25
>>> polygamma(m, x)
array(2.782144009188397)
>>> (-1)**(m+1) * factorial(m) * zeta(m+1, x)
2.7821440091883969

)r   _riemann_zeta_zeta)r   r   r   s      r   rh   rh     s,    T 	y$$Q,,}}Q3''r   c                 2    [         R                  " SU 40 UD6$ )a`  
Compute the softplus function element-wise.

The softplus function is defined as: ``softplus(x) = log(1 + exp(x))``.
It is a smooth approximation of the rectifier function (ReLU).

Parameters
----------
x : array_like
    Input value.
**kwargs
    For other keyword-only arguments, see the
    `ufunc docs <https://numpy.org/doc/stable/reference/ufuncs.html>`_.

Returns
-------
softplus : ndarray
    Logarithm of ``exp(0) + exp(x)``.

Examples
--------
>>> from scipy import special

>>> special.softplus(0)
0.6931471805599453

>>> special.softplus([-1, 0, 1])
array([0.31326169, 0.69314718, 1.31326169])
r   )r   	logaddexp)r   kwargss     r   r`   r`     s    < <<1'''r   )F)r   )g        )rs   )Fr  )NN)~numpyr   rn  r   collectionsr   heapqr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r    r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   _gufuncsr$   r%   r&   r'   _input_validationr(   r)   _combr*   _multiufuncsr+   r,   scipy._lib.deprecationr-   __all____DEPRECATION_MSG_1_15ry  r|  r9   rF   rH   rE   rG   re   rf   rb   rc   rd   r   rI   rg   rO   rD   rB   rC   r^   r_   r:   r@   rA   r?   r/   r8   r\   rU   rV   r  rQ   r6   rS   r3   r;   rR   rT   r.   r5   rP   rY   rZ   rX   r2   r0   rM   rJ   r4   r1   rN   rK   rL   r]   rW   r7   r[   ro  r  r  r  r  r  r  r<   r=   r>   ra   rh   r`   rg  r   r   <module>r     s  
    # "O O O O * * * * 0 / 2  + .=BF  !#rbRB "rbS:  !#rbRB "rbR9 cL&.RR%j< ~< ~7 t@ FI%XO%dF%RK5\O5dN>bN4bB:JB:J5#p6#r%P!2!286-: ('V9x8v #**63IJKL LL^ #**74JKLR MRj<1~0,f1'h #**52BCD* E*,$"N0#f0#f/"d" J" J!"H":":":":#"L":":":$2/000 % HVCN:BJ(0f:4_;D6Pr5QpQQh # EPM(`(r   