Support Python’s numbers abstract base class

See also

PEP 3141 for more information about numbers.

sage.rings.numbers_abc.register_sage_classes()

Register all relevant Sage classes in the numbers hierarchy.

EXAMPLES:

sage: import numbers
sage: isinstance(5, numbers.Integral)
True
sage: isinstance(5, numbers.Number)
True
sage: isinstance(5/1, numbers.Integral)
False
sage: isinstance(22/7, numbers.Rational)
True
sage: isinstance(1.3, numbers.Real)
True
sage: isinstance(CC(1.3), numbers.Real)
False
sage: isinstance(CC(1.3 + I), numbers.Complex)
True
sage: isinstance(RDF(1.3), numbers.Real)
True
sage: isinstance(CDF(1.3, 4), numbers.Complex)
True
sage: isinstance(AA(sqrt(2)), numbers.Real)
True
sage: isinstance(QQbar(I), numbers.Complex)
True

This doesn’t work with symbolic expressions at all:

sage: isinstance(pi, numbers.Real)
False
sage: isinstance(I, numbers.Complex)
False
sage: isinstance(sqrt(2), numbers.Real)
False

Because we do this, NumPy’s isscalar() recognizes Sage types:

sage: from numpy import isscalar
sage: isscalar(3.141)
True
sage: isscalar(4/17)
True