Opened 11 months ago
Last modified 3 months ago
#32029 new enhancement
Action of a sympy TensorSymmetry
Reported by:  mkoeppe  Owned by:  

Priority:  major  Milestone:  sage9.7 
Component:  linear algebra  Keywords:  
Cc:  tscrim, egourgoulhon, dimpase, ghhonglizhaobob, ghspaghettisalat  Merged in:  
Authors:  Reviewers:  
Report Upstream:  N/A  Work issues:  
Branch:  u/mkoeppe/action_of_a_sympy_tensorsymmetry (Commits, GitHub, GitLab)  Commit:  3629386df9d59012cafa4382a4878d5b7fb944f0 
Dependencies:  Stopgaps: 
Description (last modified by )
SymPy's TensorSymmetry
(https://docs.sympy.org/latest/modules/tensor/tensor.html) uses a trick to represent (monoterm) tensor symmetries and antisymmetries as permutation groups: Two extra elements (in the example below, 3 and 4) keep track of the sign
sage: TensorSymmetry.fully_symmetric(3) TensorSymmetry((0, 1), ((4)(0 1), (4)(1 2))) sage: TensorSymmetry.fully_symmetric(3) # fully antisymmetric 3 indices TensorSymmetry((0, 1), ((0 1)(3 4), (1 2)(3 4)))
The 2cycle (3 4) represents the antisymmetry. What is displayed there is the "base and strong generating system".
This trick can of course be generalized to Mathematica's "phased permutation groups" (#30276) by using longer cycles.
We define a class TensorSymmetryGroup
 which can be initialized from
sage.tensor
sym
andantisym
lists  can convert to/from
sympy.tensor.tensor.TensorSymmetry
 defines
_get_action_
for acting on tensor modules / components
Change History (16)
comment:1 Changed 11 months ago by
 Description modified (diff)
comment:2 Changed 11 months ago by
 Cc ghhonglizhaobob added
 Description modified (diff)
comment:3 Changed 11 months ago by
comment:4 Changed 11 months ago by
 Branch set to u/mkoeppe/action_of_a_sympy_tensorsymmetry
comment:5 followup: ↓ 6 Changed 11 months ago by
 Commit set to ad4f3f11796f33b3cae87aba9cfdecb1cb1ab061
the symmetry group there is an arbitrary permutation group, no? So sympy has an algorithm to find the autmorphism group of a weighted hypergraph?
New commits:
ad4f3f1  src/sage/groups/tensor/monoterm_symmetry.py: New

comment:6 in reply to: ↑ 5 Changed 11 months ago by
Replying to dimpase:
the symmetry group there is an arbitrary permutation group, no? So sympy has an algorithm to find the autmorphism group of a weighted hypergraph?
The automorphism group is the input, not the output. This code is for defining spaces of tensors with prescribed symmetries.
comment:7 followup: ↓ 8 Changed 11 months ago by
Your input is a bunch of permutations, not a group. Why do you force the user to figure them out?
I'd rather see it as a group, and yes, it's perfectly possible in Sage to compute a strong generating set and a base, given a permutation group. E.g. one can use the corresponding GAP functionality via libgap.
comment:8 in reply to: ↑ 7 Changed 11 months ago by
Replying to dimpase:
Your input is a bunch of permutations, not a group. Why do you force the user to figure them out?
Sorry, what are you referring to?
The example lines on the ticket description using SymPy show the output of SymPy's TensorSymmetry
constructor, which happens to show the BSGS.
In the branch attached here, the input is a symmetry specification in the style of sage.tensor
.
comment:9 Changed 11 months ago by
All I can see is an example with sym=(1, 2)
 it's totally unclear what kind of input is expected, due to lack of any documentation.
comment:10 Changed 11 months ago by
OK. I will adapt documentation from sage.tensor.modules.comp
, where this input is documented.
comment:11 Changed 11 months ago by
 Commit changed from ad4f3f11796f33b3cae87aba9cfdecb1cb1ab061 to 3629386df9d59012cafa4382a4878d5b7fb944f0
Branch pushed to git repo; I updated commit sha1. New commits:
3629386  TensorSymmetryGroup: Adapt some documentation from sage.tensor.modules.comp

comment:12 Changed 11 months ago by
+ * ``sym = [(0,2), (1,3,4)]`` for a symmetry between the 1st and 3rd + indices and a symmetry between the 2nd, 4th and 5th indices.
is ambiguous. E.g. sym = [(0,2), (1,3)]
might either mean one order 2 symmetry (i.e. group of symmetries of order 2), or
a list of generators for a group of order 4.
In the former can one should say something like a symmetry which acts as a permutation
(13)(24)
. In the latter, say they generate a group...
comment:13 Changed 10 months ago by
 Milestone changed from sage9.4 to sage9.5
comment:14 Changed 10 months ago by
 Cc ghspaghettisalat added
comment:15 Changed 5 months ago by
 Milestone changed from sage9.5 to sage9.6
comment:16 Changed 3 months ago by
 Milestone changed from sage9.6 to sage9.7
I'm thinking of putting this in
sage.groups.tensor.monoterm_symmetry