Skip to content

Commit 6345a63

Browse files
committed
Fixed more lints.
Signed-off-by: Marvin Hansen <marvin.hansen@gmail.com>
1 parent a8c0d1b commit 6345a63

1 file changed

Lines changed: 44 additions & 31 deletions

File tree

deep_causality_topology/src/types/gauge/link_variable/mod.rs

Lines changed: 44 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -297,37 +297,50 @@ impl<G: GaugeGroup, M: Field + Copy + Default + PartialOrd, R: RealField> LinkVa
297297
// Create block-diagonal matrix with phase in U(1) sector
298298
let mut data = vec![M::zero(); n * n];
299299

300-
match n {
301-
1 => {
302-
// Pure U(1): exp(iφ)
303-
data[0] = M::from_polar(R::one(), phase);
304-
}
305-
2 => {
306-
// SU(2): encode as exp(iφσ_3/2) = diag(exp(iφ/2), exp(-iφ/2))
307-
// This preserves det = 1
308-
let two = R::one() + R::one();
309-
let half_phase = phase / two;
310-
data[0] = M::from_polar(R::one(), half_phase);
311-
data[3] = M::from_polar(R::one(), -half_phase);
312-
}
313-
3 => {
314-
// SU(2)×U(1): block-diagonal (2×2 SU(2) identity) + (1×1 U(1) phase)
315-
// [[1, 0, 0],
316-
// [0, 1, 0],
317-
// [0, 0, exp(iφ)]]
318-
data[0] = M::one(); // SU(2) block: identity
319-
data[4] = M::one(); // SU(2) block: identity
320-
data[8] = M::from_polar(R::one(), phase); // U(1) sector: exp(iφ)
321-
}
322-
_ => {
323-
// General SU(n): encode phase along diagonal with det = 1
324-
// diag(exp(iφ), exp(-iφ/(n-1)), exp(-iφ/(n-1)), ...)
325-
let n_minus_1_f = R::from_usize(n - 1).unwrap_or(R::one());
326-
let compensating_phase = -phase / n_minus_1_f;
300+
if G::name() == "SU2_U1" && n == 3 {
301+
// SU(2)×U(1) block
302+
data[0] = M::one();
303+
data[4] = M::one();
304+
data[8] = M::from_polar(R::one(), phase);
305+
} else {
306+
// other cases that are non SU2_U1
307+
match n {
308+
1 => {
309+
// Pure U(1): exp(iφ)
310+
data[0] = M::from_polar(R::one(), phase);
311+
}
312+
2 => {
313+
// SU(2): encode as exp(iφσ_3/2) = diag(exp(iφ/2), exp(-iφ/2))
314+
// This preserves det = 1
315+
let two = R::one() + R::one();
316+
let half_phase = phase / two;
317+
data[0] = M::from_polar(R::one(), half_phase);
318+
data[3] = M::from_polar(R::one(), -half_phase);
319+
}
320+
3 => {
321+
// SU(2)×U(1): block-diagonal (2×2 SU(2) identity) + (1×1 U(1) phase)
322+
// [[1, 0, 0],
323+
// [0, 1, 0],
324+
// [0, 0, exp(iφ)]]
325+
data[0] = M::one(); // SU(2) block: identity
326+
data[4] = M::one(); // SU(2) block: identity
327+
data[8] = M::from_polar(R::one(), phase); // U(1) sector: exp(iφ)
328+
}
329+
_ => {
330+
// General SU(n): encode phase along diagonal with det = 1
331+
// diag(exp(iφ), exp(-iφ/(n-1)), exp(-iφ/(n-1)), ...)
332+
let n_minus_1_f = R::from_usize(n - 1).ok_or_else(|| {
333+
LinkVariableError::NumericalError(format!(
334+
"Cannot represent dimension {} as underlying real type",
335+
n - 1
336+
))
337+
})?;
338+
let compensating_phase = -phase / n_minus_1_f;
327339

328-
data[0] = M::from_polar(R::one(), phase);
329-
for i in 1..n {
330-
data[i * n + i] = M::from_polar(R::one(), compensating_phase);
340+
data[0] = M::from_polar(R::one(), phase);
341+
for i in 1..n {
342+
data[i * n + i] = M::from_polar(R::one(), compensating_phase);
343+
}
331344
}
332345
}
333346
}
@@ -338,7 +351,7 @@ impl<G: GaugeGroup, M: Field + Copy + Default + PartialOrd, R: RealField> LinkVa
338351
_gauge: PhantomData,
339352
_scalar: PhantomData,
340353
})
341-
.map_err(|e| LinkVariableError::TensorCreation(format!("{:?}", e)))
354+
.map_err(|e| LinkVariableError::TensorCreation(e.to_string()))
342355
}
343356

344357
/// Create a link variable from a U(1) phase angle (convenience method).

0 commit comments

Comments
 (0)