feynlag.vacuum.diagonalize.diagonalize_svd_2x2¶
- feynlag.vacuum.diagonalize.diagonalize_svd_2x2(M, left_fields, right_fields, new_left, new_right, angle_left=None, angle_right=None)[source]¶
Analytic biunitary SVD of a real 2×2 Dirac mass matrix.
θ_LdiagonalizesM·Mᵀviadiagonalize_orthogonal_2x2()— the clean symbolic route (diagonalize_svd’sMatrix.diagonalize(normalize=True)path returns unusable nested-sqrt/Absforms for symbolic entries).θ_Ris then derived from θ_L and M directly (N = R(θ_L)·M; sinceN·Nᵀis diagonal by construction,N’s rows are automatically orthogonal, soθ_R = atan(N[0,1]/N[0,0])biunitarily pairs withθ_Lby construction) rather than solved independently fromMᵀ·M: solving the two angles independently only fixes each up to its own sign/eigenvector-ordering convention, and those two conventions can disagree — for a generic (non-symmetric)Mthis silently produces an anti-diagonal (row-swapped)U_L·M·U_Rᵀfor roughly half of parameter space, not merely a sign flip. Deriving θ_R from θ_L guaranteesU_L·M·U_Rᵀis exactly diagonal always (the off-diagonal vanishing is an algebraic identity, not dependent on the sign pattern ofM’s entries) — verified intests/test_fermion_sector.py/tests/test_vll.pyboth symbolically and at random numeric points per CONVENTIONS.md.- Parameters:
M – real 2×2 mass matrix (rows = bar/left legs, cols = right legs).
right_fields (left_fields /) – 2 weak-basis symbols each.
new_right (new_left /) – 2 physical-basis symbols each.
angle_right (angle_left /) – optional angle symbols; if given, the rotations carry them with the defining
tan 2θrelation attached (.angle_relation/.angle_solution).
- Returns:
(rot_left, rot_right)Rotationobjects.