-
-
Notifications
You must be signed in to change notification settings - Fork 702
Closed
Milestone
Description
Tensor contractions on multiple indices give wrong results when the outcome is a scalar and the index positions in each tensor do not have the same order. For instance, let us consider
sage: M = Manifold(2, 'M')
sage: X.<x,y> = M.chart()
sage: a = M.multivector_field(2)
sage: a[0,1] = 1
sage: b = M.diff_form(2)
sage: b[0,1] = 1
The double contraction aij bij is obtained via
sage: a.contract(0, 1, b, 0, 1).expr()
2
sage: (a['^ij']*b['_ij']).expr() # equivalent to above
2
which is correct. However, asking for the double contraction aij bji
leads to
sage: a.contract(0, 1, b, 1, 0).expr()
2
sage: (a['^ij']*b['_ji']).expr() # equivalent to above
2
which is obviously wrong: the result should be -2, since b is antisymmetric.
If the outcome is not a scalar field, there is no issue:
sage: c = M.tensor_field(3, 0, antisym=(0,1))
sage: c[0,1,0] = 1
sage: c.contract(0, 1, b, 0, 1).display() # correct result
2 ∂/∂x
sage: c.contract(0, 1, b, 1, 0).display() # correct result
-2 ∂/∂x
This bug has been reported in https://ask.sagemath.org/question/58379.
CC: @tscrim @mjungmath @mkoeppe
Component: manifolds
Keywords: tensor contraction
Author: Eric Gourgoulhon
Branch/Commit: 48f5523
Reviewer: Michael Jung
Issue created by migration from https://trac.sagemath.org/ticket/32355