acb – complex numbers

class flint.acb(real=None, imag=None)

An acb represents a complex number by a rectangular enclosure consisting of arb balls for the real and imaginary parts.

>>> from flint import fmpq
>>> acb(2)
2.00000000000000
>>> acb(2+3j)
2.00000000000000 + 3.00000000000000j
>>> acb("2 +/- 0.001", fmpq(2,3))
[2.00 +/- 1.01e-3] + [0.666666666666667 +/- 4.82e-16]j
>>> acb(-1) ** 0.25
[0.707106781186547 +/- 6.14e-16] + [0.707106781186547 +/- 6.15e-16]j
abs_lower(self)

Lower bound for the absolute value of self. The output is an arb holding an exact floating-point number that has been rounded down to the current precision.

>>> print(acb(3, "-5 +/- 2").abs_lower().str(5, radius=False))
4.2426
abs_upper(self)

Upper bound for the absolute value of self. The output is an arb holding an exact floating-point number that has been rounded up to the current precision.

>>> print(acb(3, "-5 +/- 2").abs_upper().str(5, radius=False))
7.6158
acos(s)

Inverse cosine \(\operatorname{acos}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(2).acos(), dps=25)
1.316957896924816708625046j
acosh(s)

Inverse hyperbolic cosine \(\operatorname{acosh}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(2,3).acosh(), dps=25)
1.983387029916535432347077 + 1.000143542473797218521038j
agm(s, t=None)

Arithmetic-geometric mean \(M(s,t)\), or \(M(s) = M(s,1)\) if no extra parameter is passed.

>>> from flint import showgood
>>> showgood(lambda: acb(2).agm(), dps=25)
1.456791031046906869186432
>>> showgood(lambda: acb(1,1).agm(), dps=25)
1.049160528732780220531827 + 0.4781557460881612293261882j
>>> showgood(lambda: (acb(-95,-65)/100).agm(acb(684,747)/1000), dps=25)
-0.3711072435676023931065922 + 0.3199561471173686568561674j
airy(s)

Computes the Airy function values \(\operatorname{Ai}(s)\), \(\operatorname{Ai}'(s)\), \(\operatorname{Bi}(s)\), \(\operatorname{Bi}'(s)\) simultaneously, returning a tuple.

>>> from flint import showgood
>>> showgood(lambda: acb(-1+1j).airy(), dps=5)
(0.82212 - 0.11997j, -0.37906 - 0.60450j, 0.21429 + 0.67392j, 0.83447 - 0.34653j)
airy_ai(s, int derivative=0)

Airy function \(\operatorname{Ai}(s)\), or \(\operatorname{Ai}'(s)\) if derivative is 1.

>>> from flint import showgood
>>> showgood(lambda: acb(-1+1j).airy_ai(), dps=25)
0.8221174265552725939610246 - 0.1199663426644243438939006j
>>> showgood(lambda: acb(-1+1j).airy_ai(derivative=1), dps=25)
-0.3790604792268334962367164 - 0.6045001308622460716372591j
airy_bi(s, int derivative=0)

Airy function \(\operatorname{Bi}(s)\), or \(\operatorname{Bi}'(s)\) if derivative is 1.

>>> from flint import showgood
>>> showgood(lambda: acb(-1+1j).airy_bi(), dps=25)
0.2142904015348735739780868 + 0.6739169237227052095951775j
>>> showgood(lambda: acb(-1+1j).airy_bi(derivative=1), dps=25)
0.8344734885227826369040951 - 0.3465260632668285285537957j
arg(self)

Complex argument (phase).

>>> from flint import showgood
>>> showgood(lambda: acb("3.3").arg(), dps=25)
0
>>> showgood(lambda: acb(-1).arg(), dps=25)
3.141592653589793238462643
>>> acb(-1, "+/- 1").arg()
[+/- 3.15]
asin(s)

Inverse sine \(\operatorname{asin}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(2).asin(), dps=25)
1.570796326794896619231322 - 1.316957896924816708625046j
asinh(s)

Inverse hyperbolic sine \(\operatorname{asinh}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(2,3).asinh(), dps=25)
1.968637925793096291788665 + 0.9646585044076027920454111j
atan(s)

Computes the inverse tangent \(\operatorname{atan}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).atan(), dps=25)
1.338972522294493561124194 + 0.4023594781085250936501898j
atanh(s)

Inverse hyperbolic tangent \(\operatorname{atanh}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(2,3).atanh(), dps=25)
0.1469466662255297520474328 + 1.338972522294493561124194j
barnes_g(s)

Barnes G-function \(G(s)\).

>>> acb(8).barnes_g()
24883200.0000000
>>> from flint import showgood
>>> showgood(lambda: acb(2+3j).barnes_g(), dps=25)
-0.1781021386408216960641890 + 0.04504542715447837909120582j
bernoulli_poly(s, ulong n)

Returns the value of the Bernoulli polynomial \(B_n(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(0.25+0.25j).bernoulli_poly(5), dps=25)
-0.05859375000000000000000000 + 0.006510416666666666666666667j
bessel_i(self, n, bool scaled=False)

Bessel function \(I_n(z)\), where the argument z is given by self and the order n is passed as an extra parameter. Optionally a scaled Bessel function can be computed.

>>> from flint import showgood
>>> showgood(lambda: acb(5).bessel_i(1), dps=25)
24.33564214245052719914305
>>> showgood(lambda: acb(5).bessel_i(1, scaled=True), dps=25)
0.1639722669445423569261229
bessel_j(self, n)

Bessel function \(J_n(z)\), where the argument z is given by self and the order n is passed as an extra parameter.

>>> from flint import showgood
>>> showgood(lambda: acb(5).bessel_j(1), dps=25)
-0.3275791375914652220377343
>>> showgood(lambda: acb(2+3j).bessel_j(1+2j), dps=25)
0.5041904509946947234759103 - 0.1765180072689450645147231j
bessel_k(self, n, bool scaled=False)

Bessel function \(K_n(z)\), where the argument z is given by self and the order n is passed as an extra parameter. Optionally a scaled Bessel function can be computed.

>>> from flint import showgood
>>> showgood(lambda: acb(5).bessel_k(1), dps=25)
0.004044613445452164208365022
>>> showgood(lambda: acb(5).bessel_k(1, scaled=True), dps=25)
0.6002738587883125829360457
>>> showgood(lambda: acb(2+3j).bessel_k(1+2j), dps=25)
-0.09884736370006798963642719 - 0.02870616366668971734065520j
bessel_y(self, n)

Bessel function \(Y_n(z)\), where the argument z is given by self and the order n is passed as an extra parameter.

>>> from flint import showgood
>>> showgood(lambda: acb(5).bessel_y(1), dps=25)
0.1478631433912268448010507
beta_lower(self, a, b, int regularized=0)

Lower incomplete beta function \(B(a,b;z)\). The argument z is given by self and the parameters a and b are passed as extra function arguments. Optionally the regularized version of this function can be computed.

>>> from flint import showgood
>>> showgood(lambda: acb(2,3).beta_lower(1, 2.5), dps=25)
0.2650137734913866999568502 - 7.111836702381954625752124j
>>> showgood(lambda: acb(2,3).beta_lower(1, 2.5, regularized=True), dps=25)
0.6625344337284667498921254 - 17.77959175595488656438031j
bits(self)

Returns maximum of arb.bits() called on real and imaginary part.

>>> acb("2047/2048").bits()
11
chebyshev_t(s, n)

Chebyshev function of the first kind \(T_n(s)\).

>>> from flint import showgood
>>> showgood(lambda: (acb(1)/3).chebyshev_t(3), dps=25)
-0.8518518518518518518518519
chebyshev_u(s, n)

Chebyshev function of the second kind \(U_n(s)\).

>>> from flint import showgood
>>> showgood(lambda: (acb(1)/3).chebyshev_u(3), dps=25)
-1.037037037037037037037037
chi(s)

Hyperbolic cosine integral \(\operatorname{Chi}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(10).chi(), dps=25)
1246.114486042454414726558
ci(s)

Cosine integral \(\operatorname{Ci}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(10).ci(), dps=25)
-0.04545643300445537263453283
complex_rad(self)

Returns an acb representing the radii of the real and imaginary parts of self together a single complex number.

>>> print(acb("1 +/- 0.3", "2 +/- 0.4").complex_rad().str(5, radius=False))
0.30000 + 0.40000j
conjugate(self, bool exact=False)
contains(self, other)
contains_integer(self)
contains_interior(self, other)
cos(s)

Cosine function \(\cos(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).cos(), dps=25)
2.032723007019665529436343 - 3.051897799151800057512116j
cos_pi(s)

Cosine function \(\cos(\pi s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).cos_pi(), dps=25)
-267.7467614837482222459319
cosh(s)

Hyperbolic cosine function \(\cosh(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(2,3).cosh(), dps=25)
-3.724545504915322565473971 + 0.5118225699873846088344638j
cot(s)

Cotangent function \(\cot(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).cot(), dps=25)
0.03279775553375259406276455 - 0.9843292264581910294718882j
cot_pi(s)

Cotangent function \(\cot(\pi s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).cot_pi(), dps=25)
-1.000006974709035616233122j
coth(s)

Hyperbolic cotangent function \(\coth(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(2,3).coth(), dps=25)
1.035746637764995396112759 + 0.01060478347033710175031690j
coulomb(self, l, eta)

Computes the Coulomb wave functions \(F_{\ell}(\eta,z)\), \(G_{\ell}(\eta,z)\), \(H^{+}_{\ell}(\eta,z)\), \(H^{-}_{\ell}(\eta,z)\) where z is given by self. All function values are computed simultaneously and a tuple is returned.

>>> from flint import showgood
>>> showgood(lambda: acb(1).coulomb(0.5, 0.25), dps=10)
(0.4283180781, 1.218454487, 1.218454487 + 0.4283180781j, 1.218454487 - 0.4283180781j)
coulomb_f(self, l, eta)

Regular Coulomb wave function \(F_{\ell}(\eta,z)\) where z is given by self.

>>> from flint import showgood
>>> showgood(lambda: acb(1+1j).coulomb_f(0.5, 0.25), dps=25)
0.3710338871231483199425544 + 0.7267604204004146050054782j
coulomb_g(self, l, eta)

Irregular Coulomb wave function \(G_{\ell}(\eta,z)\) where z is given by self.

>>> from flint import showgood
>>> showgood(lambda: acb(1+1j).coulomb_g(0.5, 0.25), dps=25)
1.293346292234270672155324 - 0.3516893313311703662702556j
csc(s)

Cosecant function \(\sec(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(2,3).csc(), dps=25)
0.09047320975320743980579048 + 0.04120098628857412646300981j
csch(s)

Hyperbolic cosecant function \(\operatorname{csch}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(2,3).csch(), dps=25)
-0.2725486614629401995124985 - 0.04030057885689152187513248j
csgn(self)

Complex sign function defined as a piecewise extension of the real sign function.

>>> from flint import showgood
>>> showgood(lambda: acb(2,3).csgn(), dps=25)
1.000000000000000000000000
>>> showgood(lambda: acb(-1).csgn(), dps=25)
-1.000000000000000000000000
static dft(vec, bool inverse=False)

Returns the discrete Fourier transform (DFT) of a given iterable vec. The output is a list of acb entries. If inverse is True, computes the inverse transform instead.

>>> for c in acb.dft(acb.dft(range(1,12)), inverse=True):
...     print(c)
...
[1.000000000000 +/- 1.06e-13] + [+/- 8.66e-14]j
[2.000000000000 +/- 1.25e-13] + [+/- 1.17e-13]j
[3.000000000000 +/- 1.29e-13] + [+/- 1.21e-13]j
[4.000000000000 +/- 1.34e-13] + [+/- 1.22e-13]j
[5.000000000000 +/- 1.40e-13] + [+/- 1.24e-13]j
[6.000000000000 +/- 1.50e-13] + [+/- 1.26e-13]j
[7.000000000000 +/- 1.43e-13] + [+/- 1.26e-13]j
[8.000000000000 +/- 1.47e-13] + [+/- 1.23e-13]j
[9.000000000000 +/- 1.47e-13] + [+/- 1.22e-13]j
[10.00000000000 +/- 1.50e-13] + [+/- 1.20e-13]j
[11.000000000000 +/- 1.43e-13] + [+/- 1.22e-13]j
>>> sum(acb.dft(acb.dft(range(1,10001)), inverse=True)).contains(50005000)
True
digamma(s)

Digamma function \(\psi(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).digamma(), dps=25)
0.7145915153739775266568699 + 1.320807282642230228386088j
dirichlet_eta(s)

Dirichlet eta function \(\eta(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1).dirichlet_eta(), dps=25)
0.6931471805599453094172321
>>> showgood(lambda: acb(0).dirichlet_eta(), dps=25)
0.5000000000000000000000000
>>> showgood(lambda: acb(0.5+10000j).dirichlet_eta(), dps=25)
-0.08240476492345768707759740 - 0.4458305781469329610368705j
dirichlet_l(s, chi)
ei(s)

Exponential integral \(\operatorname{Ei}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(10).ei(), dps=25)
2492.228976241877759138440
elliptic_e(m)
Complete elliptic integral of the second kind \(E(m)\).
>>> from flint import showgood
>>> showgood(lambda: 2 * acb(0).elliptic_e(), dps=25)
3.141592653589793238462643
>>> showgood(lambda: acb(100+50j).elliptic_e(), dps=25)
2.537235535915583230880553 - 10.10997759792420947130321j
>>> showgood(lambda: (1 - acb("1e-100")).elliptic_e(), dps=25)
1.000000000000000000000000
static elliptic_e_inc(phi, m, bool pi=False)

Incomplete elliptic integral \(E(\phi,m)\).

>>> from flint import showgood
>>> showgood(lambda: acb.elliptic_e_inc(2, 0.75), dps=25)
1.443433069099461566497882
>>> showgood(lambda: acb.elliptic_e_inc(2, 0.75, pi=True), dps=25)
4.844224110273838099214252
static elliptic_f(phi, m, bool pi=False)

Incomplete elliptic integral \(F(\phi,m)\).

>>> from flint import showgood
>>> showgood(lambda: acb.elliptic_f(2, 0.75), dps=25)
2.952569673655779502336268
>>> showgood(lambda: acb.elliptic_f(2, 0.75, pi=True), dps=25)
8.626062589998572941754700
elliptic_inv_p(self, tau)

Inverse Weierstrass elliptic function \(\sigma^{-1}(z, \tau)\) where z is given by self.

>>> from flint import showgood
>>> showgood(lambda: acb("1/3","1/5").elliptic_p(1j).elliptic_inv_p(1j), dps=25)
0.3333333333333333333333333 + 0.2000000000000000000000000j
elliptic_invariants(tau)

Returns the lattice invariants \(g_2, g_3\) given the lattice parameter \(\tau\).

>>> from flint import showgood
>>> showgood(lambda: acb(0.5+1j).elliptic_invariants(), dps=25)
(72.64157667926127619414883, 536.6642788346023116199232)
elliptic_k(m)

Complete elliptic integral of the first kind \(K(m)\).

>>> from flint import showgood
>>> showgood(lambda: 2 * acb(0).elliptic_k(), dps=25)
3.141592653589793238462643
>>> showgood(lambda: acb(100+50j).elliptic_k(), dps=25)
0.2052037361984861505113972 + 0.3158446040520529200980591j
>>> showgood(lambda: (1 - acb("1e-100")).elliptic_k(), dps=25)
116.5155490108221748197340
elliptic_p(self, tau)

Weierstrass elliptic function \(\wp(z, \tau)\) where z is given by self.

>>> from flint import showgood
>>> showgood(lambda: acb("1/3","1/5").elliptic_p(1j), dps=25)
3.686380646078879780287811 - 4.591498371497259422829963j
>>> showgood(lambda: acb("1/3","6/5").elliptic_p(1j), dps=25)
3.686380646078879780287811 - 4.591498371497259422829963j
static elliptic_pi(n, m)

Complete elliptic integral \(\Pi(n,m)\).

>>> from flint import showgood
>>> showgood(lambda: acb.elliptic_pi(0.25, 0.125), dps=25)
1.879349451879603826415650
static elliptic_pi_inc(n, phi, m, bool pi=False)

Incomplete elliptic integral \(\Pi(n,\phi,m)\).

>>> from flint import showgood
>>> showgood(lambda: acb.elliptic_pi_inc(0.25, 0.5, 0.125), dps=25)
0.5128718023282086251399279
>>> showgood(lambda: acb.elliptic_pi_inc(0.25, 0.5, 0.125, pi=True), dps=25)
1.879349451879603826415650
static elliptic_rc(x, y)

Carlson incomplete elliptic integral \(R_C(x,y)\).

>>> from flint import showgood
>>> showgood(lambda: acb.elliptic_rc(1, 2+3j), dps=25)
0.5952169239306156198937085 - 0.2387981909090509407085918j
static elliptic_rd(x, y, z)

Carlson incomplete elliptic integral \(R_D(x,y,z)\).

>>> from flint import showgood
>>> showgood(lambda: acb.elliptic_rd(1, 2, 1+2j), dps=25)
0.2043722510302629773408686 - 0.3559745898273715996616328j
static elliptic_rf(x, y, z)

Carlson incomplete elliptic integral \(R_F(x,y,z)\).

>>> from flint import showgood
>>> showgood(lambda: acb.elliptic_rf(1, 2+3j, 3+4j), dps=25)
0.5577655465453921610327459 - 0.2202042457195556054465308j
static elliptic_rg(x, y, z)

Carlson incomplete elliptic integral \(R_G(x,y,z)\).

>>> from flint import showgood
>>> showgood(lambda: acb.elliptic_rg(1, 2, 1+2j), dps=25)
1.206557168056722980475052 + 0.2752176688707739710008275j
static elliptic_rj(x, y, z, p)

Carlson incomplete elliptic integral \(R_J(x,y,z,p)\).

>>> from flint import showgood
>>> showgood(lambda: acb.elliptic_rj(1, 2, 1+2j, 2+3j), dps=25)
0.1604659632144333057202530 - 0.2502751672723324201692394j
elliptic_roots(tau)

Returns the elliptic roots \(e_1, e_2, e_3\) given the lattice parameter \(\tau\).

>>> from flint import showgood
>>> showgood(lambda: acb(0.5+1j).elliptic_roots(), dps=10)
(6.285388119, -3.142694059 + 3.386618325j, -3.142694059 - 3.386618325j)
elliptic_sigma(self, tau)

Weierstrass elliptic function \(\sigma(z, \tau)\) where z is given by self.

>>> from flint import showgood
>>> showgood(lambda: acb("1/3","1/5").elliptic_sigma(1j), dps=25)
0.3396549497136886526515370 + 0.1970690762350931272896772j
elliptic_zeta(self, tau)

Weierstrass elliptic function \(\zeta(z, \tau)\) where z is given by self.

>>> from flint import showgood
>>> showgood(lambda: acb("1/3","1/5").elliptic_zeta(1j), dps=25)
2.219680339508418716159086 - 1.504947925755241700681002j
erf(s)

Error function \(\operatorname{erf}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(2+3j).erf() - 1, dps=25)
-21.82946142761456838910309 + 8.687318271470163144428079j
>>> showgood(lambda: acb("77.7").erf() - 1, dps=25, maxdps=10000)
-7.929310690520378873143053e-2625
erfc(s)

Complementary error function \(\operatorname{erfc}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb("77.7").erfc(), dps=25)
7.929310690520378873143053e-2625
erfi(s)

Imaginary error function \(\operatorname{erfi}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(10).erfi(), dps=25)
1.524307422708669699360547e+42
exp(s)

Exponential function \(\exp(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).exp(), dps=25)
-1.131204383756813638431255 + 2.471726672004818927616931j
exp_pi_i(s)

Exponential function of modified argument \(\exp(\pi i s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).exp_pi_i(), dps=25)
-0.001867442731707988814430213
>>> showgood(lambda: acb(1.5,2.5).exp_pi_i(), dps=25)
-0.0003882032039267662472325299j
>>> showgood(lambda: acb(1.25,2.25).exp_pi_i(), dps=25)
-0.0006020578259597635239581705 - 0.0006020578259597635239581705j
expint(self, s)

Generalized exponential integral \(E_s(z)\). The argument z is given by self and the order s is passed as an extra parameter.

>>> from flint import showgood
>>> showgood(lambda: acb(2+3j).expint(1+2j), dps=25)
-0.01442661495527080336037156 + 0.01942348372986687164972794j
expm1(s)

Exponential function \(\exp(s)-1\), computed accurately for small s.

>>> from flint import showgood
>>> showgood(lambda: acb("1e-10000").expm1(), dps=25)
1.000000000000000000000000e-10000
fresnel_c(s, bool normalized=True)

Fresnel cosine integral \(C(s)\), optionally not normalized.

>>> from flint import showgood
>>> showgood(lambda: acb(3).fresnel_c(), dps=25)
0.6057207892976856295561611
>>> showgood(lambda: acb(3).fresnel_c(normalized=False), dps=25)
0.7028635577302687301744099
fresnel_s(s, bool normalized=True)

Fresnel sine integral \(S(s)\), optionally not normalized.

>>> from flint import showgood
>>> showgood(lambda: acb(3).fresnel_s(), dps=25)
0.4963129989673750360976123
>>> showgood(lambda: acb(3).fresnel_s(normalized=False), dps=25)
0.7735625268937690171497722
gamma(s)

Gamma function \(\Gamma(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).gamma(), dps=25)
0.1519040026700361374481610 + 0.01980488016185498197191013j
gamma_lower(self, s, int regularized=0)

Lower incomplete gamma function \(\gamma(s,z)\). The argument z is given by self and the order s is passed as an extra parameter. Optionally the regularized versions \(P(s,z)\) and \(\gamma^{*}(s,z) = z^{-s} P(s,z)\) can be computed.

>>> from flint import showgood
>>> showgood(lambda: acb(2+3j).gamma_lower(2.5), dps=25)
1.646077010134876664349297 + 1.140585862703100904414519j
>>> showgood(lambda: acb(2+3j).gamma_lower(2.5, regularized=1), dps=25)
1.238266003780709160156983 + 0.8580088838385611055576971j
>>> showgood(lambda: acb(2+3j).gamma_lower(2.5, regularized=2), dps=25)
-0.01687942194354244633506487 - 0.05864800341005793099108467j
gamma_upper(self, s, int regularized=0)

Upper incomplete gamma function \(\Gamma(s,z)\). The argument z is given by self and the order s is passed as an extra parameter. Optionally the regularized version \(Q(s,z)\) can be computed.

>>> from flint import showgood
>>> showgood(lambda: acb(2+3j).gamma_upper(1+2j), dps=25)
0.02614303924198793235765248 - 0.0007536537278463329391666679j
>>> showgood(lambda: acb(2+3j).gamma_upper(1+2j, regularized=True), dps=25)
0.1685897763996036749499208 - 0.02694171301624093921683609j
gegenbauer_c(s, n, m)

Gegenbauer function \(C_n^{m}(s)\).

>>> from flint import showgood
>>> showgood(lambda: (acb(1)/3).gegenbauer_c(5, 0.25), dps=25)
0.1321855709876543209876543
hermite_h(s, n)

Hermite function \(H_n(s)\).

>>> from flint import showgood
>>> showgood(lambda: (acb(1)/3).hermite_h(5), dps=25)
34.20576131687242798353909
hypgeom(self, a, b, bool regularized=False, long n=-1)

Generalized hypergeometric function \({}_pF_q(a;b;z)\). The argument z is given by self and a and b are additional lists of complex numbers defining the parameters. Optionally the regularized hypergeometric function can be computed.

>>> from flint import fmpq
>>> from flint import showgood
>>> showgood(lambda: acb.pi().hypgeom([1+1j, 2-2j], [3, fmpq(1,3)]), dps=25)  # 2F2
144.9760711583421645394627 - 51.06535684838559608699106j
>>> showgood(lambda: acb.pi().hypgeom([1+1j, 2-2j], [3, fmpq(1,3)], regularized=True), dps=25)
27.05849150326959272369764 - 9.530893707861133993129862j

The optional parameter n, if nonnegative, controls the number of terms to add in the hypergeometric series. This is just a tuning parameter: a rigorous error bound is computed regardless of n.

hypgeom_0f1(self, a, bool regularized=False)

Hypergeometric function \({}_0F_1(a,z)\) where the argument z is given by self Optionally the regularized version of this function can be computed.

>>> from flint import showgood
>>> showgood(lambda: acb(-5).hypgeom_0f1(2.5), dps=25)
0.003114611044402738470826907
>>> showgood(lambda: acb(-5).hypgeom_0f1(2.5, regularized=True), dps=25)
0.002342974810739764377177885
hypgeom_1f1(self, a, b, bool regularized=False)

Kummer’s confluent hypergeometric function \({}_1F_1(a,b,z)\) where z is given by self.. Optionally, computes the regularized version.

>>> from flint import showgood
>>> showgood(lambda: acb(40000+50000j).hypgeom_1f1(2+3j, 3+4j), dps=25)
3.730925582634533963357515e+17366 + 3.199717318207534638202987e+17367j
>>> showgood(lambda: acb(40000+50000j).hypgeom_1f1(2+3j, 3+4j) / acb(3+4j).gamma(), dps=25)
-1.846160890579724375436801e+17368 + 2.721369772032882467996588e+17367j
>>> showgood(lambda: acb(10).hypgeom_1f1(5, -3, regularized=True), dps=25)
832600407043.6938843410086
>>> showgood(lambda: acb(10).hypgeom_1f1(-5,-6), dps=25)
403.7777777777777777777778
>>> showgood(lambda: acb(10).hypgeom_1f1(-5,-5,regularized=True), dps=25)
0
>>> showgood(lambda: acb(10).hypgeom_1f1(-5,-6,regularized=True), dps=25)
0
>>> showgood(lambda: acb(10).hypgeom_1f1(-5,-4,regularized=True), dps=25)
-100000.0000000000000000000
hypgeom_2f1(self, a, b, c, bool regularized=False, bool ab=False, bool ac=False, bc=False, abc=False)

The hypergeometric function \({}_2F_1(a,b,c,z)\) where the argument z is given by self Optionally the regularized version of this function can be computed.

>>> from flint import showgood
>>> showgood(lambda: acb(5).hypgeom_2f1(1,2,3), dps=25)
-0.5109035488895912495067571 - 0.2513274122871834590770115j
>>> showgood(lambda: acb(5).hypgeom_2f1(1,2,3,regularized=True), dps=25)
-0.2554517744447956247533786 - 0.1256637061435917295385057j

The flags ab, ac, bc, abc can be used to specify whether the parameter differences \(a-b\), \(a-c\), \(b-c\) and \(a+b-c\) represent exact integers, even if the input intervals are inexact. If the parameters are exact, these flags are not needed.

>>> from flint import arb
>>> from flint import showgood
>>> showgood(lambda: acb("11/10").hypgeom_2f1(arb(2).sqrt(), 0.5, arb(2).sqrt()+1.5, abc=True), dps=25)
1.801782659480054173351004 - 0.3114019850045849100659641j
>>> showgood(lambda: acb("11/10").hypgeom_2f1(arb(2).sqrt(), 0.5, arb(2).sqrt()+1.5), dps=25)
Traceback (most recent call last):
  ...
ValueError: no convergence (maxprec=960, try higher maxprec)
hypgeom_u(self, a, b, long n=-1, bool asymp=False)

Tricomi’s confluent hypergeometric function \(U(a,b,z)\) where z is given by self.

If asymp is set to True the asymptotic series is forced. If \(|z|\) is small, the attainable accuracy is then limited. The optional parameter n, if nonnegative, controls the number of terms to add in the asymptotic series. This is just a tuning parameter: a rigorous error bound is computed regardless of n.

>>> from flint import showgood
>>> showgood(lambda: acb(400+500j).hypgeom_u(1+1j, 2+3j), dps=25)
0.001836433961463105354717547 - 0.003358699641979853540147122j
>>> showgood(lambda: acb(-30).hypgeom_u(1+1j, 2+3j), dps=25)
0.7808944974399200669072087 - 0.2674783064947089569672470j
>>> print(acb(-30).hypgeom_u(1+1j, 2+3j, n=0, asymp=True))
[+/- 3.41] + [+/- 3.41]j
>>> print(acb(-30).hypgeom_u(1+1j, 2+3j, n=30, asymp=True))
[0.7808944974 +/- 7.46e-11] + [-0.2674783065 +/- 3.31e-11]j
>>> print(acb(-30).hypgeom_u(1+1j, 2+3j, n=60, asymp=True))
[0.78089 +/- 8.14e-6] + [-0.26748 +/- 5.34e-6]j
imag
static integral(func, a, b, params=None, rel_tol=None, abs_tol=None, deg_limit=None, eval_limit=None, depth_limit=None, use_heap=None, verbose=None)

Computes the integral \(\int_a^b f(x) dx\) where the integrand f is defined by func.

>>> from flint import arb
>>> from flint import showgood
>>> showgood(lambda: acb.integral(lambda x, _: x.sin(), 0, arb.pi()), dps=25)
2.000000000000000000000000
>>> showgood(lambda: acb.integral(lambda x, _: (x + x.sin()).gamma(), 1, 1+1j), dps=25)
-0.2732681890680958866139676 + 0.7064496061603478580993410j

The function func takes two parameters as input: the argument x and a boolean flag analytic. If analytic is False, func should return \(f(x)\), and in this case there are no restrictions on f; for instance, the integrand can be discontinuous on x. If analytic is True, func must verify that f is analytic on x, and if not, return a non-finite ball instead of \(f(x)\).

The analytic flag can be ignored for meromorphic functions, because evaluation at poles automatically leads to non-finite balls. However, it must be checked for functions that are non-analytic in some regions (for instance, functions with branch cuts such as \(\sqrt{x}\) and \(\log(x)\)), even if the integration path does not touch any non-analytic points. Some methods have an analytic option built-in, so the user simply has to forward this flag:

>>> from flint import showgood
>>> showgood(lambda: acb.integral(lambda x, _: x.sqrt(), 1, 4), dps=25)  # WRONG!!!
4.669414894781006338774348
>>> showgood(lambda: acb.integral(lambda x, a: x.sqrt(analytic=a), 1, 4), dps=25)  # correct
4.666666666666666666666667

The following works without handling the analytic flag, because the integrand is meromorphic:

>>> from flint import showgood
>>> showgood(lambda: acb.integral(lambda x, _: x.sech(), -1000, 1000), dps=25)
3.141592653589793238462643

The options rel_tol and abs_tol specify the relative and absolute tolerance goal for the integration. Both default to \(2^{-p}\) where p is the current precision.

The options deg_limit, eval_limit, depth_limit and use_heap allow control over the amount of work done before aborting; see the documentation for acb_calc_integrate for details.

is_exact(self) bool
is_finite(self) bool
is_zero(self) bool
jacobi_p(s, n, a, b)

Jacobi polynomial (or Jacobi function) \(P_n^{a,b}(s)\).

>>> from flint import showgood
>>> showgood(lambda: (acb(1)/3).jacobi_p(5, 0.25, 0.5), dps=25)
0.4131944444444444444444444
laguerre_l(s, n, m=0)

Laguerre function \(L_n^{m}(s)\).

>>> from flint import showgood
>>> showgood(lambda: (acb(1)/3).laguerre_l(5, 0.25), dps=25)
0.03871323490012002743484225
lambertw(s, branch=0, bool left=False, bool middle=False)

Lambert W function, \(W_k(s)\) where k is given by branch.

>>> from flint import showgood
>>> showgood(lambda: acb(1).lambertw(), dps=25)
0.5671432904097838729999687
>>> showgood(lambda: acb(1).lambertw(-1), dps=25)
-1.533913319793574507919741 - 4.375185153061898385470907j
>>> showgood(lambda: acb(1).lambertw(-2), dps=25)
-2.401585104868002884174140 - 10.77629951611507089849710j

The branch cuts follow Corless et al. by default. This function allows selecting alternative branch cuts in order to support continuous analytic continuation on complex intervals.

If left is set, computes \(W_{\mathrm{left}|k}(z)\) which corresponds to \(W_k(z)\) in the upper half plane and \(W_{k+1}(z)\) in the lower half plane, connected continuously to the left of the branch points. In other words, the branch cut on \((-\infty,0)\) is rotated counterclockwise to \((0,+\infty)\). (For \(k = -1\) and \(k = 0\), there is also a branch cut on \((-1/e,0)\), continuous from below instead of from above to maintain counterclockwise continuity.)

If middle is set, computes \(W_{\mathrm{middle}}(z)\) which corresponds to \(W_{-1}(z)\) in the upper half plane and \(W_{1}(z)\) in the lower half plane, connected continuously through \((-1/e,0)\) with branch cuts on \((-\infty,-1/e)\) and \((0,+\infty)\). \(W_{\mathrm{middle}}(z)\) extends the real analytic function \(W_{-1}(x)\) defined on \((-1/e,0)\) to a complex analytic function, whereas the standard branch \(W_{-1}(z)\) has a branch cut along the real segment.

>>> acb(-5,"+/- 1e-20").lambertw()
[0.844844605432170 +/- 6.18e-16] + [+/- 1.98]j
>>> acb(-5,"+/- 1e-20").lambertw(left=True)
[0.844844605432170 +/- 7.85e-16] + [1.97500875488903 +/- 4.05e-15]j
>>> acb(-5,"+/- 1e-20").lambertw(-1, left=True)
[0.844844605432170 +/- 7.85e-16] + [-1.97500875488903 +/- 4.05e-15]j
>>> acb(-0.25,"+/- 1e-20").lambertw(middle=True)
[-2.15329236411035 +/- 1.48e-15] + [+/- 4.87e-16]j
legendre_p(s, n, m=0, int type=2)

Legendre function of the first kind \(P_n^m(z)\).

>>> from flint import showgood
>>> showgood(lambda: (acb(1)/3).legendre_p(5), dps=25)
0.3333333333333333333333333
>>> showgood(lambda: (acb(1)/3).legendre_p(5, 1.5), dps=25)
-2.372124991643971726805456
>>> showgood(lambda: (acb(3)).legendre_p(5, 1.5, type=2), dps=25)
-12091.31397811720689120900 - 12091.31397811720689120900j
>>> showgood(lambda: (acb(3)).legendre_p(5, 1.5, type=3), dps=25)
17099.70021476473458984981

The optional parameter type can be 2 or 3, and selects between two different branch cut conventions (see Mathematica and mpmath).

legendre_q(s, n, m=0, int type=2)

Legendre function of the second kind \(Q_n^m(z)\).

>>> from flint import showgood
>>> showgood(lambda: (acb(1)/3).legendre_q(5), dps=25)
0.1655245300933242182362054
>>> showgood(lambda: (acb(1)/3).legendre_q(5, 1.5), dps=25)
-6.059967350218583975575616
>>> showgood(lambda: (acb(3)).legendre_q(5, 1.5, type=2), dps=25)
-18992.99179585607569083751 + 18992.99179585607569083751j
>>> showgood(lambda: (acb(3)).legendre_q(5, 1.5, type=3), dps=25)
-0.0003010942389043591251820434j

The optional parameter type can be 2 or 3, and selects between two different branch cut conventions (see Mathematica and mpmath).

lerch_phi(z, s, a)

Lerch transcendent \(\Phi(z,s,a)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).lerch_phi(3, 4), dps=25)
0.006872751459699249251487346 + 0.01112535314686351879432212j
lgamma(s)

Logarithmic gamma function \(\log \Gamma(s)\). The function is defined to be continuous away from the negative half-axis and thus differs from \(\log(\Gamma(s))\) in general.

>>> from flint import arb
>>> from flint import showgood
>>> showgood(lambda: acb(1,2).lgamma(), dps=25)
-1.876078786430929341229996 + 0.1296463163097883113837075j
>>> showgood(lambda: (acb(0,10).lgamma() - acb(0,10).gamma().log()).imag / arb.pi(), dps=25)
4.000000000000000000000000
li(s, bool offset=False)

Logarithmic integral \(\operatorname{li}(s)\), optionally the offset logarithmic integral \(\operatorname{Li}(s) = \operatorname{li}(s) - \operatorname{li}(2)\).

>>> from flint import showgood
>>> showgood(lambda: acb(10).li(), dps=25)
6.165599504787297937522982
>>> showgood(lambda: acb(10).li(offset=True), dps=25)
5.120435724669805152678393
log(s, bool analytic=False)

Natural logarithm \(\log(s)\). The analytic flag allows verifying that the branch cut is not touched; this is useful for numerical integration.

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).log(), dps=25)
0.8047189562170501873003797 + 1.107148717794090503017065j
>>> showgood(lambda: acb(-5).log(), dps=25)
1.609437912434100374600759 + 3.141592653589793238462643j
log1p(s)

Computes \(\log(1+s)\), accurately for small s.

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).log1p(), dps=25)
1.039720770839917964125848 + 0.7853981633974483096156608j
>>> showgood(lambda: acb(0,"1e-100000000000000000").log1p(), dps=25)
5.000000000000000000000000e-200000000000000001 + 1.000000000000000000000000e-100000000000000000j
log_barnes_g(s)

Logarithmic Barnes G-function \(\log G(s)\). Like the logarithmic gamma function, continuous analytic continuation is implied.

>>> from flint import showgood
>>> showgood(lambda: acb(2+3j).log_barnes_g(), dps=25)
-1.694395396880976849503750 - 3.389316783507118550918827j
>>> showgood(lambda: acb(2+3j).barnes_g().log(), dps=25)
-1.694395396880976849503750 + 2.893868523672467926006460j
log_sin_pi(s)

Logarithmic sine function with analytic continuation defined to be consistent with the functional equation of the log gamma function.

>>> from flint import showgood
>>> showgood(lambda: acb(5+2j).log_sin_pi(), dps=25)
5.590034639271204166020651 - 14.13716694115406957308190j
>>> showgood(lambda: acb(5+2j).sin_pi().log(), dps=25)
5.590034639271204166020651 - 1.570796326794896619231322j
mid(self)

Returns an exact acb representing the midpoint of self:

>>> acb("1 +/- 0.3", "2 +/- 0.4").mid()
1.00000000000000 + 2.00000000000000j
modular_delta(tau)

Modular discriminant \(\Delta(\tau)\).

>>> from flint import showgood
>>> showgood(lambda: acb(0.25+5j).modular_delta(), dps=25)
1.237896015010281684100435e-26 + 2.271101068324093838679275e-14j
modular_eta(tau)

Dedekind eta function \(\eta(\tau)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1+1j).modular_eta(), dps=25)
0.7420487758365647263392722 + 0.1988313702299107190516142j
modular_j(tau)

Modular j-invariant \(j(\tau)\).

>>> from flint import showgood
>>> showgood(lambda: (1 + acb(-163).sqrt()/2).modular_j(), dps=25)
262537412640769488.0000000
>>> showgood(lambda: acb(3.25+100j).modular_j() - 744, dps=25, maxdps=2000)
-3.817428033843319485125773e-539 - 7.503618895582604309279721e+272j
modular_lambda(tau)

Modular lambda function \(\lambda(\tau)\).

>>> from flint import showgood
>>> showgood(lambda: acb(0.25+5j).modular_lambda(), dps=25)
1.704995415668039343330405e-6 + 1.704992508662079437786598e-6j
modular_theta(z, tau, ulong r=0)

Computes the Jacobi theta functions \(\theta_1(z,\tau)\), \(\theta_2(z,\tau)\), \(\theta_3(z,\tau)\), \(\theta_4(z,\tau)\), returning all four values as a tuple. We define the theta functions with a factor \(\pi\) for z included; for example \(\theta_3(z,\tau) = 1 + 2 \sum_{n=1}^{\infty} q^{n^2} \cos(2n\pi z)\).

>>> from flint import showgood
>>> for i in range(4):
...     showgood(lambda: acb(1+1j).modular_theta(1.25+3j)[i], dps=25)
...
1.820235910124989594900076 - 1.216251950154477951760042j
-1.220790267576967690128359 - 1.827055516791154669091679j
0.9694430387796704100046143 - 0.03055696120816803328582847j
1.030556961196006476576271 + 0.03055696120816803328582847j
neg(self, bool exact=False)
overlaps(self, other)
static pi()

Returns the constant \(\pi\) as an acb.

>>> from flint import showgood
>>> showgood(lambda: acb.pi(), dps=25)
3.141592653589793238462643
polygamma(self, s)

Polygamma function \(\psi_s(z)\) where z is given by self.

>>> from flint import showgood
>>> showgood(lambda: acb(2+3j).polygamma(2), dps=25)
0.05267618908093586035755719 + 0.07303622933440580692454450j
polylog(self, s)

Computes the polylogarithm \(\operatorname{Li}_s(z)\) where the argument z is given by self and the order s is given as an extra parameter.

>>> from flint import showgood
>>> showgood(lambda: acb(3).polylog(2), dps=25)
2.320180423313098396406194 - 3.451392295223202661433821j
>>> showgood(lambda: acb(2,3).polylog(1+2j), dps=25)
-6.854984251829306907116775 + 7.375884252099214498443165j
pow(s, t, bool analytic=False)

Power \(s^t\). The analytic flag allows verifying that the branch cut is not touched; this is useful for numerical integration.

>>> acb.integral(lambda z, a: z.pow(acb("1/3")), -5-1j, -5+1j)  # WRONG!!!
[+/- 5.03e-15] + [1.81137435753228 +/- 7.32e-15]j
>>> acb.integral(lambda z, a: z.pow(acb("1/3"), analytic=a), -5-1j, -5+1j)
[+/- 2.66e-14] + [1.8108516218463 +/- 3.58e-14]j
rad(self)

Returns an upper bound for the radius (magnitude of error) of self as an arb.

>>> print(acb("1 +/- 0.3", "2 +/- 0.4").rad().str(5, radius=False))
0.50000
real
real_abs(s, bool analytic=False)

Absolute value of a real variable, extended to a piecewise complex analytic function. This function is useful for integration.

>>> f = lambda z, a: (z**3).real_abs(analytic=a)
>>> from flint import showgood
>>> showgood(lambda: acb.integral(f, -1, 1), dps=25)
0.5000000000000000000000000
real_ceil(s, bool analytic=False)

Ceiling function of a real variable, extended to a piecewise complex analytic function. This function is useful for integration.

>>> from flint import showgood
>>> showgood(lambda: acb.integral(lambda x, a: x.real_ceil(analytic=a), 0, 100), dps=15)
5050.00000000000
real_floor(s, bool analytic=False)

Floor function of a real variable, extended to a piecewise complex analytic function. This function is useful for integration.

>>> from flint import showgood
>>> showgood(lambda: acb.integral(lambda x, a: x.real_floor(analytic=a), 0, 100), dps=15)
4950.00000000000
real_heaviside(s, bool analytic=False)

Heaviside step function of a real variable, extended to a piecewise complex analytic function. This function is useful for integration.

>>> acb(-5+2j).real_heaviside(analytic=True)
0
>>> acb(5+2j).real_heaviside(analytic=True)
1.00000000000000
>>> acb(0).real_heaviside(analytic=True)
nan + nanj
>>> acb(0).real_heaviside()
0.500000000000000
real_max(s, t, bool analytic=False)

Maximum value of two real variables, extended to a piecewise complex analytic function. This function is useful for integration.

>>> f = lambda x, a: x.sin().real_max(x.cos(), analytic=a)
>>> from flint import showgood
>>> showgood(lambda: acb.integral(f, 0, acb.pi()))
2.41421356237310
real_min(s, t, bool analytic=False)

Minimum value of two real variables, extended to a piecewise complex analytic function. This function is useful for integration.

>>> f = lambda x, a: x.sin().real_min(x.cos(), analytic=a)
>>> from flint import showgood
>>> showgood(lambda: acb.integral(f, 0, acb.pi()))
-0.414213562373095
real_sgn(s, bool analytic=False)

Sign function of a real variable, extended to a piecewise complex analytic function. This function is useful for integration.

>>> acb(-5+2j).real_sgn()
-1.00000000000000
>>> acb(0).real_sgn()
0
>>> acb(0).real_sgn(analytic=True)
nan + nanj
real_sqrt(s, bool analytic=False)

Square root of a real variable assumed to be nonnegative, extended to a piecewise complex analytic function. This function is useful for integration.

>>> acb.integral(lambda x, a: x.sqrt(analytic=a), 0, 1)
[0.6666666666667 +/- 4.19e-14] + [+/- 1.12e-16]j
>>> acb.integral(lambda x, a: x.real_sqrt(analytic=a), 0, 1)
[0.6666666666667 +/- 4.19e-14]
rel_accuracy_bits(self)
rel_one_accuracy_bits(self)
repr(self)
rgamma(s)

Reciprocal gamma function \(1/\Gamma(s)\), avoiding division by zero at the poles of the gamma function.

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).rgamma(), dps=25)
6.473073626019134501563613 - 0.8439438407732021454882999j
>>> print(acb(0).rgamma())
0
>>> print(acb(-1).rgamma())
0
rising(s, n)

Rising factorial \((s)_n\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).rising(5), dps=25)
-540.0000000000000000000000 - 100.0000000000000000000000j
>>> showgood(lambda: acb(1,2).rising(2+3j), dps=25)
0.3898076751098812033498554 - 0.01296289149274537721607465j
rising2(s, ulong n)

Computes the rising factorial \((s)_n\) where n is an unsigned integer, along with the first derivative with respect to \((s)_n\). The current implementation does not use the gamma function, so n should be moderate.

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).rising2(5), dps=25)
(-540.0000000000000000000000 - 100.0000000000000000000000j, -666.0000000000000000000000 + 420.0000000000000000000000j)
root(s, ulong n)

Principal n-th root of s.

>>> from flint import showgood
>>> showgood(lambda: acb(-1).root(3), dps=25)
0.5000000000000000000000000 + 0.8660254037844386467637232j
>>> showgood(lambda: acb(10,11).root(3), dps=25)
2.364674532267765964410078 + 0.6739866114818132500777466j
rsqrt(s, bool analytic=False)

Reciprocal square root \(1/\sqrt{s}\).

The analytic flag allows verifying that the branch cut is not touched; this is useful for numerical integration.

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).rsqrt(), dps=25)
0.5688644810057831072783079 - 0.3515775842541429284870573j
sec(s)

Secant function \(\sec(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(2,3).sec(), dps=25)
-0.04167496441114427004834991 + 0.09061113719623759652966120j
sech(s)

Hyperbolic secant function \(\operatorname{sech}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(2,3).sech(), dps=25)
-0.2635129751583893096436042 - 0.03621163655876852087145690j
sgn(self)

Complex sign function.

>>> from flint import showgood
>>> showgood(lambda: acb(-1).sgn(), dps=25)
-1.000000000000000000000000
>>> showgood(lambda: acb(5,5).sgn(), dps=25)
0.7071067811865475244008444 + 0.7071067811865475244008444j
>>> showgood(lambda: acb(0).sgn(), dps=25)
0
shi(s)

Hyperbolic sine integral \(\operatorname{Shi}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(10).shi(), dps=25)
1246.114490199423344411882
si(s)

Sine integral \(\operatorname{Si}(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(10).si(), dps=25)
1.658347594218874049330972
sin(s)

Sine function \(\sin(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).sin(), dps=25)
3.165778513216168146740735 + 1.959601041421605897070352j
sin_cos(s)

Computes \(\sin(s)\) and \(\cos(s)\) simultaneously.

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).sin_cos(), dps=15)
(3.16577851321617 + 1.95960104142161j, 2.03272300701967 - 3.05189779915180j)
sin_cos_pi(s)

Computes \(\sin(\pi s)\) and \(\cos(\pi s)\) simultaneously.

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).sin_cos_pi(), dps=25)
(-267.7448940410165142571174j, -267.7467614837482222459319)
sin_pi(s)

Sine function \(\sin(\pi s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).sin_pi(), dps=25)
-267.7448940410165142571174j
sinc(s)

Sinc function, \(\operatorname{sinc}(x) = \sin(x)/x\).

>>> from flint import showgood
>>> showgood(lambda: acb(2,3).sinc(), dps=25)
0.4463290318402435457438585 - 2.753947027743647493993194j
sinc_pi(s)

Normalized sinc function, \(\operatorname{sinc}(\pi x) = \sin(\pi x)/(\pi x)\).

>>> from flint import showgood
>>> showgood(lambda: acb(2,3).sinc_pi(), dps=25)
455.1212281938610260024088 + 303.4141521292406840016059j
sinh(s)

Hyperbolic sine function \(\sinh(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(2,3).sinh(), dps=25)
-3.590564589985779952012565 + 0.5309210862485198052670401j
sinh_cosh(s)

Computes \(\sinh(s)\) and \(\cosh(s)\) simultaneously.

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).sinh_cosh(), dps=15)
(-0.489056259041294 + 1.40311925062204j, -0.642148124715520 + 1.06860742138278j)
static spherical_y(long n, long m, theta, phi)

Spherical harmonic \(Y_n^m(\theta, \phi)\). The present implementation only supports integer n and m.

>>> from flint import showgood
>>> showgood(lambda: acb.spherical_y(5, 3, 0.25, 0.75), dps=25)
0.02451377199072374024317003 - 0.03036343496553117039110087j
sqrt(s, bool analytic=False)

Square root \(\sqrt{s}\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).sqrt(), dps=25)
1.272019649514068964252422 + 0.7861513777574232860695586j

The analytic flag allows verifying that the branch cut is not touched; this is useful for numerical integration.

>>> from flint import showgood
>>> showgood(lambda: acb.integral(lambda z, a: z.sqrt(), 0, 1).real, dps=25)  # WRONG!!!
0.6738873386790491615691993
>>> showgood(lambda: acb.integral(lambda z, a: z.sqrt(analytic=a), 0, 1).real, dps=25)
0.6666666666666666666666667
static stieltjes(n, a=1)

Generalized Stieltjes constant \(\gamma_n(a)\).

>>> from flint import showgood
>>> showgood(lambda: acb.stieltjes(1), dps=25)
-0.07281584548367672486058638
>>> showgood(lambda: acb.stieltjes(10**10), dps=25)
7.588362123713105194822403e+12397849705
>>> showgood(lambda: acb.stieltjes(1000, 2+3j), dps=25)
-1.206122870741999199264747e+494 - 1.389205283963836265123849e+494j
str(self, *args, **kwargs)
tan(s)

Tangent function \(\tan(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).tan(), dps=25)
0.03381282607989669028437056 + 1.014793616146633568117054j
tan_pi(s)

Tangent function \(\tan(\pi s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(1,2).tan_pi(), dps=25)
0.9999930253396106106051072j
tanh(s)

Hyperbolic tangent function \(\tanh(s)\).

>>> from flint import showgood
>>> showgood(lambda: acb(2,3).tanh(), dps=25)
0.9653858790221331242784803 - 0.009884375038322493720314034j
union(s, t)
unique_fmpz(self)

If self represents exactly one integer, returns this value as an fmpz; otherwise returns None.

>>> acb("5 +/- 0.1").unique_fmpz()
5
>>> acb("5 +/- 0.9", "10 +/- 11").unique_fmpz()
5
>>> acb("5 +/- 0.9", 11).unique_fmpz()
>>>
>>> acb("5.1 +/- 0.9").unique_fmpz()
>>>
zeta(s, a=None)

Riemann zeta function \(\zeta(s)\), or the Hurwitz zeta function \(\zeta(s,a)\) if a second parameter is passed.

>>> from flint import showgood
>>> showgood(lambda: acb(0.5,1000).zeta(), dps=25)
0.3563343671943960550744025 + 0.9319978312329936651150604j
>>> showgood(lambda: acb(1,2).zeta(acb(2,3)), dps=25)
-2.953059572088556722876240 + 3.410962524512050603254574j
static zeta_zero(n)

Returns the n-th nontrivial zero of the Riemann zeta function.

>>> from flint import showgood
>>> showgood(lambda: acb.zeta_zero(1), dps=25)
0.5000000000000000000000000 + 14.13472514173469379045725j
>>> showgood(lambda: acb.zeta_zero(2), dps=25)
0.5000000000000000000000000 + 21.02203963877155499262848j
>>> showgood(lambda: acb.zeta_zero(100), dps=25)
0.5000000000000000000000000 + 236.5242296658162058024755j
>>> showgood(lambda: acb.zeta_zero(10**6), dps=25)
0.5000000000000000000000000 + 600269.6770124449555212339j
static zeta_zeros(n, long num)

Returns num consecutive nontrivial zeros of the Riemann zeta function starting at index n.

>>> for r in acb.zeta_zeros(1000, 10):
...     print(r.str(10, radius=False))
...
0.5000000000 + 1419.422481j
0.5000000000 + 1420.416526j
0.5000000000 + 1421.850567j
0.5000000000 + 1422.461311j
0.5000000000 + 1424.463046j
0.5000000000 + 1425.873469j
0.5000000000 + 1426.645980j
0.5000000000 + 1427.365671j
0.5000000000 + 1428.592306j
0.5000000000 + 1429.650477j