Skip to content

Commit

Permalink
Trac #32641: Decentralize sage.rings.numbers_abc
Browse files Browse the repository at this point in the history
For the modularization, it's better to do the numbers ABC registration
in the individual implementation modules.

We keep the module `sage.rings.numbers_abc` just for the doctests.

URL: https://trac.sagemath.org/32641
Reported by: mkoeppe
Ticket author(s): Matthias Koeppe
Reviewer(s): Travis Scrimshaw
  • Loading branch information
Release Manager committed Oct 29, 2021
2 parents e3c14c2 + 8024209 commit 2b36f5d
Show file tree
Hide file tree
Showing 9 changed files with 43 additions and 22 deletions.
5 changes: 5 additions & 0 deletions src/sage/rings/complex_double.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -2660,3 +2660,8 @@ cdef inline ComplexDoubleElement ComplexDoubleElement_from_doubles(double re, do
z = <ComplexDoubleElement>ComplexDoubleElement.__new__(ComplexDoubleElement)
GSL_SET_COMPLEX(&z._complex, re, im)
return z


# Support Python's numbers abstract base class
import numbers
numbers.Complex.register(ComplexDoubleElement)
5 changes: 5 additions & 0 deletions src/sage/rings/complex_mpc.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -2575,3 +2575,8 @@ cdef class CCtoMPC(Map):
y = (<MPComplexField_class>self.codomain())._new()
mpc_set_fr_fr(y.value, (<ComplexNumber>z).__re, (<ComplexNumber>z).__im, rnd)
return y


# Support Python's numbers abstract base class
import numbers
from sage.rings.complex_mpc import MPComplexNumber
5 changes: 5 additions & 0 deletions src/sage/rings/complex_mpfr.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -3626,3 +3626,8 @@ def _format_complex_number(real, imag, format_spec):
"complex format specifier")
result = format(result, align + width)
return result


# Support Python's numbers abstract base class
import numbers
numbers.Complex.register(ComplexNumber)
5 changes: 5 additions & 0 deletions src/sage/rings/integer.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -7564,3 +7564,8 @@ cdef double mpz_get_d_nearest(mpz_t x) except? -648555075988944.5:
if resultsign < 0:
d = -d
return ldexp(d, shift)


# Support Python's numbers abstract base class
import numbers
numbers.Integral.register(Integer)
24 changes: 2 additions & 22 deletions src/sage/rings/numbers_abc.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
# http://www.gnu.org/licenses/
#*****************************************************************************

import numbers


def register_sage_classes():
"""
Expand Down Expand Up @@ -65,23 +63,5 @@ def register_sage_classes():
sage: isscalar(4/17)
True
"""
from sage.rings.integer import Integer
from sage.rings.rational import Rational
from sage.rings.real_mpfr import RealNumber
from sage.rings.real_double import RealDoubleElement
from sage.rings.complex_mpfr import ComplexNumber
from sage.rings.complex_double import ComplexDoubleElement
from sage.rings.complex_mpc import MPComplexNumber
from sage.rings.qqbar import AlgebraicReal, AlgebraicNumber

numbers.Integral.register(Integer)
numbers.Rational.register(Rational)
numbers.Real.register(RealNumber)
numbers.Real.register(RealDoubleElement)
numbers.Real.register(AlgebraicReal)
numbers.Complex.register(ComplexNumber)
numbers.Complex.register(MPComplexNumber)
numbers.Complex.register(ComplexDoubleElement)
numbers.Complex.register(AlgebraicNumber)

register_sage_classes()
from sage.misc.superseded import deprecation
deprecation(32641, "register_sage_classes is a deprecated no-op")
6 changes: 6 additions & 0 deletions src/sage/rings/qqbar.py
Original file line number Diff line number Diff line change
Expand Up @@ -8574,3 +8574,9 @@ def get_AA_golden_ratio():
AA_golden_ratio_generator = AlgebraicGenerator(AA_golden_ratio_nf, ANRoot(AAPoly.gen()**2 - AAPoly.gen() - 1, RIF(1.618, 1.6181)))
AA_golden_ratio = AlgebraicReal(ANExtensionElement(AA_golden_ratio_generator, AA_golden_ratio_nf.gen()))
return AA_golden_ratio


# Support Python's numbers abstract base class
import numbers
numbers.Real.register(AlgebraicReal)
numbers.Complex.register(AlgebraicNumber)
5 changes: 5 additions & 0 deletions src/sage/rings/rational.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -4297,3 +4297,8 @@ cdef class long_to_Q(Morphism):
'Native'
"""
return "Native"


# Support Python's numbers abstract base class
import numbers
numbers.Rational.register(Rational)
5 changes: 5 additions & 0 deletions src/sage/rings/real_double.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -2943,3 +2943,8 @@ cdef double_repr(double x):
if v < 0:
return "-infinity"
return "NaN"
# Support Python's numbers abstract base class
import numbers
numbers.Real.register(RealDoubleElement)
5 changes: 5 additions & 0 deletions src/sage/rings/real_mpfr.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -6122,3 +6122,8 @@ def create_RealField(*args, **kwds):
deprecation(24511, "Please import create_RealField from sage.rings.real_field")
from sage.rings.real_field import create_RealField as cr
return cr(*args, **kwds)


# Support Python's numbers abstract base class
import numbers
numbers.Real.register(RealNumber)

0 comments on commit 2b36f5d

Please sign in to comment.