On Tue, 12 Jul 2022 at 19:41, Barinder Banwait <b.s.banwai...@gmail.com> wrote:
>
> Thanks John -- ticket raised here: 
> https://trac.sagemath.org/ticket/34174#ticket

As a workaround, you can do two things (which will not be necessary
after I have finished with that ticket):
(1) replace E by E.integral_model(), or (better)
E.global_minimal_model(semi_global=True) before computing the isogeny
class
(2) use minimal_models=False in calling the isogeny_class() method.

The problem with this specific quadratic field is that the fundamental
unit has one very small conjugate.

Further discussions can be on ticket 34174.

John

>
> On Tuesday, 12 July 2022 at 18:11:19 UTC+2 john.c...@gmail.com wrote:
>>
>> Barinder, I'll look into this (tomorrow) -- it's my code. Please open
>> a ticket and CC me. It's happening in the code to reduce a model with
>> respect to scaling by units.
>>
>> John
>>
>> On Tue, 12 Jul 2022 at 16:19, Barinder Banwait <b.s.ba...@gmail.com> wrote:
>> >
>> > Dear sage-devel,
>> >
>> > I am running into an issue with computing isogeny classes of elliptic 
>> > curves over number fields.
>> >
>> > Here is what I entered:
>> >
>> > K.<a> = QuadraticField(4569)
>> > myJ = 46969655/32768
>> > E = EllipticCurve(j=K(myJ))
>> > C = E.isogeny_class()
>> >
>> > This raises a KeyError in the first instance, which seems to be handled 
>> > via a direct call to IsogenyClass_EC_NumberField, but this then raises a 
>> > ValueError: Cannot convert infinity or NaN to Sage Integer. The full stack 
>> > trace is in the PS.
>> >
>> > This error has occurred on sage-9.4 on a system whose `uname -a` is `Linux 
>> > LEGENDRE 5.4.0-91-generic #102-Ubuntu SMP Fri Nov 5 16:31:28 UTC 2021 
>> > x86_64 x86_64 x86_64 GNU/Linux`, as well as on sage-9.7-beta5 on `Linux 
>> > Barinder 5.4.0-121-generic #137-Ubuntu SMP Wed Jun 15 13:33:07 UTC 2022 
>> > x86_64 x86_64 x86_64 GNU/Linux`.
>> >
>> > Changing the field K to many other quadratic fields does not yield any 
>> > error. However I did also notice this error with many j-invariants in 
>> > QuadraticField(6537), so it somehow seems to be base-field dependent.
>> >
>> > Best wishes,
>> > Barinder
>> >
>> > PS. Full traceback:
>> >
>> > ---------------------------------------------------------------------------
>> > KeyError Traceback (most recent call last)
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/structure/category_object.pyx
>> >  in sage.structure.category_object.CategoryObject.getattr_from_category 
>> > (build/cythonized/sage/structure/category_object.c:7074)()
>> > 838 try:
>> > --> 839 return self.__cached_methods[name]
>> > 840 except KeyError:
>> >
>> > KeyError: '_isoclass'
>> >
>> > During handling of the above exception, another exception occurred:
>> >
>> > AttributeError Traceback (most recent call last)
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/ell_number_field.py
>> >  in isogeny_class(self, reducible_primes, algorithm, minimal_models)
>> > 3007 try:
>> > -> 3008 return self._isoclass
>> > 3009 except AttributeError:
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/structure/category_object.pyx
>> >  in sage.structure.category_object.CategoryObject.__getattr__ 
>> > (build/cythonized/sage/structure/category_object.c:6993)()
>> > 832 """
>> > --> 833 return self.getattr_from_category(name)
>> > 834
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/structure/category_object.pyx
>> >  in sage.structure.category_object.CategoryObject.getattr_from_category 
>> > (build/cythonized/sage/structure/category_object.c:7159)()
>> > 847
>> > --> 848 attr = getattr_from_other_class(self, cls, name)
>> > 849 self.__cached_methods[name] = attr
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/cpython/getattr.pyx
>> >  in sage.cpython.getattr.getattr_from_other_class 
>> > (build/cythonized/sage/cpython/getattr.c:2552)()
>> > 366 dummy_error_message.name = name
>> > --> 367 raise AttributeError(dummy_error_message)
>> > 368 cdef PyObject* attr = instance_getattr(cls, name)
>> >
>> > AttributeError: 'sage.sets.pythonclass.Set_PythonType_class' object has no 
>> > attribute '_Hom_'
>> >
>> > During handling of the above exception, another exception occurred:
>> >
>> > ValueError Traceback (most recent call last)
>> > <ipython-input-1-a9c20a51d066> in <module>
>> > 2 myJ = Integer(46969655)/Integer(32768)
>> > 3 E = EllipticCurve(j=K(myJ))
>> > ----> 4 C = E.isogeny_class()
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/ell_number_field.py
>> >  in isogeny_class(self, reducible_primes, algorithm, minimal_models)
>> > 3009 except AttributeError:
>> > 3010 from sage.schemes.elliptic_curves.isogeny_class import 
>> > IsogenyClass_EC_NumberField
>> > -> 3011 self._isoclass = IsogenyClass_EC_NumberField(self, 
>> > reducible_primes=reducible_primes, algorithm=algorithm, 
>> > minimal_models=minimal_models)
>> > 3012 return self._isoclass
>> > 3013
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/isogeny_class.py
>> >  in __init__(self, E, reducible_primes, algorithm, minimal_models)
>> > 705 self._algorithm = algorithm
>> > 706 self._minimal_models = minimal_models
>> > --> 707 IsogenyClass_EC.__init__(self, E, label=None, empty=False)
>> > 708
>> > 709 def copy(self):
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/isogeny_class.py
>> >  in __init__(self, E, label, empty)
>> > 68 self._label = label
>> > 69 if not empty:
>> > ---> 70 self._compute()
>> > 71
>> > 72 def __len__(self):
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/isogeny_class.py
>> >  in _compute(self, verbose)
>> > 789 sys.stdout.write(" possible isogeny degrees: %s" % degs)
>> > 790 sys.stdout.flush()
>> > --> 791 isogenies = E.isogenies_prime_degree(degs, 
>> > minimal_models=self._minimal_models)
>> > 792 if verbose:
>> > 793 sys.stdout.write(" -actual isogeny degrees: %s" % Set(phi.degree() for 
>> > phi in isogenies))
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/ell_number_field.py
>> >  in isogenies_prime_degree(self, l, algorithm, minimal_models)
>> > 3108 return self.isogenies_prime_degree(L, minimal_models=minimal_models)
>> > 3109
>> > -> 3110 isogs = sum([self.isogenies_prime_degree(p, 
>> > minimal_models=minimal_models) for p in l],
>> > 3111 [])
>> > 3112
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/ell_number_field.py
>> >  in <listcomp>(.0)
>> > 3108 return self.isogenies_prime_degree(L, minimal_models=minimal_models)
>> > 3109
>> > -> 3110 isogs = sum([self.isogenies_prime_degree(p, 
>> > minimal_models=minimal_models) for p in l],
>> > 3111 [])
>> > 3112
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/ell_number_field.py
>> >  in isogenies_prime_degree(self, l, algorithm, minimal_models)
>> > 3097 try:
>> > 3098 if l.is_prime(proof=False):
>> > -> 3099 return isogenies_prime_degree(self, l, 
>> > minimal_models=minimal_models)
>> > 3100 else:
>> > 3101 raise ValueError("%s is not prime." % l)
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/isogeny_small_degree.py
>> >  in isogenies_prime_degree(E, l, minimal_models)
>> > 2340 return isogenies_2(E, minimal_models=minimal_models)
>> > 2341 if l==3:
>> > -> 2342 return isogenies_3(E, minimal_models=minimal_models)
>> > 2343
>> > 2344 p = E.base_ring().characteristic()
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/isogeny_small_degree.py
>> >  in isogenies_3(E, minimal_models)
>> > 754 from sage.rings.number_field.number_field_base import is_NumberField
>> > 755 model = "minimal" if minimal_models and is_NumberField(E.base_field()) 
>> > else None
>> > --> 756 isogs = [E.isogeny(f, model=model) for f in ff]
>> > 757 return isogs
>> > 758
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/isogeny_small_degree.py
>> >  in <listcomp>(.0)
>> > 754 from sage.rings.number_field.number_field_base import is_NumberField
>> > 755 model = "minimal" if minimal_models and is_NumberField(E.base_field()) 
>> > else None
>> > --> 756 isogs = [E.isogeny(f, model=model) for f in ff]
>> > 757 return isogs
>> > 758
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/ell_field.py
>> >  in isogeny(self, kernel, codomain, degree, model, check)
>> > 876 """
>> > 877 try:
>> > --> 878 return EllipticCurveIsogeny(self, kernel, codomain, degree, model, 
>> > check=check)
>> > 879 except AttributeError as e:
>> > 880 raise RuntimeError("Unable to construct isogeny: %s" % e)
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/ell_curve_isogeny.py
>> >  in __init__(self, E, kernel, codomain, degree, model, check)
>> > 1015 self.__compute_E2()
>> > 1016
>> > -> 1017 self.__setup_post_isomorphism(codomain, model)
>> > 1018
>> > 1019 if (pre_isom is not None):
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/ell_curve_isogeny.py
>> >  in __setup_post_isomorphism(self, codomain, model)
>> > 1800 raise ValueError("specifying minimal for model flag only valid with 
>> > curves over number fields.")
>> > 1801
>> > -> 1802 newE2 = oldE2.global_minimal_model(semi_global=True)
>> > 1803 post_isom = oldE2.isomorphism_to(newE2)
>> > 1804
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/ell_number_field.py
>> >  in global_minimal_model(self, proof, semi_global)
>> > 2042 from .kraus import semi_global_minimal_model
>> > 2043 E, P = semi_global_minimal_model(self)
>> > -> 2044 return E._scale_by_units()._reduce_model()
>> > 2045
>> > 2046 raise ValueError("%s has no global minimal model! For a semi-global 
>> > minimal model use semi_global=True" % self)
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/ell_number_field.py
>> >  in _scale_by_units(self)
>> > 987 from sage.modules.all import vector
>> > 988 v = vector([(x4.abs().nth_root(4)+x6.abs().nth_root(6)).log()*d for 
>> > x4,x6,d in zip(c4s,c6s,degs)])
>> > --> 989 es = [e.round() for e in -Ainv*U*v]
>> > 990 u = prod([uj**ej for uj,ej in zip(fu,es)])
>> > 991 return self.scale_curve(u)
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/schemes/elliptic_curves/ell_number_field.py
>> >  in <listcomp>(.0)
>> > 987 from sage.modules.all import vector
>> > 988 v = vector([(x4.abs().nth_root(4)+x6.abs().nth_root(6)).log()*d for 
>> > x4,x6,d in zip(c4s,c6s,degs)])
>> > --> 989 es = [e.round() for e in -Ainv*U*v]
>> > 990 u = prod([uj**ej for uj,ej in zip(fu,es)])
>> > 991 return self.scale_curve(u)
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/rings/real_mpfr.pyx
>> >  in sage.rings.real_mpfr.RealNumber.round 
>> > (build/cythonized/sage/rings/real_mpfr.c:22391)()
>> > 3015 cdef RealNumber x = self._new()
>> > 3016 mpfr_round(x.value, self.value)
>> > -> 3017 return x.integer_part()
>> > 3018
>> > 3019 def floor(self):
>> >
>> > /scratch/sage/sage-9.4/local/lib/python3.8/site-packages/sage/rings/real_mpfr.pyx
>> >  in sage.rings.real_mpfr.RealNumber.integer_part 
>> > (build/cythonized/sage/rings/real_mpfr.c:17420)()
>> > 2256 """
>> > 2257 if not mpfr_number_p(self.value):
>> > -> 2258 raise ValueError('Cannot convert infinity or NaN to Sage Integer')
>> > 2259
>> > 2260 cdef Integer z = Integer()
>> >
>> > ValueError: Cannot convert infinity or NaN to Sage Integer
>> >
>> > --
>> > You received this message because you are subscribed to the Google Groups 
>> > "sage-devel" group.
>> > To unsubscribe from this group and stop receiving emails from it, send an 
>> > email to sage-devel+...@googlegroups.com.
>> > To view this discussion on the web visit 
>> > https://groups.google.com/d/msgid/sage-devel/6220eeaf-6fa3-450f-883b-4932f0cd2d74n%40googlegroups.com.
>
> --
> You received this message because you are subscribed to the Google Groups 
> "sage-devel" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sage-devel+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sage-devel/f2dccd25-13fb-4de8-aad7-e0ef32895368n%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/CAD0p0K4Mz9Uqa1iK4shAOdfBRD0KdfRSuHXn_t8cYqVTFCjUGQ%40mail.gmail.com.

Reply via email to