Vacuum evolution of a pure muon neutrino at $\tau=\pi$. The mixing fractions and the mass splittings are supplied dashboard inputs. This is a classical state-vector calculation. It is not a hardware run and it is not an experimental confirmation.
GitHub Pages · NEUTRINO · Python source · Plate · Machine certificate · MC-E47-NEUTRINO-FLAVOR-20260929-001 · Snapshot commit · Instrument directory
https://nicholaskouns-create.github.io/E47-Kartekeya/interfaces/neutrino-flavor/
| Channel | Probability |
|---|---|
| μ → e | 0.04720552 |
| μ → μ | 0.00314068 |
| μ → τ | 0.94965381 |
Normalization defect 1.11022e-16. Carrier dimension 125. Rank of $P_{47}$ is 47. The flavor-slot addresses are [10, 11, 12], the first three kernel indices of the diagonal census. That address choice tags the slots. It is not the intertwiner embedding.
$(\sin^2\theta_{12},\sin^2\theta_{23},\sin^2\theta_{13},\delta)=(15/49,\,25/47,\,1/47,\,192^\circ)$
$(\Delta m^2_{21},\Delta m^2_{31})=(7.34449\times10^{-5},\,2.5130169\times10^{-3})\,\mathrm{eV}^2$
$S(\tau)=U\,\mathrm{diag}(e^{-i\varphi_i\tau})\,U^\dagger$, with $\varphi=(0,\Delta m^2_{21}/\Delta m^2_{31},1)$ and initial state $(0,1,0)$.
E2. For this autonomous linear Hamiltonian the matrix exponential is the exact evolution, so the printed snapshot does not depend on a stored DOP853 trajectory. The Casimir multiplicity census is separate from the 3×3 flavor propagator. Nothing here promotes the supplied mixing angles to a derivation from $C$.
The executable repository file is the canonical source. The excerpt below reproduces the calculation path used for this snapshot; the repository file remains authoritative for the complete executable.
import numpy as np
def run_advanced_simulation():
np.random.seed(42)
dim_V = 125
eigenvalues = [0, 2, 6, 12, 20, 30, 42]
multiplicities = [1, 9, 25, 28, 27, 22, 13]
diag_C = []
for ev, mult in zip(eigenvalues, multiplicities):
diag_C.extend([ev] * mult)
diag_C = np.array(diag_C)
diag_K = (diag_C - 6) * (diag_C - 30)
diag_P47 = np.where(diag_K == 0, 1.0, 0.0)
sin2_12 = 15.0 / 49.0
sin2_23 = 25.0 / 47.0
sin2_13 = 1.0 / 47.0
delta = np.radians(192.0)
c12 = np.sqrt(1.0 - sin2_12)
s12 = np.sqrt(sin2_12)
c23 = np.sqrt(1.0 - sin2_23)
s23 = np.sqrt(sin2_23)
c13 = np.sqrt(1.0 - sin2_13)
s13 = np.sqrt(sin2_13)
R12 = np.array([[c12, s12, 0], [-s12, c12, 0], [0, 0, 1]], dtype=complex)
R13 = np.array([[c13, 0, s13 * np.exp(-1j * delta)], [0, 1, 0], [-s13 * np.exp(1j * delta), 0, c13]], dtype=complex)
R23 = np.array([[1, 0, 0], [0, c23, s23], [0, -s23, c23]], dtype=complex)
U_PMNS = R23 @ R13 @ R12
dm21 = 7.34449e-5
dm31 = 2.5130169e-3
Hv_3x3 = np.diag([0.0, dm21, dm31])
kernel_indices = np.where(diag_P47 == 1.0)[0]
flavor_indices = kernel_indices[:3]
psi_0 = np.zeros(dim_V, dtype=complex)
psi_0[flavor_indices[1]] = 1.0
H_flavor = U_PMNS @ Hv_3x3 @ U_PMNS.conj().T
tau_target = np.pi
U_ev = U_PMNS @ np.diag(np.exp(-1j * np.array([0.0, dm21 / dm31, 1.0]) * tau_target)) @ U_PMNS.conj().T
final_flavor_amplitudes = U_ev @ np.array([0.0, 1.0, 0.0], dtype=complex)
probabilities = np.abs(final_flavor_amplitudes)**2
norm_error = np.abs(np.sum(probabilities) - 1.0)
print(f"Probabilities: e={probabilities[0]:.8f}, mu={probabilities[1]:.8f}, tau={probabilities[2]:.8f}")
print(f"Normalization error: {norm_error:.5e}")
run_advanced_simulation()