You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently, SeQuant's Tensors can only have a defined set of index symmetries:
permutational symmetry within an index group (bra/ket) - symm, antisymm or nonsymm
bra-ket symmetry (symmetry under time reversal / taking the adjoint of the corresponding operator) - symm, conjugate and nonsymm
particle symmetry (exchange of two index "columns" in tensorial notation) - symm or nonsymm
These symmetries seem sufficient for describing (most) base tensors (two-electron integrals, amplitudes, etc.), but can end up restricting what kind of intermediate tensors can be represented. Consider for instance
which has only antisymmetric w.r.t. i_1<->i_2, but not w.r.t. a_1<->i_4. Therefore, labelling the tensor as having antisymmetric indices would be wrong, but so would declaring them as non-symmetric.
However, this fine-grained symmetry information is necessary in order to be able to e.g. properly spintrace this tensor and also to correctly canonicalize it.
Therefore, it would seem that having a set of pre-defined symmetries limits the more general applicability of Tensor objects.
Possible workarounds to represent such an intermediate currently:
Using the expression tree to encode precedence (representing the intermediate as a nested Product object). This avoids having to introduce an explicit tensor representing the intermediate, but is also at risk of being flattened somewhere during further processing (at which point the precedence information is gone)
A possible solution of this issue would be to explicitly represent the index symmetries of a tensor by an actual permutation group. For this, we could make use of this library that I have written already: https://github.com/Krzmbrzl/libPerm
Such an approach would makes the current labels redundant and instead one could create query-methods like isParticleSymmetric() etc. However, with this we would be able to represent all possible index symmetries (as long as they form a finite group) for tensors.
The text was updated successfully, but these errors were encountered:
Currently, SeQuant's
Tensor
s can only have a defined set of index symmetries:symm
,antisymm
ornonsymm
symm
,conjugate
andnonsymm
symm
ornonsymm
These symmetries seem sufficient for describing (most) base tensors (two-electron integrals, amplitudes, etc.), but can end up restricting what kind of intermediate tensors can be represented. Consider for instance
which has only antisymmetric w.r.t.
i_1
<->i_2
, but not w.r.t.a_1
<->i_4
. Therefore, labelling the tensor as having antisymmetric indices would be wrong, but so would declaring them as non-symmetric.However, this fine-grained symmetry information is necessary in order to be able to e.g. properly spintrace this tensor and also to correctly canonicalize it.
Therefore, it would seem that having a set of pre-defined symmetries limits the more general applicability of
Tensor
objects.Possible workarounds to represent such an intermediate currently:
Product
object). This avoids having to introduce an explicit tensor representing the intermediate, but is also at risk of being flattened somewhere during further processing (at which point the precedence information is gone)A possible solution of this issue would be to explicitly represent the index symmetries of a tensor by an actual permutation group. For this, we could make use of this library that I have written already: https://github.com/Krzmbrzl/libPerm
Such an approach would makes the current labels redundant and instead one could create query-methods like
isParticleSymmetric()
etc. However, with this we would be able to represent all possible index symmetries (as long as they form a finite group) for tensors.The text was updated successfully, but these errors were encountered: