Unitary group#

This module provides tools for computations of integrals of polynomials on the unitary group.

Unitary group Python interface

References

[1] Collins, B. (2003). Moments and cumulants of polynomial random variables on unitarygroups, the Itzykson-Zuber integral, and free probability. International Mathematics Research Notices, 2003(17), 953-982.

[2] Matsumoto, S. (2013). Weingarten calculus for matrix ensembles associated with compact symmetric spaces. arXiv preprint arXiv:1301.5401.

haarpy.unitary.representation_dimension(partition, unitary_dimension)[source]#

Returns the dimension of the unitary group’s representation labelled by the input partition

Parameters:
  • partition (tuple[int, ...]) – A partition labelling a representation of the unitary group \(U(d)\)

  • unitary_dimension (Symbol) – The dimension \(d\) of the unitary group

Returns:

The dimension of the unitary group’s representation labelled by the input partition

Return type:

Expr

Examples

>>> from sympy import Symbol
>>> from haarpy import representation_dimension
>>> d = Symbol("d")
>>> representation_dimension((2,1,1), 4)
15
>>> representation_dimension((2,1,1), d)
d*(d/2 - 1/2)*(d - 2)*(d + 1)/4
haarpy.unitary.weingarten_unitary(cycle, unitary_dimension)[source]#

Returns the unitary Weingarten function

Parameters:
  • cycle (Permutation | tuple[int, ...]) – A permutation from the symmetric group or a partition reprensenting its cycle-type

  • unitary_dimension (Symbol) – The dimension \(d\) of the unitary matrix \(U(d)\)

Returns:

The Weingarten function

Return type:

Expr

Raises:
  • TypeError – If unitary_dimension has the wrong type

  • TypeError – If cycle has the wrong type

Notes

Since the unitary Weingarten function is a class function on the symmetric group, the argument may be given either as a permutation or as its cycle-type

Examples

>>> from sympy import Symbol
>>> from haarpy import weingarten_unitary
>>> d = Symbol("d")
>>> weingarten_unitary(Permutation(2)(0, 1), 4)
Fraction(-1, 180)
>>> weingarten_unitary(Permutation(2)(0, 1), d)
-1/((d - 2)*(d - 1)*(d + 1)*(d + 2))
>>> weingarten_unitary((2, 1), d)
-1/((d - 2)*(d - 1)*(d + 1)*(d + 2))

See also

haarpy.symmetric.murn_naka_rule()

Implementation of the Murnaghan-Nakayama rule for the characters irreducible representations of the symmetric group \(S_p\)

haarpy.unitary.representation_dimension()

Computes the dimension of the unitary group’s representation labelled by a given partition

haarpy.unitary.haar_integral_unitary(sequences, unitary_dimension)[source]#

Returns the integral of a monomial over the unitary group

Parameters:
  • sequences (tuple[tuple[int, ...], ...]) – Sequences of matrix elements

  • unitary_dimension (Symbol) – The dimension of the unitary group

Returns:

The integral under the Haar measure

Return type:

Expr

Raises:
  • ValueError – if sequences do not contain 4 tuples

  • ValueError – if the input sequences are of different lengths

Examples

>>> from sympy import Symbol
>>> from haarpy import haar_integral_unitary
>>> d = Symbol("d")
>>> seq_i, seq_j = (0, 1, 2), (0, 0, 1)
>>> seq_i_prime, seq_j_prime = (0, 1, 2), (0, 1, 0)
>>> haar_integral_unitary((seq_i, seq_j, seq_i_prime, seq_j_prime), 5)
Fraction(-1, 840)
>>> haar_integral_unitary((seq_i, seq_j, seq_i_prime, seq_j_prime), d)
-1/(d*(d - 1)*(d + 1)*(d + 2))

See also

haarpy.symmetric.stabilizer_coset()

Returns all permutations sending a first sequence to a second sequence

haarpy.unitary.weingarten_unitary()

Returns the unitary Weingarten function