Tensor Symmetries
Invariance under Phased Permutations  Symmetrization of Arrays 
Symmetry Specifications  More on Symmetry Specifications 
Tensors of rank 2 or higher that arise in applications usually have symmetries under exchange of their slots. For example, the inertia tensor, the stressenergy tensor, or the Ricci curvature tensor are rank2 fully symmetric tensors; the electromagnetic tensor is a rank2 antisymmetric tensor; and the Riemann curvature tensor and the stiffness tensor are rank4 tensors with nontrival symmetries. The Wolfram System has a general language to describe an arbitrary symmetry under permutations of the slots of any tensor and implements efficient algorithms to give those tensors a unique canonical form under those symmetries, an essential step in symbolic tensor computations.
The basic action on a tensor is formed by a transposition by a permutation and multiplication by a root of unity. If a tensor is invariant under such action, it can be said that the tensor has symmetry.
{permutation,phase}  general form of a symmetry generator 
TensorTranspose[tensor,gen]  action of a symmetry generator on a tensor 
A symmetry generator, or phased permutation, is a list containing a permutation describing how to permute the slots of a tensor and a root of unity that will simultaneously multiply the tensor:
Successive application of generators is equivalent to a product of generators, where phases and permutations are multiplied separately. In fact, if a tensor is invariant under two phased permutations, then it will be also invariant under their product. Hence, the set of phased permutations under which a tensor is invariant form a group, the slot symmetry group of the tensor.
The function TensorSymmetry returns a complete description of the transposition symmetry of a tensor. It can be given as a named symmetry or as a list of some symmetry generators from which the rest can be constructed by permutation products and powers.
TensorSymmetry[tensor]  find the transposition symmetry of tensor 
Symmetric[{s_{1},…,s_{n}}]  tensor keeps sign under exchange of any two slots s_{i} 
Antisymmetric[{s_{1},…,s_{n}}]  tensor changes sign under exchange of any two slots s_{i} 
ZeroSymmetric[{s_{1},…,s_{n}}]  symmetry of any zero tensor 
{symgen_{1},…,symgen_{m}}  list of generators of the symmetry of a tensor 
{sym_{1},…,sym_{k}}  direct product of symmetry specifications 
In the general case, TensorSymmetry returns the symmetry of a tensor as a list of generators. Permutations are given in cyclic form:
It is possible to increase the symmetry of an array by symmetrizing it, using the function Symmetrize. The result is given as a structured array of type SymmetrizedArray. For more information on this type of structure see "Symmetrized Arrays".
Symmetrize[tensor,sym]  symmetrize tensor to the symmetry sym 
SymmetrizedArray[rules,dims,sym] 
construct an array with symmetry, giving its independent components

SymmetrizedArray[StructuredData[dims,{rules,sym}]]  structured array representation of an array with symmetry 
Project into its antisymmetric part, with the result given as a structured array of type SymmetrizedArray, which stores only independent components:
Independent and Dependent Components
When a tensor or array has symmetry, then there is less freedom to specify its components. The symmetries actually specify relations among the components, and only some of them are independent.
SymmetrizedIndependentComponents[dims,sym]  independent components of an array with given dimensions and symmetry 
SymmetrizedDependentComponents[comp,sym]  dependent components associated to a given component under a symmetry 
The array has only four entries freely specifiable, and you can show that this is actually the maximum number compatible with its dimensions and symmetry:
There are six independent components for an array of dimensions {3,3,3,3} with the transposition symmetries of a Riemann tensor:
The dependent components associated to a given independent component can be obtained using orbit computations under the associated permutation group of the symmetry.
The function SymmetrizedIndependentComponents is used to give some more examples of symmetry specifications.
Named symmetries can be mixed with symmetries gives by generators, both using permutation lists or permutation cycles:
For a phased permutation {perm,ϕ} with ϕ a root of unity, in general you need to have ϕ^{n}1, where n is the permutation order of perm, as given by PermutationOrder[perm]. Otherwise, the generator can only be a symmetry of the zero tensor, and in such a case that generator is referred to as inconsistent or selfinconsistent. A tensor symmetry may also be compatible only with the zero tensor, even if it is expressed with generators that are selfconsistent. That is, the composition of selfconsistent generators may give a selfinconsistent generator.
The generator {{2,3,1},1} is inconsistent because the order of the permutation is 3, but 1 is a root of unity of order 2. The result is the empty list, because the zero tensor does not have independent components:
These two generators are consistent, but their combination gives a symmetry only compatible with the zero tensor: