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.

Reply via email to