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/

Snapshot

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.

Inputs

$(\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)$.

Boundary

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$.

Python

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()