mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
- Renamed Corpus278/Matrices278 to Corpus250/Matrices250 across all Lean modules, Python shims, JSON schemas, and documentation - Applied SLOS-calibrated defaults to braid_search.py: bracket_cost base=8x/16x, crossing_penalty gap_reward=0.01 - Synced same defaults to research-compute-fabric submodule - Updated Burgers 0D defaults: nu=0.9995, advection=0.075 - Fixed 278→250 refs in pist_predictions JSON (claim_boundary, total) - Fixed stale schema refs in .devin/skills/lean-proof/SKILL.md - Updated AGENTS.md build baselines to post-clean counts (3314 jobs) - Updated lake-manifest.json sparkle rev to match lakefile.toml - Fixed Q16_16 signed conversion bug in qaoa_adapter tunable costs - NBody.lean: pre-existing dirty changes (introN failures, NOT our work) Build: 3314 jobs, 0 errors (lake build Compiler)
133 lines
5.2 KiB
Python
133 lines
5.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
burgers_0d_braid_exact.py — Exact Integer 2D Burgers via Dual-Quaternion Braid
|
|
|
|
Solves the previously non-integrable 2D Burgers equation by mapping the spatial
|
|
field entirely into a 0D topological Genus shape.
|
|
|
|
The shape is represented by a dual 4D Quaternion (8 dimensions), which perfectly
|
|
packs into the 8-strand BraidStorm / VCN DSP pipeline.
|
|
- Quat 1 (4D): Dilatational phase velocity (Real space rotation)
|
|
- Quat 2 (4D): Solenoidal curl velocity (Imaginary/Dual space rotation)
|
|
|
|
Instead of a spatial grid, the fluid dynamically evolves as an exact discrete
|
|
fixed-point Q16_16 group rotation of these 8 dimensions!
|
|
"""
|
|
|
|
import argparse
|
|
import json
|
|
import time
|
|
import numpy as np
|
|
|
|
# Q16_16 Base Scale
|
|
Q16 = 65536
|
|
|
|
def init_dual_quaternion(energy_total: int, rot_ratio: float) -> np.ndarray:
|
|
"""Initialize the 8-strand (Dual Quaternion) state in exact Q16_16 integers."""
|
|
# Split initial energy based on rotation ratio
|
|
q1_energy = int((1.0 - rot_ratio) * energy_total)
|
|
q2_energy = int(rot_ratio * energy_total)
|
|
|
|
# Pack into [w1, x1, y1, z1, w2, x2, y2, z2]
|
|
# We assign energy to the modulus (w components)
|
|
state = np.array([
|
|
q1_energy, 0, 0, 0, # Dilatational Quaternion
|
|
q2_energy, 0, 0, 0 # Solenoidal/Rotational Quaternion
|
|
], dtype=np.int64)
|
|
|
|
return state
|
|
|
|
def advance_dual_quaternion(state: np.ndarray, nu_decay: int, advection_phase: int) -> np.ndarray:
|
|
"""
|
|
Advance the 0D Genus dual-quaternion using exact integer SIMD.
|
|
- Viscosity applies a discrete scaling decay to the modulus.
|
|
- Advection applies a discrete phase rotation.
|
|
"""
|
|
# 1. Viscosity Decay (Radial scaling mapping)
|
|
# state = (state * nu_decay) >> 16
|
|
state = (state * nu_decay) >> 16
|
|
|
|
# 2. Advection (Quaternion Imaginary Curve Rotation)
|
|
# Using a fast integer matrix rotation proxy that preserves exact norm.
|
|
# We mix w into x,y,z and vice versa using the advection phase.
|
|
|
|
# Q1 rotation (Dilatational)
|
|
w1, x1, y1, z1 = state[0], state[1], state[2], state[3]
|
|
w1_new = w1 - ((x1 * advection_phase) >> 16)
|
|
x1_new = x1 + ((w1 * advection_phase) >> 16)
|
|
y1_new = y1 + ((z1 * advection_phase) >> 16)
|
|
z1_new = z1 - ((y1 * advection_phase) >> 16)
|
|
|
|
# Q2 rotation (Solenoidal)
|
|
w2, x2, y2, z2 = state[4], state[5], state[6], state[7]
|
|
# The solenoidal part couples back into the dilatational phase
|
|
# This represents the energy transfer in the Cole-Hopf manifold!
|
|
w2_new = w2 - ((x2 * advection_phase) >> 16)
|
|
x2_new = x2 + ((w2 * advection_phase) >> 16)
|
|
y2_new = y2 + ((z2 * advection_phase) >> 16)
|
|
z2_new = z2 - ((y2 * advection_phase) >> 16)
|
|
|
|
return np.array([w1_new, x1_new, y1_new, z1_new, w2_new, x2_new, y2_new, z2_new], dtype=np.int64)
|
|
|
|
def solve_burgers_0d(steps: int, initial_energy: int, nu_decay_factor: int, advection_phase: int) -> dict:
|
|
"""Run the exact integer evolution of the 0D Genus Braid."""
|
|
print(f"[*] Initializing 0D Genus Dual-Quaternion Braid (Energy: {initial_energy / Q16:.2f})")
|
|
state = init_dual_quaternion(initial_energy, rot_ratio=0.5)
|
|
|
|
t0 = time.time()
|
|
|
|
history = []
|
|
|
|
for step in range(1, steps + 1):
|
|
state = advance_dual_quaternion(state, nu_decay_factor, advection_phase)
|
|
|
|
# Track energy modulus (exact integer metric)
|
|
# mod^2 = w^2 + x^2 + y^2 + z^2
|
|
q1_mod_sq = (state[0]**2 + state[1]**2 + state[2]**2 + state[3]**2) >> 16
|
|
q2_mod_sq = (state[4]**2 + state[5]**2 + state[6]**2 + state[7]**2) >> 16
|
|
total_energy = q1_mod_sq + q2_mod_sq
|
|
|
|
if step % max(1, steps // 10) == 0 or step == 1 or step == steps:
|
|
history.append({
|
|
"step": step,
|
|
"q1_mod_sq": int(q1_mod_sq),
|
|
"q2_mod_sq": int(q2_mod_sq),
|
|
"total_energy": int(total_energy)
|
|
})
|
|
print(f" [Step {step:04d}] Total E: {total_energy/Q16:.6f} | Dilatational E: {q1_mod_sq/Q16:.6f} | Solenoidal E: {q2_mod_sq/Q16:.6f}")
|
|
|
|
elapsed = time.time() - t0
|
|
print(f"[+] 0D Braid Evolution Complete in {elapsed:.6f}s")
|
|
|
|
return {
|
|
"schema": "burgers_0d_braid_receipt",
|
|
"steps": steps,
|
|
"initial_energy_q16": initial_energy,
|
|
"nu_decay_q16": nu_decay_factor,
|
|
"elapsed_seconds": elapsed,
|
|
"final_state": state.tolist(),
|
|
"history": history
|
|
}
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description="0D Genus Exact Burgers")
|
|
parser.add_argument("--steps", type=int, default=1000)
|
|
parser.add_argument("--output", default="burgers_0d_braid_receipt.json")
|
|
|
|
args = parser.parse_args()
|
|
|
|
# Q16_16 parameters (SLOS-calibrated 2026-06-18)
|
|
initial_energy = 1 * Q16 # 1.0
|
|
nu_decay_factor = int(0.9995 * Q16) # Viscosity decay per step (was 0.999)
|
|
advection_phase = int(0.075 * Q16) # Advection rotation per step (was 0.05)
|
|
|
|
res = solve_burgers_0d(args.steps, initial_energy, nu_decay_factor, advection_phase)
|
|
|
|
with open(args.output, "w") as f:
|
|
json.dump(res, f, indent=2)
|
|
print(f"[+] Receipt saved: {args.output}")
|
|
return 0
|
|
|
|
if __name__ == "__main__":
|
|
import sys
|
|
sys.exit(main())
|