xsf 0.5.0+0.2.0

Rust implementations and bindings for scipy.special functions.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
//! This crate provides equivalent Rust implementations of `scipy.special` functions, and bindings
//! to the bundled [xsf](https://github.com/scipy/xsf/) C++ library that powers `scipy.special`.
//!
//! Most of the `scipy.special` functions are available. See the
//! [`scipy.special` documentation](https://docs.scipy.org/doc/scipy/reference/special.html)
//! for additional information.
//!
//! # Airy functions
//!
//! | Function           | Description                                                      |
//! | ------------------ | ---------------------------------------------------------------- |
//! | [`airy`]           | Airy functions and derivatives                                   |
//! | [`airy_scaled`]    | Exponentially scaled Airy functions and derivatives              |
//! | [`airy_ai_zeros`]  | Zeros and values of the Airy function Ai and its derivative      |
//! | [`airy_bi_zeros`]  | Zeros and values of the Airy function Bi and its derivative      |
//! | [`airy_integrals`] | Integrals of Airy functions                                      |
//!
//! # Elliptic functions and integrals
//!
//! | Function         | Description                                                 |
//! | ---------------- | ----------------------------------------------------------- |
//! | [`ellipj`]       | Jacobian elliptic functions                                 |
//! | [`ellipk`]       | Complete elliptic integral of the first kind                |
//! | [`ellipkm1`]     | Complete elliptic integral of the first kind around $m = 1$ |
//! | [`ellipkinc`]    | Incomplete elliptic integral of the first kind              |
//! | [`ellipe`]       | Complete elliptic integral of the second kind               |
//! | [`ellipeinc`]    | Incomplete elliptic integral of the second kind             |
//!
//! # Bessel functions
//!
//! | Function                | Description                                                       |
//! | ----------------------- | ----------------------------------------------------------------- |
//! | [`bessel_j`]            | Bessel function of the first kind, $J_v(z)$                       |
//! | [`bessel_je`]           | Exponentially scaled Bessel function of the first kind            |
//! | [`bessel_y`]            | Bessel function of the second kind, $Y_v(z)$                      |
//! | [`bessel_ye`]           | Exponentially scaled Bessel function of the second kind           |
//! | [`bessel_i`]            | Modified Bessel function of the first kind, $I_v(z)$              |
//! | [`bessel_ie`]           | Exponentially scaled modified Bessel function of the first kind   |
//! | [`bessel_k`]            | Modified Bessel function of the second kind, $K_v(z)$             |
//! | [`bessel_ke`]           | Exponentially scaled modified Bessel function of the second kind  |
//! | [`hankel_1`]            | Hankel function of the first kind, $H_v^{(1)}(z)$                 |
//! | [`hankel_1e`]           | Exponentially scaled Hankel function of the first kind            |
//! | [`hankel_2`]            | Hankel function of the second kind, $H_v^{(2)}(z)$                |
//! | [`hankel_2e`]           | Exponentially scaled Hankel function of the second kind           |
//! | [`wright_bessel`]       | Wright's generalized Bessel function                              |
//! | [`log_wright_bessel`]   | Natural logarithm of Wright's generalized Bessel function         |
//! | [`jahnke_emden_lambda`] | Jahnke-Emden Lambda function $\Lambda_{\nu}(x)$ and derivatives   |
//!
//! ## Zeros of Bessel functions
//!
//! | Function         | Description                                                              |
//! | ---------------- | ------------------------------------------------------------------------ |
//! | [`bessel_zeros`] | Zeros of Bessel functions $J_v(x)$, $J_v\'(x)$, $Y_v(x)$, and $Y_v\'(x)$ |
//!
//! ## Faster versions of common Bessel functions
//!
//! | Function       | Description                                                                 |
//! | -------------- | --------------------------------------------------------------------------- |
//! | [`bessel_j0`]  | Bessel function of the first kind of order 0, $J_0(x)$                      |
//! | [`bessel_j1`]  | Bessel function of the first kind of order 1, $J_1(x)$                      |
//! | [`bessel_y0`]  | Bessel function of the second kind of order 0, $Y_0(x)$                     |
//! | [`bessel_y1`]  | Bessel function of the second kind of order 1, $Y_1(x)$                     |
//! | [`bessel_i0`]  | Modified Bessel function of the first kind of order 0, $I_0(x)$             |
//! | [`bessel_i0e`] | Exponentially scaled modified Bessel function of the first kind of order 0  |
//! | [`bessel_i1`]  | Modified Bessel function of the first kind of order 1, $I_1(x)$             |
//! | [`bessel_i1e`] | Exponentially scaled modified Bessel function of the first kind of order 1  |
//! | [`bessel_k0`]  | Modified Bessel function of the second kind of order 0, $K_0(x)$            |
//! | [`bessel_k0e`] | Exponentially scaled modified Bessel function of the second kind of order 0 |
//! | [`bessel_k1`]  | Modified Bessel function of the second kind of order 1, $K_1(x)$            |
//! | [`bessel_k1e`] | Exponentially scaled modified Bessel function of the second kind of order 1 |
//!
//! ## Integrals of Bessel functions
//!
//! | Function       | Description                                                                 |
//! | -------------- | --------------------------------------------------------------------------- |
//! | [`it1j0y0`]    | Integral of Bessel functions of the first kind of order 0                   |
//! | [`it2j0y0`]    | Integral related to Bessel functions of the first kind of order 0           |
//! | [`it1i0k0`]    | Integral of modified Bessel functions of the second kind of order 0         |
//! | [`it2i0k0`]    | Integral related to modified Bessel functions of the second kind of order 0 |
//! | [`besselpoly`] | Weighted integral of the Bessel function of the first kind                  |
//!
//! ## Derivatives of Bessel functions
//!
//! | Function           | Description                       |
//! | ------------------ | --------------------------------- |
//! | [`bessel_j_prime`] | $n$-th derivative of [`bessel_j`] |
//! | [`bessel_y_prime`] | $n$-th derivative of [`bessel_y`] |
//! | [`bessel_i_prime`] | $n$-th derivative of [`bessel_i`] |
//! | [`bessel_k_prime`] | $n$-th derivative of [`bessel_k`] |
//! | [`hankel_1_prime`] | $n$-th derivative of [`hankel_1`] |
//! | [`hankel_2_prime`] | $n$-th derivative of [`hankel_2`] |
//!
//! ## Spherical Bessel functions
//!
//! | Function               | Description                                                     |
//! | ---------------------- | --------------------------------------------------------------- |
//! | [`sph_bessel_j`]       | Spherical Bessel function of the first kind, $j_n(z)$           |
//! | [`sph_bessel_j_prime`] | Derivative of [`sph_bessel_j`], $j_n\'(z)$                      |
//! | [`sph_bessel_y`]       | Spherical Bessel function of the second kind, $y_n(z)$          |
//! | [`sph_bessel_y_prime`] | Derivative of [`sph_bessel_y`], $y_n\'(z)$                      |
//! | [`sph_bessel_i`]       | Modified Spherical Bessel function of the first kind, $i_n(z)$  |
//! | [`sph_bessel_i_prime`] | Derivative of [`sph_bessel_i`], $i_n\'(z)$                      |
//! | [`sph_bessel_k`]       | Modified Spherical Bessel function of the second kind, $k_n(z)$ |
//! | [`sph_bessel_k_prime`] | Derivative of [`sph_bessel_k`], $k_n\'(z)$                      |
//!
//! ## Riccati-Bessel functions
//!
//! | Function      | Description                                                   |
//! | ------------- | ------------------------------------------------------------- |
//! | [`riccati_j`] | Riccati-Bessel function of the first kind and its derivative  |
//! | [`riccati_y`] | Riccati-Bessel function of the second kind and its derivative |
//!
//! # Struve functions
//!
//! | Function         | Description                                                   |
//! | ---------------- | ------------------------------------------------------------- |
//! | [`struve_h`]     | Struve function $H_{\nu}(x)$                                  |
//! | [`struve_l`]     | Modified Struve function $L_{\nu}(x)$                         |
//! | [`itstruve0`]    | Integral of the Struve function of order 0, $H_0(x)$          |
//! | [`it2struve0`]   | Integral related to the Struve function of order 0            |
//! | [`itmodstruve0`] | Integral of the modified Struve function of order 0, $L_0(x)$ |
//!
//! # Raw statistical functions
//!
//! ## Binomial distribution
//!
//! | Function  | Description                      |
//! | --------- | -------------------------------- |
//! | [`bdtr`]  | Cumulative distribution function |
//! | [`bdtrc`] | Complement of [`bdtr`]           |
//! | [`bdtri`] | Inverse of [`bdtr`]              |
//!
//! ## F distribution
//!
//! | Function  | Description                      |
//! | --------- | -------------------------------- |
//! | [`fdtr`]  | Cumulative distribution function |
//! | [`fdtrc`] | Complement of [`fdtr`]           |
//! | [`fdtri`] | Inverse of [`fdtr`]              |
//!
//! ## Gamma distribution
//!
//! | Function   | Description                                            |
//! | ---------- | ------------------------------------------------------ |
//! | [`gdtr`]   | Cumulative distribution function                       |
//! | [`gdtrc`]  | Complement of [`gdtr`]                                 |
//! | [`gdtrib`] | Inverse of [`gdtr(a, b, x)`](gdtr) with respect to `b` |
//!
//! ## Negative binomial distribution
//!
//! | Function   | Description                      |
//! | ---------- | -------------------------------- |
//! | [`nbdtr`]  | Cumulative distribution function |
//! | [`nbdtrc`] | Complement of [`nbdtr`]          |
//! | [`nbdtri`] | Inverse of [`nbdtr`]             |
//!
//! ## Normal distribution
//!
//! | Function      | Description                      |
//! | ------------- | -------------------------------- |
//! | [`ndtr`]      | Cumulative distribution function |
//! | [`ndtri`]     | Inverse of [`ndtr`]              |
//! | [`log_ndtr`]  | Logarithm of [`ndtr`]            |
//! | [`ndtri_exp`] | Inverse of [`log_ndtr`]          |
//!
//! ## Poisson distribution
//!
//! | Function  | Description                      |
//! | --------- | -------------------------------- |
//! | [`pdtr`]  | Cumulative distribution function |
//! | [`pdtrc`] | Complement of [`pdtr`]           |
//! | [`pdtri`] | Inverse of [`pdtr`]              |
//!
//! ## Student's t distribution
//!
//! | Function   | Description                      |
//! | ---------- | -------------------------------- |
//! | [`stdtr`]  | Cumulative distribution function |
//! | [`stdtri`] | Inverse of [`stdtr`]             |
//!
//! ## Chi square distribution
//!
//! | Function   | Description                      |
//! | ---------- | -------------------------------- |
//! | [`chdtr`]  | Cumulative distribution function |
//! | [`chdtrc`] | Complement of [`chdtr`]          |
//! | [`chdtri`] | Inverse of [`chdtr`]             |
//!
//! ## Kolmogorov distribution
//!
//! | Function       | Description                      |
//! | -------------- | -------------------------------- |
//! | [`kolmogorov`] | Survival function                |
//! | [`kolmogp`]    | Derivative of [`kolmogorov`]     |
//! | [`kolmogi`]    | Inverse of [`kolmogorov`]        |
//! | [`kolmogc`]    | Complement of [`kolmogorov`]     |
//! | [`kolmogci`]   | Inverse of [`kolmogc`]           |
//!
//! ## Kolmogorov-Smirnov distribution
//!
//! | Function      | Description                      |
//! | ------------- | -------------------------------- |
//! | [`smirnov`]   | Survival function                |
//! | [`smirnovp`]  | Derivative of [`smirnov`]        |
//! | [`smirnovi`]  | Inverse of [`smirnov`]           |
//! | [`smirnovc`]  | Complement of [`smirnov`]        |
//! | [`smirnovci`] | Inverse of [`smirnovc`]          |
//!
//! ## Box-Cox transformation
//!
//! | Function         | Description                       |
//! | ---------------- | --------------------------------- |
//! | [`boxcox`]       | Box-Cox transformation of $x$     |
//! | [`boxcox1p`]     | Box-Cox transformation of $1 + x$ |
//! | [`inv_boxcox`]   | Inverse of [`boxcox`]             |
//! | [`inv_boxcox1p`] | Inverse of [`boxcox1p`]           |
//!
//! ## Sigmoidal functions
//!
//! | Function      | Description                               |
//! | ------------- | ----------------------------------------- |
//! | [`logit`]     | Logit function, $\ln \( \frac{x}{1-x} \)$ |
//! | [`expit`]     | Expit function, $\frac{1}{1 + \exp(-x)}$  |
//! | [`log_expit`] | Logarithm of [`expit`]                    |
//!
//! ## Cramér-von Mises
//!
//! | Function        | Description                                                         |
//! | --------------- | ------------------------------------------------------------------- |
//! | [`cdf_cvm_inf`] | CDF of the Cramér-von Mises test statistic (infinite sample limit)  |
//! | [`cdf_cvm`]     | CDF of the Cramér-von Mises test statistic for a finite sample size |
//!
//! ## Miscellaneous
//!
//! | Function           | Description                                   |
//! | ------------------ | --------------------------------------------- |
//! | [`tukeylambdacdf`] | Tukey-Lambda cumulative distribution function |
//! | [`owens_t`]        | Owen's T function                             |
//!
//! # Information Theory functions
//!
//! | Function         | Description                                                            |
//! | ---------------- | ---------------------------------------------------------------------- |
//! | [`entr`]         | Elementwise function for computing entropy, $H\[X\]$                   |
//! | [`rel_entr`]     | Elementwise function for computing relative entropy, $H\[X \rvert Y\]$ |
//! | [`kl_div`]       | Elementwise function for computing Kullback-Leibler divergence         |
//! | [`huber`]        | Huber loss function, $L_\delta(r)$                                     |
//! | [`pseudo_huber`] | Pseudo-Huber loss function, $\widetilde{L}_\delta(r)$                  |
//!
//! # Gamma and related functions
//!
//! | Function         | Description                                                       |
//! | ---------------- | ----------------------------------------------------------------- |
//! | [`gamma`]        | Gamma function, $\Gamma(z)$                                       |
//! | [`gammaln`]      | Log-gamma function, $\ln\abs{\Gamma(z)}$                          |
//! | [`loggamma`]     | Principal branch of $\ln \Gamma(z)$                               |
//! | [`gammasgn`]     | Sign of [`gamma`], $\sgn(\Gamma(z))$                              |
//! | [`gammainc`]     | Regularized lower incomplete gamma function $P(a,x) = 1 - Q(a,x)$ |
//! | [`gammaincinv`]  | Inverse of [`gammainc`], $P^{-1}(a,y)$                            |
//! | [`gammaincc`]    | Regularized upper incomplete gamma function $Q(a,x) = 1 - P(a,x)$ |
//! | [`gammainccinv`] | Inverse of [`gammaincc`], $Q^{-1}(a,y)$                           |
//! | [`beta`]         | Beta function, $\B(a,b) = {\Gamma(a)\Gamma(b) \over \Gamma(a+b)}$ |
//! | [`betaln`]       | Log-Beta function, $\ln\abs{\B(a,b)}$                             |
//! | [`betainc`]      | Regularized incomplete beta function, $\I_x(a,b)$                 |
//! | [`betaincinv`]   | Inverse of [`betainc`], $\I_y^{-1}(a,b)$                          |
//! | [`digamma`]      | The digamma function, $\psi(z)$                                   |
//! | [`polygamma`]    | The polygamma function, $\psi^{(n)}(x)$                           |
//! | [`multigammaln`] | Log of multivariate gamma, sometimes called the generalized gamma |
//! | [`rgamma`]       | Reciprocal of the gamma function, $\frac{1}{\Gamma(z)}$           |
//! | [`pow_rising`]   | Rising factorial $\rpow x m = {\Gamma(x+m) \over \Gamma(x)}$      |
//! | [`pow_falling`]  | Falling factorial $\fpow x m = {\Gamma(x+1) \over \Gamma(x+1-m)}$ |
//!
//! # Error function and Fresnel integrals
//!
//! | Function                   | Description                                                     |
//! | -------------------------- | --------------------------------------------------------------- |
//! | [`erf`]                    | Error function, $\erf(z)$                                       |
//! | [`erfc`]                   | Complementary error function, $\erfc(z) = 1 - \erf(z)$          |
//! | [`erfcx`]                  | Scaled complementary error function, $e^{z^2} \erfc(z)$         |
//! | [`erfi`]                   | Imaginary error function $\erfi(z) = -i \erf(i z)$              |
//! | [`erfinv`]                 | Inverse of [`erf`], $\erf^{-1}(z)$                              |
//! | [`erfcinv`]                | Inverse of [`erfc`], $\erfc^{-1}(z) = \erf^{-1}(1 - z)$         |
//! | [`erf_zeros`]              | Zeros (roots) of [`erf`]                                        |
//! | [`wofz`]                   | Faddeeva function, $w(z) = e^{-z^2} \erfc(-iz)$                 |
//! | [`dawsn`]                  | Dawson function $D(z) = \frac{\sqrt{\pi}}{2} e^{-z^2} \erfi(z)$ |
//! | [`fresnel`]                | Fresnel integrals $S(z)$ and $C(z)$                             |
//! | [`fresnel_zeros`]          | Zeros (roots) of Fresnel integrals $S(z)$ and $C(z)$            |
//! | [`modified_fresnel_plus`]  | Modified Fresnel positive integrals                             |
//! | [`modified_fresnel_minus`] | Modified Fresnel negative integrals                             |
//! | [`voigt_profile`]          | Voigt profile                                                   |
//!
//! # Legendre functions
//!
//! | Function                      | Description                                                  |
//! | ----------------------------- | ------------------------------------------------------------ |
//! | [`legendre_p`]                | Legendre polynomial of the first kind, $P_n(z)$              |
//! | [`legendre_p_all`]            | All Legendre polynomials of the first kind                   |
//! | [`assoc_legendre_p`]          | Associated Legendre polynomial of the 1st kind, $P_n^m(z)$   |
//! | [`assoc_legendre_p_all`]      | All associated Legendre polynomials of the 1st kind          |
//! | [`assoc_legendre_p_norm`]     | Normalized associated Legendre polynomial                    |
//! | [`assoc_legendre_p_norm_all`] | All normalized associated Legendre polynomials               |
//! | [`sph_legendre_p`]            | Spherical Legendre polynomial of the first kind              |
//! | [`sph_legendre_p_all`]        | All spherical Legendre polynomials of the first kind         |
//! | [`sph_harm_y`]                | Spherical harmonics, $Y_n^m(\theta,\phi)$                    |
//! | [`sph_harm_y_all`]            | All spherical harmonics                                      |
//! | [`legendre_q_all`]       | All Legendre functions of the 2nd kind and derivatives            |
//! | [`assoc_legendre_q_all`] | All associated Legendre functions of the 2nd kind and derivatives |
//!
//! # Orthogonal polynomials
//!
//! The following functions evaluate values of orthogonal polynomials:
//!
//! | Function             | Name                        | Notation                  |
//! | -------------------- | --------------------------- | ------------------------- |
//! | [`eval_jacobi`]      | Jacobi                      | $P_n^{(\alpha,\beta)}(z)$ |
//! | [`eval_legendre`]    | Legendre                    | $P_n(z)$                  |
//! | [`eval_chebyshev_t`] | Chebyshev (first kind)      | $T_n(z)$                  |
//! | [`eval_chebyshev_u`] | Chebyshev (second kind)     | $U_n(z)$                  |
//! | [`eval_gegenbauer`]  | Gegenbauer / Ultraspherical | $C_n^{(\alpha)}(z)$       |
//! | [`eval_genlaguerre`] | Generalized Laguerre        | $L_n^{(\alpha)}(z)$       |
//! | [`eval_laguerre`]    | Laguerre                    | $L_n(z)$                  |
//! | [`eval_hermite_h`]   | Hermite (physicist's)       | $H_n(x)$                  |
//! | [`eval_hermite_he`]  | Hermite (probabilist's)     | $He_n(x)$                 |
//!
//! # Hypergeometric functions
//!
//! | Function   | Description                             | Notation                         |
//! | ---------- | --------------------------------------- | -------------------------------- |
//! | [`hyp0f0`] | Generalized hypergeometric function     | $_0F_0\left[ \middle\| z\right]$ |
//! | [`hyp1f0`] | Generalized hypergeometric function     | $_1F_0\left[a\middle\| z\right]$ |
//! | [`hyp0f1`] | Confluent hypergeometric limit function | $_0F_1\left[b\middle\| z\right]$ |
//! | [`hyp1f1`] | Confluent hypergeometric function       | $\hyp 1 1 a b z$                 |
//! | [`hyp2f1`] | Gauss' hypergeometric function          | $\hyp 2 1 {a_1\enspace a_2} b z$ |
//! | [`hypu`]   | Confluent hypergeometric function       | $U(a_1,a_2,x)$                   |
//!
//! # Parabolic cylinder functions
//!
//! | Function | Description                                                        |
//! | -------- | ------------------------------------------------------------------ |
//! | [`pbdv`] | Parabolic cylinder function $D_v(x)$ and its derivative $D_v\'(x)$ |
//! | [`pbvv`] | Parabolic cylinder function $V_v(x)$ and its derivative $V_v\'(x)$ |
//! | [`pbwa`] | Parabolic cylinder function $W_a(x)$ and its derivative $W_a\'(x)$ |
//!
//! # Mathieu and related functions
//!
//! | Even                  | Odd                  | Description                                   |
//! | --------------------- | -------------------- | --------------------------------------------- |
//! | [`mathieu_a`]         | [`mathieu_b`]        | Characteristic value of the Mathieu functions |
//! | [`mathieu_cem`]       | [`mathieu_sem`]      | Mathieu functions                             |
//! | [`mathieu_modcem1`]   | [`mathieu_modsem1`]  | Modified Mathieu functions of the first kind  |
//! | [`mathieu_modcem2`]   | [`mathieu_modsem2`]  | Modified Mathieu functions of the second kind |
//! | [`mathieu_even_coef`] | [`mathieu_odd_coef`] | Fourier coefficients for Mathieu functions    |
//!
//! # Spheroidal wave functions
//!
//! | Function                 | Description                                           |
//! | ------------------------ | ----------------------------------------------------- |
//! | [`prolate_aswfa_nocv`]   | Prolate spheroidal angular function of the first kind |
//! | [`prolate_radial1_nocv`] | Prolate spheroidal radial function of the first kind  |
//! | [`prolate_radial2_nocv`] | Prolate spheroidal radial function of the second kind |
//! | [`oblate_aswfa_nocv`]    | Oblate spheroidal angular function of the first kind  |
//! | [`oblate_radial1_nocv`]  | Oblate spheroidal radial function of the first kind   |
//! | [`oblate_radial2_nocv`]  | Oblate spheroidal radial function of the second kind  |
//! | [`prolate_segv`]         | Characteristic value of prolate spheroidal function   |
//! | [`oblate_segv`]          | Characteristic value of oblate spheroidal function    |
//!
//! The following functions require pre-computed characteristic value:
//!
//! | Function            | Description                                           |
//! | ------------------- | ----------------------------------------------------- |
//! | [`prolate_aswfa`]   | Prolate spheroidal angular function of the first kind |
//! | [`prolate_radial1`] | Prolate spheroidal radial function of the first kind  |
//! | [`prolate_radial2`] | Prolate spheroidal radial function of the second kind |
//! | [`oblate_aswfa`]    | Oblate spheroidal angular function of the first kind  |
//! | [`oblate_radial1`]  | Oblate spheroidal radial function of the first kind   |
//! | [`oblate_radial2`]  | Oblate spheroidal radial function of the second kind  |
//!
//! # Kelvin functions
//!
//! | Function   | Zeros            | Description                         |
//! | ---------- | ---------------- | ----------------------------------- |
//! | [`kelvin`] | [`kelvin_zeros`] | Kelvin functions as complex numbers |
//! | [`ber`]    | [`ber_zeros`]    | Kelvin function $\ber(x)$           |
//! | [`berp`]   | [`berp_zeros`]   | Derivative of [`ber`], $\ber\'(x)$  |
//! | [`bei`]    | [`bei_zeros`]    | Kelvin function $\bei(x)$           |
//! | [`beip`]   | [`beip_zeros`]   | Derivative of [`bei`], $\bei\'(x)$  |
//! | [`ker`]    | [`ker_zeros`]    | Kelvin function $\ker(x)$           |
//! | [`kerp`]   | [`kerp_zeros`]   | Derivative of [`ker`], $\ker\'(x)$  |
//! | [`kei`]    | [`kei_zeros`]    | Kelvin function $\kei(x)$           |
//! | [`keip`]   | [`keip_zeros`]   | Derivative of [`kei`], $\kei\'(x)$  |
//!
//! # Combinatorics
//!
//! | Function       | Description                                                              |
//! | -------------- | ------------------------------------------------------------------------ |
//! | [`comb`]       | $k$-combinations of $n$ things, $_nC_k = {n \choose k}$                  |
//! | [`comb_rep`]   | $k$-combinations with replacement, $\big(\\!\\!{n \choose k}\\!\\!\big)$ |
//! | [`perm`]       | $k$-permutations of $n$ things, $_nP_k = {n! \over (n-k)!}$              |
//! | [`stirling2`]  | Stirling number of the second kind $S(n,k)$                              |
//!
//! # Factorials
//!
//! | Function                   | Description                               |
//! | -------------------------- | ----------------------------------------- |
//! | [`factorial`]              | Factorial $n!$                            |
//! | [`factorial_checked`]      | [`factorial`] with overflow checking      |
//! | [`multifactorial`]         | Multifactorial $n!_{(k)}$                 |
//! | [`multifactorial_checked`] | [`multifactorial`] with overflow checking |
//!
//! # Exponential integrals
//!
//! | Function        | Description                                |
//! | --------------- | ------------------------------------------ |
//! | [`expn`]        | Generalized exponential integral $E_n(x)$  |
//! | [`expi`]        | Exponential integral $Ei(x)$               |
//! | [`exp1`]        | Exponential integral $E_1(x)$              |
//! | [`scaled_exp1`] | Scaled exponential integral $x e^x E_1(x)$ |
//!
//! # Zeta functions
//!
//! | Function         | Description                                                |
//! | ---------------- | ---------------------------------------------------------- |
//! | [`zeta`]         | Hurwitz zeta function $\zeta(z,q)$ for real or complex $z$ |
//! | [`riemann_zeta`] | Riemann zeta function $\zeta(z)$ for real or complex $z$   |
//! | [`zetac`]        | $\zeta(x) - 1$ for real $x$                                |
//!
//! # Lambert W and related functions
//!
//! | Function        | Description           |
//! | --------------- | --------------------- |
//! | [`lambertw`]    | Lambert W function    |
//! | [`wrightomega`] | Wright Omega function |
//!
//! # Other special functions
//!
//! | Function        | Description                                                  |
//! | --------------- | ------------------------------------------------------------ |
//! | [`agm`]         | Arithmetic-geometric mean of two scalars                     |
//! | [`bernoulli`]   | Bernoulli numbers $B_0,\dotsc,B_{N-1}$                       |
//! | [`binom`]       | Binomial coefficient $\binom{n}{k}$ for real input           |
//! | [`diric`]       | Periodic sinc function, also called the Dirichlet kernel     |
//! | [`euler`]       | Euler numbers $E_0,\dotsc,E_{N-1}$                           |
//! | [`sici`]        | Sine and cosine integrals $\Si(z)$ and $\Ci(z)$              |
//! | [`shichi`]      | Hyperbolic sine and cosine integrals $\Shi(z)$ and $\Chi(z)$ |
//! | [`softmax`]     | Softmax function                                             |
//! | [`log_softmax`] | Logarithm of the softmax function                            |
//! | [`spence`]      | Spence's function, also known as the dilogarithm             |
//! | [`softplus`]    | $\ln(1 + e^x)$                                               |
//! | [`log1mexp`]    | $\ln(1 - e^x)$                                               |
//!
//! # Convenience functions
//!
//! | Function       | Description                                         |
//! | -------------- | --------------------------------------------------- |
//! | [`cbrt`]       | $\sqrt\[3\]{x}$                                     |
//! | [`exp10`]      | $10^x$                                              |
//! | [`exp2`]       | $2^x$                                               |
//! | [`radian`]     | Convert from degrees to radians                     |
//! | [`cosdg`]      | Cosine of an angle in degrees                       |
//! | [`sindg`]      | Sine of an angle in degrees                         |
//! | [`tandg`]      | Tangent of an angle in degrees                      |
//! | [`cotdg`]      | Cotangent of an angle in degrees                    |
//! | [`expm1`]      | $e^x - 1$                                           |
//! | [`cosm1`]      | $\cos(x) - 1$                                       |
//! | [`round`]      | Round to nearest or even integer-valued float       |
//! | [`xlogy`]      | $x \ln(y)$ or $0$ if $x = 0$                        |
//! | [`xlog1py`]    | $x \ln(1+y)$ or $0$ if $x = 0$                      |
//! | [`logaddexp`]  | $\ln(e^x + e^y)$                                    |
//! | [`logaddexp2`] | $\log_2(2^x + 2^y)$                                 |
//! | [`logsumexp`]  | $\ln \sum e^{x_i}$                                  |
//! | [`exprel`]     | Relative error exponential, $e^x - 1 \over x$       |
//! | [`sinc`]       | Normalized sinc function, $\sin(\pi x) \over \pi x$ |
//!

#![warn(
    missing_debug_implementations,
    missing_docs,
    rust_2018_idioms,
    unreachable_pub
)]
#![warn(clippy::pedantic)]
#![allow(
    clippy::doc_markdown,
    clippy::many_single_char_names,
    clippy::similar_names
)]

#[cfg(test)]
use xsref::{np_assert_allclose, np_assert_equal};

mod ffi;
mod numpy;
mod scipy_special;
mod utils;
mod xsf;

pub use numpy::*;
pub use scipy_special::*;
pub use xsf::cephes::*;
pub use xsf::*;