I am trying to use the SageManifolds tensor modules package to work with the tensor power $T = E^{\otimes 2}$ where $E$ is itself the exterior power $E = \bigwedge^2 \mathbb{Z}$.
Here is what I have so far:
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
sage: E = M.exterior_power(2)
sage: T = E.tensor_module(2,0)
I then want to work with an element of $T$ by giving it coordinates. I can give an element of $E$ a coordinate by doing
sage: a = E([], name='a')
sage: a.set_comp()[0,1] = 3
sage: a.set_comp()[0,2] = 1
sage: a.display()
a = 3 e_0∧e_1 + e_0∧e_2
So I would have expected to be able to do the same for $T$: sage: t = T([], name='t') sage: t.set_comp()[0,0] = 1
but I get a ValueError
:
ValueError: the None has not been defined on the 2nd exterior power of the Rank-3 free module M over the Integer Ring
The code in the source which prints None
is raise ValueError("the {} has not been ".format(basis) +...
and so the problem is that there is no basis for E
.
sage: E.default_basis()
No default basis has been defined on the 2nd exterior power of the Rank-3 free module M over the Integer Ring
When I try to define a basis I get a type error:
sage: E.basis('e')
TypeError: __init__() missing 1 required positional argument: 'degree'
coming from the line
sage/tensor/modules/free_module_basis.py in __init__(self, fmodule, symbol, latex_symbol, indices, latex_indices, symbol_dual, latex_symbol_dual)
637 ring_one = fmodule._ring.one()
638 for i in fmodule.irange():
--> 639 v = fmodule.element_class(fmodule)
640 v.set_comp(self)[i] = ring_one
641 vl.append(v)
because E.element_class()
has the init signature E.element_class(fmodule, degree, name=None, latex_name=None)
. There is no default degree passed, and there is no option for fmodule.element_class(fmodule)
to take an argument degree
. Are there any workarounds to this problem?
Many thanks!!