Skip to content

A Julia library for performing fast Fourier transforms over arbitrary groups

License

Notifications You must be signed in to change notification settings

NickMcNutt/GroupFFT.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GroupFFT.jl

Build Status codecov.io

Overview

How to install

In Julia:

Pkg.clone("https://github.com/NickMcNutt/GroupFFT.jl")

Examples

Generate an element of the orthogonal group O(3) using the Euler ZYZ parameterization:

using GroupFFT

α, β, γ = π/2, π/2, π/2
g = O3(α, β, γ)

Compute the unitary irreducible representations of element g. For the group O(3), these are Wigner-D matrices.

unitary_irreps = [unitary_irrep(g, i) for i in 0:2]
display.(round.(unitary_irreps, 3))
1×1 Array{Complex{Float64},2}:
 1.0+0.0im

3×3 Array{Complex{Float64},2}:
 -0.5+0.0im     0.0+0.707im   0.5+0.0im  
 -0.0-0.707im   0.0+0.0im     0.0-0.707im
  0.5+0.0im    -0.0+0.707im  -0.5-0.0im  

5×5 Array{Complex{Float64},2}:
   0.25-0.0im  -0.0-0.5im  -0.612+0.0im  0.0+0.5im    0.25+0.0im
    0.0+0.5im   0.5-0.0im     0.0+0.0im  0.5+0.0im     0.0-0.5im
 -0.612+0.0im  -0.0-0.0im    -0.5-0.0im  0.0-0.0im  -0.612-0.0im
   -0.0-0.5im   0.5+0.0im    -0.0+0.0im  0.5+0.0im    -0.0+0.5im
   0.25+0.0im  -0.0+0.5im  -0.612-0.0im  0.0-0.5im    0.25+0.0im

If we don't want complex numbers, we can generate real irreducible representations instead:

orthogonal_irreps = [orthogonal_irrep(g, i) for i in 0:2]
display.(round.(orthogonal_irreps, 3))
1×1 Array{Float64,2}:
 1.0

3×3 Array{Float64,2}:
 -1.0  -0.0  0.0
  0.0  -0.0  1.0
 -0.0   1.0  0.0

5×5 Array{Float64,2}:
 -0.0  -1.0  -0.0     0.0  -0.0  
 -1.0   0.0   0.0    -0.0   0.0  
  0.0  -0.0  -0.5    -0.0   0.866
 -0.0   0.0  -0.0     1.0   0.0  
  0.0  -0.0   0.866   0.0   0.5

Functionality

GroupFFT.jl specifies an abstract base type Group from which all group types derive. Currently, support is available for the following groups:

OrthogonalGroup{T, 3}
SpecialOrthogonalGroup{T, 3}
SymmetricGroup{T, N}

For convenience, type aliases are provided for groups of low dimension:

O3{T}
SO3{T}

Contributing

GroupFFT.jl aims to be a comprehensive package that provides base types and linear representations for all of the most widely used groups. We welcome the support of anyone who wishes to contribute to this project.

Completed

  • Base types and irreducible representations for O(3), SO(3), and Sn

Todo

  • Base types and representations for O(n), U(n), SU(n), SL(n), SE(n), PSL(n)
  • Support for other kinds of group representations (standard, faithful, etc.)
  • Support for fields other than the complex and real numbers

About

A Julia library for performing fast Fourier transforms over arbitrary groups

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages