Open kcrisman opened 7 years ago
This might be an interesting example. It shows that coercion for vectors in subspaces goes out of its way to construct as small a parent as possible. However, it does seem that it also does proper discovery on the common overparent of the base ring:
sage: U=matrix(QQbar,[[0,1,0],[1,0,0]]).right_kernel()
sage: V=matrix([[0.0,1.0,0.0],[0.0,0.0,1.0]]).right_kernel()
sage: cs=get_coercion_model()
sage: cs.explain(U,V)
Coercion on left operand via
Vector space morphism represented by the matrix:
[0.000000000000000 1.00000000000000]
Domain: Vector space of degree 3 and dimension 1 over Algebraic Field
Basis matrix:
[0 0 1]
Codomain: Vector space of degree 3 and dimension 2 over Complex Field with 53 bits of precision
User basis matrix:
[ 1.00000000000000 0.000000000000000 0.000000000000000]
[0.000000000000000 0.000000000000000 1.00000000000000]
Coercion on right operand via
Vector space morphism represented by the matrix:
[ 1.00000000000000 0.000000000000000]
Domain: Vector space of degree 3 and dimension 1 over Real Field with 53 bits of precision
Basis matrix:
[ 1.00000000000000 -0.000000000000000 -0.000000000000000]
Codomain: Vector space of degree 3 and dimension 2 over Complex Field with 53 bits of precision
User basis matrix:
[ 1.00000000000000 0.000000000000000 0.000000000000000]
[0.000000000000000 0.000000000000000 1.00000000000000]
Arithmetic performed after coercions.
Result lives in Vector space of degree 3 and dimension 2 over Complex Field with 53 bits of precision
User basis matrix:
[ 1.00000000000000 0.000000000000000 0.000000000000000]
[0.000000000000000 0.000000000000000 1.00000000000000]
Vector space of degree 3 and dimension 2 over Complex Field with 53 bits of precision
User basis matrix:
[ 1.00000000000000 0.000000000000000 0.000000000000000]
[0.000000000000000 0.000000000000000 1.00000000000000]
I don't quite have an explanation why SR behaves oddly in this setting, though.
I know very little about the coercion and conversion mechanisms, but this works.
sage: u-u.parent()(v)
(4.00000000000000, 3.42857142857143, 0.428571428571429)
Setting new milestone based on a cursory review of ticket status, priority, and last modification date.
In this ask.sagemath question we have the following perplexing behavior:
Something with coercion is failing. Ideas?
CC: @paulmasson @slel
Component: linear algebra
Issue created by migration from https://trac.sagemath.org/ticket/21777