L iִ ddlZddlZddlZddlmZddlmZmZddlm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZmZddlmZddlmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&ddl'm(Z(m)Z)m*Z*m+Z+dd l,m-Z-dd lm.Z.dd l/m0Z0dd l1m2Z2m3Z3dd l4m5Z5gdZ6dZ7dddddddddd Z8ddddddd d!d"d Z9d#Z:d$Z;d%Zd(Z?d)Z@dmd+ZAdmd,ZBdmd-ZCd.ZDdnd/ZEdnd0ZFdnd1ZGdnd2ZHdnd3ZIdnd4ZJd5ZKd6ZLd7ZMd8ZNd9ZOd:ZPdod;ZQeZRd<ZSd=ZTd>ZUe5e7jd?d@dAZWe5e7jdBd@dpdCZXdDZYdEZZdFZ[e5e7jdGdHdIZ\dJZ]dKZ^dLZ_dMZ`dNZadOZbdPZcdQZddRZedSZfdTZgdUZhdVZidWZjdXZkdYZldZZmd[Znd*d*d\d]Zodmd^Zpdnd_Zqdnd`ZrdaZsdbZtdcZuddZvdeZwdqdfZxdqdgZydqdhZzd*didjZ{drdkZ|dlZ}y)sN) defaultdict)heapifyheappop)piasarrayfloorisscalarsqrtwheresinplace issubdtypeextractinexactnanzerossinc)_ufuncs) mathieu_a mathieu_bivjvgammargammapsihankel1hankel2yvkvpochbinom_stirling2_inexact)_lqn_lqmn_rctj_rcty)_nonneg_int_or_fail)_specfun) _comb_int)assoc_legendre_p_alllegendre_p_all) _deprecated)<ai_zerosassoc_laguerre bei_zeros beip_zeros ber_zeros bernoulli berp_zerosbi_zerosclpmncombdigammadiric erf_zeroseuler factorial factorial2 factorialk fresnel_zerosfresnelc_zerosfresnels_zerosh1vph2vpivpjn_zeros jnjnp_zeros jnp_zeros jnyn_zerosjvp kei_zeros keip_zeros kelvin_zeros ker_zeros kerp_zeroskvplmbdalpmnlpnlqmnlqnmathieu_even_coefmathieu_odd_coef obl_cv_seqpbdn_seqpbdv_seqpbvv_seqperm polygamma pro_cv_seq riccati_jn riccati_ynrsoftplus stirling2y0_zerosy1_zeros y1p_zerosyn_zeros ynp_zerosyvpzetaz`scipy.special.{}` is deprecated as of SciPy 1.15.0 and will be removed in SciPy 1.17.0. Please use `scipy.special.{}` instead.!,6AJT]e) r %+/38c dt|t|}}t|||z z}t|||z z}t|jtr |j}nt}t |j |}tj|jdkrd}n'tj|jdkrd}nd}|dk|t|k7z}t||t|dz }t|}d|z t||kz}t||}t||} |t z } t||t#d tj$| | dz zd|z d|z z} t| |}t| |} t| |} t|| t| |z| | zz |S) a#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]r2gMbP?rrrr)rrdtyperfloatrshapenpfinfoepsrr rr absrrpowround) xnytypeyminvalmask1denommask2xsubnsubzsubmaskdsubs Z/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/special/_basic.pyr9r9hsB 1:wqzqAQqS AQqS A!''7# agguA xxU" %  u $ !VU1X &E !UC AA FE uWUf, -E 5! D 5! D "9D !UCBHHTNDF345 eG% D 4 D 4 D 4 D !T3tDy>49-. Hct|rt||k7s|dkDr tdt|}t j |\}}}}|d|dz|d||d||d|fS)aCompute 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 izNumber must be integer <= 1200.rN)r r ValueErrorintr)jdzo)ntrmtzos rrFrFsrD B>> 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.zArguments must be integers.rznt > 0)r rrr)jyzorrrs rrHrHsfX RLXa[566 aA 59?677 a"" ==Q $$rc t||dS)a/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() rrHrs rrErELx a Q rc t||dS)aCompute 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() rrrs rrGrGrrc t||dS)a7Compute 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() rrrrs rreresn a Q rc t||dS)aCompute 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() rsrrs rrfrfs@ a Q rFct|rt||k7s|dkr tdd}| }tj|||S)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 rrr)cyzorcomplexkfkcs rrbrbGsGJ B>> 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])) rrrrrs rrcrcsGV B>> 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() rrrrrrs rrdrdsGD B>> 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() rrr)r(rrrrrs rrIrI<s6N As#AAv!Qx#Aq!R44rcbt|d}|dk(r t||St|||tdS)aCompute 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() rrr)r(rrrs rrgrgs6V As#AAv!Qx#Aq!R44rcnt|d}|dk(r t||Sd|zt|||tdzS)aCompute 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() rrrr)r(r rrs rrOrOs@T As#AAv!QxQw-aAr1===rcbt|d}|dk(r t||St|||tdS)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() rrr)r(rrrs rrDrD-s6T As#AAv!Qx#Aq!R33rcbt|d}|dk(r t||St|||tdS)auCompute 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]) rrr)r(rrrs rrBrB~7| As#AAvq!}#Aq!Wb99rcbt|d}|dk(r t||St|||tdS)axCompute 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]) rrr)r(rrrs rrCrCrrc.t|r t|s tdt|dd}|dk(rd}n|}tj|dzftj }tj |}t|||f|d |dz|d |dzfS) aCompute 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.rFstrictrrroutN)r rr(remptyfloat64 empty_liker&)rrn1jnjnps rr^r^sR QKHQK566As51A Q   26)2:: .B -- C !"c f!:s6QqS{ ""rc.t|r t|s tdt|dd}|dk(rd}n|}tj|dzftj }tj |}t|||f|d |dz|d |dzfS) 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 rrFrrrrrN)r rr(rrrrr')rrrynynps rr_r_@sT QKHQK566As51A Q   26)2:: .B -- C !"c f!:s6QqS{ ""rc~t||k7s|dks t|s tdtj|S)aCompute 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.)rr rr)cerzors rr:r:ys7F b RR1WXb\DEE >>" rct||k7s|dks t|s tdtjd|S)aCompute 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 rrrrr rr)fcszors rr@r@8( b RR1WXb\DEE >>!R  rct||k7s|dks t|s tdtjd|S)aCompute 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 rrrrrrs rrArArrct||k7s|dks t|s tdtjd|tjd|fS)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 rrrrrrrs rr?r?sH, b RR1WXb\DEE >>!R (..B"7 77rc0tj|||S)aCompute 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)``. )reval_genlaguerre)rrks rr/r/s4  # #Aq! ,,rct|t|}}d|dzzt|dzzt|dz|z}t|dk(t ||S)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) grrr)rrrhr r)rrfac2s rr\r\sVL 1:wqzqA AaC=53< '$qsA, 6D aQ &&rc@t|r t|s td|dkr td|t|k7s|dkr td|dkr*ddt|zzd|zz d t|z|zz}n)d d t|zzd |zz d t|z|zz}t |d|zz}|dkDrt j dtdd}t t|}|dzrd}t||}tj||||}|d|S)aFourier 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.rq >=0zm must be an integer >=0.r@ L@fffff`@̬V@1@@T㥛 ?笭_vOn?? Too many predicted coefficients.rr stacklevelN) r rrr rwarningswarnRuntimeWarningrr)fcoef)rqqmkmkdafcs rrUrU9sH QKHQK344 A!! U1X 1q5455 Q 4Q< %' )DaLN : CQK $q& (5a=? : R#a%ZB Cx 8.UVW B E!H A1u !QA Aq! $B cr7Nrc@t|r t|s td|dkr td|t|k7s|dkr td|dkr*ddt|zzd|zz d t|z|zz}n)d d t|zzd |zz d t|z|zz}t |d|zz}|dkDrt j dtdd}t t|}|dzrd}t||}tj||||}|d|S)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 rrrzm must be an integer > 0rrrrrrrrrrrrrrrrtrsN) r rrr rrrrrr)r)rrrrrbrs rrVrVusF QKHQK344 A!! U1X 16344 Q 4Q< %' )DaLN : CQK $q& (5a=? : R#a%ZB Cx 8.UVW B E!H A1u !QA Aq! $B cr7NrrQr+cxt|dd}t||kDr tdtj|r tdt |t |}}tj tj|dkdd}t|t|||d \}}tj|d d}tj|d d}|d k\r|d |dz}|d |dz}||fStj|d |dz d d |d d }tj|d |dz d d |d d }||fS)aSequence 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 rFrm must be <= n.z)Argument must be real. Use clpmn instead.rrrrs branch_cutdiff_nrNraxis) r(rrr iscomplexobjrr r+swapaxesinsert)rrrr rpds rrQrQs6l As51A A *++ qDEE q63q6qA"&&)q.!Q/J CFA*Q OEAr Aq!A RA B Q hAK !a%\ b5L IIa !a% na1A 6 YYr+AE2+2a5q 9 b5Lrr6cLt||kDr td|dk(s|dk(s tdt|t|}}tj|stj |t }t|t|||d\}}tj|dd}tj|dd}|dk\r|d |dz}|d |dz}||fStj|d |dz d d|dd }tj|d |dz d d|dd }||fS) aAssociated 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 rrrrsztype must be either 2 or 3.rrr rNrr ) rrrrrrrr+rr)rrrtyperout_jacs rr6r6s,z A *++ AI677 q63q6qA ??1  JJq ('3q61aPLC ++c1a Ckk'1a(G Q(AEm(AE# <iiKa!eRK(!SV!<))GKa!eRK0!WQZaH <rc t|r|dkr tdt|r|dkr tdt|t|}}td|}td|}t j |}t j |jtjs|jtj}t j|r;t j|dz|dzf|jztj}n:t j|dz|dzf|jztj}t j|}|j dk(rt#|||fn9t#|t j$|ddt j$|ddf|d |dzd |dzf|d |dzd |dzffS) amSequence 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 rz!m must be a non-negative integer.!n must be a non-negative integer.rrr)rr)rN)r rrmaxrrrrrastyperrrr complex128rndimr%moveaxis)rrrmmnnrqds rrSrSVsB A;1q5<== A;1q5<== q63q6qA QB QB 1 A MM!''2:: . HHRZZ  q HHb1fb1f%/r}} E HHb1fb1f%/rzz B q B !  aaW a;;q&(3;;r6846 7 VqsVVqsV^ b1Q31Q30 00rct|r|dkr tdt|}|dkrd}n|}tjt|d|dzS)aDBernoulli 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)``. rrrrNr)r rrr)bernobrrs rr3r3sVR A;1q5<== AA A   ??3r7 #Fac ++rct|r|dkr tdt|}|dkrd}n|}tj|d|dzS)aEuler 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 rrrrNr)r rrr)eulerbr"s rr;r;sRT A;1q5<== AA A   ??2 v1 &&rrRr,ct||dS)aLegendre 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,)rrs rrRrRs( !Qq ))rc t|dd}|dkrd}n|}tj|}tj|jtj s|j t}tj|r7tj|dzf|jztj}n6tj|dzf|jztj}tj|}|jdk(rt|||fn9t|tj |ddtj |ddf|d |dz|d |dzfS) aLegendre 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 rFrrrrrrN)r(rrrrrrrrrrrrrrr$r)rrrqnrs rrTrTs As51A A   1 A MM!''2:: . HHUO q XXrAvi!'') ? XXrAvi!'') < r B !  QRH Q++b!R(++b!R(* + f!:r&AaCz !!rcd}t|rt||k7s|dkr tdtj||S)a 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]) rr%nt must be a positive integer scalar.r rrr)airyzorrs rr.r.:>Z B B>> 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]) rrrr)r*r,s rr5r5mr-rcHt|r t|s td|dkr tdt|}||z }|dkrd}n|}||z}|t|k7rt j ||\}}}nt j ||\}}}|d|dz|d|dzfS)aJahnke-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 rrzargument must be > 0.rN)r rrrr)lamvlamn) rrrv0rv1vmvldls rrPrPs@ QKHQK566 A011 AA QB A   bB U1X ]]2q) B]]2q) B f!:r&AaCz !!rct|r t|s tdt|}||z }|dkrd}n|}||z}tj||\}}}} |d|dz|d|dzfS)aParabolic 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 rrN)r rrr)pbdv rrrr2rr3dvdppdfpdds rrYrYs0 QKHQK566 AA 1B A   bB}}R+BC er!t9b"Q$i rct|r t|s tdt|}||z }|dkrd}n|}||z}tj||\}}}} |d|dz|d|dzfS)aParabolic 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 rrN)r rrr)pbvvr9s rrZrZs0 QKHQK566 AA 1B Q   bB}}R+BC er!t9b"Q$i rct|r t|s tdt||k7r tdt|dkrd}n|}t j ||\}}|d|dz|d|dzfS)aParabolic 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 rzn must be an integer.rN)r rrrr)cpbdn)rrrcpbcpds rrXrX s|0 QKHQK566 aA 011 A!  ~~b!$HC u1:s5BqDz !!rct|rt||k7s|dkr tdtj|dS)aCompute 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.rr rrr)klvnzors rr2r2@ 80 B?? ??2q !!rct|rt||k7s|dkr tdtj|dS)aCompute 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 rrErrrFrs rr0r0] rHrct|rt||k7s|dkr tdtj|dS)aCompute 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 rrErsrFrs rrMrMz rHrct|rt||k7s|dkr tdtj|dS)aCompute 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 rrErtrFrs rrJrJ rHrct|rt||k7s|dkr tdtj|dS)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]) rrErurFrs rr4r4 s9B B?? ??2q !!rct|rt||k7s|dkr tdtj|dS)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 rrErvrFrs rr1r1 rHrct|rt||k7s|dkr tdtj|dS)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 rrErwrFrs rrNrN rHrct|rt||k7s|dkr tdtj|dS)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 rrErxrFrs rrKrK rHrc t|rt||k7s|dkr tdtj|dtj|dtj|dtj|dtj|dtj|dtj|d tj|d fS) aCompute 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 rrErrrrsrtrurvrwrxrFrs rrLrL1 s B?? OOB " OOB " OOB " OOB " OOB " OOB " OOB " OOB " $$rct|rt|r t|s td|t|k7s|t|k7r td||z dkDr td||z dz}tj|||ddd|S)aCharacteristic 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 rModes must be integers.(Difference between n and m is too large.rNr rrr)segvrrcmaxLs rr]r]J s QKHQKHQK566 U1X 1a=233 !c CDD Q3q5D ==Aq! $Q ' ..rct|rt|r t|s td|t|k7s|t|k7r td||z dkDr td||z dz}tj|||ddd|S)aCharacteristic 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 rrRrSrTrrNrUrWs rrWrWb s QKHQKHQK566 U1X 1a=233 !c CDD Q3q5D ==Aq" %a ($ //r)exact repetitionct|rt||zdz ||S|r3t||k(rt||k(r t||Stdt |t |}}||k|dk\z|dk\z}t ||}t |tjrd||<|S|stjd}|S)aThe 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. 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 rr[;Non-integer `N` and `k` with `exact=True` is not supported.r) r7rr*rrr" isinstancerndarrayr)Nrr[r\condvalss rr7r7z s`AEAIq.. q6Q;3q6Q;Q? "*+ +qz71:1Q16"a1f-Q{ dBJJ 'D$K ::a=D rcV|rtj|d}tj|d}t|r t|s tdt |t |}}||k(xr||k( }|r td||kDs |dks|dkryd}t ||z dz|dzD]}||z} |St |t |}}||k|dk\z|dk\z}t||z dz|} t| tjrd| |<| S|stjd} | S)aPermutations 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 be scalar integers with `exact=True`.r_rr) rsqueezer rrrrr!r`rar) rbrr[floor_Nfloor_k non_integralvalrrcrds rr[r[ sFL JJqM"  JJqM"   UV Vq63q6#qL9W\: *+ + Eq1u!a%w(1,gk: A 1HC  qz71:1Q16"a1f-AEAIq! dBJJ 'D$K ::a=D rc|dk(r|dk(rtj|S||z|kr6||zdz}|dkDr |||z |zz }t|||t||z||zS||z|k(r||zS|S)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)) rrr)mathr< _range_prod)lohirmids rrnrn s Qw16~~b!! Av{Bw1n q5#(a(C2sA&S1Wb!)DDD a2Bw rc  tj|}|tj|}tj|jrt}nh|t j vrL|dt |kDrt}n<|dt|kDrtj}ntjd}nt}tj||}||dkD}d||dk<d||dk<td|D]}|dkDr |||z|k(n|}|js"tdt|d|}||||dk(<tt!|dz D]=}||} ||dz} |tt| dzt| |z}|||| k(<?tj|jrE|j#tj$}tj&|tj|<|S)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. rlongrrrrrr)runiqueisnananyr_FACTORIALK_LIMITS_64BITSkeysobject_FACTORIALK_LIMITS_32BITSint64rrrsizernrlenrrr) rrundtrlaneulrkrprevcurrents r_factorialx_array_exactr s 1B RXXb\M B xx{  ',,. . b6-a0 0B V/2 2B&!B -- $C BFBCAJCAJ a (%&URaD ! 77aRUq1C!CRU O3r7Q;' (!uQU){3tax=#g,!DD$'AL! (($ xx{jj$66BHHQK Jrc |dk(rt|||St|j}t|t j |tj |dk\}t||}t||t||||S)z Calculate approximation to multifactorial for array n and integer k. Ensure that values aren't calculated unnecessarily. rrextendr)_factorialx_approx_corerrr rrvrr)rrrresultrc n_to_computes r_factorialx_array_approxre sr &qAf==177^F &"((1+rvv& FD4#L &$/ &QR Mrct|dz}t|tjr.t |j dstj ||dk(<|Stj|r|dk(rtjd}|S)zO returns gamma(n+1), though with NaN at -1 instead of inf, c.f. #21827 rrXrr) rr`rra _is_subdtyperrisinfr)rdress r_gamma1pry sm q/C#rzz"DJJ, ffC O J #42:jj Jrc 8|dk(r.corr s/288ArAv.q1uqy1AAAEEr)rr`rraarrayrrrrcatch_warnings simplefilterrrrrrrur)rrrrp_dtypen_mod_krrs rrr sM Av! a $XXf%F  *47C8AE'  $ $ & L  ! !(N ;XXaQg6!a%HF fQUQY'"((1a!e7*KK KF  L a $XXf%F !eG a $  $ $ &   ! !(N ;Q[A-.A "#%*7Q;?%;<gq/"     "7h7!QU#eAEAI&667 F YYw 0 6 w!|QA/ 0 MM L L   77s'=A5I7A(J$AJ7JJ Jct|tr|n|g}tjtjtj tj d}|Dcgc]}|j||}}tfd|DScc}w)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) )rfrXrc3JK|]}tj|yw)N)rr).0rrs r z_is_subdtype.. s9Br}}UB'9s #) r`listrintegerfloatingcomplexfloatingnumbergetrw)rdtypesmappingrs` rrr st"&$/VfXFZZ [[    YY G *0 0Agkk!Q 0F 0 9&9 991sB c |dvrtd||r|dk(r tdd}|dk(r|dz }n|dz }d }d }|d k(r|d z }n|d k(r|dz }tt|gds&t|jd|t|tt|ddgr|dk7r t||dk(r|dkrd|}t||dk(r td|dk(rdnddg} t j |dk(rt |tjsntt|dddtdgs&t|jd|t|tt|| r|dk7r t||t j|rH|dk(xrtt|d} | rt jdSt jdS|dk(r|dkr|rdSt jdS|dvr|rdSt jdS|r,tt|drtdt||S|r$t|jt| t|||!St|}t|jgds't|jd||jt|j| r|dk7r t||rz^ Additionally, it will perturb the values of the multifactorial at most positive integers `n`.)rrrXz`k`)vnamefnamerrrXrrz=For `extend='zero'`, k must be a positive integer, received: rzParameter k cannot be zero!rNz`n`znan+nanjr>rrrtrr)rrrformatrrr`rarvrrrnrrrrr}rr) rrrr[r msg_unsupmsg_exact_not_possiblemsg_needs_complexmsgtypes_requiring_complex complexifys r_factorialx_wrapperr su((Nvh W   9$TUU B  I  J L 1  W X , O PDG_5Y--EdSTg-VW W $q'C: .6Y3F./ / V AQRSQTUCS/ ! !V:; ;&+k%9cSz wwqzQz!RZZ8DGc3T$Z%@AY--EdSTg-VW W $q'#: ;)@S./ / Y"((1+ I-M<Q3MJ0:2==, Q 5@Q Q v !a%1 02::a= 0 &[1 02::a= 0 |DGS1q#a&A. . 3::a:IJ J&qAf==  A  1))U!'')RSS agg6 7Fi>> 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<rrr[rrrr[rs rr<r<= sl {A% OOrc"td|d||S)aDouble 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=rrrrrs rr=r=v sj |Q!5 PPrc"td||||S)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>rr)rrr[rs rr>r> sb |Q!5 PPrr^c tj|xrtj|}t|t|}}tj|jtj s t dtj|jtj s t d|s2t|jt|jtStttj||gdgDcgc]'\}}|jd|jdf)c}}}t|tt }dD]}d||< dgd} } |rt#|\}}|dks ||kDs|dkr ||k(s|dk(rd|||f<2|| k7rc|| z } | dkDrN| j%dt't)| dz dd D]} | | | z| | dz z| | <| dz} | dkDrN| ||||f<n | ||||f<|| } } |r|rt*t*t*gntttg} tj||d gd dgd gd gd dgg| }|5|j,s?|t!|dt!|df|d<|j/|j,s?|j0d}|r|jd}d d d |Scc}}w#1swYSxYw)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 integersrefs_okr))rr)rr)rrr)rrrrrrr)rrrrNbufferedreadonly writeonlyallocate) op_dtypes)rr rrrr TypeErrorr#rrrsetnditertakerrrrappendrr~rzfinishediternextoperands)rbKr[output_is_scalarrrnk_pairs snsk_valspairn_oldn_row num_itersj out_typesitoutputs rrara sV{{1~8"++a. 1:wqzqA =="** -ABB =="** -ABB "!((5/188E?CC Aq6I;7 9AffQi # 9 :H HC I0 $i5E x 1 q5AEQ!V  !VqAv !Iq!f   %ZE Ia- Qs5z!|Q37A$QxzE!A#J6E!H7Q a- !&aIq!f  %aIq!f %u% &-2(ue7LI  At Y  |k:%>?  B $++s2a5z3r!u:67BqE KKM++Q [[^F$ M[ 9J$ Ms,K!)A K'5"K''K1c`|tj||Stj|||S)a 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)rrrs rrhrh s0T y$$Q,,}}Q3''rc 0tjd|fi|S)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 `_. 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)rkwargss rr`r` s< <<1 ' ''r)F)r)g)rs)Fr)NN)~numpyrrmr collectionsrheapqrrrrrr r r r r rrrrrrrrrrrrrrrrrr r!r"r#_gufuncsr$r%r&r'_input_validationr(r)_combr* _multiufuncsr+r,scipy._lib.deprecationr-__all____DEPRECATION_MSG_1_15rxr{r9rFrHrErGrerfrbrcrdrrIrgrOrDrBrCr^r_r:r@rAr?r/r8r\rUrVrrQr6rSr3r;rRrTr.r5rPrYrZrXr2r0rMrJr4r1rNrKrLr]rWr7r[rnrrrrrrr<r=r>rarhr`rfrrrs  #"OOOO****0/2+.= BF !#rbRB "rbS:!#rbRB "rbR9c L&.RR%j< ~< ~7 t@ FI%XO%dF%R K5\O5dN>bN4bB:JB:J5#p6#r%P!2!286-: ('V9x8v # * *63I JKLLL^ # * *74J KLRMRj<1~0,f1'h # * *52B CD*E*,$"N0#f0#f/"d" J" J!"H":":":":#"L":":":$2/000%AHAJ:BJ( 6r:4_;D6Pr5QpQQh#EPM(`(r