Skip to content

Commit

Permalink
Trac #32777: Allow some imports of RLF to fail
Browse files Browse the repository at this point in the history
The `RealLazyField` implementation is tied closely to `real_mpfr`.

We modify some imports for the purpose of modularization, in particular
'''sagemath-polyhedra''' (#32432)

In particular for `... is RLF` tests:
{{{
$ git grep 'is RLF'
src/sage/rings/complex_double.pyx:        if S is ZZ or S is QQ or S is
RDF or S is RLF:
src/sage/rings/number_field/number_field_base.pyx:        if codomain is
AA or codomain is RLF:
src/sage/rings/real_double.pyx:        if S is ZZ or S is QQ or S is
RLF:
src/sage/schemes/plane_conics/con_number_field.py:                if not
(isinstance(p, Map) and p.category_for().is_subcategory(Rings())) or
p.codomain() is AA or p.codomain() is RLF:
}}}

URL: https://trac.sagemath.org/32777
Reported by: mkoeppe
Ticket author(s): Matthias Koeppe
Reviewer(s): Travis Scrimshaw
  • Loading branch information
Release Manager committed Nov 20, 2021
2 parents 0f3903f + b49bbdf commit 0b5e454
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 18 deletions.
6 changes: 0 additions & 6 deletions src/sage/groups/misc_gps/argument_groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -1825,16 +1825,10 @@ def create_key_and_extra_args(self,
sage: ArgumentGroup('Arg_CC') is ArgumentGroup(domain=CC) # indirect doctest
True
"""
from sage.rings.complex_arb import ComplexBallField
from sage.rings.complex_mpfr import ComplexField_class
from sage.rings.complex_interval_field import ComplexIntervalField_class
from sage.rings.integer_ring import ZZ
from sage.misc.misc import exactly_one_is_true
from sage.rings.qqbar import AA
from sage.rings.rational_field import QQ
from sage.rings.real_arb import RealBallField
from sage.rings.real_mpfr import RealField_class
from sage.rings.real_mpfi import RealIntervalField_class

if not exactly_one_is_true(
(data is not None,
Expand Down
12 changes: 10 additions & 2 deletions src/sage/rings/number_field/number_field_base.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -361,8 +361,16 @@ cdef class NumberField(Field):
if self._gen_approx is not None or self._embedding is None:
return

from sage.rings.qqbar import AA
from sage.rings.real_lazy import RLF
try:
from sage.rings.qqbar import AA
except ImportError:
AA = None

try:
from sage.rings.real_lazy import RLF
except ImportError:
RLF = None

codomain = self._embedding.codomain()
if codomain is AA or codomain is RLF:
self._gen_approx = []
Expand Down
18 changes: 13 additions & 5 deletions src/sage/rings/real_double.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,11 @@ cdef class RealDoubleField_class(sage.rings.abc.RealDoubleField):
return ToRDF(S)

from .rational_field import QQ
from .real_lazy import RLF
try:
from .real_lazy import RLF
except ImportError:
RLF = None

if S is ZZ or S is QQ or S is RLF:
return ToRDF(S)

Expand All @@ -369,10 +373,14 @@ cdef class RealDoubleField_class(sage.rings.abc.RealDoubleField):
else:
return None

from .real_mpfr import RR
connecting = RR._internal_coerce_map_from(S)
if connecting is not None:
return ToRDF(RR) * connecting
try:
from .real_mpfr import RR
except ImportError:
pass
else:
connecting = RR._internal_coerce_map_from(S)
if connecting is not None:
return ToRDF(RR) * connecting

def _magma_init_(self, magma):
r"""
Expand Down
6 changes: 5 additions & 1 deletion src/sage/schemes/plane_conics/con_number_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
# https://www.gnu.org/licenses/
# ****************************************************************************

from sage.rings.all import (AA, RLF, PolynomialRing)
from sage.rings.rational_field import is_RationalField
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
from .con_field import ProjectiveConic_field


Expand Down Expand Up @@ -343,6 +343,9 @@ def is_locally_solvable(self, p):
if self._local_obstruction is None:
from sage.categories.map import Map
from sage.categories.all import Rings
from sage.rings.qqbar import AA
from sage.rings.real_lazy import RLF

if not (isinstance(p, Map) and p.category_for().is_subcategory(Rings())) or p.codomain() is AA or p.codomain() is RLF:
self._local_obstruction = p
return False
Expand Down Expand Up @@ -387,6 +390,7 @@ def local_obstructions(self, finite=True, infinite=True, read_cache=True):
if read_cache and self._infinite_obstructions is not None:
obs0 = self._infinite_obstructions
else:
from sage.rings.qqbar import AA
for b in B.embeddings(AA):
if not self.is_locally_solvable(b):
obs0.append(b)
Expand Down
4 changes: 0 additions & 4 deletions src/sage/schemes/projective/projective_morphism.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,6 @@
import sage.rings.abc
from sage.rings.integer import Integer
from sage.rings.algebraic_closure_finite_field import AlgebraicClosureFiniteField_generic
from sage.rings.complex_mpfr import ComplexField_class
from sage.rings.complex_interval_field import ComplexIntervalField_class
from sage.rings.finite_rings.finite_field_constructor import is_FiniteField
from sage.rings.finite_rings.finite_field_constructor import is_PrimeFiniteField
from sage.rings.finite_rings.finite_field_constructor import GF
Expand All @@ -89,8 +87,6 @@
from sage.rings.qqbar import QQbar, number_field_elements_from_algebraics
from sage.rings.quotient_ring import QuotientRing_generic
from sage.rings.rational_field import QQ
from sage.rings.real_mpfr import RealField_class
from sage.rings.real_mpfi import RealIntervalField_class

from sage.schemes.generic.morphism import SchemeMorphism_polynomial

Expand Down

0 comments on commit 0b5e454

Please sign in to comment.