# Revision history [back]

Thank you for your report, this is indeed a bug. Now tracked at

As a workaround,

• one could convert a to a vector over the field of algebraic numbers; then the norm is given as an exact algebraic number:

sage: a = vector([E(8), E(7)])
sage: b = a.change_ring(QQbar)
sage: bn = b.norm()
sage: bn
1.414213562373095?
sage: bn.parent()
Algebraic Real Field

• one could convert a to a vector over a cyclotomic field (not the universal one); sadly the norm is then given as an inexact (floating-point) number:

sage: a = vector([E(8), E(7)])
sage: c = a.apply_map(lambda x: x.to_cyclotomic_field())
sage: cn = c.norm()
sage: cn
1.41421356237310
sage: cn.parent()
Real Field with 53 bits of precision

• the square of the norm of the vector a can be obtained directly as a * a.conjugate(), but one then gets it as an element in the universal cyclotomic field, and a similar bug prevents from taking the square root of that directly:

sage: a = vector([E(8), E(7)])
sage: ann = a * a.conjugate()
sage: ann
2
sage: ann.parent()
Universal Cyclotomic Field
sage: an = sqrt(ann)
Traceback (most recent call last)
...
NotImplementedError: is_square() not implemented for elements of Universal Cyclotomic Field


and one again has to go through a cyclotomic field other than the universal one, or the field of real algebraic numbers:

sage: nna = AA(a*a.conjugate())
sage: nna
2
sage: nna.parent()
Algebraic Real Field
sage: na = sqrt(nna)
sage: na
1.414213562373095?
sage: na.parent()
Algebraic Real Field