#include <abelian.h>
Public Member Functions | |
| FiniteAbelianGroup () | |
| FiniteAbelianGroup (const std::vector< unsigned long > &) | |
| ~FiniteAbelianGroup () | |
| void | toArray (GrpArr &a, GrpNbr x) const |
| void | toArray (GrpArr &a, const latticetypes::Weight &v) const |
| GrpNbr | toGrpNbr (const GrpArr &a) const |
| void | toWeight (latticetypes::Weight &, const GrpArr &) const |
| void | toWeight (latticetypes::Weight &, GrpNbr) const |
| bool | operator== (const FiniteAbelianGroup &A) const |
| bool | operator!= (const FiniteAbelianGroup &A) const |
| GrpNbr | add (GrpNbr, GrpNbr) const |
| GrpNbr | add (GrpNbr, const GrpArr &) const |
| GrpArr & | add (GrpArr &, const GrpArr &) const |
| GrpArr & | add (GrpArr &, GrpNbr) const |
| unsigned long | annihilator () const |
| const GroupType & | cotype () const |
| GrpNbr | leftApply (GrpNbr, const Endomorphism &) const |
| GrpArr & | leftApply (GrpArr &, const Endomorphism &) const |
| GrpNbr | minus (GrpNbr) const |
| unsigned long | order (GrpNbr) const |
| unsigned long | order (const bitmap::BitMap &, GrpNbr) const |
| unsigned long | pairing (const GrpArr &, const GrpArr &) const |
| unsigned long | pairing (const GrpArr &, const GrpArr &, unsigned long) const |
| GrpNbr | prod (GrpNbr, unsigned long) const |
| unsigned long | rank () const |
| unsigned long | size () const |
| GrpNbr | subtract (GrpNbr, const GrpNbr) const |
| GrpArr & | subtract (GrpArr &, const GrpArr &) const |
| const GroupType & | type () const |
Protected Attributes | |
| unsigned long | d_size |
| GroupType | d_type |
| GroupType | d_cotype |
|
|
|
|
|
Definition at line 42 of file abelian.cpp. |
|
|
|
|
||||||||||||
|
Synopsis: a += x. Definition at line 115 of file abelian.cpp. References atlas::lietype::rank(), and atlas::abelian::toArray(). |
|
||||||||||||
|
Synopsis: a += b. Precondition: a and b hold valid arrays for the group; The only difficulty is doing it without triggering overflow. Definition at line 94 of file abelian.cpp. |
|
||||||||||||
|
Synopsis: x += b. The main problem is to deal with the modular addition, so that the overflow is handled correctly. Definition at line 128 of file abelian.cpp. References atlas::abelian::toArray(), and atlas::abelian::toGrpNbr(). |
|
||||||||||||
|
Synopsis: x += y. The main problem is to deal with the modular addition, so that the overflow is handled correctly. Definition at line 145 of file abelian.cpp. References atlas::lietype::rank(), atlas::abelian::toArray(), and atlas::abelian::toGrpNbr(). Referenced by atlas::abelian::coset(). |
|
|
Synopsis: returns the s.c.m. of the orders of the elements of the group. Definition at line 170 of file abelian.cpp. References d_type. |
|
|
|
|
||||||||||||
|
Synopsis: applies the matrix q to the array a, on the left. The idea is that the matrix defines an endomorphism of the group in terms of the array representation. Definition at line 200 of file abelian.cpp. References atlas::abelian::Endomorphism, atlas::arithmetic::modAdd(), and atlas::arithmetic::modProd(). |
|
||||||||||||
|
Synopsis: applies the matrix q to the element x, on the left. The idea is that the matrix defines an endomorphism of the group in terms of the array representation. Definition at line 183 of file abelian.cpp. References atlas::abelian::Endomorphism, atlas::lietype::rank(), atlas::abelian::toArray(), and atlas::abelian::toGrpNbr(). |
|
|
|
|
|
Definition at line 137 of file abelian.h. References atlas::allocator::operator==(). |
|
|
Definition at line 133 of file abelian.h. References d_type. |
|
||||||||||||
|
Synopsis: computes the order of x modulo B. NOTE : we have not tried to be smart at all here. For large groups this would be very unsatisfactory. Definition at line 248 of file abelian.cpp. |
|
|
Synopsis: computes the order of x in the group. Definition at line 227 of file abelian.cpp. References atlas::arithmetic::gcd(), atlas::arithmetic::lcm(), atlas::lietype::rank(), and atlas::abelian::toArray(). Referenced by atlas::abelian::cycGenerators(), atlas::abelian::generateSubgroup(), and atlas::updateCycGenerator(). |
|
||||||||||||||||
|
Synopsis: computes the m in [0,t[ s.t. a(b) = e^{2i pi m/t}, where a is interpreted as an element of the dual group, b as an element of the group. Precondition: pairing(a,b) is an element of t-torsion in Z/n, where n is the annihilator of the group; The required m is just pairing(a,b)/(n/t). NOTE: this is a sloppy implementation, that doesn't deal carefully with overflow. It is expected to be used only for very small groups. NOTE: we put in an assertion for safety. Definition at line 297 of file abelian.cpp. |
|
||||||||||||
|
Synopsis: computes the m in [0,n[ s.t. a(b) = e^{2i pi m/n}, where a is interpreted as an element of the dual group, b as an element of the group, and n is the annihilator of the group (the last entry in d_type). NOTE: this is a sloppy implementation, that doesn't deal carefully with overflow. It is expected to be used only for very small groups. Definition at line 274 of file abelian.cpp. References atlas::lietype::rank(). |
|
||||||||||||
|
Replaces x with n.x. We use the classic logarithmic algorithm, where the result is obtained through a sequence of additions and multiplications by two. Definition at line 325 of file abelian.cpp. Referenced by atlas::abelian::cycGenerators(), atlas::abelian::generateSubgroup(), and atlas::updateCycGenerator(). |
|
|
Definition at line 171 of file abelian.h. References size(). Referenced by atlas::abelian::basis(), atlas::testrun::CoveringIterator::makeBasis(), and atlas::testrun::SubgroupIterator::resetGenerator(). |
|
|
Definition at line 175 of file abelian.h. Referenced by atlas::testrun::CoveringIterator::CoveringIterator(), atlas::abelian::cycGenerators(), atlas::abelian::generateSubgroup(), atlas::abelian::quotReps(), rank(), and atlas::updateCycGenerator(). |
|
||||||||||||
|
Synopsis: a -= b. Precondition: a and b hold valid arrays for the group; The only difficulty is doing it without triggering overflow. Definition at line 357 of file abelian.cpp. |
|
||||||||||||
|
|
|
||||||||||||
|
Definition at line 120 of file abelian.h. References atlas::abelian::toArray(). |
|
||||||||||||
|
Definition at line 116 of file abelian.h. References atlas::abelian::toArray(). |
|
|
Definition at line 124 of file abelian.h. References atlas::abelian::toGrpNbr(). |
|
||||||||||||
|
Synopsis: put in v a representative of a. NOTE: sloppy implementation; we don't check for overflow, which may happen in all cases, as the coefficients of v will be signed quantities. Definition at line 72 of file abelian.cpp. References atlas::lietype::rank(), and atlas::lietype::type(). |
|
||||||||||||
|
Synopsis: put in v a representative of a. NOTE: sloppy implementation; we don't check for overflow, which may happen in all cases, as the coefficients of v will be signed quantities. Definition at line 56 of file abelian.cpp. Referenced by atlas::abelian::basis(), and atlas::testrun::CoveringIterator::makeBasis(). |
|
|
Definition at line 183 of file abelian.h. Referenced by atlas::abelian::basis(), atlas::abelian::cycGenerators(), atlas::abelian::toEndomorphism(), and atlas::abelian::transpose(). |
|
|
If m is the largest order of an element (equal to d_type[last]), then the group is a product of quotients of Z/mZ, by the subgroups of order d_cotype[j]; each of these orders divides its predecessor, and d_cotype[last] is equal to 1. Definition at line 100 of file abelian.h. Referenced by FiniteAbelianGroup(). |
|
|
Cardinality of the group. Definition at line 88 of file abelian.h. Referenced by FiniteAbelianGroup(). |
|
|
Sizes of the canonical cyclic factors, arranged so that each divides the next. Definition at line 93 of file abelian.h. Referenced by annihilator(), and operator==(). |
1.3.9.1