TiledArray  0.7.0
Permutation and Permutation Group Symmetry

Namespaces

 TiledArray::symmetry
 

Classes

class  TiledArray::Permutation
 Permutation of a sequence of objects indexed by base-0 indices. More...
 
class  TiledArray::symmetry::PermutationGroup
 Permutation group. More...
 
class  TiledArray::symmetry::SymmetricGroup
 Symmetric group. More...
 

Functions

bool TiledArray::operator== (const Permutation &p1, const Permutation &p2)
 Permutation equality operator. More...
 
bool TiledArray::operator!= (const Permutation &p1, const Permutation &p2)
 Permutation inequality operator. More...
 
bool TiledArray::operator< (const Permutation &p1, const Permutation &p2)
 Permutation less-than operator. More...
 
std::ostream & TiledArray::operator<< (std::ostream &output, const Permutation &p)
 Add permutation to an output stream. More...
 
Permutation TiledArray::operator- (const Permutation &perm)
 Inverse permutation operator. More...
 
Permutation TiledArray::operator* (const Permutation &p1, const Permutation &p2)
 Permutation multiplication operator. More...
 
PermutationTiledArray::operator*= (Permutation &p1, const Permutation &p2)
 return *this ^ other More...
 
Permutation TiledArray::operator^ (const Permutation &perm, int n)
 Raise perm to the n-th power. More...
 
bool TiledArray::symmetry::operator== (const PermutationGroup &p1, const PermutationGroup &p2)
 PermutationGroup equality operator. More...
 
bool TiledArray::symmetry::operator!= (const PermutationGroup &p1, const PermutationGroup &p2)
 PermutationGroup inequality operator. More...
 
bool TiledArray::symmetry::operator< (const PermutationGroup &p1, const PermutationGroup &p2)
 PermutationGroup less-than operator. More...
 
std::ostream & TiledArray::symmetry::operator<< (std::ostream &output, const PermutationGroup &p)
 Add permutation group to an output stream. More...
 
template<typename MultiIndex >
bool TiledArray::symmetry::is_lexicographically_smallest (const MultiIndex &idx, const PermutationGroup &pg)
 
PermutationGroup TiledArray::symmetry::conjugate (const PermutationGroup &G, const PermutationGroup::Permutation &h)
 Computes conjugate permutation group obtained by the action of a permutation. More...
 
PermutationGroup TiledArray::symmetry::intersect (const PermutationGroup &G1, const PermutationGroup &G2)
 
template<typename Set >
PermutationGroup TiledArray::symmetry::stabilizer (const PermutationGroup &G, const Set &f)
 Computes the largest subgroup of a permutation group that leaves the given set of indices fixed. More...
 

Detailed Description

Function Documentation

◆ conjugate()

PermutationGroup TiledArray::symmetry::conjugate ( const PermutationGroup G,
const PermutationGroup::Permutation h 
)
inline

Computes conjugate permutation group obtained by the action of a permutation.

Conjugate of group $ G $ under the action of element $ h $ is a group $ \{ a: a = h g h^{-1}, \forall g \in G \} $ .

Note
Since all permutation groups are subgroups of the symmetric group on the "infinite" set $ \{ 0, 1, \dots \} $, this can be used to "shift" the domain of G by action of h that permutes elements in the domain of G with those outside its domain, e.g. if $ G = S_2 $ on domain $ \{0,1\} $, conjugation with $ h = {1->2, 2->1} $ will produce $ S_2 $ on domain $ \{0,2\} $.
Parameters
Ginput PermutationGroup
hinput Permutation
Returns
conjugate PermutationGroup

Definition at line 381 of file permutation_group.h.

Here is the call graph for this function:

◆ intersect()

PermutationGroup TiledArray::symmetry::intersect ( const PermutationGroup G1,
const PermutationGroup G2 
)
inline

Computes intersect of 2 PermutationGroups

Note
The intersect is guaranteed to be a subgroup for both groups, hence this is the largest common subgroup.
Parameters
G1PermutationGroup
G2PermutationGroup
Returns
PermutationGroup

Definition at line 395 of file permutation_group.h.

Here is the call graph for this function:

◆ is_lexicographically_smallest()

template<typename MultiIndex >
bool TiledArray::symmetry::is_lexicographically_smallest ( const MultiIndex &  idx,
const PermutationGroup pg 
)

determines whether a given MultiIndex is lexicographically smallest among all indices generated by the action of pg.

Template Parameters
MultiIndexa sequence type that is directly addressable, i.e. has a fast operator[]
Parameters
idxan Index object
pgthe PermutationGroup
Returns
false if action of a permutation in pg can produce an Index that is lexicographically smaller than idx (i.e. there exists i such that pg[i]*idx is lexicographically less than idx), true otherwise

Definition at line 353 of file permutation_group.h.

◆ operator!=() [1/2]

bool TiledArray::symmetry::operator!= ( const PermutationGroup p1,
const PermutationGroup p2 
)
inline

PermutationGroup inequality operator.

Parameters
p1The left-hand permutation group to be compared
p2The right-hand permutation group to be compared
Returns
true if any element of p1 is not equal to that of p2, otherwise false.

Definition at line 225 of file permutation_group.h.

Here is the call graph for this function:

◆ operator!=() [2/2]

bool TiledArray::operator!= ( const Permutation p1,
const Permutation p2 
)
inline

Permutation inequality operator.

Parameters
p1The left-hand permutation to be compared
p2The right-hand permutation to be compared
Returns
true if any element of p1 is not equal to that of p2, otherwise false.

Definition at line 406 of file permutation.h.

Here is the call graph for this function:

◆ operator*()

Permutation TiledArray::operator* ( const Permutation p1,
const Permutation p2 
)
inline

Permutation multiplication operator.

Parameters
p1The left-hand permutation
p2The right-hand permutation
Returns
The product of p1 and p2 (which is the permutation of p2 by p1).

Definition at line 450 of file permutation.h.

Here is the call graph for this function:

◆ operator*=()

Permutation& TiledArray::operator*= ( Permutation p1,
const Permutation p2 
)
inline

return *this ^ other

Definition at line 456 of file permutation.h.

◆ operator-()

Permutation TiledArray::operator- ( const Permutation perm)
inline

Inverse permutation operator.

Parameters
permThe permutation to be inverted
Returns
perm.inverse()

Definition at line 440 of file permutation.h.

Here is the call graph for this function:

◆ operator<() [1/2]

bool TiledArray::symmetry::operator< ( const PermutationGroup p1,
const PermutationGroup p2 
)
inline

PermutationGroup less-than operator.

Parameters
p1The left-hand permutation group to be compared
p2The right-hand permutation group to be compared
Returns
true if the elements of p1 are lexicographically less than that of p2, otherwise false.

Definition at line 235 of file permutation_group.h.

Here is the call graph for this function:

◆ operator<() [2/2]

bool TiledArray::operator< ( const Permutation p1,
const Permutation p2 
)
inline

Permutation less-than operator.

Parameters
p1The left-hand permutation to be compared
p2The right-hand permutation to be compared
Returns
true if the elements of p1 are lexicographically less than that of p2, otherwise false.

Definition at line 416 of file permutation.h.

Here is the call graph for this function:

◆ operator<<() [1/2]

std::ostream & TiledArray::operator<< ( std::ostream &  output,
const Permutation p 
)
inline

Add permutation to an output stream.

Parameters
[out]outputThe output stream
[in]pThe permutation to be added to the output stream
Returns
The output stream

Definition at line 426 of file permutation.h.

Here is the call graph for this function:

◆ operator<<() [2/2]

std::ostream& TiledArray::symmetry::operator<< ( std::ostream &  output,
const PermutationGroup p 
)
inline

Add permutation group to an output stream.

Parameters
[out]outputThe output stream
[in]pThe permutation group to be added to the output stream
Returns
The output stream

Definition at line 245 of file permutation_group.h.

Here is the call graph for this function:

◆ operator==() [1/2]

bool TiledArray::operator== ( const Permutation p1,
const Permutation p2 
)
inline

Permutation equality operator.

Parameters
p1The left-hand permutation to be compared
p2The right-hand permutation to be compared
Returns
true if all elements of p1 and p2 are equal and in the same order, otherwise false.

Definition at line 395 of file permutation.h.

Here is the call graph for this function:

◆ operator==() [2/2]

bool TiledArray::symmetry::operator== ( const PermutationGroup p1,
const PermutationGroup p2 
)
inline

PermutationGroup equality operator.

Parameters
p1The left-hand permutation group to be compared
p2The right-hand permutation group to be compared
Returns
true if all elements of p1 and p2 are equal, otherwise false.

Definition at line 214 of file permutation_group.h.

Here is the call graph for this function:

◆ operator^()

Permutation TiledArray::operator^ ( const Permutation perm,
int  n 
)
inline

Raise perm to the n-th power.

Constructs the permutation $ P^n $, where $ P $ is the permutation perm.

Parameters
permThe base permutation
nExponent value
Returns
This permutation raised to the n-th power

Definition at line 467 of file permutation.h.

Here is the call graph for this function:

◆ stabilizer()

template<typename Set >
PermutationGroup TiledArray::symmetry::stabilizer ( const PermutationGroup G,
const Set &  f 
)
inline

Computes the largest subgroup of a permutation group that leaves the given set of indices fixed.

Template Parameters
Seta set of indices
Parameters
Ginput PermutationGroup
finput Set
Returns
the fixed set subgroup of G

Definition at line 411 of file permutation_group.h.

Here is the call graph for this function: