sagemath / sage

Main repository of SageMath
https://www.sagemath.org
Other
1.47k stars 485 forks source link

Action of a sympy TensorSymmetry #32029

Open mkoeppe opened 3 years ago

mkoeppe commented 3 years ago

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 2-cycle (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

CC: @tscrim @egourgoulhon @dimpase @honglizhaobob @spaghettisalat

Component: linear algebra

Branch/Commit: u/mkoeppe/action_of_a_sympy_tensorsymmetry @ 3629386

Issue created by migration from https://trac.sagemath.org/ticket/32029

mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -1,4 +1,4 @@
-SymPy's `TensorSymmetry` (https://docs.sympy.org/latest/modules/tensor/tensor.html) uses a trick to represent tensor symmetries and antisymmetries as permutation groups: Two extra elements (in the example below, 3 and 4) keep track of the sign
+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)

mkoeppe commented 3 years ago

Description changed:

--- 
+++ 
@@ -13,6 +13,6 @@
 We define a class `TensorSymmetryGroup`
 - which can be initialized from `sage.tensor` `sym` and `antisym` lists
 - can convert to/from `sympy.tensor.tensor.TensorSymmetry`
-- defines `_get_action_` for acting on tensor modules
+- defines `_get_action_` for acting on tensor modules / components
mkoeppe commented 3 years ago
comment:3

I'm thinking of putting this in sage.groups.tensor.monoterm_symmetry

mkoeppe commented 3 years ago

Branch: u/mkoeppe/action_of_a_sympy_tensorsymmetry

dimpase commented 3 years ago

Commit: ad4f3f1

dimpase commented 3 years ago
comment:5

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:

ad4f3f1src/sage/groups/tensor/monoterm_symmetry.py: New
mkoeppe commented 3 years ago
comment:6

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.

dimpase commented 3 years ago
comment:7

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.

mkoeppe commented 3 years ago
comment:8

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.

dimpase commented 3 years ago
comment:9

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.

mkoeppe commented 3 years ago
comment:10

OK. I will adapt documentation from sage.tensor.modules.comp, where this input is documented.

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 3 years ago

Branch pushed to git repo; I updated commit sha1. New commits:

3629386TensorSymmetryGroup: Adapt some documentation from sage.tensor.modules.comp
7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 3 years ago

Changed commit from ad4f3f1 to 3629386

dimpase commented 3 years ago
comment:12
+        * ``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...