The promlem seems tolie wit (my use of) polynomial rings to compute the 
eigenvectors. Manually, after executing

dims = M.dimensions()
if dims[0] != dims[1]: raise DomainError("Not a square matrix !")
dim = dims[0]
BR = M.base_ring()
try:
    WR = BR.algebraic_closure()
except AttributeError:
    WR = BR
WPR = WR["t"]
t = WPR.gens()[0]
# CP = WPR(M.charpoly(var="t"))
# Eigenvalues
CP = M.charpoly(var="t")
lambdas = CP.roots(ring=WR)
# Eigenvectors
Id = identity_matrix(WR,dim)
WM = M.apply_map(lambda u:WR(u))
PR = PolynomialRing(WR,list(("v%d"%u for u in range(dim))))
J=PR.ideal(*(WM-Id*lambdas[0][0])*vector(PR.gens()))

neither J.dimension() nor J.variety() returns ; the interruption gives :

sage: J.dimension()
  C-c 
C-c---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-684-2e62bddf16b7> in <module>
----> 1 J.dimension()

/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/polynomial/multi_polynomial_ideal.py
 in __call__(self, *args, **kwds)
    295         if not R.base_ring().is_field():
    296             raise ValueError("Coefficient ring must be a field for 
function '%s'."%(self.f.__name__))
--> 297         return self.f(self._instance, *args, **kwds)
    298 
    299 require_field = RequireField

/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar_decorators.py
 in wrapper(*args, **kwds)
    111         # same_field=True might trigger an exception otherwise.
    112 
--> 113         numfield, new_elems, morphism = 
number_field_elements_from_algebraics(orig_elems, same_field=True, minimal=True)
    114 
    115         elem_dict = dict(zip(orig_elems, new_elems))

/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py
 in number_field_elements_from_algebraics(numbers, minimal, same_field, 
embedded, prec)
   2759     real_numbers = []
   2760     for v in numbers:
-> 2761         if v._exact_field().is_complex() and real_case:
   2762             # the number comes from a complex algebraic number field
   2763             embedded_rt = v.interval_fast(RealIntervalField(prec))

/usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py
 in _exact_field(self)
   4428         if isinstance(sd, (ANRational, ANExtensionElement)):
   4429             return sd.generator()
-> 4430         self.exactify()
   4431         return self._exact_field()
   4432 

/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)
   8180 
   8181         if op == 'real':
-> 8182             arg.exactify()
   8183             rv = (arg + arg.conjugate()) / 2
   8184             rv.exactify()

/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()

KeyboardInterrupt:

Suggestions ?
​
Le samedi 29 janvier 2022 à 15:34:05 UTC+1, Emmanuel Charpentier a écrit :

> Setup : Sage 9.5.rc1 running in Debian testing on core i7 + 16 GB RAM.
>
> def test(Size=2, Ring=QQ):
>     from time import time as stime
>     with seed(0):
>         M = matrix(Ring, Size, Size, lambda u, v:Ring.random_element())
>     t0 = stime()
>     SL = M.eigenspaces_left(algebraic_multiplicity=True)
>     t1 = stime()
>     VL = M.eigenvectors_left()
>     t2 = stime()
>     return t1-t0, SL, t2-t1, VL
>
> test() runs as expected, as well as test(Size=5) and test(Ring=AA), with 
> very reasonable runtimes (under a second, IIRC). But test(Size=3, Ring=AA) 
> “never returns” (meaning that it hadn’t returned when I interrupted it 
> after tens of minutes). Further exploration showec that neither 
> M.eigenspaces_left(algebraic_multiplicity=True) nor M.eigenvectors_left() 
> return.
>
> Is that an expected behaviour ?
>
> FWIW, stack trace at interruption :
>
> sage: AA3=test(Size=3, Ring=AA)
> AA3=test(Size=3, Ring=AA)  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: 'sage.rings.real_mpfi.RealIntervalFieldElement' object has no 
> attribute '_evaluate_polynomial'
>
> During handling of the above exception, another exception occurred:
>
> KeyboardInterrupt                         Traceback (most recent call last)
> <ipython-input-344-ff7c46010ad2> in <module>
> ----> 1 AA3=test(Size=Integer(3), Ring=AA)
>
> <string> in test(Size, Ring)
>
> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/matrix/matrix2.pyx
>  in sage.matrix.matrix2.Matrix.eigenspaces_left 
> (build/cythonized/sage/matrix/matrix2.c:43588)()
>    6270                     self = self.change_ring(F)
>    6271                 A = self - alpha
> -> 6272                 W = A.kernel()
>    6273                 V.append((alpha, 
> W.ambient_module().span_of_basis(W.basis()), e))
>    6274             else:
>
> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/matrix/matrix2.pyx
>  in sage.matrix.matrix2.Matrix.left_kernel 
> (build/cythonized/sage/matrix/matrix2.c:32440)()
>    4947 
>    4948         tm = verbose("computing left kernel for %sx%s matrix" % 
> (self.nrows(), self.ncols()),level=1)
> -> 4949         K = self.transpose().right_kernel(*args, **kwds)
>    4950         self.cache('left_kernel', K)
>    4951         verbose("done computing left kernel for %sx%s matrix" % 
> (self.nrows(), self.ncols()),level=1,t=tm)
>
> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/matrix/matrix2.pyx
>  in sage.matrix.matrix2.Matrix.right_kernel 
> (build/cythonized/sage/matrix/matrix2.c:31909)()
>    4785 
>    4786         # Go get the kernel matrix, this is where it all happens
> -> 4787         M = self.right_kernel_matrix(*args, **kwds)
>    4788 
>    4789         ambient = R**self.ncols()
>
> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/matrix/matrix2.pyx
>  in sage.matrix.matrix2.Matrix.right_kernel_matrix 
> (build/cythonized/sage/matrix/matrix2.c:30829)()
>    4394 
>    4395         if M is None and R in _Fields:
> -> 4396             format, M = self._right_kernel_matrix_over_field()
>    4397 
>    4398         if M is None and R.is_integral_domain():
>
> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/matrix/matrix2.pyx
>  in sage.matrix.matrix2.Matrix._right_kernel_matrix_over_field 
> (build/cythonized/sage/matrix/matrix2.c:27969)()
>    3686         from sage.matrix.matrix_space import MatrixSpace
>    3687         tm = verbose("computing right kernel matrix over an arbitrary 
> field for %sx%s matrix" % (self.nrows(), self.ncols()),level=1)
> -> 3688         E = self.echelon_form(*args, **kwds)
>    3689         pivots = E.pivots()
>    3690         pivots_set = set(pivots)
>
> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/matrix/matrix2.pyx
>  in sage.matrix.matrix2.Matrix.echelon_form 
> (build/cythonized/sage/matrix/matrix2.c:52440)()
>    7686         E = self.__copy__()
>    7687         if algorithm == 'default':
> -> 7688             v = E.echelonize(cutoff=cutoff, **kwds)
>    7689         else:
>    7690             v = E.echelonize(algorithm = algorithm, cutoff=cutoff, 
> **kwds)
>
> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/matrix/matrix2.pyx
>  in sage.matrix.matrix2.Matrix.echelonize 
> (build/cythonized/sage/matrix/matrix2.c:51817)()
>    7583             if self.base_ring() in _Fields:
>    7584                 if algorithm in ['classical', 'partial_pivoting', 
> 'scaled_partial_pivoting', 'scaled_partial_pivoting_valuation']:
> -> 7585                     self._echelon_in_place(algorithm)
>    7586                 elif algorithm == 'strassen':
>    7587                     self._echelon_strassen(cutoff)
>
> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/matrix/matrix2.pyx
>  in sage.matrix.matrix2.Matrix._echelon_in_place 
> (build/cythonized/sage/matrix/matrix2.c:53308)()
>    7848                 sig_check()
>    7849                 for r in range(start_row, nr):
> -> 7850                     if A.get_unsafe(r, c):
>    7851                         pivots.append(c)
>    7852                         a_inverse = ~A.get_unsafe(r, c)
>
> /usr/local/sage-9/local/var/lib/sage/venv-python3.9/lib/python3.9/site-packages/sage/rings/qqbar.py
>  in __bool__(self)
>    4043             right = sd._right if op is operator.sub else -sd._right
>    4044 
> -> 4045             lp = left.minpoly()
>    4046             rp = right.minpoly()
>    4047             if lp != rp:
>
> /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)
>    8430             right = self._right
>    8431             left.exactify()
> -> 8432             right.exactify()
>    8433             gen = left._exact_field().union(right._exact_field())
>    8434             left_value = gen(left._exact_value())
>
> /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)
>    8430             right = self._right
>    8431             left.exactify()
> -> 8432             right.exactify()
>    8433             gen = left._exact_field().union(right._exact_field())
>    8434             left_value = gen(left._exact_value())
>
> /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)
>    8430             right = self._right
>    8431             left.exactify()
> -> 8432             right.exactify()
>    8433             gen = left._exact_field().union(right._exact_field())
>    8434             left_value = gen(left._exact_value())
>
> /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)
>    8176 
>    8177         if op == '~':
> -> 8178             arg.exactify()
>    8179             return arg._descr.invert(None)
>    8180 
>
> /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()
> KeyboardInterrupt:
>
> Any hint appreciated…
> ​
>

-- 
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 sage-support+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-support/c17079fa-1d14-40ec-9cdd-49271cabd7ean%40googlegroups.com.

Reply via email to