//! epoch — φ*, J and the syntropy gradient at the root chain's epoch boundary
//! (soft3 `specs/chain-economy.md` §4–§5, tru `specs/rewards.md` §16).
//!
//! The kernel's entry points, each a pure function of one canonical axon list:
//!
//! - [`phi`]: φ* over `A` — `PHI_STEPS` tri-kernel steps from the uniform
//!   vector, φ at scale 2^60, syntropy `J`, and the canonical digest
//!   preimage ([`Phi::preimage`], hashed chain-side with `D_PHI`);
//! - [`gradient`]: `g_pq = ∂J(φ*(A))/∂A_pq` for every present axon of `A` —
//!   one forward and one adjoint solve, `PHI_STEPS` each, both cold;
//! - [`path_gradient`]: the attribution gradient `ḡ = Σ_i w_i g(A(t_i))`
//!   along the epoch's straight path, `p.quadrature` Gauss–Legendre nodes
//!   (4 by default); the chain pays `a(c) = Δs(c)·σ(c)·ḡ_pq`;
//! - [`net_axons`]: the chain's §4.2 net weight from genesis weight and
//!   valence-signed positions (a reference for the chain's own code and the
//!   tests).
//!
//! Consensus properties:
//!
//! - order-independent: particles are indexed by ascending id, axons by
//!   `from ‖ to`; input order never matters;
//! - deterministic: integer arithmetic only ([`fixed`]), a fixed step count,
//!   a cold start; every parallel reduction is an exact integer sum, so
//!   results are bit-identical across runs, machines and thread counts;
//! - fast and memory-bounded: CSR over u32 indices relabelled for locality,
//!   `K + 1` sparse passes per step, `O(n + nnz)` memory, no eigen-solve.
//!
//! Operator choice. Heat and springs run on the random-walk Laplacian
//! `I − A_sym·D⁻¹` (tri-kernel §1.2 admits the normalised form) rather
//! than the combinatorial `D − A`. The combinatorial heat kernel costs
//! `O(τ·λ_max)` sparse passes and `λ_max` grows with the largest weighted
//! degree — 36,026 on bostrom with uniform stake, ~72,000 passes per step.
//! The normalised operators are scale-free (one whale's stake does not rescale
//! everyone's heat time), mass- and positivity-preserving, so `H_τ` is a
//! nonnegative Taylor polynomial of fixed degree `K` (9 at τ = 1, ε = 10⁻⁶).
//! The springs reference and the teleport prior are both the stake prior
//! `π = deg/Σdeg`, so a particle without stake carries exactly zero focus.
//! The legacy combinatorial kernel (`focusing::compute_focusing`) stays as the
//! research reference.

pub mod fixed;
pub mod gradient;
pub mod graph;
pub mod integrated;
pub mod kernel;

pub use graph::{Axon, AxonKey, EpochGraph, Ground, canonical};
pub use integrated::{
    AxonScore, PathGradient, integrated_gradient, midpoint_attribution, path_gradient,
};

use crate::arithmetic::Fx;

use kernel::{Coeffs, Work, adjoint_step, centred_log, forward_step, plan, uniform};

/// Tri-kernel steps per solve, fixed for consensus (chain-economy §0
/// `PHI_STEPS`). Evidence: tru `audit/epoch-settlement-2026-10.md` — from the
/// uniform start the ℓ1 distance to the converged φ* after 48 steps is below
/// 10⁻⁷ on pussy and bostrom (uniform and power-law stake); with the ground
/// weight it is at the rounding floor (≈ 10⁻¹⁰).
pub const PHI_STEPS: usize = 48;

/// Domain separator of the φ digest (chain-economy §2, §5.6).
pub const D_PHI: &[u8] = b"soft3/chain/phi/v1\0";

/// Epoch-kernel parameters. Defaults: α = 0.15, μ = 1, τ = 1, λ = (0.5, 0.3,
/// 0.2), ε = 10⁻⁶ (sets the heat degree K = 9), `steps = PHI_STEPS`.
#[derive(Clone, Debug)]
pub struct EpochParams {
    /// Teleport probability α.
    pub alpha: Fx,
    /// Springs screening μ.
    pub mu: Fx,
    /// Heat time τ ∈ [0, 2] (bounds the Horner partial sums below 2^63).
    pub tau: Fx,
    /// Blend weights, `λ_d + λ_s + λ_h = 1`.
    pub lambda_d: Fx,
    pub lambda_s: Fx,
    pub lambda_h: Fx,
    /// Heat truncation target: `K` is the smallest degree with tail `≤ ε`.
    pub epsilon: Fx,
    /// Heat Taylor degree `K` (derived).
    pub heat_terms: usize,
    /// Steps per solve (consensus: [`PHI_STEPS`]).
    pub steps: usize,
    /// Worker threads. Never changes a result bit.
    pub threads: usize,
    /// The ground weight that makes φ* continuous in `A` ([`Ground`]).
    pub ground: Ground,
    /// Gauss–Legendre nodes on the attribution path (1 = the midpoint).
    pub quadrature: usize,
}

impl Default for EpochParams {
    fn default() -> Self {
        Self {
            alpha: Fx::from_ratio(15, 100),
            mu: Fx::ONE,
            tau: Fx::ONE,
            lambda_d: Fx::from_ratio(5, 10),
            lambda_s: Fx::from_ratio(3, 10),
            lambda_h: Fx::from_ratio(2, 10),
            epsilon: Fx::from_ratio(1, 1_000_000),
            heat_terms: 0,
            steps: PHI_STEPS,
            threads: 1,
            ground: Ground::PROTOCOL,
            quadrature: 4,
        }
        .derived()
    }
}

impl EpochParams {
    /// The a-priori ℓ1 contraction of one step on the simplex,
    /// `κ = λ_d(1−α) + λ_s/(1+μ) + λ_h` (diffusion contracts by `1−α`, the
    /// screened springs step by `1/(1+μ)`, the stochastic heat polynomial by
    /// at most 1). 0.775 at the defaults; the observed rate on pussy and
    /// bostrom is ≈ 0.72.
    pub fn kappa(&self) -> Fx {
        self.lambda_d * (Fx::ONE - self.alpha)
            + self.lambda_s.div(Fx::ONE + self.mu)
            + self.lambda_h
    }

    /// Recompute `heat_terms` from τ and ε.
    pub fn derived(mut self) -> Self {
        assert!(
            self.tau >= Fx::ZERO && self.tau <= Fx::from_int(2),
            "τ must lie in [0, 2]"
        );
        // Tail e^{−τ}Σ_{k>K} τ^k/k! ≤ 2·e^{−τ}·τ^{K+1}/(K+1)! for τ ≤ 2.
        let e = (Fx::ZERO - self.tau).exp();
        let mut term = Fx::ONE;
        let mut k = 0usize;
        loop {
            term = term * self.tau.div(Fx::from_int(k as i64 + 1));
            if Fx::from_int(2) * e * term <= self.epsilon || k >= 32 {
                break;
            }
            k += 1;
        }
        self.heat_terms = k.max(1);
        self
    }

    fn plan(&self, g: &EpochGraph) -> Vec<usize> {
        plan(g, self.threads, self.heat_terms)
    }
}

/// φ* over one epoch graph, in ascending particle-id order.
#[derive(Clone, Debug)]
pub struct Phi {
    /// Particle ids, ascending.
    pub particles: Vec<[u8; 32]>,
    /// φ at scale 2^60 (`Σ ≈ 2^60`), aligned with `particles`.
    pub phi: Vec<u64>,
    /// Syntropy `J(φ) = Σ φ ln(n φ)`, nats at scale 2^60.
    pub syntropy: i128,
    /// ℓ1 change of the last step at scale 2^60 (a convergence witness).
    pub drift: u128,
}

impl Phi {
    /// The digest preimage `D_PHI ‖ n: u32 ‖ φ[0]: u64 ‖ … ‖ φ[n−1]: u64`,
    /// little-endian (chain-economy §5.6; the chain hashes it with hemera).
    pub fn preimage(&self) -> Vec<u8> {
        preimage(&self.phi)
    }
}

/// The φ digest preimage for a raw focus vector (ascending particle order).
pub fn preimage(phi: &[u64]) -> Vec<u8> {
    let mut v = Vec::with_capacity(D_PHI.len() + 4 + 8 * phi.len());
    v.extend_from_slice(D_PHI);
    v.extend_from_slice(&(phi.len() as u32).to_le_bytes());
    for &x in phi {
        v.extend_from_slice(&x.to_le_bytes());
    }
    v
}

/// The gradient at one graph.
#[derive(Clone, Debug)]
pub struct Gradient {
    /// `J(φ*)` at the graph the gradient was taken at (nats·2^60).
    pub syntropy: i128,
    /// Last-step ℓ1 drift of that φ* (2^60).
    pub drift: u128,
    /// `∂J/∂A` per *input* axon (same index as the slice passed in), nats per
    /// weight unit at scale 2^112; zero for an axon of weight zero or a
    /// self-loop. Duplicated input axons each carry their axon's gradient.
    pub by_axon: Vec<i128>,
}

/// Run `steps` forward steps from the uniform vector (internal order).
fn forward(
    g: &EpochGraph,
    p: &EpochParams,
    c: &Coeffs,
    b: &[usize],
    steps: usize,
) -> (Vec<u64>, u128) {
    let mut phi = uniform(g.n());
    let mut w = Work::new(g.n());
    let mut drift = 0;
    for _ in 0..steps {
        drift = forward_step(g, c, b, &mut phi, &mut w);
    }
    let _ = p;
    (phi, drift)
}

/// φ* of a built graph with an explicit step count (analysis; consensus uses
/// [`solve`]).
pub fn solve_steps(g: &EpochGraph, p: &EpochParams, steps: usize) -> Phi {
    let mut f = solve_steps_inner(g, p, steps);
    f.particles = g.particles.clone();
    f
}

fn solve_steps_inner(g: &EpochGraph, p: &EpochParams, steps: usize) -> Phi {
    if g.n() == 0 {
        return Phi {
            particles: vec![],
            phi: vec![],
            syntropy: 0,
            drift: 0,
        };
    }
    let c = Coeffs::new(p);
    let b = p.plan(g);
    let (phi, drift) = forward(g, p, &c, &b, steps);
    let syntropy = kernel::syntropy_with_n(&phi, g.n() as u64, &b);
    Phi {
        particles: vec![],
        phi: g.to_ext(&phi),
        syntropy,
        drift,
    }
}

/// φ* of a built graph: `p.steps` steps, cold.
pub fn solve(g: &EpochGraph, p: &EpochParams) -> Phi {
    solve_steps(g, p, p.steps)
}

/// φ* of an axon list (chain-economy §4.4 solve 1).
pub fn phi(axons: &[Axon], p: &EpochParams) -> Phi {
    let mut g = EpochGraph::build_with(axons, p.ground);
    let mut f = solve_steps_inner(&g, p, p.steps);
    f.particles = std::mem::take(&mut g.particles);
    f
}

/// The gradient on a built graph, indexed like the axon slice it was built
/// from.
pub fn gradient_of(g: &EpochGraph, p: &EpochParams) -> Gradient {
    if g.n() == 0 {
        return Gradient {
            syntropy: 0,
            drift: 0,
            by_axon: vec![0; g.input_axon.len()],
        };
    }
    let c = Coeffs::new(p);
    let b = p.plan(g);
    let (phi, drift) = forward(g, p, &c, &b, p.steps);
    let grad = centred_log(&phi, &b);
    let mut lam = vec![0i64; g.n()];
    let mut w = Work::new(g.n());
    for _ in 0..p.steps {
        adjoint_step(g, &c, &b, &mut lam, &grad, &mut w);
    }
    drop(w);
    drop(grad);
    let syntropy = kernel::syntropy_with_n(&phi, g.n() as u64, &b);
    let per_edge = gradient::edge_gradient(g, &c, &b, &phi, &lam);
    let by_axon = g
        .input_axon
        .iter()
        .map(|&a| {
            if a == graph::NONE {
                0
            } else {
                per_edge[g.axon_edge[a as usize] as usize]
            }
        })
        .collect();
    Gradient {
        syntropy,
        drift,
        by_axon,
    }
}

/// `g = ∂J(φ*(A))/∂A` for every axon of `A`, aligned with the input slice
/// (chain-economy §5.1 solves 2 and 3, called on `A_mid`).
pub fn gradient(axons: &[Axon], p: &EpochParams) -> Gradient {
    gradient_of(&EpochGraph::build_with(axons, p.ground), p)
}

/// `A_mid = ⌊(A_prev + A_cur)/2⌋` per axon present in either list, ascending
/// (zero-weight midpoints kept, so every changed axon has an entry).
pub fn midpoint(prev: &[Axon], cur: &[Axon]) -> Vec<Axon> {
    let (a, b) = (canonical(prev), canonical(cur));
    let (mut i, mut j) = (0, 0);
    let mut out = Vec::with_capacity(a.len().max(b.len()));
    while i < a.len() || j < b.len() {
        let ord = match (a.get(i), b.get(j)) {
            (Some(x), Some(y)) => (x.from, x.to).cmp(&(y.from, y.to)),
            (Some(_), None) => std::cmp::Ordering::Less,
            _ => std::cmp::Ordering::Greater,
        };
        let (from, to, wa, wb) = match ord {
            std::cmp::Ordering::Less => {
                i += 1;
                (a[i - 1].from, a[i - 1].to, a[i - 1].weight, 0)
            }
            std::cmp::Ordering::Greater => {
                j += 1;
                (b[j - 1].from, b[j - 1].to, 0, b[j - 1].weight)
            }
            std::cmp::Ordering::Equal => {
                i += 1;
                j += 1;
                (a[i - 1].from, a[i - 1].to, a[i - 1].weight, b[j - 1].weight)
            }
        };
        out.push(Axon {
            from,
            to,
            weight: (wa / 2) + (wb / 2) + (wa % 2 + wb % 2) / 2,
        });
    }
    out
}

/// A staked position on an axon (chain-economy §3, §4.2).
#[derive(Clone, Copy, Debug)]
pub struct Position {
    pub from: [u8; 32],
    pub to: [u8; 32],
    pub stake: u128,
    /// `v ∈ {−1, 0, +1}`: `0` and `+1` add weight, `−1` subtracts.
    pub valence: i8,
}

/// The chain's §4.2 net weight `A_pq = max(0, G_pq + S⁺_pq − S⁻_pq)` per axon,
/// canonical, absent axons (`A = 0`) dropped.
pub fn net_axons(genesis: &[Axon], positions: &[Position]) -> Vec<Axon> {
    let mut v: Vec<([u8; 32], [u8; 32], u128, u128)> = genesis
        .iter()
        .map(|a| (a.from, a.to, a.weight, 0))
        .chain(positions.iter().map(|p| {
            if p.valence < 0 {
                (p.from, p.to, 0, p.stake)
            } else {
                (p.from, p.to, p.stake, 0)
            }
        }))
        .collect();
    v.sort_unstable_by_key(|x| (x.0, x.1));
    let mut out = Vec::new();
    let mut k = 0;
    while k < v.len() {
        let (f, t) = (v[k].0, v[k].1);
        let (mut plus, mut minus) = (0u128, 0u128);
        while k < v.len() && v[k].0 == f && v[k].1 == t {
            plus = plus.saturating_add(v[k].2);
            minus = minus.saturating_add(v[k].3);
            k += 1;
        }
        let w = plus.saturating_sub(minus);
        if w > 0 && f != t {
            out.push(Axon {
                from: f,
                to: t,
                weight: w,
            });
        }
    }
    out
}

/// Syntropy `J(φ) = Σ φ_i ln(n φ_i)` at scale 2^60 for φ at scale 2^60 over
/// `n` particles (zero entries contribute nothing).
pub fn syntropy(phi: &[u64], n: u64) -> i128 {
    kernel::syntropy_with_n(phi, n, &[0, phi.len()])
}

Homonyms

warriors/trisha/rs/recursive/mod.rs
neural/trident/tests/support/mod.rs
soft3/crate/src/genesis/mod.rs
neural/trident/src/ir/mod.rs
neural/trident/src/cost/mod.rs
soft3/mir/src/frame/mod.rs
cyb/optica/src/output/mod.rs
neural/trident/src/syntax/mod.rs
neural/trident/src/package/mod.rs
cyb/shell/src/worlds/mod.rs
soft3/glia/run/backend/mod.rs
soft3/nox/rs/patterns/mod.rs
soft3/nox/rs/jets/mod.rs
cyb/optica/src/graph/mod.rs
warriors/trisha/rs/lower/mod.rs
soft3/crate/src/wallet/mod.rs
neural/trident/src/deploy/mod.rs
neural/trident/src/neural/mod.rs
cyb/optica/src/parser/mod.rs
cyb/prysm/system/rs/mod.rs
soft3/glia/run/tokenizer/mod.rs
cyb/optica/src/render/mod.rs
soft3/tru/rs/pass/mod.rs
cyb/optica/src/query/mod.rs
warriors/trisha/rs/cost/mod.rs
soft3/cybergraph/tests/common/mod.rs
neural/trident/src/config/mod.rs
neural/trident/src/ast/mod.rs
neural/trident/src/field/mod.rs
neural/trident/src/import/mod.rs
soft3/tru/rs/model/mod.rs
soft3/mudra/src/proof/mod.rs
cyb/optica/src/scanner/mod.rs
soft3/tru/rs/graph/mod.rs
soft3/glia/run/bench/mod.rs
cyb/prysm/atoms/rs/mod.rs
neural/trident/src/lsp/mod.rs
neural/trident/src/typecheck/mod.rs
soft3/glia/run/core/mod.rs
neural/trident/src/verify/mod.rs
warriors/trisha/rs/neural/mod.rs
soft3/glia/import/loader/mod.rs
cyb/shell/src/shell/mod.rs
soft3/tru/rs/focusing/mod.rs
neural/trident/src/runtime/mod.rs
neural/trident/src/api/mod.rs
cyb/optica/src/server/mod.rs
soft3/mir/src/graph/mod.rs
neural/trident/src/diagnostic/mod.rs
neural/trident/src/cli/mod.rs
soft3/glia/run/arch/mod.rs
cyb/prysm/molecules/rs/mod.rs
soft3/nox/rs/data/mod.rs
soft3/mir/src/bevy/mod.rs
cyb/shell/src/agent/mod.rs
soft3/mir/src/epoch/mod.rs
soft3/glia/run/ir/mod.rs
soft3/crate/src/chain/mod.rs
neural/rs/macros/src/module/mod.rs
cyb/honeycrisp/unimem/tests/image_support/mod.rs
neural/trident/src/ir/tir/mod.rs
neural/trident/src/verify/report/mod.rs
cyb/honeycrisp/acpu/src/vector/mod.rs
warriors/trisha/rs/neural/data/mod.rs
neural/trident/src/package/registry/mod.rs
soft3/glia/run/backend/wgpu/mod.rs
neural/trident/src/neural/training/mod.rs
soft3/zheng/rs/src/sumcheck/mod.rs
neural/trident/src/verify/synthesize/mod.rs
cyb/shell/src/worlds/vault/mod.rs
neural/rs/macros/src/registers/mod.rs
neural/trident/src/neural/model/mod.rs
neural/trident/src/config/resolve/mod.rs
cyb/honeycrisp/acpu/src/sparse/mod.rs
soft3/bbg/rs/src/transition/mod.rs
soft3/radio/iroh-blobs/examples/common/mod.rs
soft3/crate/src/chain/pool/mod.rs
cyb/wysm/crates/wasi/tests/mod.rs
neural/rs/darwin-sys/src/ffi/mod.rs
cyb/honeycrisp/rane/src/mil/mod.rs
neural/trident/src/verify/smt/mod.rs
soft3/glia/run/backend/honeycrisp/mod.rs
soft3/glia/run/arch/decoder/mod.rs
neural/trident/src/verify/solve/mod.rs
cyb/honeycrisp/acpu/src/pulse/mod.rs
soft3/zheng/rs/src/folding/mod.rs
soft3/glia/run/cli/cmd/mod.rs
neural/trident/src/syntax/format/mod.rs
warriors/trisha/rs/neural/inference/mod.rs
cyb/shell/src/worlds/models/mod.rs
neural/trident/src/package/store/mod.rs
cyb/honeycrisp/acpu/src/sync/mod.rs
neural/trident/src/syntax/parser/mod.rs
neural/rs/core/src/fixed_point/mod.rs
warriors/trisha/rs/neural/training/mod.rs
cyb/honeycrisp/aruminium/src/ffi/mod.rs
cyb/shell/src/worlds/sigma/mod.rs
neural/trident/src/verify/sym/mod.rs
soft3/strata/nebu/rs/extension/mod.rs
neural/rs/macros/src/addressed/mod.rs
neural/trident/src/package/hash/mod.rs
soft3/radio/cyber-bao/src/io/mod.rs
neural/trident/src/neural/data/mod.rs
soft3/glia/run/backend/cpu/mod.rs
soft3/radio/iroh-blobs/src/store/mod.rs
soft3/nox/rs/jets/backends/mod.rs
neural/trident/src/syntax/lexer/mod.rs
neural/rs/core/src/bounded/mod.rs
cyb/honeycrisp/aruminium/src/render/mod.rs
neural/trident/src/lsp/semantic/mod.rs
soft3/conformance/rs/src/surfaces/mod.rs
neural/trident/src/neural/inference/mod.rs
neural/eidos/rs/src/tactic_ext/mod.rs
soft3/crate/src/chain/economy/mod.rs
neural/eidos/rs/src/surface/mod.rs
soft3/zheng/rs/src/ccs/mod.rs
neural/trident/src/lsp/util/mod.rs
cyb/wysm/crates/wast/tests/mod.rs
soft3/zheng/rs/src/phi/mod.rs
warriors/trisha/rs/neural/model/mod.rs
neural/trident/src/config/scaffold/mod.rs
neural/trident/src/typecheck/tests/mod.rs
neural/trident/src/ir/tree/mod.rs
soft3/zheng/rs/src/spartan/mod.rs
neural/eidos/rs/src/stdlib/mod.rs
neural/trident/src/api/tests/mod.rs
warriors/trisha/rs/cost/model/mod.rs
cyb/shell/src/worlds/com/mod.rs
cyb/honeycrisp/acpu/src/gemm/mod.rs
cyb/shell/src/worlds/memory/mod.rs
neural/trident/src/verify/equiv/mod.rs
neural/eidos/rs/src/elab/mod.rs
cyb/honeycrisp/acpu/src/numeric/mod.rs
cyb/honeycrisp/acpu/src/probe/mod.rs
cyb/wysm/crates/wasmi/tests/mod.rs
cyb/shell/src/worlds/oracle/mod.rs
neural/rs/rsc/src/lints/mod.rs
cyb/shell/src/worlds/robot/mod.rs
soft3/crate/src/chain/net/mod.rs
soft3/neuron/node/tests/support/mod.rs
cyb/honeycrisp/acpu/src/matrix/mod.rs
neural/trident/src/syntax/grammar/mod.rs
warriors/trisha/rs/cost/stack_verifier/mod.rs
cyb/honeycrisp/acpu/src/field/mod.rs
soft3/crate/src/chain/mine/mod.rs
cyb/shell/src/worlds/body/mod.rs
neural/trident/src/package/manifest/mod.rs
soft3/bbg/rs/src/storage/mod.rs
cyb/honeycrisp/acpu/src/crypto/mod.rs
soft3/crate/src/chain/tests/mod.rs
cyb/evy/forks/bevy_anti_alias/src/contrast_adaptive_sharpening/mod.rs
warriors/trisha/rs/neural/data/tir_graph/mod.rs
cyb/evy/forks/bevy_anti_alias/src/smaa/mod.rs
cyb/wysm/crates/wasmi/src/memory/mod.rs
soft3/strata/jali/wgsl/src/shaders/mod.rs
cyb/wysm/crates/wasmi/src/table/mod.rs
cyb/evy/forks/bevy_pbr/src/decal/mod.rs
cyb/evy/forks/bevy_pbr/src/ssao/mod.rs
cyb/evy/forks/bevy_ecs/src/system/mod.rs
cyb/evy/forks/bevy_render/src/experimental/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/tonemapping/mod.rs
cyb/evy/forks/bevy_ecs/src/entity/mod.rs
cyb/evy/forks/bevy_pbr/src/light_probe/mod.rs
cyb/evy/forks/bevy_post_process/src/motion_blur/mod.rs
cyb/wysm/crates/wasmi/src/engine/mod.rs
cyb/evy/forks/bevy_ecs/src/bundle/mod.rs
cyb/evy/forks/bevy_post_process/src/bloom/mod.rs
cyb/wysm/crates/wasmi/benches/bench/mod.rs
cyb/evy/forks/bevy_pbr/src/ssr/mod.rs
soft3/radio/quinn/quinn/src/runtime/mod.rs
cyb/evy/forks/bevy_ecs/src/error/mod.rs
cyb/evy/forks/bevy_anti_alias/src/dlss/mod.rs
cyb/evy/forks/bevy_render/src/renderer/mod.rs
cyb/wysm/crates/wasmi/src/module/mod.rs
cyb/evy/forks/bevy_sprite_render/src/render/mod.rs
cyb/evy/forks/bevy_ecs/src/reflect/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/experimental/mod.rs
soft3/bbg/rs/src/storage/database/mod.rs
soft3/strata/trop/wgsl/src/shaders/mod.rs
cyb/evy/forks/bevy_render/src/texture/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/fullscreen_vertex_shader/mod.rs
cyb/evy/forks/naga/src/common/mod.rs
cyb/evy/forks/bevy_render/src/batching/mod.rs
cyb/wysm/crates/cli/src/commands/mod.rs
cyb/evy/forks/bevy_anti_alias/src/fxaa/mod.rs
cyb/evy/forks/naga/src/compact/mod.rs
warriors/erga/rs/mine-bench/tests/support/mod.rs
soft3/radio/quinn/quinn-udp/src/cmsg/mod.rs
soft3/glia/run/backend/cpu/quant/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/skybox/mod.rs
cyb/evy/forks/bevy_pbr/src/render/mod.rs
cyb/evy/forks/naga/src/proc/mod.rs
cyb/evy/forks/bevy_sprite_render/src/texture_slice/mod.rs
cyb/evy/crates/evy_prysm_core/src/layout/mod.rs
cyb/evy/forks/bevy_pbr/src/prepass/mod.rs
cyb/evy/forks/bevy_pbr/src/meshlet/mod.rs
cyb/evy/forks/naga/src/back/mod.rs
soft3/glia/run/arch/decoder/families/mod.rs
cyb/evy/forks/bevy_render/src/render_resource/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/deferred/mod.rs
cyb/evy/forks/bevy_render/src/diagnostic/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/upscaling/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/core_2d/mod.rs
soft3/radio/quinn/quinn-proto/src/connection/mod.rs
soft3/radio/quinn/quinn/examples/common/mod.rs
soft3/strata/kuro/wgsl/src/shaders/mod.rs
soft3/glia/run/backend/honeycrisp/kernels/mod.rs
cyb/evy/forks/bevy_post_process/src/effect_stack/mod.rs
cyb/evy/forks/bevy_ecs/src/storage/mod.rs
cyb/evy/forks/bevy_ecs/src/component/mod.rs
neural/trident/src/ir/tree/lower/mod.rs
cyb/evy/forks/bevy_transform/src/components/mod.rs
cyb/evy/forks/bevy_ecs/src/change_detection/mod.rs
cyb/wysm/crates/wasmi/src/instance/mod.rs
cyb/wysm/crates/wasmi/tests/integration/mod.rs
cyb/wysm/crates/collections/src/arena/mod.rs
cyb/evy/forks/bevy_pbr/src/deferred/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/oit/mod.rs
soft3/radio/quinn/quinn-proto/src/config/mod.rs
cyb/wysm/crates/core/src/memory/mod.rs
cyb/evy/forks/bevy_sprite_render/src/tilemap_chunk/mod.rs
cyb/wysm/crates/wasi/src/sync/mod.rs
soft3/strata/genies/wgsl/src/shaders/mod.rs
cyb/evy/forks/bevy_ecs/src/query/mod.rs
cyb/evy/forks/naga/src/front/mod.rs
cyb/evy/forks/bevy_ecs/src/world/mod.rs
cyb/wysm/crates/ir/src/decode/mod.rs
cyb/evy/forks/bevy_anti_alias/src/taa/mod.rs
neural/trident/src/ir/tir/builder/mod.rs
cyb/evy/forks/bevy_sprite_render/src/text2d/mod.rs
cyb/wysm/crates/wasmi/src/store/mod.rs
cyb/evy/forks/naga/src/keywords/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/prepass/mod.rs
cyb/evy/forks/bevy_ecs/src/schedule/mod.rs
cyb/evy/forks/bevy_tasks/src/iter/mod.rs
soft3/glia/run/backend/wgpu/kernels/mod.rs
cyb/wysm/crates/core/src/table/mod.rs
cyb/evy/forks/bevy_render/src/view/mod.rs
cyb/evy/forks/bevy_mesh/src/primitives/mod.rs
cyb/evy/forks/bevy_ecs/src/relationship/mod.rs
soft3/radio/quinn/quinn-proto/src/range_set/mod.rs
cyb/evy/forks/bevy_render/src/render_graph/mod.rs
cyb/evy/forks/bevy_ecs/src/event/mod.rs
cyb/wysm/crates/c_api/src/types/mod.rs
cyb/evy/forks/naga/src/arena/mod.rs
soft3/radio/quinn/quinn-proto/src/tests/mod.rs
cyb/evy/forks/naga/src/valid/mod.rs
cyb/evy/forks/bevy_post_process/src/dof/mod.rs
cyb/wysm/crates/fuzz/src/oracle/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/blit/mod.rs
neural/trident/src/neural/data/tir_graph/mod.rs
cyb/evy/forks/bevy_sprite_render/src/mesh2d/mod.rs
cyb/wysm/crates/wasmi/src/func/mod.rs
cyb/evy/forks/bevy_pbr/src/volumetric_fog/mod.rs
cyb/evy/forks/bevy_post_process/src/auto_exposure/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/core_3d/mod.rs
neural/trident/src/ir/tir/optimize/mod.rs
cyb/evy/forks/bevy_ecs/src/message/mod.rs
cyb/evy/forks/bevy_render/src/render_phase/mod.rs
cyb/evy/forks/bevy_ecs/src/observer/mod.rs
cyb/evy/forks/bevy_sprite/src/texture_slice/mod.rs
cyb/evy/forks/bevy_gizmos/src/primitives/mod.rs
cyb/evy/forks/bevy_pbr/src/lightmap/mod.rs
cyb/evy/forks/bevy_pbr/src/atmosphere/mod.rs
cyb/evy/forks/bevy_render/src/mesh/mod.rs
neural/trident/src/ir/tir/stack/mod.rs
neural/trident/src/syntax/parser/tests/mod.rs
cyb/evy/forks/naga/src/back/glsl/mod.rs
cyb/evy/forks/bevy_ecs/src/world/entity_access/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/oit/resolve/mod.rs
cyb/evy/forks/naga/src/front/spv/mod.rs
cyb/evy/forks/bevy_ecs/src/schedule/graph/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/mod.rs
cyb/evy/forks/naga/src/back/msl/mod.rs
cyb/wysm/crates/wasmi/src/module/instantiate/mod.rs
cyb/evy/forks/bevy_render/src/experimental/occlusion_culling/mod.rs
cyb/evy/forks/bevy_render/src/view/visibility/mod.rs
cyb/evy/forks/bevy_ecs/src/storage/table/mod.rs
cyb/evy/forks/naga/src/front/wgsl/mod.rs
soft3/radio/quinn/quinn-proto/src/connection/streams/mod.rs
cyb/evy/forks/naga/src/back/wgsl/mod.rs
cyb/wysm/crates/wasmi/src/engine/executor/mod.rs
cyb/evy/forks/naga/src/front/glsl/mod.rs
soft3/radio/quinn/quinn-proto/src/congestion/bbr/mod.rs
cyb/evy/forks/bevy_ecs/src/schedule/executor/mod.rs
cyb/wysm/crates/wasmi/src/engine/limits/mod.rs
cyb/wysm/crates/wasmi/src/module/parser/mod.rs
cyb/evy/forks/naga/src/back/spv/mod.rs
cyb/evy/forks/bevy_mesh/src/primitives/dim3/mod.rs
cyb/evy/forks/naga/src/back/dot/mod.rs
cyb/wysm/crates/wasi/src/sync/snapshots/mod.rs
cyb/evy/forks/bevy_core_pipeline/src/experimental/mip_generation/mod.rs
cyb/evy/forks/naga/src/back/hlsl/mod.rs
struct Baz { m: mat3x2, } struct Baz { float2 m_0; float2 m_1; float2 m_2; }; float3x2 GetMatmOnBaz(Baz obj) { return float3x2(obj.m_0, obj.m_1, obj.m_2); }
cyb/evy/forks/bevy_ecs/src/system/commands/mod.rs
cyb/evy/forks/bevy_render/src/view/window/mod.rs
cyb/evy/forks/naga/src/front/wgsl/lower/mod.rs
cyb/wysm/crates/wasmi/src/engine/executor/handler/mod.rs
cyb/evy/forks/naga/src/front/wgsl/parse/mod.rs
cyb/evy/forks/naga/src/back/wgsl/polyfill/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/func/mod.rs
cyb/wysm/crates/wasmi/src/engine/executor/handler/dispatch/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/func/stack/mod.rs
cyb/wysm/crates/wasmi/src/engine/translator/func/simd/mod.rs

Graph