# abelian¶

## Project overview¶

### Short description¶

Welcome to the documentation of `abelian`

, a Python library which facilitates
computations on elementary locally compact abelian groups (LCAs). The LCAs are
the groups isomorphic to
\(\mathbb{R}\),
\(T = \mathbb{R}/\mathbb{Z}\),
\(\mathbb{Z}\),
\(\mathbb{Z}_n\)
and direct sums of these.
The library is structured into two packages, the `abelian`

package and the
`abelian.linalg`

sub-package, which is built on the matrix class
`MutableDenseMatrix`

from the
`sympy`

library for symbolic mathematics.

#### Classes and methods¶

The

`LCA`

class represents elementary LCAs.**Fundamental methods**: identity LCA, direct sums, equality, isomorphic, element projection, Pontryagin dual.

The

`HomLCA`

class represents homomorphisms between LCAs.**Fundamental methods**: identity morphism, zero morphism, equality, composition, evaluation, stacking, element-wise operations, kernel, cokernel, image, coimage, dual (adjoint) morphism.

The

`LCAFunc`

class represents functions from LCAs to complex numbers.**Fundamental methods**: evaluation, composition, shift (translation), pullback, pushforward, point-wise operators (e.g. addition).

Algorithms for the Smith normal form and Hermite normal form are also
implemented in
`smith_normal_form()`

and
`hermite_normal_form()`

respectively.

### Project goals¶

- Represent the groups \(\mathbb{R}\), \(T\), \(\mathbb{Z}\) and \(\mathbb{Z}_n\) and facilitate computations on these.
- Handle the relationship between discrete and continuous groups in a natural way using group homomorphisms.
- DFT computations on discrete, finite groups and their products using the FFT.
- The software should build on the mathematical theory.

### Installation¶

- Download the latest version of Python, e.g. the Anaconda distribution.
- Depending on your operating system, do one of the following:
- Open a Python editor (such as Spyder, which comes with Anaconda)
and type
`from abelian import *`

to import all classes and functions from the library. You’re all set, go try some examples from the tutorials.