Differences

This shows you the differences between two versions of the page.

Link to this comparison view

documentation:ref:simpleindices [2015/11/21 12:33]
documentation:ref:simpleindices [2015/11/21 12:33] (current)
Line 1: Line 1:
 +====== SimpleIndices ======
 +----
 +
 +====Basics====
 +''​SimpleIndices''​ represents indices of [[SimpleTensor]] and [[TensorField]]. It inherits all properties of [[Indices]] but does not sort indices., so indices in ''​SimpleIndices'' ​ appear exactly in that order as defined by the user:
 +<sxh groovy; gutter: false>
 +def indices = '​_pqrs^sp'​.si
 +println indices
 +</​sxh>​
 +<sxh plain; gutter: false>
 +   > _pqrs^sp
 +</​sxh>​
 +On the other hand, since indices of different [[IndexType|types]] have different mathematical nature, [[SimpleIndices]] are sorted according to the type (preserving relative ordering of indices of same type):
 +<sxh groovy; gutter: false>
 +println '​_{mn}^{\\beta\\alpha}_{ba\\alpha}'​.si
 +</​sxh>​
 +<sxh plain; gutter: false>
 +   > _{mnba}^{\beta\alpha}_{\alpha}
 +</​sxh>​
 +
 +All properties and methods of ''​SimpleIndices''​ leaves the relative ordering of indices unchanged.
 +
 +
 +''​SimpleIndices''​ has ''​.symmetries''​ property which allows to define their permutational symmetries.
 +
 +====Features====
 +Since ''​SimpleIndices''​ is a subtype of [[Indices]],​ it inherits all its properties. However, ​ in contrast to [[Indices]],​ ''​SimpleIndices''​ and all its properties and methods preserve the relative ordering of indices.
 +
 +Consider examples. Parse ''​SimpleIndices''​ from string:
 +<sxh groovy; gutter: true>
 +def indices = '​^an_ab^m_pq^b'​.si
 +println indices
 +</​sxh>​
 +<sxh plain; gutter: false>
 +   > ^{an}_{ab}^{m}_{pq}^{b}
 +</​sxh>​
 +Get just free indices:
 +<sxh groovy; gutter: true; first-line: 3>
 +println indices.free
 +</​sxh>​
 +<sxh plain; gutter: false>
 +   > ^{nm}_{pq}
 +</​sxh>​
 +Invert indices:
 +<sxh groovy; gutter: true; first-line: 4>
 +println indices.inverted
 +</​sxh>​
 +<sxh plain; gutter: false>
 +   > _{an}^{ab}_{m}^{pq}_{b}
 +</​sxh>​
 +Get only contravariant indices:
 +<sxh groovy; gutter: true; first-line: 5>
 +println indices.upper
 +</​sxh>​
 +<sxh plain; gutter: false>
 +   > ^{anmb}
 +</​sxh>​
 +Get only covariant indices:
 +<sxh groovy; gutter: true; first-line: 6>
 +println indices.lower
 +</​sxh>​
 +<sxh plain; gutter: false>
 +   > _{abpq}
 +</​sxh>​
 +
 +Parse indices with multiple types:
 +<sxh groovy; gutter: true>
 +def indices = '​^AB_pqrs^C_A^sp'​.si
 +println indices
 +</​sxh>​
 +<sxh plain; gutter: false>
 +   > _{pqrs}^{spABC}_{A}
 +</​sxh>​
 +Get just Latin upper case:
 +<sxh groovy; gutter: true; first-line: 3>
 +println indices.getOfType(LatinUpper)
 +</​sxh>​
 +<sxh plain; gutter: false>
 +   > ^{ABC}_{A}
 +</​sxh>​
 +Get first index:
 +<sxh groovy; gutter: true; first-line: 4>
 +println indices[0].toStringIndex()
 +</​sxh>​
 +<sxh plain; gutter: false>
 +   > _{p}
 +</​sxh>​
 +Get first Latin upper index:
 +<sxh groovy; gutter: true; first-line: 5>
 +println indices[LatinUpper,​ 0].toStringIndex()
 +</​sxh>​
 +<sxh plain; gutter: false>
 +   > ^{A}
 +</​sxh>​
 +Get several indices at a time:
 +<sxh groovy; gutter: true; first-line: 6>
 +println indices[1, 3, 4]
 +</​sxh>​
 +<sxh plain; gutter: false>
 +   > _{qs}^{s}
 +</​sxh>​
 +Get range:
 +<sxh groovy; gutter: true; first-line: 7>
 +println indices[1..4]
 +</​sxh>​
 +<sxh plain; gutter: false>
 +   > _{qrs}^{s}
 +</​sxh>​
 +
 +As one can see, all methods in the above examples return indices which have same relative ordering as in the initial object.
 +
 +====Symmetries====
 +Symmetries can be attached to a single ''​SimpleIndices''​ object by using ''​.symmetry''​ property:
 +<sxh groovy; gutter: false>
 +def indices = '​_abcdef'​.si
 +indices.symmetries.addSymmetry([[0,​ 1], [2, 3]].p)
 +indices.symmetries.addSymmetry([[0,​ 3, 5]].p)
 +println indices.symmetries.permutationGroup.order()
 +</​sxh>​
 +<sxh plain; gutter: false>
 +   > 60
 +</​sxh>​
 +Symmetries of simple indices can be used in transformations like [[Symmetrize]] or other methods like [[GenerateTensor]] or [[Reduce]].
 +
 +The ''​.symmetries''​ property return a container of [[documentation:​ref:​permutation| permutations]] and a corresponding [[PermutationGroup]]. The latter can be accessed by taking ''​.permutationGroup''​ property.
 +
 +It should be noted, that when specifying symmetries of simple tensors like
 +<sxh groovy; gutter: true>
 +'​f_abc'​.t.indices.symmetries.addSymmetry( [1, 0].p )
 +</​sxh>​
 +these symmetries will be automatically attached to indices of all instances of tensor ''​f_abc'',​ i. e. ''​f_pqr''​ or ''​f_a^a_y''​ etc.:
 +<sxh groovy; gutter: true;​first-line:​ 2>
 +println '​f_pq^i'​.t.indices.symmetries.permutationGroup
 +</​sxh>​
 +<sxh plain; gutter: false>
 +   > Group( +[[0, 1]] )
 + </​sxh>​
 +
 +On the other hand, when specifying symmetries of "​detached"​ indices:
 +<sxh groovy; gutter: false>
 +def ind = '​_abc'​.si
 +ind.si.indices.symmetries.addSymmetry( [1, 0].p )
 +</​sxh>​
 +they will be attached just to the particular object (''​ind''​ in the above example). ​
 +
 +====See also====
 +  * Related guides: [[documentation:​guide:​tensors_and_indices]],​ [[documentation:​guide:​symmetries_of_tensors]]
 +  * Reference material: [[documentation:​ref:​indices]],​ [[documentation:​ref:​indextype]],​ [[documentation:​ref:​simpletensor]],​ [[documentation:​ref:​tensorfield]],​ [[documentation:​ref:​permutation]],​ [[documentation:​ref:​symmetrize]],​ [[documentation:​ref:​generatetensor]],​ [[documentation:​ref:​reduce]],​ [[documentation:​ref:​permutationgroup]]
 +  * JavaDocs: [[http://​api.redberry.cc/​redberry/​1.1.9/​java-api/​cc/​redberry/​core/​indices/​SimpleIndices.html| SimpleIndices]]
 +  * Source code: [[https://​bitbucket.org/​redberry/​redberry/​src/​tip/​core/​src/​main/​java/​cc/​redberry/​core/​indices/​SimpleIndices.java|SimpleIndices.java]]