GroupFunctions.jl - Computing individual d-functions of the unitary group U(d)

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

Repository

1 Like