GroupFunctions.jl
Hello everyone.
I would like to share a project I have been developing for more than five years: GroupFunctions.jl, a registered Julia package for symbolic and numerical computation of individual group functions; that is, entries of the irreps of the special unitary group SU(d) or U(d) too.
Group functions of the unitary group appear in several areas of physics, including nuclear physics, quantum computing, and quantum optics. These applications have been the primary motivation behind the development of the package. GroupFunctions.jl provides a native Julia framework for working with these objects in a way that is both mathematically expressive and practical for research workflows.
Example
The package can be used to compute an SU(2) group function for spin 1:
julia> U = su2_block_symbolic(2,1);
julia> U
2×2 Matrix{SymEngine.Basic}:
v_1_1 v_1_2
v_2_1 v_2_2
julia> group_function([2,0], U)[1]
3×3 Matrix{SymEngine.Basic}:
v_2_2^2 sqrt(2)*v_2_2*v_2_1 v_2_1^2
sqrt(2)*v_1_2*v_2_2 v_1_1*v_2_2 + v_1_2*v_2_1 sqrt(2)*v_1_1*v_2_1
v_1_2^2 sqrt(2)*v_1_1*v_1_2 v_1_1^2
A less trivial example is with the irrep lambda = [2,0,0] of SU3 (the output has some columns truncated)
julia> U = [GroupFunctions.SymEngine.symbols("u_$(i)_$(j)") for i in 1:3, j in 1:3];
julia> U
3×3 Matrix{SymEngine.Basic}:
u_1_1 u_1_2 u_1_3
u_2_1 u_2_2 u_2_3
u_3_1 u_3_2 u_3_3
julia> group_function([2,0,0], U)[1]
6×6 Matrix{SymEngine.Basic}:
u_3_3^2 sqrt(2)*u_3_2*u_3_3 sqrt(2)*u_3_1*u_3_3 u_3_2^2 sqrt(2)*u_3_1*u_3_2 u_3_1^2
sqrt(2)*u_2_3*u_3_3 u_2_2*u_3_3 + u_2_3*u_3_2 u_2_1*u_3_3 + u_2_3*u_3_1 sqrt(2)*u_2_2*u_3_2 u_2_1*u_3_2 + u_2_2*u_3_1 sqrt(2)*u_2_1*u_3_1
sqrt(2)*u_1_3*u_3_3 u_1_2*u_3_3 + u_1_3*u_3_2 u_1_1*u_3_3 + u_1_3*u_3_1 sqrt(2)*u_1_2*u_3_2 u_1_1*u_3_2 + u_1_2*u_3_1 sqrt(2)*u_1_1*u_3_1
u_2_3^2 sqrt(2)*u_2_2*u_2_3 sqrt(2)*u_2_1*u_2_3 u_2_2^2 sqrt(2)*u_2_2*u_2_1 u_2_1^2
sqrt(2)*u_2_3*u_1_3 u_2_2*u_1_3 + u_2_3*u_1_2 u_2_1*u_1_3 + u_2_3*u_1_1 sqrt(2)*u_2_2*u_1_2 u_2_1*u_1_2 + u_2_2*u_1_1 sqrt(2)*u_2_1*u_1_1
u_1_3^2 sqrt(2)*u_1_2*u_1_3 sqrt(2)*u_1_1*u_1_3 u_1_2^2 sqrt(2)*u_1_1*u_1_2 u_1_1^2
Yet more interesting, consider computing a single d-function for the 330-dimensional SU(10) irrep [2,1,0,0,0,0,0,0,0,0]:
julia> states = basis_states([2,1,0,0,0,0,0,0,0,0]);
julia> group_function([2,1,0,0,0,0,0,0,0,0],states[1], states[3])
2*((1/2)*u_9_7*u_10_10^2 + (-1/2)*u_9_10*u_10_7*u_10_10)
Features
- Symbolic and numerical computation of individual group functions
- Support for symbolic matrix inputs
- State labeling via Gelfand–Tsetlin patterns
- Computation of group characters
- Export utilities for Wolfram-compatible syntax
Development Status
GroupFunctions.jl is under active development, with ongoing work focused on expanding documented applications and improving performance and usability. Current use cases are strongly motivated by quantum optics, particularly boson sampling.
Contributions and feedback are welcome, especially on interface design and notation. If you are using group functions or know of applications not covered in the documentation, please open an Issue in the repository. Your contribution will be clearly acknowledged. If your field or problem uses different notation or a name for d-functions, I will be more than happy to add it to the codebase.
Installation
pkg> add GroupFunctions