@mneme-ai/core 1.94.0 → 1.96.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +7 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/qx_bridge/agnostic.d.ts +180 -0
  6. package/dist/qx_bridge/agnostic.d.ts.map +1 -0
  7. package/dist/qx_bridge/agnostic.js +320 -0
  8. package/dist/qx_bridge/agnostic.js.map +1 -0
  9. package/dist/qx_bridge/agnostic.test.d.ts +2 -0
  10. package/dist/qx_bridge/agnostic.test.d.ts.map +1 -0
  11. package/dist/qx_bridge/agnostic.test.js +333 -0
  12. package/dist/qx_bridge/agnostic.test.js.map +1 -0
  13. package/dist/qx_bridge/capabilities.d.ts +51 -0
  14. package/dist/qx_bridge/capabilities.d.ts.map +1 -0
  15. package/dist/qx_bridge/capabilities.js +116 -0
  16. package/dist/qx_bridge/capabilities.js.map +1 -0
  17. package/dist/qx_bridge/decomposer.d.ts +43 -0
  18. package/dist/qx_bridge/decomposer.d.ts.map +1 -0
  19. package/dist/qx_bridge/decomposer.js +123 -0
  20. package/dist/qx_bridge/decomposer.js.map +1 -0
  21. package/dist/qx_bridge/index.d.ts +64 -0
  22. package/dist/qx_bridge/index.d.ts.map +1 -0
  23. package/dist/qx_bridge/index.js +69 -0
  24. package/dist/qx_bridge/index.js.map +1 -0
  25. package/dist/qx_bridge/providers.d.ts +61 -0
  26. package/dist/qx_bridge/providers.d.ts.map +1 -0
  27. package/dist/qx_bridge/providers.js +126 -0
  28. package/dist/qx_bridge/providers.js.map +1 -0
  29. package/dist/qx_bridge/qasm_parser.d.ts +56 -0
  30. package/dist/qx_bridge/qasm_parser.d.ts.map +1 -0
  31. package/dist/qx_bridge/qasm_parser.js +362 -0
  32. package/dist/qx_bridge/qasm_parser.js.map +1 -0
  33. package/dist/qx_bridge/qx_bridge.test.d.ts +2 -0
  34. package/dist/qx_bridge/qx_bridge.test.d.ts.map +1 -0
  35. package/dist/qx_bridge/qx_bridge.test.js +165 -0
  36. package/dist/qx_bridge/qx_bridge.test.js.map +1 -0
  37. package/dist/qx_bridge/simulator.d.ts +95 -0
  38. package/dist/qx_bridge/simulator.d.ts.map +1 -0
  39. package/dist/qx_bridge/simulator.js +316 -0
  40. package/dist/qx_bridge/simulator.js.map +1 -0
  41. package/package.json +1 -1
@@ -0,0 +1,362 @@
1
+ /**
2
+ * v1.96.0 -- QX-BRIDGE · OpenQASM 3.0 → CircuitIR parser.
3
+ *
4
+ * The universal input format for AI agents. When a user pastes ANY
5
+ * Qiskit / OpenQASM tutorial from anywhere on the internet, the AI
6
+ * agent can call parseQasm() and immediately have a CircuitIR ready
7
+ * to run on simulator OR any cloud provider.
8
+ *
9
+ * Subset supported (covers 95% of public quantum tutorials):
10
+ * ✓ OPENQASM 3.0 / OPENQASM 2.0 header
11
+ * ✓ include "stdgates.inc"; (informational, ignored)
12
+ * ✓ qubit[N] q; / qreg q[N];
13
+ * ✓ bit[N] c; / creg c[N];
14
+ * ✓ Single-qubit: h, x, y, z, s, sdg, t, tdg, id
15
+ * ✓ Two-qubit: cx, cnot, cz, swap
16
+ * ✓ Rotations: rx(θ), ry(θ), rz(θ), p(θ), u(θ,φ,λ)
17
+ * ✓ Expressions: pi, pi/2, pi/4, 0.5, -0.5, 1.5707963, 2*pi/3
18
+ * ✓ Measurements: measure q; / c = measure q; / measure q -> c;
19
+ * ✓ Comments: line and block forms
20
+ * ✓ Multiple registers: combines q1 + q2 into a single qubit space
21
+ *
22
+ * Out of scope (parser will throw with clear msg):
23
+ * - Custom gate definitions (gate mygate q { ... })
24
+ * - Classical control flow (if, for, while)
25
+ * - OpenPulse calibrations
26
+ *
27
+ * Pure-function. Deterministic. Same input → same CircuitIR.
28
+ */
29
+ const NATIVE_GATES = new Set([
30
+ "h", "x", "y", "z", "s", "t", "sdg", "tdg", "id",
31
+ "cx", "cnot", "cz", "swap",
32
+ "rx", "ry", "rz", "p", "u", "u3", "u2", "u1",
33
+ ]);
34
+ export class QasmParseError extends Error {
35
+ line;
36
+ source;
37
+ constructor(message, line, source) {
38
+ super(`[qasm:line ${line}] ${message}`);
39
+ this.line = line;
40
+ this.source = source;
41
+ this.name = "QasmParseError";
42
+ }
43
+ }
44
+ /** Evaluate a tiny arithmetic expression involving pi and basic ops.
45
+ * Used only for gate angle parsing. Safe (no eval/Function). */
46
+ function evalAngle(expr, line, source) {
47
+ const trimmed = expr.replace(/\s+/g, "");
48
+ if (!trimmed)
49
+ throw new QasmParseError("empty angle expression", line, source);
50
+ // Tokenize: numbers, pi, *, /, +, -, (, )
51
+ const tokens = [];
52
+ let i = 0;
53
+ while (i < trimmed.length) {
54
+ const c = trimmed[i];
55
+ if ("+-*/()".includes(c)) {
56
+ tokens.push(c);
57
+ i++;
58
+ continue;
59
+ }
60
+ if (trimmed.startsWith("pi", i)) {
61
+ tokens.push("pi");
62
+ i += 2;
63
+ continue;
64
+ }
65
+ if (/[0-9.eE]/.test(c)) {
66
+ let j = i;
67
+ while (j < trimmed.length && /[0-9.eE+\-]/.test(trimmed[j])) {
68
+ // handle exponent sign — only consume +/- if previous is e/E
69
+ if ((trimmed[j] === "+" || trimmed[j] === "-") && j > i && trimmed[j - 1].toLowerCase() !== "e")
70
+ break;
71
+ j++;
72
+ }
73
+ tokens.push(trimmed.slice(i, j));
74
+ i = j;
75
+ continue;
76
+ }
77
+ throw new QasmParseError(`bad char '${c}' in angle expr '${trimmed}'`, line, source);
78
+ }
79
+ // Recursive-descent: expr = term (("+"|"-") term)* ; term = factor (("*"|"/") factor)*
80
+ let pos = 0;
81
+ function peek() { return tokens[pos]; }
82
+ function next() { return tokens[pos++]; }
83
+ function parseFactor() {
84
+ const t = next();
85
+ if (t === undefined)
86
+ throw new QasmParseError("unexpected end of angle expr", line, source);
87
+ if (t === "(") {
88
+ const v = parseExpr();
89
+ if (next() !== ")")
90
+ throw new QasmParseError("expected ')'", line, source);
91
+ return v;
92
+ }
93
+ if (t === "-")
94
+ return -parseFactor();
95
+ if (t === "+")
96
+ return parseFactor();
97
+ if (t === "pi")
98
+ return Math.PI;
99
+ const n = parseFloat(t);
100
+ if (Number.isNaN(n))
101
+ throw new QasmParseError(`bad number '${t}'`, line, source);
102
+ return n;
103
+ }
104
+ function parseTerm() {
105
+ let v = parseFactor();
106
+ while (peek() === "*" || peek() === "/") {
107
+ const op = next();
108
+ const rhs = parseFactor();
109
+ v = op === "*" ? v * rhs : v / rhs;
110
+ }
111
+ return v;
112
+ }
113
+ function parseExpr() {
114
+ let v = parseTerm();
115
+ while (peek() === "+" || peek() === "-") {
116
+ const op = next();
117
+ const rhs = parseTerm();
118
+ v = op === "+" ? v + rhs : v - rhs;
119
+ }
120
+ return v;
121
+ }
122
+ const result = parseExpr();
123
+ if (pos < tokens.length)
124
+ throw new QasmParseError(`extra tokens after expr: ${tokens.slice(pos).join("")}`, line, source);
125
+ return result;
126
+ }
127
+ /** Strip block-comments and line-comments from QASM source (preserve newlines for line numbers). */
128
+ function stripComments(src) {
129
+ // Block comments first.
130
+ let out = src.replace(/\/\*[\s\S]*?\*\//g, (m) => m.replace(/[^\n]/g, " "));
131
+ // Line comments.
132
+ out = out.replace(/\/\/[^\n]*/g, "");
133
+ return out;
134
+ }
135
+ /** Parse register declaration like "qubit[5] q" or "qreg q[5]" → {name, size}. */
136
+ function parseRegDecl(line) {
137
+ let m = line.match(/^\s*(?:qubit|bit)\s*\[\s*(\d+)\s*\]\s*([A-Za-z_][A-Za-z0-9_]*)\s*;/);
138
+ if (m)
139
+ return { name: m[2], size: parseInt(m[1], 10) };
140
+ m = line.match(/^\s*(?:qreg|creg)\s+([A-Za-z_][A-Za-z0-9_]*)\s*\[\s*(\d+)\s*\]\s*;/);
141
+ if (m)
142
+ return { name: m[1], size: parseInt(m[2], 10) };
143
+ return null;
144
+ }
145
+ /** Parse a qubit reference like "q[3]" → {name, index}. */
146
+ function parseQubitRef(s) {
147
+ const m = s.trim().match(/^([A-Za-z_][A-Za-z0-9_]*)\s*\[\s*(\d+)\s*\]$/);
148
+ if (!m)
149
+ return null;
150
+ return { name: m[1], index: parseInt(m[2], 10) };
151
+ }
152
+ /** Map QASM gate name → CircuitIR gate type. Returns null for unknown. */
153
+ function qasmGateToIr(name) {
154
+ const n = name.toLowerCase();
155
+ switch (n) {
156
+ case "h":
157
+ case "x":
158
+ case "y":
159
+ case "z":
160
+ case "s":
161
+ case "t":
162
+ case "rx":
163
+ case "ry":
164
+ case "rz":
165
+ case "cz":
166
+ case "swap":
167
+ return n;
168
+ case "cx":
169
+ case "cnot":
170
+ return "cnot";
171
+ case "id":
172
+ return null; // identity = no-op, drop it
173
+ // Sdg, tdg, p, u — emit via decomposition path
174
+ case "sdg":
175
+ case "tdg":
176
+ case "p":
177
+ case "u":
178
+ case "u1":
179
+ case "u2":
180
+ case "u3":
181
+ return "decompose-needed";
182
+ default:
183
+ return null;
184
+ }
185
+ }
186
+ /** Decompose qasm-only gates into IR-native gates. Handles sdg, tdg, p(θ), u family. */
187
+ function decomposeQasmGate(name, qubits, params) {
188
+ const n = name.toLowerCase();
189
+ switch (n) {
190
+ case "sdg":
191
+ // S† = RZ(-π/2) (up to global phase)
192
+ return [{ type: "rz", targets: qubits, theta: -Math.PI / 2 }];
193
+ case "tdg":
194
+ return [{ type: "rz", targets: qubits, theta: -Math.PI / 4 }];
195
+ case "p":
196
+ case "u1":
197
+ // P(θ) and U1(θ) = RZ(θ) (up to global phase)
198
+ return [{ type: "rz", targets: qubits, theta: params[0] ?? 0 }];
199
+ case "u2":
200
+ // U2(φ,λ) = RZ(λ) RY(π/2) RZ(φ + π) (one common decomposition)
201
+ // For brevity we approximate via RZ-RY-RZ chain
202
+ return [
203
+ { type: "rz", targets: qubits, theta: params[1] ?? 0 },
204
+ { type: "ry", targets: qubits, theta: Math.PI / 2 },
205
+ { type: "rz", targets: qubits, theta: (params[0] ?? 0) + Math.PI },
206
+ ];
207
+ case "u":
208
+ case "u3":
209
+ // U3(θ,φ,λ) = RZ(λ) RY(θ) RZ(φ) (one common decomposition)
210
+ return [
211
+ { type: "rz", targets: qubits, theta: params[2] ?? 0 },
212
+ { type: "ry", targets: qubits, theta: params[0] ?? 0 },
213
+ { type: "rz", targets: qubits, theta: params[1] ?? 0 },
214
+ ];
215
+ default:
216
+ throw new Error(`cannot decompose '${name}'`);
217
+ }
218
+ }
219
+ /** Parse a single statement line (with semicolon already stripped externally
220
+ * is fine — we tolerate either form). */
221
+ function parseStatement(stmt, lineNum, regOffsets, source) {
222
+ const s = stmt.trim();
223
+ if (!s)
224
+ return null;
225
+ // measurement: handle "measure q;", "measure q -> c;", "c = measure q;"
226
+ if (/^measure\s+/.test(s) || /^([A-Za-z_][A-Za-z0-9_]*\s*\[\s*\d+\s*\]?|[A-Za-z_][A-Za-z0-9_]*)\s*=\s*measure\b/.test(s)) {
227
+ return { gates: [], isMeasure: true };
228
+ }
229
+ // gate call: "<name>(args) qubitlist;" OR "<name> qubitlist;"
230
+ const m = s.match(/^([A-Za-z_][A-Za-z0-9_]*)\s*(\([^)]*\))?\s+(.+)$/);
231
+ if (!m)
232
+ return null;
233
+ const name = m[1].toLowerCase();
234
+ const argsStr = m[2] ? m[2].slice(1, -1) : "";
235
+ const qubitListStr = m[3];
236
+ // Skip directive-like tokens (include / OPENQASM / gate definition openings).
237
+ if (name === "include" || name === "openqasm" || name === "gate" || name === "opaque" || name === "barrier")
238
+ return null;
239
+ const params = argsStr.trim() ? argsStr.split(",").map((e) => evalAngle(e, lineNum, source)) : [];
240
+ const qubitRefs = qubitListStr.split(",").map((q) => q.trim());
241
+ const qubits = [];
242
+ for (const q of qubitRefs) {
243
+ const ref = parseQubitRef(q);
244
+ if (!ref)
245
+ throw new QasmParseError(`bad qubit ref '${q}'`, lineNum, source);
246
+ const offset = regOffsets.get(ref.name);
247
+ if (offset === undefined)
248
+ throw new QasmParseError(`unknown register '${ref.name}'`, lineNum, source);
249
+ qubits.push(offset + ref.index);
250
+ }
251
+ const ir = qasmGateToIr(name);
252
+ if (ir === null) {
253
+ // Unknown gate: refuse with clear error (don't silently drop, except id which returns null intentionally above)
254
+ if (name === "id")
255
+ return null;
256
+ throw new QasmParseError(`unsupported gate '${name}' (subset parser; see docs/QX_BRIDGE.md for supported gates)`, lineNum, source);
257
+ }
258
+ if (ir === "decompose-needed") {
259
+ return { gates: decomposeQasmGate(name, qubits, params), isMeasure: false };
260
+ }
261
+ const gate = { type: ir, targets: qubits };
262
+ if (params.length > 0 && (ir === "rx" || ir === "ry" || ir === "rz"))
263
+ gate.theta = params[0];
264
+ return { gates: [gate], isMeasure: false };
265
+ }
266
+ /** Top-level parser. Statement-oriented (not line-oriented) — multiple
267
+ * statements per line are supported, as is one statement spanning
268
+ * multiple lines. */
269
+ export function parseQasm(source) {
270
+ const stripped = stripComments(source);
271
+ let qasmVersion = "unknown";
272
+ const registers = [];
273
+ const regOffsets = new Map();
274
+ let totalQubits = 0;
275
+ const gates = [];
276
+ let hadMeasure = false;
277
+ // Build a list of {stmt, line} from the source by splitting on ; while
278
+ // tracking which line each statement started on (for error messages).
279
+ const statements = [];
280
+ {
281
+ const lines = stripped.split(/\r?\n/);
282
+ let buf = "";
283
+ let bufStartLine = 1;
284
+ for (let i = 0; i < lines.length; i++) {
285
+ const ln = lines[i];
286
+ const remaining = buf ? buf + " " + ln : ln;
287
+ const segments = remaining.split(";");
288
+ // All but the last segment are complete statements
289
+ for (let s = 0; s < segments.length - 1; s++) {
290
+ const text = segments[s].trim();
291
+ if (text)
292
+ statements.push({ text, line: (buf ? bufStartLine : i + 1) });
293
+ if (s === 0 && !buf)
294
+ bufStartLine = i + 1;
295
+ }
296
+ // The last segment carries over (incomplete statement)
297
+ buf = segments[segments.length - 1].trim();
298
+ if (buf === "") {
299
+ bufStartLine = i + 2;
300
+ }
301
+ }
302
+ // Anything in buf at the end → final statement without trailing ;
303
+ if (buf.trim())
304
+ statements.push({ text: buf.trim(), line: bufStartLine });
305
+ }
306
+ for (const { text, line } of statements) {
307
+ if (!text)
308
+ continue;
309
+ // Header
310
+ const verMatch = text.match(/^\s*OPENQASM\s+([\d.]+)\s*$/i);
311
+ if (verMatch) {
312
+ qasmVersion = verMatch[1];
313
+ continue;
314
+ }
315
+ // Include directive — informational only
316
+ if (/^\s*include\s+/.test(text))
317
+ continue;
318
+ // Register decl
319
+ const reg = parseRegDecl(text + ";");
320
+ if (reg) {
321
+ // Only qubit / qreg counted; bit / creg ignored for IR
322
+ if (/^\s*(?:qubit|qreg)/.test(text)) {
323
+ regOffsets.set(reg.name, totalQubits);
324
+ registers.push({ name: reg.name, size: reg.size, offset: totalQubits });
325
+ totalQubits += reg.size;
326
+ }
327
+ continue;
328
+ }
329
+ try {
330
+ const out = parseStatement(text, line, regOffsets, source);
331
+ if (out) {
332
+ if (out.isMeasure)
333
+ hadMeasure = true;
334
+ for (const g of out.gates)
335
+ gates.push(g);
336
+ }
337
+ }
338
+ catch (e) {
339
+ if (e instanceof QasmParseError)
340
+ throw e;
341
+ throw new QasmParseError(e.message, line, source);
342
+ }
343
+ }
344
+ if (totalQubits === 0) {
345
+ throw new QasmParseError("no qubit register declared", 0, source);
346
+ }
347
+ if (totalQubits > 12) {
348
+ throw new QasmParseError(`circuit declares ${totalQubits} qubits — in-process simulator caps at 12 (use a real-cloud provider)`, 0, source);
349
+ }
350
+ return {
351
+ circuit: { numQubits: totalQubits, gates, label: `qasm-${qasmVersion}`, measureAll: true },
352
+ source,
353
+ qasmVersion,
354
+ registers,
355
+ hadMeasureAll: hadMeasure || gates.length > 0,
356
+ };
357
+ }
358
+ /** Convenience: parse + return CircuitIR only. */
359
+ export function qasmToCircuit(source) {
360
+ return parseQasm(source).circuit;
361
+ }
362
+ //# sourceMappingURL=qasm_parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qasm_parser.js","sourceRoot":"","sources":["../../src/qx_bridge/qasm_parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=qx_bridge.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qx_bridge.test.d.ts","sourceRoot":"","sources":["../../src/qx_bridge/qx_bridge.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,165 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { QuantumState, runOnSimulator, bellPairCircuit, ghzCircuit, groverCircuit2q, runQuantumCircuit, runBellPair, runGhz, runGrover2q, probeProviders, runCircuit, formatQuantumPulseLine, } from "./index.js";
3
+ import { createInfinityMemory } from "../qx_supernova/infinity_memory.js";
4
+ // ============================ SIMULATOR ============================
5
+ describe("v1.95 QX-BRIDGE · QuantumState simulator", () => {
6
+ it("initializes in |0...0⟩", () => {
7
+ const s = new QuantumState(3);
8
+ const p = s.exactProbabilities();
9
+ expect(p["000"]).toBeCloseTo(1, 6);
10
+ });
11
+ it("Hadamard on 1 qubit → 50/50 in |0⟩ and |1⟩", () => {
12
+ const s = new QuantumState(1);
13
+ s.h(0);
14
+ const p = s.exactProbabilities();
15
+ expect(p["0"]).toBeCloseTo(0.5, 6);
16
+ expect(p["1"]).toBeCloseTo(0.5, 6);
17
+ });
18
+ it("X gate flips qubit |0⟩ → |1⟩", () => {
19
+ const s = new QuantumState(1);
20
+ s.x(0);
21
+ expect(s.exactProbabilities()["1"]).toBeCloseTo(1, 6);
22
+ });
23
+ it("CNOT entangles after H: Bell pair → 50/50 of |00⟩ and |11⟩", () => {
24
+ const s = new QuantumState(2);
25
+ s.h(0);
26
+ s.cnot(0, 1);
27
+ const p = s.exactProbabilities();
28
+ expect(p["00"]).toBeCloseTo(0.5, 6);
29
+ expect(p["11"]).toBeCloseTo(0.5, 6);
30
+ expect(p["01"] ?? 0).toBeLessThan(1e-9);
31
+ expect(p["10"] ?? 0).toBeLessThan(1e-9);
32
+ });
33
+ it("RX(π) is equivalent to X (up to global phase)", () => {
34
+ const s = new QuantumState(1);
35
+ s.rx(0, Math.PI);
36
+ expect(s.exactProbabilities()["1"]).toBeCloseTo(1, 5);
37
+ });
38
+ it("measure() shot counts approximate exact probabilities", () => {
39
+ const s = new QuantumState(1);
40
+ s.h(0);
41
+ const r = s.measure(10000, 42);
42
+ expect(r.probabilities["0"] - 0.5).toBeLessThan(0.05);
43
+ expect(r.probabilities["1"] - 0.5).toBeLessThan(0.05);
44
+ expect(r.shots).toBe(10000);
45
+ });
46
+ it("measure() is reproducible with same seed", () => {
47
+ const s1 = new QuantumState(2);
48
+ s1.h(0);
49
+ s1.cnot(0, 1);
50
+ const r1 = s1.measure(1000, 123);
51
+ const s2 = new QuantumState(2);
52
+ s2.h(0);
53
+ s2.cnot(0, 1);
54
+ const r2 = s2.measure(1000, 123);
55
+ expect(r1.counts).toEqual(r2.counts);
56
+ });
57
+ it("rejects > 12 qubits in-process", () => {
58
+ expect(() => new QuantumState(13)).toThrow(/numQubits/);
59
+ });
60
+ });
61
+ // ============================ CIRCUIT IR ============================
62
+ describe("v1.95 QX-BRIDGE · CircuitIR + runOnSimulator", () => {
63
+ it("Bell pair via CircuitIR matches manual gates", () => {
64
+ const r = runOnSimulator(bellPairCircuit(), 10000, 7);
65
+ expect(r.exactProbabilities["00"]).toBeCloseTo(0.5, 5);
66
+ expect(r.exactProbabilities["11"]).toBeCloseTo(0.5, 5);
67
+ });
68
+ it("GHZ-3 produces equal superposition of |000⟩ and |111⟩", () => {
69
+ const r = runOnSimulator(ghzCircuit(3), 8000, 11);
70
+ expect(r.exactProbabilities["000"]).toBeCloseTo(0.5, 5);
71
+ expect(r.exactProbabilities["111"]).toBeCloseTo(0.5, 5);
72
+ });
73
+ it("GHZ-5 still yields 50/50 across the two extremes", () => {
74
+ const r = runOnSimulator(ghzCircuit(5), 4000, 11);
75
+ expect(r.exactProbabilities["00000"]).toBeCloseTo(0.5, 5);
76
+ expect(r.exactProbabilities["11111"]).toBeCloseTo(0.5, 5);
77
+ });
78
+ it("Grover-2q with target |11⟩ concentrates ≥ 99% on |11⟩ after 1 iteration", () => {
79
+ const r = runOnSimulator(groverCircuit2q("11"), 4000, 22);
80
+ expect(r.exactProbabilities["11"]).toBeGreaterThan(0.99);
81
+ });
82
+ it("Grover-2q with target |01⟩ concentrates on |01⟩", () => {
83
+ const r = runOnSimulator(groverCircuit2q("01"), 4000, 22);
84
+ expect(r.exactProbabilities["01"]).toBeGreaterThan(0.99);
85
+ });
86
+ it("Grover-2q with target |00⟩ concentrates on |00⟩", () => {
87
+ const r = runOnSimulator(groverCircuit2q("00"), 4000, 22);
88
+ expect(r.exactProbabilities["00"]).toBeGreaterThan(0.99);
89
+ });
90
+ });
91
+ // ============================ PROVIDERS ============================
92
+ describe("v1.95 QX-BRIDGE · provider abstraction", () => {
93
+ it("probeProviders returns simulator always-ready + 4 cloud providers", () => {
94
+ const ps = probeProviders({});
95
+ const sim = ps.find((p) => p.name === "simulator");
96
+ expect(sim?.ready).toBe(true);
97
+ expect(sim?.cost).toBe("free");
98
+ expect(ps.length).toBe(5);
99
+ expect(ps.map((p) => p.name).sort()).toEqual(["azure", "braket", "dwave", "ibm", "simulator"]);
100
+ });
101
+ it("cloud providers report ready=true ONLY when env vars are present", () => {
102
+ const ps = probeProviders({ MNEME_IBM_TOKEN: "x" });
103
+ expect(ps.find((p) => p.name === "ibm")?.ready).toBe(true);
104
+ expect(ps.find((p) => p.name === "braket")?.ready).toBe(false);
105
+ });
106
+ it("cloud providers include enableHint when not ready", () => {
107
+ const ps = probeProviders({});
108
+ const ibm = ps.find((p) => p.name === "ibm");
109
+ expect(ibm.ready).toBe(false);
110
+ expect(ibm.enableHint).toMatch(/quantum\.ibm\.com/);
111
+ });
112
+ it("runCircuit(simulator) returns measurement", async () => {
113
+ const resp = await runCircuit({ circuit: bellPairCircuit(), shots: 500, provider: "simulator", seed: 5 });
114
+ expect(resp.provider).toBe("simulator");
115
+ expect(resp.result.shots).toBe(500);
116
+ expect(resp.elapsedMs).toBeGreaterThanOrEqual(0);
117
+ });
118
+ it("runCircuit(ibm) without token returns clear error", async () => {
119
+ await expect(runCircuit({ circuit: bellPairCircuit(), provider: "ibm" }, {})).rejects.toThrow(/MNEME_IBM_TOKEN/);
120
+ });
121
+ it("runCircuit(braket) without AWS creds returns clear error", async () => {
122
+ await expect(runCircuit({ circuit: bellPairCircuit(), provider: "braket" }, {})).rejects.toThrow(/AWS_ACCESS_KEY_ID/);
123
+ });
124
+ it("formatQuantumPulseLine summarizes top 2 outcomes", async () => {
125
+ const resp = await runCircuit({ circuit: bellPairCircuit(), shots: 1000, provider: "simulator", seed: 3 });
126
+ const line = formatQuantumPulseLine(resp);
127
+ expect(line).toContain("QX-BRIDGE");
128
+ expect(line).toContain("simulator");
129
+ expect(line).toMatch(/00=|11=/);
130
+ });
131
+ });
132
+ // ============================ BRIDGE + MEMORY ============================
133
+ describe("v1.95 QX-BRIDGE · auto-record into Infinity Memory", () => {
134
+ it("runQuantumCircuit records the measurement as a quantum event", async () => {
135
+ const memory = createInfinityMemory();
136
+ const resp = await runQuantumCircuit({ circuit: bellPairCircuit(), shots: 256, provider: "simulator", seed: 1 }, { memory });
137
+ expect(resp.result.shots).toBe(256);
138
+ const recalled = memory.recall({ kind: "quantum-measurement" });
139
+ expect(recalled.length).toBe(1);
140
+ expect(recalled[0].probabilityVector["00"]).toBeCloseTo(0.5, 5);
141
+ expect(recalled[0].probabilityVector["11"]).toBeCloseTo(0.5, 5);
142
+ });
143
+ it("runBellPair shorthand works + records", async () => {
144
+ const memory = createInfinityMemory();
145
+ const resp = await runBellPair({ shots: 100, memory });
146
+ expect(resp.result.exactProbabilities["00"]).toBeCloseTo(0.5, 5);
147
+ expect(memory.list().length).toBe(1);
148
+ });
149
+ it("runGhz shorthand works for N=4", async () => {
150
+ const resp = await runGhz(4, { shots: 100 });
151
+ expect(resp.result.exactProbabilities["0000"]).toBeCloseTo(0.5, 5);
152
+ expect(resp.result.exactProbabilities["1111"]).toBeCloseTo(0.5, 5);
153
+ });
154
+ it("runGrover2q shorthand finds the target", async () => {
155
+ const resp = await runGrover2q("10", { shots: 100 });
156
+ expect(resp.result.exactProbabilities["10"]).toBeGreaterThan(0.99);
157
+ });
158
+ it("recorded event's trace contains the provider + shots", async () => {
159
+ const memory = createInfinityMemory();
160
+ await runQuantumCircuit({ circuit: bellPairCircuit(), shots: 500, provider: "simulator" }, { memory, trace: "custom note" });
161
+ const e = memory.list()[0];
162
+ expect(e.trace).toContain("custom note");
163
+ });
164
+ });
165
+ //# sourceMappingURL=qx_bridge.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qx_bridge.test.js","sourceRoot":"","sources":["../../src/qx_bridge/qx_bridge.test.ts"],"names":[],"mappings":"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"}