Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 18 additions & 22 deletions src/sage/rings/complex_arb.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,8 @@ from sage.libs.flint.arf cimport arf_init, arf_get_d, arf_get_mpfr, arf_clear, a
from sage.libs.flint.mag cimport (mag_init, mag_clear, mag_set_d,
MAG_BITS, mag_zero, mag_set_ui_2exp_si,
mag_mul_2exp_si)
from sage.libs.flint.fmpz cimport fmpz_t, fmpz_init, fmpz_get_mpz, fmpz_set_mpz, fmpz_clear
from sage.libs.flint.fmpz cimport (fmpz_t, fmpz_init, fmpz_get_mpz, fmpz_init_set_readonly,
fmpz_clear_readonly, fmpz_clear)
from sage.libs.flint.fmpq cimport fmpq_t, fmpq_init, fmpq_set_mpq, fmpq_clear
from sage.libs.gmp.mpz cimport mpz_fits_slong_p, mpz_get_si
from sage.libs.gsl.complex cimport gsl_complex_rect
Expand Down Expand Up @@ -1298,8 +1299,8 @@ class ComplexBallField(UniqueRepresentation, sage.rings.abc.ComplexBallField):
0.5000000000000000 + [49.773832477672...]*I]
"""
cdef fmpz_t _start
fmpz_init(_start)
fmpz_set_mpz(_start, (<Integer> Integer(start)).value)
cdef Integer _start_Integer = <Integer> (start if isinstance(start, Integer) else Integer(start))
fmpz_init_set_readonly(_start, _start_Integer.value)

cdef long _count = count
if _count < 1:
Expand All @@ -1320,7 +1321,7 @@ class ComplexBallField(UniqueRepresentation, sage.rings.abc.ComplexBallField):
res.append(b)

_acb_vec_clear(ar, _count)
fmpz_clear(_start)
fmpz_clear_readonly(_start)

return res

Expand Down Expand Up @@ -1487,10 +1488,9 @@ cdef class ComplexBall(RingElement):
arb_set(acb_realref(self.value), (<RealBall> x).value)
elif isinstance(x, sage.rings.integer.Integer):
if _do_sig(prec(self)): sig_on()
fmpz_init(tmpz)
fmpz_set_mpz(tmpz, (<sage.rings.integer.Integer> x).value)
fmpz_init_set_readonly(tmpz, (<sage.rings.integer.Integer> x).value)
arb_set_fmpz(acb_realref(self.value), tmpz)
fmpz_clear(tmpz)
fmpz_clear_readonly(tmpz)
if _do_sig(prec(self)): sig_off()
elif isinstance(x, sage.rings.rational.Rational):
if _do_sig(prec(self)): sig_on()
Expand All @@ -1514,10 +1514,9 @@ cdef class ComplexBall(RingElement):
arb_set(acb_imagref(self.value), (<RealBall> y).value)
elif isinstance(y, sage.rings.integer.Integer):
if _do_sig(prec(self)): sig_on()
fmpz_init(tmpz)
fmpz_set_mpz(tmpz, (<sage.rings.integer.Integer> y).value)
fmpz_init_set_readonly(tmpz, (<sage.rings.integer.Integer> y).value)
arb_set_fmpz(acb_imagref(self.value), tmpz)
fmpz_clear(tmpz)
fmpz_clear_readonly(tmpz)
if _do_sig(prec(self)): sig_off()
elif isinstance(y, sage.rings.rational.Rational):
if _do_sig(prec(self)): sig_on()
Expand Down Expand Up @@ -2575,10 +2574,9 @@ cdef class ComplexBall(RingElement):
if isinstance(other, ComplexBall):
res = acb_contains(self.value, (<ComplexBall> other).value)
elif isinstance(other, Integer):
fmpz_init(tmpz)
fmpz_set_mpz(tmpz, (<Integer> other).value)
fmpz_init_set_readonly(tmpz, (<Integer> other).value)
res = acb_contains_fmpz(self.value, tmpz)
fmpz_clear(tmpz)
fmpz_clear_readonly(tmpz)
elif isinstance(other, sage.rings.rational.Rational):
fmpq_init(tmpq)
fmpq_set_mpq(tmpq, (<sage.rings.rational.Rational> other).value)
Expand Down Expand Up @@ -2793,10 +2791,9 @@ cdef class ComplexBall(RingElement):
acb_mul_2exp_si(res.value, self.value, PyLong_AsLong(shift))
elif isinstance(shift, Integer):
sig_on()
fmpz_init(tmpz)
fmpz_set_mpz(tmpz, (<Integer> shift).value)
fmpz_init_set_readonly(tmpz, (<Integer> shift).value)
acb_mul_2exp_fmpz(res.value, self.value, tmpz)
fmpz_clear(tmpz)
fmpz_clear_readonly(tmpz)
sig_off()
else:
raise TypeError("shift should be an integer")
Expand Down Expand Up @@ -2936,10 +2933,9 @@ cdef class ComplexBall(RingElement):
if _do_sig(prec(self)): sig_off()
elif isinstance(expo, Integer):
if _do_sig(prec(self)): sig_on()
fmpz_init(tmpz)
fmpz_set_mpz(tmpz, (<Integer> expo).value)
fmpz_init_set_readonly(tmpz, (<Integer> expo).value)
acb_pow_fmpz(res.value, self.value, tmpz, prec(self))
fmpz_clear(tmpz)
fmpz_clear_readonly(tmpz)
if _do_sig(prec(self)): sig_off()
elif isinstance(expo, RealBall):
if (analytic and not arb_is_int((<RealBall> expo).value)
Expand Down Expand Up @@ -3754,13 +3750,13 @@ cdef class ComplexBall(RingElement):
[-70.806021532123...] + [7.9648836259913...]*I
"""
cdef fmpz_t _branch
fmpz_init(_branch)
fmpz_set_mpz(_branch, (<Integer> Integer(branch)).value)
cdef Integer _branch_Integer = <Integer> (branch if isinstance(branch, Integer) else Integer(branch))
fmpz_init_set_readonly(_branch, _branch_Integer.value)
cdef ComplexBall res = self._new()
sig_on()
acb_lambertw(res.value, self.value, _branch, 0, prec(self))
sig_off()
fmpz_clear(_branch)
fmpz_clear_readonly(_branch)
return res

def polylog(self, s):
Expand Down
41 changes: 17 additions & 24 deletions src/sage/rings/real_arb.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -925,12 +925,11 @@ class RealBallField(UniqueRepresentation, sage.rings.abc.RealBallField):
x_as_Integer = ZZ.coerce(x)
try:
if _do_sig(self._prec): sig_on()
fmpz_init(tmpz)
fmpz_set_mpz(tmpz, x_as_Integer.value)
fmpz_init_set_readonly(tmpz, x_as_Integer.value)
arb_gamma_fmpz(res.value, tmpz, self._prec)
if _do_sig(self._prec): sig_off()
finally:
fmpz_clear(tmpz)
fmpz_clear_readonly(tmpz)
return res
except TypeError:
pass
Expand Down Expand Up @@ -1047,12 +1046,11 @@ class RealBallField(UniqueRepresentation, sage.rings.abc.RealBallField):
cdef Integer n_as_Integer = ZZ.coerce(n)
try:
if _do_sig(self._prec): sig_on()
fmpz_init(tmpz)
fmpz_set_mpz(tmpz, n_as_Integer.value)
fmpz_init_set_readonly(tmpz, n_as_Integer.value)
arb_fib_fmpz(res.value, tmpz, self._prec)
if _do_sig(self._prec): sig_off()
finally:
fmpz_clear(tmpz)
fmpz_clear_readonly(tmpz)
return res

def bell_number(self, n):
Expand Down Expand Up @@ -1083,12 +1081,11 @@ class RealBallField(UniqueRepresentation, sage.rings.abc.RealBallField):
raise ValueError("expected a nonnegative index")
try:
if _do_sig(self._prec): sig_on()
fmpz_init(tmpz)
fmpz_set_mpz(tmpz, n_as_Integer.value)
fmpz_init_set_readonly(tmpz, n_as_Integer.value)
arb_bell_fmpz(res.value, tmpz, self._prec)
if _do_sig(self._prec): sig_off()
finally:
fmpz_clear(tmpz)
fmpz_clear_readonly(tmpz)
return res

def double_factorial(self, n):
Expand Down Expand Up @@ -1391,10 +1388,9 @@ cdef class RealBall(RingElement):
arb_set_si(self.value, PyLong_AsLong(mid)) # no rounding!
elif isinstance(mid, Integer):
if _do_sig(prec(self)): sig_on()
fmpz_init(tmpz)
fmpz_set_mpz(tmpz, (<Integer> mid).value)
fmpz_init_set_readonly(tmpz, (<Integer> mid).value)
arb_set_fmpz(self.value, tmpz) # no rounding!
fmpz_clear(tmpz)
fmpz_clear_readonly(tmpz)
if _do_sig(prec(self)): sig_off()
elif isinstance(mid, Rational):
if _do_sig(prec(self)): sig_on()
Expand Down Expand Up @@ -1476,10 +1472,10 @@ cdef class RealBall(RingElement):
elif isinstance(rad, Rational):
arf_init(tmpr)
arf_set_mpz(tmpr, (<Integer> rad.numerator()).value)
fmpz_init(tmpz)
fmpz_set_mpz(tmpz, (<Integer> rad.denominator()).value)
rad_den = rad.denominator()
fmpz_init_set_readonly(tmpz, (<Integer> rad_den).value)
arf_div_fmpz(tmpr, tmpr, tmpz, prec(self), ARF_RND_UP)
fmpz_clear(tmpz)
fmpz_clear_readonly(tmpz)
arf_get_mag(tmpm, tmpr)
arf_clear(tmpr)
elif isinstance(rad, float):
Expand Down Expand Up @@ -2609,10 +2605,9 @@ cdef class RealBall(RingElement):
elif is_small_python_int(other):
res = arb_contains_si(self.value, PyLong_AsLong(other))
elif isinstance(other, Integer):
fmpz_init(tmpz)
fmpz_set_mpz(tmpz, (<Integer> other).value)
fmpz_init_set_readonly(tmpz, (<Integer> other).value)
res = arb_contains_fmpz(self.value, tmpz)
fmpz_clear(tmpz)
fmpz_clear_readonly(tmpz)
elif isinstance(other, Rational):
fmpq_init(tmpq)
fmpq_set_mpq(tmpq, (<Rational> other).value)
Expand Down Expand Up @@ -2901,10 +2896,9 @@ cdef class RealBall(RingElement):
if _do_sig(prec(self)): sig_off()
elif isinstance(expo, Integer):
if _do_sig(prec(self)): sig_on()
fmpz_init(tmpz)
fmpz_set_mpz(tmpz, (<Integer> expo).value)
fmpz_init_set_readonly(tmpz, (<Integer> expo).value)
arb_pow_fmpz(res.value, self.value, tmpz, prec(self))
fmpz_clear(tmpz)
fmpz_clear_readonly(tmpz)
if _do_sig(prec(self)): sig_off()
elif isinstance(expo, RealBall):
if _do_sig(prec(self)): sig_on()
Expand Down Expand Up @@ -3067,10 +3061,9 @@ cdef class RealBall(RingElement):
arb_mul_2exp_si(res.value, self.value, PyLong_AsLong(shift))
elif isinstance(shift, Integer):
sig_on()
fmpz_init(tmpz)
fmpz_set_mpz(tmpz, (<Integer> shift).value)
fmpz_init_set_readonly(tmpz, (<Integer> shift).value)
arb_mul_2exp_fmpz(res.value, self.value, tmpz)
fmpz_clear(tmpz)
fmpz_clear_readonly(tmpz)
sig_off()
else:
raise TypeError("shift should be an integer")
Expand Down
Loading