|
|
import time |
|
|
import json |
|
|
import hashlib |
|
|
import platform |
|
|
import os |
|
|
from datetime import datetime |
|
|
|
|
|
import numpy as np |
|
|
import gradio as gr |
|
|
|
|
|
APP_TITLE = "Coherent Compute Engine" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def coherent_step(Psi, E, L): |
|
|
phase = 0.997 * Psi + 0.003 * E |
|
|
drive = np.tanh(phase) |
|
|
Psi = 0.999 * Psi + 0.001 * drive |
|
|
E = 0.995 * E + 0.004 * Psi |
|
|
L = 0.998 * L + 0.001 * (Psi * E) |
|
|
return Psi, E, L |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def compute_coherence(a, b): |
|
|
num = float(np.dot(a, b)) |
|
|
den = float(np.linalg.norm(a) * np.linalg.norm(b) + 1e-9) |
|
|
return float(abs(num / den)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def python_loop_baseline(n, steps, cap=50_000): |
|
|
n_cap = min(int(n), int(cap)) |
|
|
x = [0.5] * n_cap |
|
|
t0 = time.time() |
|
|
for _ in range(int(steps)): |
|
|
for i in range(n_cap): |
|
|
x[i] = 0.999 * x[i] + 0.001 |
|
|
elapsed = time.time() - t0 |
|
|
items = n_cap * int(steps) |
|
|
return items / elapsed / 1e9, n_cap |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def compute_receipt_sha256(receipt_obj: dict) -> str: |
|
|
obj = dict(receipt_obj) |
|
|
obj.pop("sha256", None) |
|
|
payload = json.dumps(obj, sort_keys=True, separators=(",", ":"), ensure_ascii=False).encode("utf-8") |
|
|
return hashlib.sha256(payload).hexdigest() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def run_engine(n_osc, steps, include_baselines): |
|
|
n = int(n_osc) |
|
|
steps = int(steps) |
|
|
|
|
|
Psi = np.random.rand(n).astype(np.float32) |
|
|
E = np.random.rand(n).astype(np.float32) |
|
|
L = np.random.rand(n).astype(np.float32) |
|
|
|
|
|
|
|
|
sample = min(n, 200_000) |
|
|
Psi_start = Psi[:sample].copy() |
|
|
|
|
|
t0 = time.time() |
|
|
for _ in range(steps): |
|
|
Psi, E, L = coherent_step(Psi, E, L) |
|
|
elapsed = time.time() - t0 |
|
|
|
|
|
Psi_end = Psi[:sample].copy() |
|
|
|
|
|
coherence = compute_coherence(Psi_start, Psi_end) |
|
|
mean_energy = float(np.mean(E)) |
|
|
|
|
|
items = n * steps |
|
|
throughput_items = items / elapsed |
|
|
throughput_b = throughput_items / 1e9 |
|
|
|
|
|
result = { |
|
|
"Throughput (B items/s)": f"{throughput_b:.3f}", |
|
|
"Throughput (items/s)": f"{int(throughput_items):,}", |
|
|
"Coherence (|C|)": f"{coherence:.5f}", |
|
|
"Mean Energy": f"{mean_energy:.5f}", |
|
|
"Elapsed Time (s)": f"{elapsed:.2f}", |
|
|
"Oscillators": f"{n:,}", |
|
|
"Steps": f"{steps}", |
|
|
"Engine": "numpy", |
|
|
"CPU": platform.processor() or "", |
|
|
"Cores Available": os.cpu_count() or 0, |
|
|
} |
|
|
|
|
|
if include_baselines: |
|
|
py_b, py_ncap = python_loop_baseline(n, steps) |
|
|
result.update({ |
|
|
"Baseline: numpy (B items/s)": f"{throughput_b:.3f}", |
|
|
"Baseline: python_loop (B items/s)": f"{py_b:.3f}", |
|
|
"Baseline: python_loop items measured": f"{py_ncap:,}", |
|
|
"Speedup vs python_loop (x)": f"{(throughput_b / max(py_b, 1e-12)):.1f}", |
|
|
"Speedup vs numpy (x)": f"{(throughput_b / max(throughput_b, 1e-12)):.2f}", |
|
|
"Note": "Baselines are context-only; python loop is safety-capped and measured live." |
|
|
}) |
|
|
|
|
|
receipt = { |
|
|
"timestamp_utc": datetime.utcnow().isoformat() + "Z", |
|
|
"app": APP_TITLE, |
|
|
"results": result, |
|
|
"platform": platform.platform(), |
|
|
"python": platform.python_version(), |
|
|
} |
|
|
|
|
|
receipt["sha256"] = compute_receipt_sha256(receipt) |
|
|
|
|
|
os.makedirs("receipts", exist_ok=True) |
|
|
fname = f"receipts/receipt_{datetime.utcnow().strftime('%Y-%m-%dT%H-%M-%S')}.json" |
|
|
with open(fname, "w", encoding="utf-8") as f: |
|
|
json.dump(receipt, f, indent=2, ensure_ascii=False) |
|
|
|
|
|
result["Receipt SHA-256 (in file)"] = receipt["sha256"] |
|
|
|
|
|
|
|
|
return json.dumps(result, indent=2), fname |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def verify_receipt(uploaded_file): |
|
|
if uploaded_file is None: |
|
|
return "No file uploaded.", "" |
|
|
|
|
|
path = uploaded_file.name if hasattr(uploaded_file, "name") else str(uploaded_file) |
|
|
try: |
|
|
with open(path, "r", encoding="utf-8") as f: |
|
|
receipt = json.load(f) |
|
|
except Exception as e: |
|
|
return f"Invalid JSON file: {e}", "" |
|
|
|
|
|
claimed = str(receipt.get("sha256", "")).strip() |
|
|
computed = compute_receipt_sha256(receipt) |
|
|
|
|
|
ok = (claimed != "" and claimed.lower() == computed.lower()) |
|
|
|
|
|
verdict = { |
|
|
"verified": bool(ok), |
|
|
"claimed_sha256": claimed, |
|
|
"computed_sha256": computed, |
|
|
"note": "Verified means: sha256(receipt_without_sha256_field) matches the sha256 stored in the receipt." |
|
|
} |
|
|
|
|
|
banner = "✅ Receipt verified (SHA-256 match)" if ok else "❌ Receipt FAILED verification (SHA-256 mismatch)" |
|
|
return banner, json.dumps(verdict, indent=2) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
with gr.Blocks(title=APP_TITLE) as demo: |
|
|
gr.Markdown( |
|
|
f""" |
|
|
# {APP_TITLE} |
|
|
|
|
|
Everything you see below is computed **right now**, on this machine. |
|
|
|
|
|
**What an “item” is** |
|
|
• One coherent state update of **[Ψ, E, L]** per oscillator per step |
|
|
|
|
|
**What you get** |
|
|
• Real throughput (items/sec) |
|
|
• Stability proxy (|C|) |
|
|
• Energy behaviour |
|
|
• A downloadable **receipt with SHA-256** (verification-first) |
|
|
• A built-in **receipt verifier** (upload → verify → done) |
|
|
|
|
|
No precomputed results. No estimates. |
|
|
""" |
|
|
) |
|
|
|
|
|
with gr.Tabs(): |
|
|
with gr.Tab("Run"): |
|
|
n_slider = gr.Slider(250_000, 8_000_000, value=6_400_000, step=250_000, |
|
|
label="Number of Oscillators") |
|
|
steps_slider = gr.Slider(50, 1_000, value=650, step=25, |
|
|
label="Simulation Steps") |
|
|
|
|
|
baseline_toggle = gr.Checkbox( |
|
|
label="Include baselines (context only)", |
|
|
value=True |
|
|
) |
|
|
|
|
|
run_btn = gr.Button("Run Engine") |
|
|
|
|
|
output = gr.Code(label="Results", language="json") |
|
|
receipt_file = gr.File(label="Receipt (download)") |
|
|
|
|
|
run_btn.click( |
|
|
fn=run_engine, |
|
|
inputs=[n_slider, steps_slider, baseline_toggle], |
|
|
outputs=[output, receipt_file] |
|
|
) |
|
|
|
|
|
with gr.Tab("Verify receipt"): |
|
|
gr.Markdown( |
|
|
""" |
|
|
Upload a receipt JSON generated by this Space. |
|
|
|
|
|
This verifier recomputes the SHA-256 (over the receipt JSON **without** the `sha256` field) and checks it matches the stored value. |
|
|
""" |
|
|
) |
|
|
up = gr.File(label="Upload receipt (.json)") |
|
|
verify_btn = gr.Button("Verify") |
|
|
banner = gr.Textbox(label="Verification result", interactive=False) |
|
|
detail = gr.Code(label="Details", language="json") |
|
|
verify_btn.click(fn=verify_receipt, inputs=[up], outputs=[banner, detail]) |
|
|
|
|
|
demo.launch() |