Do you mean, V =vector(list(var("v0", n=2))+[SR(1)])
Also, what is E0?
On Wednesday, February 2, 2022 at 6:08:20 PM UTC Emmanuel Charpentier wrote:> See lines #7-8 of the "Minimal example" : > > Le mercredi 2 février 2022 à 11:57:41 UTC+1, [email protected] a > écrit : > >> >> What is v0? When I run the above it isn't defined. >> On Monday, January 31, 2022 at 11:19:49 PM UTC Emmanuel Charpentier wrote: >> >>> As advertised, an atempt at a minimal (non-)working example : >>> >>> # Reproducible minimal example >>> with seed(0): M = matrix(AA, 3, 3, lambda u,v: AA.random_element()) >>> # Working ring >>> WR = M.base_ring().algebraic_closure() >>> # A variable to carry the eigenvalues >>> l = SR.var("l") >>> >>> > Here is the definition you seek : > >> >>> # Vector of unknowns for the eigenvectors >>> V =vector(list(var("v", n=2))+[SR(1)]) >>> >>> > Is that clearer ? > > >> >>> # M.eigenvalues does not return. Get them by hand >>> # Equation determining the eigenspace >>> ESE = M-l*identity_matrix(WR, 3) >>> # Eigenvalues >>> EVa = ESE.det().roots(ring=WR) >>> # M.eigenvectors_left() doesn't return. >>> # Set up a system of equations whose roots define the eigenvectors. >>> Sys = ESE*V >>> # Solve for each eigenvalue >>> # solve([u.subs(l==EVa[0][0]) for u in Sys],list(V[:2])) fails. >>> # Try to solve manually by substitution >>> # First equation, first variable. >>> # solve(Sys[0].subs(l==EVa[0][0]), v0) fails. >>> # Try to solve by explicit algebraic manipulation >>> E00 = Sys[0].subs(l==EVa[0][0]) >>> # Isolate v0 >>> V00=E0/E00.coefficient(v0) # fast >>> >>> At this point, tryoing to proint V00‘s value “never returns”. However, >>> a forst interruption (C-C) prints : >>> >>> sage: V00 >>> C-c >>> C-c--------------------------------------------------------------------------- >>> AttributeError Traceback (most recent call last) >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py >>> in minpoly(self) >>> 4492 try: >>> -> 4493 return self._minimal_polynomial >>> 4494 except AttributeError: >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/structure/element.pyx >>> in sage.structure.element.Element.__getattr__ >>> (build/cythonized/sage/structure/element.c:4754)() >>> 493 """ >>> --> 494 return self.getattr_from_category(name) >>> 495 >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/structure/element.pyx >>> in sage.structure.element.Element.getattr_from_category >>> (build/cythonized/sage/structure/element.c:4866)() >>> 506 cls = P._abstract_element_class >>> --> 507 return getattr_from_other_class(self, cls, name) >>> 508 >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/cpython/getattr.pyx >>> in sage.cpython.getattr.getattr_from_other_class >>> (build/cythonized/sage/cpython/getattr.c:2633)() >>> 360 dummy_error_message.name = name >>> --> 361 raise AttributeError(dummy_error_message) >>> 362 attribute = <object>attr >>> >>> AttributeError: 'AlgebraicNumber' object has no attribute >>> '_minimal_polynomial' >>> >>> During handling of the above exception, another exception occurred: >>> >>> KeyboardInterrupt Traceback (most recent call last) >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/structure/element.pyx >>> in sage.structure.element.Element.__richcmp__ >>> (build/cythonized/sage/structure/element.c:10418)() >>> 1110 return (<Element>self)._richcmp_(other, op) >>> 1111 else: >>> -> 1112 return coercion_model.richcmp(self, other, op) >>> 1113 >>> 1114 cpdef _richcmp_(left, right, int op): >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/structure/coerce.pyx >>> in sage.structure.coerce.CoercionModel.richcmp >>> (build/cythonized/sage/structure/coerce.c:20625)() >>> 1979 assert not (isinstance(x, Element) and >>> 1980 >>> (<Element>x)._parent.get_flag(Parent_richcmp_element_without_coercion)) >>> -> 1981 return PyObject_RichCompare(x, y, op) >>> 1982 >>> 1983 # Comparing with coercion didn't work, try something else. >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/structure/element.pyx >>> in sage.structure.element.Element.__richcmp__ >>> (build/cythonized/sage/structure/element.c:10394)() >>> 1108 # an instance of Element. The explicit casts below make >>> 1109 # Cython generate optimized code for this call. >>> -> 1110 return (<Element>self)._richcmp_(other, op) >>> 1111 else: >>> 1112 return coercion_model.richcmp(self, other, op) >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/structure/element.pyx >>> in sage.structure.element.Element._richcmp_ >>> (build/cythonized/sage/structure/element.c:10500)() >>> 1112 return coercion_model.richcmp(self, other, op) >>> 1113 >>> -> 1114 cpdef _richcmp_(left, right, int op): >>> 1115 r""" >>> 1116 Basic default implementation of rich comparisons for >>> elements with >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py >>> in _richcmp_(self, other, op) >>> 4897 ci1 = self._value.imag().abs() >>> 4898 ci2 = other._value.imag().abs() >>> -> 4899 if ci1.overlaps(ci2) and self.minpoly() == other.minpoly(): >>> 4900 c = cmp_elements_with_same_minpoly(self, other, >>> self.minpoly()) >>> 4901 if c is not None: >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py >>> in minpoly(self) >>> 4493 return self._minimal_polynomial >>> 4494 except AttributeError: >>> -> 4495 self.exactify() >>> 4496 self._minimal_polynomial = self._descr.minpoly() >>> 4497 return self._minimal_polynomial >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py >>> in exactify(self) >>> 4363 if isinstance(od, (ANRational, ANExtensionElement)): >>> 4364 return >>> -> 4365 self._set_descr(self._descr.exactify()) >>> 4366 >>> 4367 def _set_descr(self, new_descr): >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py >>> in exactify(self) >>> 8429 left = self._left >>> 8430 right = self._right >>> -> 8431 left.exactify() >>> 8432 right.exactify() >>> 8433 gen = left._exact_field().union(right._exact_field()) >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py >>> in exactify(self) >>> 4363 if isinstance(od, (ANRational, ANExtensionElement)): >>> 4364 return >>> -> 4365 self._set_descr(self._descr.exactify()) >>> 4366 >>> 4367 def _set_descr(self, new_descr): >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py >>> in exactify(self) >>> 8429 left = self._left >>> 8430 right = self._right >>> -> 8431 left.exactify() >>> 8432 right.exactify() >>> 8433 gen = left._exact_field().union(right._exact_field()) >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py >>> in exactify(self) >>> 4363 if isinstance(od, (ANRational, ANExtensionElement)): >>> 4364 return >>> -> 4365 self._set_descr(self._descr.exactify()) >>> 4366 >>> 4367 def _set_descr(self, new_descr): >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py >>> in exactify(self) >>> 8431 left.exactify() >>> 8432 right.exactify() >>> -> 8433 gen = left._exact_field().union(right._exact_field()) >>> 8434 left_value = gen(left._exact_value()) >>> 8435 right_value = gen(right._exact_value()) >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py >>> in union(self, other) >>> 3230 op = QQx(op) >>> 3231 # pari_nf = self._field.pari_nf() >>> -> 3232 pari_nf = self.pari_field() >>> 3233 factors = list(pari_nf.nffactor(op).lift())[0] >>> 3234 x, y = QQxy.gens() >>> >>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py >>> in pari_field(self) >>> 3134 if self._pari_field is None: >>> 3135 pari_pol = self._field.pari_polynomial("y") >>> -> 3136 self._pari_field = pari_pol.nfinit(1) >>> 3137 return self._pari_field >>> 3138 >>> >>> cypari2/auto_gen.pxi in cypari2.gen.Gen_base.nfinit() >>> >>> and a *second* interrupt prints : >>> >>> KeyboardInterrupt: >>> Exception ignored in: 'sage.symbolic.expression.py_is_integer' >>> Traceback (most recent call last): >>> File "sage/structure/parent.pyx", line 1163, in >>> sage.structure.parent.Parent.__contains__ >>> (build/cythonized/sage/structure/parent.c:10408) >>> File "sage/structure/parent.pyx", line 898, in >>> sage.structure.parent.Parent.__call__ >>> (build/cythonized/sage/structure/parent.c:9388) >>> File "sage/structure/coerce_maps.pyx", line 287, in >>> sage.structure.coerce_maps.NamedConvertMap._call_ >>> (build/cythonized/sage/structure/coerce_maps.c:6085) >>> File >>> "/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py", >>> line 5011, in _integer_ >>> return AA(self)._integer_(ZZ) >>> File >>> "/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py", >>> line 5485, in _integer_ >>> self.exactify() >>> File >>> "/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py", >>> line 4365, in exactify >>> self._set_descr(self._descr.exactify()) >>> File >>> "/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py", >>> line 8182, in exactify >>> arg.exactify() >>> File >>> "/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py", >>> line 4365, in exactify >>> self._set_descr(self._descr.exactify()) >>> File >>> "/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py", >>> line 8431, in exactify >>> left.exactify() >>> File >>> "/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py", >>> line 4365, in exactify >>> self._set_descr(self._descr.exactify()) >>> File >>> "/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py", >>> line 8431, in exactify >>> left.exactify() >>> File >>> "/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py", >>> line 4365, in exactify >>> self._set_descr(self._descr.exactify()) >>> File >>> "/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py", >>> line 8433, in exactify >>> gen = left._exact_field().union(right._exact_field()) >>> File >>> "/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py", >>> line 3232, in union >>> pari_nf = self.pari_field() >>> File >>> "/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py", >>> line 3136, in pari_field >>> self._pari_field = pari_pol.nfinit(1) >>> File "cypari2/auto_gen.pxi", line 23641, in cypari2.gen.Gen_base.nfinit >>> KeyboardInterrupt: >>> 1.000000000000000?*v0 - 35.57125011095806?*v1 - 492.8896998473554? >>> >>> Similarly, V00.coefficient(v0).is_one() “never returns”. >>> The current aritmetic on algebraics is therefore problematic for this >>> kind of problems. >>> Suggestions ? >>> >>> Le lundi 31 janvier 2022 à 17:59:34 UTC+1, Emmanuel Charpentier a écrit : >>> >>>> Thank you, Nils ! >>>> Trying to pinpoint things by running a manual solution step by step, it >>>> seems that the stumbling oint is the division on two algebraics. I'll try >>>> to make a clear minimal example and report it. >>>> Le lundi 31 janvier 2022 à 00:49:22 UTC+1, Nils Bruin a écrit : >>>> >>>>> On Saturday, 29 January 2022 at 13:51:14 UTC-8 Emmanuel Charpentier >>>>> wrote: >>>>> >>>>>> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py >>>>>> >>>>>> in pari_field(self) >>>>>> >>>>>>> 3134 if self._pari_field is None: >>>>>>> 3135 pari_pol = self._field.pari_polynomial("y") >>>>>>> -> 3136 self._pari_field = pari_pol.nfinit(1) >>>>>>> 3137 return self._pari_field >>>>>>> 3138 >>>>>>> >>>>>>> cypari2/auto_gen.pxi in cypari2.gen.Gen_base.nfinit() >>>>>>> KeyboardInterrupt: >>>>>>> >>>>>>> >>>>>>> nf_init is a perfectly respectable place to hang. After >>>>> interruption, can you "%debug" and see what the value of pari_pol is? >>>>> I'd >>>>> expect that nfinit determines the ring of integers, which means factoring >>>>> the discriminant. [QQbar shouldn't need the ring of integers of element >>>>> arithmetic, but this has been stumbled on before: QQbar often tries to >>>>> find >>>>> an "optimized" form of the number field, which for small examples is >>>>> often >>>>> quite doable and, if you end up doing a LOT of arithmetic in the same >>>>> field, is often worth the investment. However, because of factoring of >>>>> the >>>>> discriminant, it's fully subexponential in complexity, whereas all the >>>>> things QQbar needs to do are polynomial time. So we already know that >>>>> QQbar >>>>> will do things with the wrong theoretical asymptotic complexity. That can >>>>> come back and bite you, when reality and asymptotics start behaving >>>>> similarly (which happens eventually ... asymptotically speakinh) >>>>> >>>> -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-support/5e05e172-c520-42c4-869e-26640459f04cn%40googlegroups.com.
