pub struct SunAlgebra<const N: usize> { /* private fields */ }Expand description
Lie algebra su(N) - (N²-1)-dimensional space of traceless anti-Hermitian matrices
§Type Parameter
N: Matrix dimension (must be ≥ 2)
§Representation
Elements are stored as (N²-1) real coefficients corresponding to the generalized Gell-Mann basis. The basis is constructed systematically:
-
Symmetric generators (N(N-1)/2 elements):
- λᵢⱼ with i < j: has 1 at (i,j) and (j,i)
-
Antisymmetric generators (N(N-1)/2 elements):
- λᵢⱼ with i < j: has -i at (i,j) and +i at (j,i)
-
Diagonal generators (N-1 elements):
- λₖ diagonal with first k entries = 1, (k+1)-th entry = -k
This generalizes the Pauli matrices (N=2) and Gell-Mann matrices (N=3).
§Mathematical Properties
- Hermitian generators: λⱼ† = λⱼ
- Traceless: Tr(λⱼ) = 0
- Normalized: Tr(λᵢλⱼ) = 2δᵢⱼ
- Completeness: {λⱼ/√2} form orthonormal basis for traceless Hermitian matrices
§Memory Layout
For SU(N), we store (N²-1) f64 values in a heap-allocated Vec for N > 4, or stack-allocated array for N ≤ 4 (common cases).
Implementations§
Source§impl<const N: usize> SunAlgebra<N>
impl<const N: usize> SunAlgebra<N>
Sourcepub fn coefficients(&self) -> &[f64]
pub fn coefficients(&self) -> &[f64]
Returns the coefficients in the generalized Gell-Mann basis.
Sourcepub fn to_matrix(&self) -> Array2<Complex64>
pub fn to_matrix(&self) -> Array2<Complex64>
Convert to N×N anti-Hermitian matrix: X = i·∑ⱼ aⱼ·(λⱼ/2)
This is the fundamental representation in ℂᴺˣᴺ. Convention: tr(Tₐ†Tᵦ) = ½δₐᵦ where Tₐ = iλₐ/2.
§Performance
- Time: O(N²)
- Space: O(N²)
- Lazy: Only computed when called
§Mathematical Formula
Given coefficients [a₁, …, a_{N²-1}], returns:
X = i·∑ⱼ aⱼ·(λⱼ/2)where λⱼ are the generalized Gell-Mann matrices with tr(λₐλᵦ) = 2δₐᵦ.
Sourcepub fn from_matrix(matrix: &Array2<Complex64>) -> Self
pub fn from_matrix(matrix: &Array2<Complex64>) -> Self
Construct algebra element from matrix
Given X ∈ su(N), extract coefficients in Gell-Mann basis.
§Performance
O(N²) time via inner products with basis elements.
Trait Implementations§
Source§impl<const N: usize> AbsDiffEq for SunAlgebra<N>
impl<const N: usize> AbsDiffEq for SunAlgebra<N>
Source§fn default_epsilon() -> Self::Epsilon
fn default_epsilon() -> Self::Epsilon
Source§fn abs_diff_eq(&self, other: &Self, epsilon: Self::Epsilon) -> bool
fn abs_diff_eq(&self, other: &Self, epsilon: Self::Epsilon) -> bool
Source§fn abs_diff_ne(&self, other: &Rhs, epsilon: Self::Epsilon) -> bool
fn abs_diff_ne(&self, other: &Rhs, epsilon: Self::Epsilon) -> bool
AbsDiffEq::abs_diff_eq.Source§impl<const N: usize> Add<&SunAlgebra<N>> for &SunAlgebra<N>
impl<const N: usize> Add<&SunAlgebra<N>> for &SunAlgebra<N>
Source§type Output = SunAlgebra<N>
type Output = SunAlgebra<N>
+ operator.Source§fn add(self, rhs: &SunAlgebra<N>) -> SunAlgebra<N>
fn add(self, rhs: &SunAlgebra<N>) -> SunAlgebra<N>
+ operation. Read moreSource§impl<const N: usize> Add<&SunAlgebra<N>> for SunAlgebra<N>
impl<const N: usize> Add<&SunAlgebra<N>> for SunAlgebra<N>
Source§type Output = SunAlgebra<N>
type Output = SunAlgebra<N>
+ operator.Source§fn add(self, rhs: &SunAlgebra<N>) -> SunAlgebra<N>
fn add(self, rhs: &SunAlgebra<N>) -> SunAlgebra<N>
+ operation. Read moreSource§impl<const N: usize> Add<SunAlgebra<N>> for &SunAlgebra<N>
impl<const N: usize> Add<SunAlgebra<N>> for &SunAlgebra<N>
Source§type Output = SunAlgebra<N>
type Output = SunAlgebra<N>
+ operator.Source§fn add(self, rhs: SunAlgebra<N>) -> SunAlgebra<N>
fn add(self, rhs: SunAlgebra<N>) -> SunAlgebra<N>
+ operation. Read moreSource§impl<const N: usize> Add for SunAlgebra<N>
impl<const N: usize> Add for SunAlgebra<N>
Source§impl<const N: usize> Clone for SunAlgebra<N>
impl<const N: usize> Clone for SunAlgebra<N>
Source§fn clone(&self) -> SunAlgebra<N>
fn clone(&self) -> SunAlgebra<N>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<const N: usize> Debug for SunAlgebra<N>
impl<const N: usize> Debug for SunAlgebra<N>
Source§impl<const N: usize> Display for SunAlgebra<N>
impl<const N: usize> Display for SunAlgebra<N>
Source§impl<const N: usize> LieAlgebra for SunAlgebra<N>
impl<const N: usize> LieAlgebra for SunAlgebra<N>
Source§fn bracket(&self, other: &Self) -> Self
fn bracket(&self, other: &Self) -> Self
Lie bracket: [X, Y] = XY - YX
Computed via matrix commutator for generality.
§Performance
- Time: O(N³) [matrix multiplication]
- Space: O(N²)
§Note
For N=2,3, specialized implementations with structure constants would be faster (O(1) and O(1) respectively). This generic version prioritizes correctness and simplicity.
§Mathematical Formula
[X, Y] = XY - YXThis satisfies:
- Antisymmetry:
[X,Y] = -[Y,X] - Jacobi identity:
[X,[Y,Z]] + [Y,[Z,X]] + [Z,[X,Y]] = 0 - Bilinearity
Source§fn basis_element(i: usize) -> Self
fn basis_element(i: usize) -> Self
Source§fn from_components(components: &[f64]) -> Self
fn from_components(components: &[f64]) -> Self
Source§impl<const N: usize> Mul<SunAlgebra<N>> for f64
impl<const N: usize> Mul<SunAlgebra<N>> for f64
Source§type Output = SunAlgebra<N>
type Output = SunAlgebra<N>
* operator.Source§fn mul(self, rhs: SunAlgebra<N>) -> SunAlgebra<N>
fn mul(self, rhs: SunAlgebra<N>) -> SunAlgebra<N>
* operation. Read moreSource§impl<const N: usize> Neg for SunAlgebra<N>
impl<const N: usize> Neg for SunAlgebra<N>
Source§impl<const N: usize> PartialEq for SunAlgebra<N>
impl<const N: usize> PartialEq for SunAlgebra<N>
Source§impl<const N: usize> RelativeEq for SunAlgebra<N>
impl<const N: usize> RelativeEq for SunAlgebra<N>
Source§fn default_max_relative() -> Self::Epsilon
fn default_max_relative() -> Self::Epsilon
Source§fn relative_eq(
&self,
other: &Self,
epsilon: Self::Epsilon,
max_relative: Self::Epsilon,
) -> bool
fn relative_eq( &self, other: &Self, epsilon: Self::Epsilon, max_relative: Self::Epsilon, ) -> bool
Source§fn relative_ne(
&self,
other: &Rhs,
epsilon: Self::Epsilon,
max_relative: Self::Epsilon,
) -> bool
fn relative_ne( &self, other: &Rhs, epsilon: Self::Epsilon, max_relative: Self::Epsilon, ) -> bool
RelativeEq::relative_eq.Source§impl<const N: usize> Sub for SunAlgebra<N>
impl<const N: usize> Sub for SunAlgebra<N>
impl<const N: usize> AntiHermitianByConstruction for SunAlgebra<N>
su(N) algebra elements are anti-Hermitian by construction.
The representation uses i·λⱼ where λⱼ are Hermitian generators.
impl<const N: usize> StructuralPartialEq for SunAlgebra<N>
impl<const N: usize> TracelessByConstruction for SunAlgebra<N>
su(N) algebra elements are traceless by construction.
The representation SunAlgebra<N> stores N²-1 coefficients in a
generalized Gell-Mann basis. All generators are traceless by definition.
Auto Trait Implementations§
impl<const N: usize> Freeze for SunAlgebra<N>
impl<const N: usize> RefUnwindSafe for SunAlgebra<N>
impl<const N: usize> Send for SunAlgebra<N>
impl<const N: usize> Sync for SunAlgebra<N>
impl<const N: usize> Unpin for SunAlgebra<N>
impl<const N: usize> UnsafeUnpin for SunAlgebra<N>
impl<const N: usize> UnwindSafe for SunAlgebra<N>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.