import gradio as gr import requests import json import time import os from huggingface_hub import HfApi BASE_URL = "https://lap-quantum-qpu-1-api.hf.space" HF_TOKEN = os.getenv("HF_TOKEN", "") REPO_ID = "Reality123b/qpu1-experiments" def run_on_qpu(code, timeout=120): try: resp = requests.post( f"{BASE_URL}/script", json={"code": code, "session_id": "qpu1-experiments"}, timeout=timeout, headers={"Content-Type": "application/json"} ) result = resp.json() if result.get("success"): return result.get("output", "No output") return f"Error: {result.get('error', 'Unknown error')}" except Exception as e: return f"Connection error: {str(e)}" def health_check(): try: resp = requests.get(f"{BASE_URL}/health", timeout=10) return json.dumps(resp.json(), indent=2) except Exception as e: return f"Error: {str(e)}" def run_bell_state(): return run_on_qpu('q = Qreg(2)\nq.H(0)\nq.CNOT(0, 1)\nprint(q.measure())') def run_ghz(n_qubits): n = int(n_qubits) cnots = "\n".join([f"q.CNOT(0, {i})" for i in range(1, n)]) return run_on_qpu(f"q = Qreg({n})\nq.H(0)\n{cnots}\nprint(q.measure())") def run_superposition(n_qubits): n = int(n_qubits) code = f"q = Qreg({n})\nq.H_all()\nresult = q.measure()\nprint(f'Result: {{result[:80]}}...')\nprint(f'Total qubits: {n}')\nprint(f'Ones: {{result.count(\"1\")}}/{n}')" return run_on_qpu(code) def run_bell_correlation(trials): n = int(trials) code = f"n={n}\ncorr=0\nfor _ in range(n):\n q=Qreg(2)\n q.H(0)\n q.CNOT(0,1)\n r=q.measure()\n if r in['00','11']:corr+=1\nprint(f'Correlation: {{corr/n*100:.1f}}%')\nprint(f'Correlated pairs: {{corr}}/{n}')" return run_on_qpu(code) def run_long_range(n_qubits): n = int(n_qubits) code = f"import time\nq = Qreg({n})\nq.H(0)\nq.CNOT(0, {n-1})\nstart = time.time()\nresult = q.measure()\nelapsed = time.time() - start\nprint(f'Qubits: {n:,}')\nprint(f'Measurement time: {{elapsed*1000:.1f}}ms')\nprint(f'Qubit 0: {{result[0]}}')\nprint(f'Qubit {n-1:,}: {{result[{n-1}]}}')\nprint(f'Entangled: {{result[0] == result[{n-1}]}}')" return run_on_qpu(code, timeout=300) def run_benchmark(): code = "import time\nq = Qreg(100000)\nstart = time.time()\nfor _ in range(1000):\n q.H(0)\nelapsed = time.time() - start\nprint(f'1000 H gates on 100K qubit register')\nprint(f'Time: {elapsed*1000:.1f}ms')\nprint(f'Gate speed: {1000/elapsed/1e6:.1f}M gates/s')" return run_on_qpu(code) def run_teleportation(): code = "q = Qreg(3)\nq.X(0)\nq.H(1)\nq.CNOT(1, 2)\nq.CNOT(0, 1)\nq.H(0)\nresult = q.measure()\nprint(f'Full state: {result}')\nprint(f'Qubit 2 (teleported): {result[2]}')" return run_on_qpu(code) def run_deutsch_jozsa(): code = "q = Qreg(2)\nq.X(1)\nq.H(0)\nq.H(1)\nq.CNOT(0, 1)\nq.H(0)\nresult = q.measure()\nverdict = 'BALANCED' if result[0] == '1' else 'CONSTANT'\nprint(f'Measurement: {result}')\nprint(f'Function is: {verdict}')" return run_on_qpu(code) def run_bernstein_vazirani(): code = "q = Qreg(4)\nq.X(3)\nq.H(0)\nq.H(1)\nq.H(2)\nq.H(3)\nq.CNOT(0, 3)\nq.CNOT(2, 3)\nq.H(0)\nq.H(1)\nq.H(2)\nresult = q.measure()\nsecret = result[:3]\nprint(f'Full measurement: {result}')\nprint(f'Recovered secret: {secret}')\nprint(f'Expected: 101')\nprint(f'Correct: {secret == \"101\"}')" return run_on_qpu(code) def run_custom_code(code): return run_on_qpu(code) def run_all_experiments(): lines = [] lines.append("=" * 60) lines.append(" QPU-1 QUANTUM PROCESSING UNIT — LIVE RESULTS") lines.append(" Powered by Lap Quantum") lines.append("=" * 60) experiments = [ ("[0] QPU-1 HEALTH", health_check), ("[1] BELL STATE (2 qubits)", run_bell_state), ("[2] GHZ STATE (5 qubits)", lambda: run_ghz(5)), ("[3] SUPERPOSITION (20 qubits)", lambda: run_superposition(20)), ("[4] BELL CORRELATION (50 trials)", lambda: run_bell_correlation(50)), ("[5] QUANTUM TELEPORTATION", run_teleportation), ("[6] DEUTSCH-JOZSA ALGORITHM", run_deutsch_jozsa), ("[7] BERNSTEIN-VAZIRANI (secret=101)", run_bernstein_vazirani), ("[8] LONG-RANGE ENTANGLEMENT (1M qubits)", lambda: run_long_range(1000000)), ("[9] GATE SPEED BENCHMARK", run_benchmark), ] for title, fn in experiments: lines.append(f"\n{title}") lines.append("-" * 40) lines.append(fn()) lines.append("\n" + "=" * 60) lines.append(" ALL EXPERIMENTS COMPLETE!") lines.append("=" * 60) return "\n".join(lines) # ===== RUN ON STARTUP & SAVE RESULTS ===== print(">>> Running quantum experiments on QPU-1...") STARTUP_RESULTS = run_all_experiments() print(STARTUP_RESULTS) # Save results to repo so they can be read try: with open("/tmp/results.txt", "w") as f: f.write(STARTUP_RESULTS) api = HfApi(token=HF_TOKEN) api.upload_file( path_or_fileobj="/tmp/results.txt", path_in_repo="results.txt", repo_id=REPO_ID, repo_type="space", ) print(">>> Results saved to results.txt in repo!") except Exception as e: print(f">>> Could not save results: {e}") CSS = """ .main-title { text-align: center; background: linear-gradient(135deg, #8b5cf6, #6366f1, #3b82f6); -webkit-background-clip: text; -webkit-text-fill-color: transparent; font-size: 2.5em; font-weight: 800; } .subtitle { text-align: center; color: #888; font-size: 1.1em; } """ with gr.Blocks(title="QPU-1 Experiments", css=CSS, theme=gr.themes.Soft()) as app: gr.HTML("

⚛️ QPU-1 Experiments

") gr.HTML("

Real quantum circuits on Lap Quantum's QPU-1

") with gr.Tab("🚀 Run All"): gr.Markdown("### Startup Results (ran when Space loaded)") startup_box = gr.Textbox(label="Results", lines=45, value=STARTUP_RESULTS, show_copy_button=True) rerun_btn = gr.Button("🔄 Re-run All", variant="primary", size="lg") fresh_box = gr.Textbox(label="Fresh Results", lines=45, show_copy_button=True) rerun_btn.click(fn=run_all_experiments, outputs=fresh_box) with gr.Tab("🔬 Individual"): with gr.Row(): with gr.Column(): gr.Markdown("### Bell State"); bell_btn = gr.Button("Run"); bell_out = gr.Textbox(lines=2); bell_btn.click(fn=run_bell_state, outputs=bell_out) gr.Markdown("### GHZ State"); ghz_n = gr.Slider(2, 20, value=5, step=1, label="Qubits"); ghz_btn = gr.Button("Run GHZ"); ghz_out = gr.Textbox(lines=2); ghz_btn.click(fn=run_ghz, inputs=ghz_n, outputs=ghz_out) gr.Markdown("### Superposition"); sup_n = gr.Slider(1, 100, value=10, step=1, label="Qubits"); sup_btn = gr.Button("Run"); sup_out = gr.Textbox(lines=3); sup_btn.click(fn=run_superposition, inputs=sup_n, outputs=sup_out) gr.Markdown("### Bell Correlation"); corr_n = gr.Slider(10, 500, value=100, step=10, label="Trials"); corr_btn = gr.Button("Test"); corr_out = gr.Textbox(lines=3); corr_btn.click(fn=run_bell_correlation, inputs=corr_n, outputs=corr_out) with gr.Column(): gr.Markdown("### Teleportation"); tp_btn = gr.Button("Run"); tp_out = gr.Textbox(lines=3); tp_btn.click(fn=run_teleportation, outputs=tp_out) gr.Markdown("### Deutsch-Jozsa"); dj_btn = gr.Button("Run"); dj_out = gr.Textbox(lines=2); dj_btn.click(fn=run_deutsch_jozsa, outputs=dj_out) gr.Markdown("### Bernstein-Vazirani"); bv_btn = gr.Button("Run"); bv_out = gr.Textbox(lines=4); bv_btn.click(fn=run_bernstein_vazirani, outputs=bv_out) gr.Markdown("### Long-Range (1M qubits)"); lr_n = gr.Slider(1000, 1000000, value=1000000, step=1000, label="Qubits"); lr_btn = gr.Button("Run"); lr_out = gr.Textbox(lines=5); lr_btn.click(fn=run_long_range, inputs=lr_n, outputs=lr_out) gr.Markdown("### Benchmark"); bench_btn = gr.Button("Run"); bench_out = gr.Textbox(lines=3); bench_btn.click(fn=run_benchmark, outputs=bench_out) with gr.Tab("💻 Custom Code"): code_input = gr.Code(language="python", lines=15, value="q = Qreg(3)\nq.H(0)\nq.CNOT(0, 1)\nq.CNOT(1, 2)\nprint(q.measure())") custom_btn = gr.Button("▶️ Execute on QPU-1", variant="primary") custom_out = gr.Textbox(label="Output", lines=8, show_copy_button=True) custom_btn.click(fn=run_custom_code, inputs=code_input, outputs=custom_out) with gr.Tab("💚 Health"): health_btn = gr.Button("Check QPU-1 Health", variant="primary") health_out = gr.Textbox(lines=10) health_btn.click(fn=health_check, outputs=health_out) if __name__ == "__main__": app.launch()