Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

atlas::abelian::FiniteAbelianGroup Class Reference

#include <abelian.h>

List of all members.

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
GrpArradd (GrpArr &, const GrpArr &) const
GrpArradd (GrpArr &, GrpNbr) const
unsigned long annihilator () const
const GroupTypecotype () const
GrpNbr leftApply (GrpNbr, const Endomorphism &) const
GrpArrleftApply (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
GrpArrsubtract (GrpArr &, const GrpArr &) const
const GroupTypetype () const

Protected Attributes

unsigned long d_size
GroupType d_type
GroupType d_cotype


Constructor & Destructor Documentation

atlas::abelian::FiniteAbelianGroup::FiniteAbelianGroup  )  [inline]
 

Definition at line 105 of file abelian.h.

atlas::abelian::FiniteAbelianGroup::FiniteAbelianGroup const std::vector< unsigned long > &   )  [explicit]
 

Definition at line 42 of file abelian.cpp.

References d_cotype, and d_size.

atlas::abelian::FiniteAbelianGroup::~FiniteAbelianGroup  )  [inline]
 

Definition at line 110 of file abelian.h.


Member Function Documentation

GrpArr & atlas::abelian::FiniteAbelianGroup::add GrpArr a,
GrpNbr  x
const
 

Synopsis: a += x.

Definition at line 115 of file abelian.cpp.

References atlas::lietype::rank(), and atlas::abelian::toArray().

GrpArr & atlas::abelian::FiniteAbelianGroup::add GrpArr a,
const GrpArr b
const
 

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.

GrpNbr atlas::abelian::FiniteAbelianGroup::add GrpNbr  x,
const GrpArr b
const
 

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().

GrpNbr atlas::abelian::FiniteAbelianGroup::add GrpNbr  x,
GrpNbr  y
const
 

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().

unsigned long atlas::abelian::FiniteAbelianGroup::annihilator  )  const
 

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.

const GroupType& atlas::abelian::FiniteAbelianGroup::cotype  )  const [inline]
 

Definition at line 151 of file abelian.h.

GrpArr & atlas::abelian::FiniteAbelianGroup::leftApply GrpArr a,
const Endomorphism q
const
 

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().

GrpNbr atlas::abelian::FiniteAbelianGroup::leftApply GrpNbr  x,
const Endomorphism q
const
 

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().

GrpNbr atlas::abelian::FiniteAbelianGroup::minus GrpNbr   )  const
 

bool atlas::abelian::FiniteAbelianGroup::operator!= const FiniteAbelianGroup A  )  const [inline]
 

Definition at line 137 of file abelian.h.

References atlas::allocator::operator==().

bool atlas::abelian::FiniteAbelianGroup::operator== const FiniteAbelianGroup A  )  const [inline]
 

Definition at line 133 of file abelian.h.

References d_type.

unsigned long atlas::abelian::FiniteAbelianGroup::order const bitmap::BitMap B,
GrpNbr  x
const
 

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.

unsigned long atlas::abelian::FiniteAbelianGroup::order GrpNbr  x  )  const
 

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().

unsigned long atlas::abelian::FiniteAbelianGroup::pairing const GrpArr a,
const GrpArr b,
unsigned long  t
const
 

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.

unsigned long atlas::abelian::FiniteAbelianGroup::pairing const GrpArr a,
const GrpArr b
const
 

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().

GrpNbr atlas::abelian::FiniteAbelianGroup::prod GrpNbr  x,
unsigned long  n
const
 

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().

unsigned long atlas::abelian::FiniteAbelianGroup::rank  )  const [inline]
 

Definition at line 171 of file abelian.h.

References size().

Referenced by atlas::abelian::basis(), atlas::testrun::CoveringIterator::makeBasis(), and atlas::testrun::SubgroupIterator::resetGenerator().

unsigned long atlas::abelian::FiniteAbelianGroup::size  )  const [inline]
 

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().

GrpArr & atlas::abelian::FiniteAbelianGroup::subtract GrpArr a,
const GrpArr b
const
 

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.

GrpNbr atlas::abelian::FiniteAbelianGroup::subtract GrpNbr  ,
const   GrpNbr
const
 

void atlas::abelian::FiniteAbelianGroup::toArray GrpArr a,
const latticetypes::Weight v
const [inline]
 

Definition at line 120 of file abelian.h.

References atlas::abelian::toArray().

void atlas::abelian::FiniteAbelianGroup::toArray GrpArr a,
GrpNbr  x
const [inline]
 

Definition at line 116 of file abelian.h.

References atlas::abelian::toArray().

GrpNbr atlas::abelian::FiniteAbelianGroup::toGrpNbr const GrpArr a  )  const [inline]
 

Definition at line 124 of file abelian.h.

References atlas::abelian::toGrpNbr().

void atlas::abelian::FiniteAbelianGroup::toWeight latticetypes::Weight v,
GrpNbr  x
const
 

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().

void atlas::abelian::FiniteAbelianGroup::toWeight latticetypes::Weight v,
const GrpArr a
const
 

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().

const GroupType& atlas::abelian::FiniteAbelianGroup::type  )  const [inline]
 

Definition at line 183 of file abelian.h.

Referenced by atlas::abelian::basis(), atlas::abelian::cycGenerators(), atlas::abelian::toEndomorphism(), and atlas::abelian::transpose().


Member Data Documentation

GroupType atlas::abelian::FiniteAbelianGroup::d_cotype [protected]
 

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().

unsigned long atlas::abelian::FiniteAbelianGroup::d_size [protected]
 

Cardinality of the group.

Definition at line 88 of file abelian.h.

Referenced by FiniteAbelianGroup().

GroupType atlas::abelian::FiniteAbelianGroup::d_type [protected]
 

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==().


The documentation for this class was generated from the following files:
Generated on Wed Mar 26 16:52:17 2008 for atlas by  doxygen 1.3.9.1