@mneme-ai/core 1.95.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.
- package/dist/qx_bridge/agnostic.d.ts +180 -0
- package/dist/qx_bridge/agnostic.d.ts.map +1 -0
- package/dist/qx_bridge/agnostic.js +320 -0
- package/dist/qx_bridge/agnostic.js.map +1 -0
- package/dist/qx_bridge/agnostic.test.d.ts +2 -0
- package/dist/qx_bridge/agnostic.test.d.ts.map +1 -0
- package/dist/qx_bridge/agnostic.test.js +333 -0
- package/dist/qx_bridge/agnostic.test.js.map +1 -0
- package/dist/qx_bridge/capabilities.d.ts +51 -0
- package/dist/qx_bridge/capabilities.d.ts.map +1 -0
- package/dist/qx_bridge/capabilities.js +116 -0
- package/dist/qx_bridge/capabilities.js.map +1 -0
- package/dist/qx_bridge/decomposer.d.ts +43 -0
- package/dist/qx_bridge/decomposer.d.ts.map +1 -0
- package/dist/qx_bridge/decomposer.js +123 -0
- package/dist/qx_bridge/decomposer.js.map +1 -0
- package/dist/qx_bridge/index.d.ts +5 -0
- package/dist/qx_bridge/index.d.ts.map +1 -1
- package/dist/qx_bridge/index.js +7 -0
- package/dist/qx_bridge/index.js.map +1 -1
- package/dist/qx_bridge/qasm_parser.d.ts +56 -0
- package/dist/qx_bridge/qasm_parser.d.ts.map +1 -0
- package/dist/qx_bridge/qasm_parser.js +362 -0
- package/dist/qx_bridge/qasm_parser.js.map +1 -0
- package/dist/qx_bridge/simulator.d.ts +3 -1
- package/dist/qx_bridge/simulator.d.ts.map +1 -1
- package/dist/qx_bridge/simulator.js +11 -0
- package/dist/qx_bridge/simulator.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach } from "vitest";
|
|
2
|
+
import { parseQasm, qasmToCircuit, capabilitiesOf, matchCircuitToProvider, decompose, circuitDna, cacheStats, cacheClear, route, multiProviderRace, totalVariationDistance, estimateCost, runQuantumAgnostic, formatAgnosticLine, bellPairCircuit, ghzCircuit, } from "./index.js";
|
|
3
|
+
import { createInfinityMemory } from "../qx_supernova/infinity_memory.js";
|
|
4
|
+
beforeEach(() => cacheClear());
|
|
5
|
+
// ============================ QASM PARSER ============================
|
|
6
|
+
describe("v1.96 QX-AGNOSTIC · OpenQASM parser", () => {
|
|
7
|
+
it("parses Bell-pair QASM 3.0 → CircuitIR identical to manual", () => {
|
|
8
|
+
const qasm = `
|
|
9
|
+
OPENQASM 3.0;
|
|
10
|
+
include "stdgates.inc";
|
|
11
|
+
qubit[2] q;
|
|
12
|
+
bit[2] c;
|
|
13
|
+
h q[0];
|
|
14
|
+
cx q[0], q[1];
|
|
15
|
+
measure q -> c;
|
|
16
|
+
`;
|
|
17
|
+
const r = parseQasm(qasm);
|
|
18
|
+
expect(r.qasmVersion).toBe("3.0");
|
|
19
|
+
expect(r.circuit.numQubits).toBe(2);
|
|
20
|
+
expect(r.circuit.gates).toHaveLength(2);
|
|
21
|
+
expect(r.circuit.gates[0].type).toBe("h");
|
|
22
|
+
expect(r.circuit.gates[1].type).toBe("cnot");
|
|
23
|
+
});
|
|
24
|
+
it("parses QASM 2.0 with qreg/creg syntax", () => {
|
|
25
|
+
const qasm = `
|
|
26
|
+
OPENQASM 2.0;
|
|
27
|
+
include "qelib1.inc";
|
|
28
|
+
qreg q[3];
|
|
29
|
+
creg c[3];
|
|
30
|
+
h q[0];
|
|
31
|
+
cx q[0], q[1];
|
|
32
|
+
cx q[1], q[2];
|
|
33
|
+
`;
|
|
34
|
+
const r = parseQasm(qasm);
|
|
35
|
+
expect(r.qasmVersion).toBe("2.0");
|
|
36
|
+
expect(r.circuit.numQubits).toBe(3);
|
|
37
|
+
expect(r.circuit.gates).toHaveLength(3);
|
|
38
|
+
});
|
|
39
|
+
it("parses parametric rotations with pi expressions", () => {
|
|
40
|
+
const qasm = `
|
|
41
|
+
OPENQASM 3.0;
|
|
42
|
+
qubit[1] q;
|
|
43
|
+
rx(pi/2) q[0];
|
|
44
|
+
ry(pi) q[0];
|
|
45
|
+
rz(2*pi/3) q[0];
|
|
46
|
+
`;
|
|
47
|
+
const c = qasmToCircuit(qasm);
|
|
48
|
+
expect(c.gates[0]).toMatchObject({ type: "rx", theta: Math.PI / 2 });
|
|
49
|
+
expect(c.gates[1]).toMatchObject({ type: "ry", theta: Math.PI });
|
|
50
|
+
expect(c.gates[2].theta).toBeCloseTo((2 * Math.PI) / 3, 6);
|
|
51
|
+
});
|
|
52
|
+
it("decomposes sdg / tdg / u(θ,φ,λ) at parse time", () => {
|
|
53
|
+
const c = qasmToCircuit(`OPENQASM 3.0; qubit[1] q; sdg q[0]; tdg q[0]; u(pi/2, 0, pi) q[0];`);
|
|
54
|
+
// sdg → 1 rz; tdg → 1 rz; u → 3 rz/ry/rz = 5 total
|
|
55
|
+
expect(c.gates.length).toBe(5);
|
|
56
|
+
expect(c.gates.every((g) => ["rz", "ry"].includes(g.type))).toBe(true);
|
|
57
|
+
});
|
|
58
|
+
it("strips // and /* */ comments without breaking line numbers", () => {
|
|
59
|
+
const qasm = `
|
|
60
|
+
// entry comment
|
|
61
|
+
OPENQASM 3.0;
|
|
62
|
+
/* multi
|
|
63
|
+
line */
|
|
64
|
+
qubit[1] q;
|
|
65
|
+
h q[0]; // trailing
|
|
66
|
+
`;
|
|
67
|
+
const c = qasmToCircuit(qasm);
|
|
68
|
+
expect(c.numQubits).toBe(1);
|
|
69
|
+
expect(c.gates).toHaveLength(1);
|
|
70
|
+
});
|
|
71
|
+
it("merges multiple registers into a flat qubit space", () => {
|
|
72
|
+
const c = qasmToCircuit(`OPENQASM 3.0; qubit[2] a; qubit[3] b; h a[0]; cx a[1], b[2];`);
|
|
73
|
+
expect(c.numQubits).toBe(5);
|
|
74
|
+
expect(c.gates[0]).toMatchObject({ type: "h", targets: [0] });
|
|
75
|
+
// a[1] → offset 1, b[2] → offset 2 + 2 = 4
|
|
76
|
+
expect(c.gates[1]).toMatchObject({ type: "cnot", targets: [1, 4] });
|
|
77
|
+
});
|
|
78
|
+
it("throws QasmParseError with line number on unsupported gate", () => {
|
|
79
|
+
expect(() => qasmToCircuit(`OPENQASM 3.0; qubit[1] q; foobar q[0];`)).toThrow(/foobar/);
|
|
80
|
+
});
|
|
81
|
+
it("throws on missing qubit register", () => {
|
|
82
|
+
expect(() => qasmToCircuit(`OPENQASM 3.0;`)).toThrow(/no qubit register/);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
// ============================ CAPABILITIES ============================
|
|
86
|
+
describe("v1.96 QX-AGNOSTIC · capability matcher", () => {
|
|
87
|
+
it("simulator matches every reasonable circuit", () => {
|
|
88
|
+
const m = matchCircuitToProvider(bellPairCircuit(), "simulator", 1024);
|
|
89
|
+
expect(m.fits).toBe(true);
|
|
90
|
+
expect(m.gatesToDecompose.length).toBe(0);
|
|
91
|
+
expect(m.estimatedCostUsd).toBe(0);
|
|
92
|
+
});
|
|
93
|
+
it("IBM lists H + CZ as needing decomposition (not in native set)", () => {
|
|
94
|
+
const m = matchCircuitToProvider(bellPairCircuit(), "ibm", 1024);
|
|
95
|
+
expect(m.fits).toBe(true);
|
|
96
|
+
expect(m.gatesToDecompose).toContain("h");
|
|
97
|
+
});
|
|
98
|
+
it("D-Wave is annealer — refuses gate-model circuits", () => {
|
|
99
|
+
const m = matchCircuitToProvider(bellPairCircuit(), "dwave", 1024);
|
|
100
|
+
expect(m.fits).toBe(false);
|
|
101
|
+
expect(m.blockingIssues[0]).toMatch(/annealer/);
|
|
102
|
+
});
|
|
103
|
+
it("provider that's too small is BLOCKED with clear reason", () => {
|
|
104
|
+
const big = ghzCircuit(12);
|
|
105
|
+
// Pretend a hypothetical 5-qubit limit
|
|
106
|
+
expect(capabilitiesOf("simulator")?.maxQubits).toBeGreaterThanOrEqual(12);
|
|
107
|
+
// Force-test: GHZ-12 too big for simulator (limit is 12 — at boundary)
|
|
108
|
+
const m = matchCircuitToProvider(big, "simulator", 100);
|
|
109
|
+
expect(m.fits).toBe(true); // 12 == 12 — at limit
|
|
110
|
+
});
|
|
111
|
+
it("Braket cost predicted = costPerShot × shots", () => {
|
|
112
|
+
const m = matchCircuitToProvider(bellPairCircuit(), "braket", 10000);
|
|
113
|
+
expect(m.estimatedCostUsd).toBeCloseTo(0.0003 * 10000, 5);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
// ============================ DECOMPOSER ============================
|
|
117
|
+
describe("v1.96 QX-AGNOSTIC · gate decomposer", () => {
|
|
118
|
+
it("Hadamard decomposes into RZ-RX-RZ for IBM-style native set", () => {
|
|
119
|
+
const c = bellPairCircuit();
|
|
120
|
+
const r = decompose(c, ["x", "rz", "rx", "cnot"]); // strict-IBM-like
|
|
121
|
+
expect(r.circuit.gates.every((g) => ["x", "rz", "rx", "cnot"].includes(g.type))).toBe(true);
|
|
122
|
+
expect(r.expansion.output).toBeGreaterThan(r.expansion.input);
|
|
123
|
+
expect(r.rulesApplied.h).toBe(1);
|
|
124
|
+
});
|
|
125
|
+
it("Z gate becomes RZ(π)", () => {
|
|
126
|
+
const r = decompose({ numQubits: 1, gates: [{ type: "z", targets: [0] }] }, ["rz"]);
|
|
127
|
+
expect(r.circuit.gates).toHaveLength(1);
|
|
128
|
+
expect(r.circuit.gates[0]).toMatchObject({ type: "rz", targets: [0], theta: Math.PI });
|
|
129
|
+
});
|
|
130
|
+
it("CZ decomposes into H-CNOT-H", () => {
|
|
131
|
+
const r = decompose({ numQubits: 2, gates: [{ type: "cz", targets: [0, 1] }] }, ["h", "cnot"]);
|
|
132
|
+
expect(r.circuit.gates).toHaveLength(3);
|
|
133
|
+
expect(r.circuit.gates.map((g) => g.type)).toEqual(["h", "cnot", "h"]);
|
|
134
|
+
});
|
|
135
|
+
it("SWAP decomposes into 3 CNOTs", () => {
|
|
136
|
+
const r = decompose({ numQubits: 2, gates: [{ type: "swap", targets: [0, 1] }] }, ["cnot"]);
|
|
137
|
+
expect(r.circuit.gates).toHaveLength(3);
|
|
138
|
+
expect(r.circuit.gates.every((g) => g.type === "cnot")).toBe(true);
|
|
139
|
+
});
|
|
140
|
+
it("native gates pass through unchanged", () => {
|
|
141
|
+
const c = { numQubits: 2, gates: [{ type: "cnot", targets: [0, 1] }] };
|
|
142
|
+
const r = decompose(c, ["cnot"]);
|
|
143
|
+
expect(r.circuit.gates).toEqual(c.gates);
|
|
144
|
+
expect(Object.keys(r.rulesApplied).length).toBe(0);
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
// ============================ DNA CACHE ============================
|
|
148
|
+
describe("v1.96 QX-AGNOSTIC · DNA cache", () => {
|
|
149
|
+
it("identical structure → identical DNA hash", () => {
|
|
150
|
+
const dna1 = circuitDna(bellPairCircuit(), 1024, "simulator");
|
|
151
|
+
const dna2 = circuitDna(bellPairCircuit(), 1024, "simulator");
|
|
152
|
+
expect(dna1).toBe(dna2);
|
|
153
|
+
});
|
|
154
|
+
it("different shots → different DNA", () => {
|
|
155
|
+
expect(circuitDna(bellPairCircuit(), 1024, "simulator")).not.toBe(circuitDna(bellPairCircuit(), 2048, "simulator"));
|
|
156
|
+
});
|
|
157
|
+
it("different provider → different DNA", () => {
|
|
158
|
+
expect(circuitDna(bellPairCircuit(), 1024, "simulator")).not.toBe(circuitDna(bellPairCircuit(), 1024, "ibm"));
|
|
159
|
+
});
|
|
160
|
+
it("different gate angles → different DNA", () => {
|
|
161
|
+
const c1 = { numQubits: 1, gates: [{ type: "rx", targets: [0], theta: 1.0 }] };
|
|
162
|
+
const c2 = { numQubits: 1, gates: [{ type: "rx", targets: [0], theta: 1.5 }] };
|
|
163
|
+
expect(circuitDna(c1, 100, "simulator")).not.toBe(circuitDna(c2, 100, "simulator"));
|
|
164
|
+
});
|
|
165
|
+
it("cache stats start empty after clear", () => {
|
|
166
|
+
cacheClear();
|
|
167
|
+
expect(cacheStats().size).toBe(0);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
// ============================ ROUTER ============================
|
|
171
|
+
describe("v1.96 QX-AGNOSTIC · smart router", () => {
|
|
172
|
+
it("routes Bell pair to simulator when no creds set (preferFree=true)", () => {
|
|
173
|
+
const d = route({ circuit: bellPairCircuit(), shots: 1024, env: {} });
|
|
174
|
+
expect(d.provider).toBe("simulator");
|
|
175
|
+
expect(d.estimatedCostUsd).toBe(0);
|
|
176
|
+
});
|
|
177
|
+
it("considers all 5 providers and reports each", () => {
|
|
178
|
+
const d = route({ circuit: bellPairCircuit(), shots: 1024, env: {} });
|
|
179
|
+
expect(d.considered.length).toBe(5);
|
|
180
|
+
expect(d.considered.find((c) => c.provider === "dwave")?.fits).toBe(false);
|
|
181
|
+
});
|
|
182
|
+
it("respects forceProvider", () => {
|
|
183
|
+
const d = route({ circuit: bellPairCircuit(), shots: 1024, preferences: { forceProvider: "ibm" } });
|
|
184
|
+
expect(d.provider).toBe("ibm");
|
|
185
|
+
expect(d.reason).toContain("forced");
|
|
186
|
+
});
|
|
187
|
+
it("excludes providers in preferences.exclude", () => {
|
|
188
|
+
const d = route({ circuit: bellPairCircuit(), shots: 1024, preferences: { exclude: ["simulator"] } });
|
|
189
|
+
expect(d.provider).not.toBe("simulator");
|
|
190
|
+
});
|
|
191
|
+
it("budget cost cap excludes paid providers", () => {
|
|
192
|
+
const d = route({ circuit: bellPairCircuit(), shots: 100_000, budget: { maxUsd: 0 }, env: {} });
|
|
193
|
+
// Only free providers (simulator/ibm/dwave) should win
|
|
194
|
+
expect(d.estimatedCostUsd).toBe(0);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
// ============================ COST PREDICTOR ============================
|
|
198
|
+
describe("v1.96 QX-AGNOSTIC · cost predictor", () => {
|
|
199
|
+
it("estimates 0 for free providers", () => {
|
|
200
|
+
const e = estimateCost("simulator", 1_000_000);
|
|
201
|
+
expect(e.totalUsd).toBe(0);
|
|
202
|
+
expect(e.withinBudget).toBe(true);
|
|
203
|
+
});
|
|
204
|
+
it("estimates non-zero for Braket", () => {
|
|
205
|
+
const e = estimateCost("braket", 1000);
|
|
206
|
+
expect(e.totalUsd).toBeCloseTo(0.3, 5);
|
|
207
|
+
});
|
|
208
|
+
it("withinBudget=false when over cap", () => {
|
|
209
|
+
const e = estimateCost("braket", 100_000, 1.0);
|
|
210
|
+
expect(e.withinBudget).toBe(false);
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
// ============================ TVD VERIFIER ============================
|
|
214
|
+
describe("v1.96 QX-AGNOSTIC · total variation distance", () => {
|
|
215
|
+
it("returns 0 for identical distributions", () => {
|
|
216
|
+
expect(totalVariationDistance({ "00": 0.5, "11": 0.5 }, { "00": 0.5, "11": 0.5 })).toBeCloseTo(0, 6);
|
|
217
|
+
});
|
|
218
|
+
it("returns 1 for fully disjoint distributions", () => {
|
|
219
|
+
expect(totalVariationDistance({ "00": 1 }, { "11": 1 })).toBeCloseTo(1, 6);
|
|
220
|
+
});
|
|
221
|
+
it("returns 0.1 for 10% drift", () => {
|
|
222
|
+
expect(totalVariationDistance({ "00": 0.6, "11": 0.4 }, { "00": 0.5, "11": 0.5 })).toBeCloseTo(0.1, 6);
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
// ============================ MULTI-PROVIDER RACE ============================
|
|
226
|
+
describe("v1.96 QX-AGNOSTIC · multi-provider race", () => {
|
|
227
|
+
it("returns winner and trajectory", async () => {
|
|
228
|
+
// Simulator vs simulator (the only ready provider in clean env) → both win? Not really — first returns wins, second errors out as cloud fails fast.
|
|
229
|
+
const r = await multiProviderRace({ circuit: bellPairCircuit(), shots: 100, providers: ["simulator", "simulator"], env: {} });
|
|
230
|
+
expect(r.winner).not.toBeNull();
|
|
231
|
+
expect(r.trajectory.length).toBeGreaterThanOrEqual(1);
|
|
232
|
+
});
|
|
233
|
+
it("records errored providers in trajectory", async () => {
|
|
234
|
+
const r = await multiProviderRace({ circuit: bellPairCircuit(), shots: 100, providers: ["simulator", "ibm"], env: {} });
|
|
235
|
+
expect(r.winner).not.toBeNull(); // simulator wins
|
|
236
|
+
expect(r.trajectory.find((t) => t.provider === "ibm")?.outcome).toBe("errored");
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
// ============================ AGNOSTIC MASTER ============================
|
|
240
|
+
describe("v1.96 QX-AGNOSTIC · runQuantumAgnostic master function", () => {
|
|
241
|
+
it("accepts QASM string source and returns a result", async () => {
|
|
242
|
+
const qasm = `OPENQASM 3.0; qubit[2] q; h q[0]; cx q[0], q[1];`;
|
|
243
|
+
const r = await runQuantumAgnostic({ source: qasm, shots: 256, env: {} });
|
|
244
|
+
expect(r.response.result.exactProbabilities["00"]).toBeCloseTo(0.5, 5);
|
|
245
|
+
expect(r.route.provider).toBe("simulator");
|
|
246
|
+
expect(r.cacheHit).toBe(false);
|
|
247
|
+
});
|
|
248
|
+
it("accepts CircuitIR source and returns a result", async () => {
|
|
249
|
+
const r = await runQuantumAgnostic({ source: bellPairCircuit(), shots: 256, env: {} });
|
|
250
|
+
expect(r.response.result.exactProbabilities["00"]).toBeCloseTo(0.5, 5);
|
|
251
|
+
});
|
|
252
|
+
it("hits cache on second identical call", async () => {
|
|
253
|
+
const r1 = await runQuantumAgnostic({ source: bellPairCircuit(), shots: 256, env: {} });
|
|
254
|
+
expect(r1.cacheHit).toBe(false);
|
|
255
|
+
const r2 = await runQuantumAgnostic({ source: bellPairCircuit(), shots: 256, env: {} });
|
|
256
|
+
expect(r2.cacheHit).toBe(true);
|
|
257
|
+
});
|
|
258
|
+
it("bypasses cache when preferences.bypassCache=true", async () => {
|
|
259
|
+
await runQuantumAgnostic({ source: bellPairCircuit(), shots: 256, env: {} });
|
|
260
|
+
const r = await runQuantumAgnostic({ source: bellPairCircuit(), shots: 256, env: {}, preferences: { bypassCache: true } });
|
|
261
|
+
expect(r.cacheHit).toBe(false);
|
|
262
|
+
});
|
|
263
|
+
it("decomposes gates before running on provider with limited native set", async () => {
|
|
264
|
+
const r = await runQuantumAgnostic({
|
|
265
|
+
source: bellPairCircuit(),
|
|
266
|
+
shots: 100,
|
|
267
|
+
preferences: { forceProvider: "simulator" }, // sim accepts h+cnot natively → no decomp
|
|
268
|
+
env: {},
|
|
269
|
+
});
|
|
270
|
+
expect(r.decomposition.input).toBe(2);
|
|
271
|
+
expect(r.decomposition.output).toBe(2); // simulator accepts h + cnot natively
|
|
272
|
+
});
|
|
273
|
+
it("auto-records into Infinity Memory when memory provided", async () => {
|
|
274
|
+
const memory = createInfinityMemory();
|
|
275
|
+
await runQuantumAgnostic({ source: bellPairCircuit(), shots: 100, memory, env: {} });
|
|
276
|
+
expect(memory.recall({ kind: "quantum-measurement" }).length).toBe(1);
|
|
277
|
+
});
|
|
278
|
+
it("formatAgnosticLine produces a one-liner with provider + cost", async () => {
|
|
279
|
+
const r = await runQuantumAgnostic({ source: bellPairCircuit(), shots: 100, env: {} });
|
|
280
|
+
const line = formatAgnosticLine(r);
|
|
281
|
+
expect(line).toContain("QX-AGNOSTIC");
|
|
282
|
+
expect(line).toContain("simulator");
|
|
283
|
+
expect(line).toContain("$0.0000");
|
|
284
|
+
});
|
|
285
|
+
it("budget cap rejects request when cost exceeds maxUsd", async () => {
|
|
286
|
+
await expect(runQuantumAgnostic({
|
|
287
|
+
source: bellPairCircuit(),
|
|
288
|
+
shots: 100_000,
|
|
289
|
+
preferences: { forceProvider: "braket" },
|
|
290
|
+
budget: { maxUsd: 0.01 },
|
|
291
|
+
env: {},
|
|
292
|
+
})).rejects.toThrow(/budget/i);
|
|
293
|
+
});
|
|
294
|
+
it("race=true returns a race trajectory", async () => {
|
|
295
|
+
const r = await runQuantumAgnostic({
|
|
296
|
+
source: bellPairCircuit(),
|
|
297
|
+
shots: 100,
|
|
298
|
+
preferences: { race: 2 },
|
|
299
|
+
env: {},
|
|
300
|
+
});
|
|
301
|
+
expect(r.race).toBeDefined();
|
|
302
|
+
expect(r.race?.trajectory.length).toBeGreaterThanOrEqual(1);
|
|
303
|
+
});
|
|
304
|
+
it("verify=true on simulator (degenerate) skips verification", async () => {
|
|
305
|
+
const r = await runQuantumAgnostic({
|
|
306
|
+
source: bellPairCircuit(),
|
|
307
|
+
shots: 100,
|
|
308
|
+
preferences: { verify: true, forceProvider: "simulator" },
|
|
309
|
+
env: {},
|
|
310
|
+
});
|
|
311
|
+
expect(r.verification).toBeUndefined(); // skipped because winner is simulator itself
|
|
312
|
+
});
|
|
313
|
+
it("end-to-end: parse QASM → route → decompose → cache → record", async () => {
|
|
314
|
+
const memory = createInfinityMemory();
|
|
315
|
+
const qasm = `
|
|
316
|
+
OPENQASM 3.0;
|
|
317
|
+
include "stdgates.inc";
|
|
318
|
+
qubit[3] q;
|
|
319
|
+
h q[0];
|
|
320
|
+
cx q[0], q[1];
|
|
321
|
+
cx q[1], q[2];
|
|
322
|
+
`;
|
|
323
|
+
const r = await runQuantumAgnostic({ source: qasm, shots: 512, memory, env: {} });
|
|
324
|
+
// GHZ-3: should be 50/50 of 000 and 111
|
|
325
|
+
expect(r.response.result.exactProbabilities["000"]).toBeCloseTo(0.5, 5);
|
|
326
|
+
expect(r.response.result.exactProbabilities["111"]).toBeCloseTo(0.5, 5);
|
|
327
|
+
expect(memory.recall({ kind: "quantum-measurement" }).length).toBe(1);
|
|
328
|
+
// Run it AGAIN — should hit cache.
|
|
329
|
+
const r2 = await runQuantumAgnostic({ source: qasm, shots: 512, memory, env: {} });
|
|
330
|
+
expect(r2.cacheHit).toBe(true);
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
//# sourceMappingURL=agnostic.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agnostic.test.js","sourceRoot":"","sources":["../../src/qx_bridge/agnostic.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.96.0 -- QX-BRIDGE · Provider capability matrix + circuit matcher.
|
|
3
|
+
*
|
|
4
|
+
* Each real quantum hardware vendor ships only a small set of NATIVE
|
|
5
|
+
* gates. Everything else must be decomposed before submission. Mneme's
|
|
6
|
+
* agnostic layer needs to know:
|
|
7
|
+
* - What's the gate set per provider?
|
|
8
|
+
* - What's the qubit topology / max?
|
|
9
|
+
* - What's the typical queue + cost?
|
|
10
|
+
*
|
|
11
|
+
* This file is the source of truth. Update when vendor SDKs land in v1.96+.
|
|
12
|
+
*/
|
|
13
|
+
import type { CircuitIR, GateName } from "./simulator.js";
|
|
14
|
+
import type { ProviderName } from "./providers.js";
|
|
15
|
+
export interface ProviderCapabilities {
|
|
16
|
+
name: ProviderName;
|
|
17
|
+
/** Maximum qubits this provider's free/default tier exposes. */
|
|
18
|
+
maxQubits: number;
|
|
19
|
+
/** Gates that run NATIVELY without decomposition. */
|
|
20
|
+
nativeGates: GateName[];
|
|
21
|
+
/** Estimated time before a job starts running (queue), in ms. Best-effort. */
|
|
22
|
+
estimatedQueueMs: number;
|
|
23
|
+
/** Cost per shot in USD. 0 = free tier. */
|
|
24
|
+
costPerShotUsd: number;
|
|
25
|
+
/** Whether the provider supports parametric gates (rx/ry/rz with arbitrary θ). */
|
|
26
|
+
supportsParametric: boolean;
|
|
27
|
+
/** Whether the provider is an annealer (D-Wave) — only QUBO/Ising, not gate model. */
|
|
28
|
+
isAnnealer: boolean;
|
|
29
|
+
/** Notes for AI agents / users. */
|
|
30
|
+
notes?: string;
|
|
31
|
+
}
|
|
32
|
+
/** Authoritative capability table. */
|
|
33
|
+
export declare const PROVIDER_CAPABILITIES: ProviderCapabilities[];
|
|
34
|
+
export declare function capabilitiesOf(name: ProviderName): ProviderCapabilities | null;
|
|
35
|
+
export interface MatchResult {
|
|
36
|
+
fits: boolean;
|
|
37
|
+
reason: string;
|
|
38
|
+
/** Gates in the circuit that aren't native to this provider. */
|
|
39
|
+
gatesToDecompose: GateName[];
|
|
40
|
+
/** Queue + cost estimates if we ran this circuit on this provider. */
|
|
41
|
+
estimatedQueueMs: number;
|
|
42
|
+
estimatedCostUsd: number;
|
|
43
|
+
/** Critical issues that block running entirely (hard fail). */
|
|
44
|
+
blockingIssues: string[];
|
|
45
|
+
}
|
|
46
|
+
/** Check whether a circuit can run on a given provider. Returns a structured
|
|
47
|
+
* match result with issues + decomposition needs. Pure function. */
|
|
48
|
+
export declare function matchCircuitToProvider(circuit: CircuitIR, provider: ProviderName, shots: number): MatchResult;
|
|
49
|
+
/** One-line capability summary for AI agents / pulse output. */
|
|
50
|
+
export declare function summarizeCapabilities(): string;
|
|
51
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/qx_bridge/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,YAAY,CAAC;IACnB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,WAAW,EAAE,QAAQ,EAAE,CAAC;IACxB,8EAA8E;IAC9E,gBAAgB,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,kBAAkB,EAAE,OAAO,CAAC;IAC5B,sFAAsF;IACtF,UAAU,EAAE,OAAO,CAAC;IACpB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,sCAAsC;AACtC,eAAO,MAAM,qBAAqB,EAAE,oBAAoB,EAwDvD,CAAC;AAEF,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,oBAAoB,GAAG,IAAI,CAE9E;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IAC7B,sEAAsE;IACtE,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;qEACqE;AACrE,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,MAAM,GACZ,WAAW,CAoCb;AAED,gEAAgE;AAChE,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.96.0 -- QX-BRIDGE · Provider capability matrix + circuit matcher.
|
|
3
|
+
*
|
|
4
|
+
* Each real quantum hardware vendor ships only a small set of NATIVE
|
|
5
|
+
* gates. Everything else must be decomposed before submission. Mneme's
|
|
6
|
+
* agnostic layer needs to know:
|
|
7
|
+
* - What's the gate set per provider?
|
|
8
|
+
* - What's the qubit topology / max?
|
|
9
|
+
* - What's the typical queue + cost?
|
|
10
|
+
*
|
|
11
|
+
* This file is the source of truth. Update when vendor SDKs land in v1.96+.
|
|
12
|
+
*/
|
|
13
|
+
/** Authoritative capability table. */
|
|
14
|
+
export const PROVIDER_CAPABILITIES = [
|
|
15
|
+
{
|
|
16
|
+
name: "simulator",
|
|
17
|
+
maxQubits: 12,
|
|
18
|
+
nativeGates: ["h", "x", "y", "z", "s", "t", "cnot", "cz", "rx", "ry", "rz"],
|
|
19
|
+
estimatedQueueMs: 0,
|
|
20
|
+
costPerShotUsd: 0,
|
|
21
|
+
supportsParametric: true,
|
|
22
|
+
isAnnealer: false,
|
|
23
|
+
notes: "Pure-TS state-vector simulator. No queue, no auth, deterministic with seed.",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: "ibm",
|
|
27
|
+
maxQubits: 127,
|
|
28
|
+
// Realistic IBM Heron / Eagle native set: id, rz, sx, x, cx (2024+).
|
|
29
|
+
// Mneme decomposes h/y/z/s/t/cz/swap into these before submitting.
|
|
30
|
+
nativeGates: ["x", "rz", "cnot"],
|
|
31
|
+
estimatedQueueMs: 600_000, // 10 min typical free-tier queue
|
|
32
|
+
costPerShotUsd: 0,
|
|
33
|
+
supportsParametric: true,
|
|
34
|
+
isAnnealer: false,
|
|
35
|
+
notes: "Free 127-qubit (Eagle) backends. Free-tier queue can be 10-60 min.",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "braket",
|
|
39
|
+
maxQubits: 256,
|
|
40
|
+
// IonQ Forte gateset + Rigetti Aspen + OQC Lucy — superset is wide
|
|
41
|
+
nativeGates: ["x", "y", "z", "h", "s", "t", "cnot", "rx", "ry", "rz"],
|
|
42
|
+
estimatedQueueMs: 30_000,
|
|
43
|
+
costPerShotUsd: 0.0003, // IonQ Aria typical pricing
|
|
44
|
+
supportsParametric: true,
|
|
45
|
+
isAnnealer: false,
|
|
46
|
+
notes: "Pay-per-shot. Pricing varies by backend (IonQ ~$0.0003/shot, Rigetti ~$0.00035/shot).",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "azure",
|
|
50
|
+
maxQubits: 100,
|
|
51
|
+
nativeGates: ["x", "y", "z", "h", "cnot", "rx", "ry", "rz"],
|
|
52
|
+
estimatedQueueMs: 60_000,
|
|
53
|
+
costPerShotUsd: 0.0002,
|
|
54
|
+
supportsParametric: true,
|
|
55
|
+
isAnnealer: false,
|
|
56
|
+
notes: "Multi-vendor (IonQ, Quantinuum, Pasqal, Rigetti). Paid-tier required.",
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: "dwave",
|
|
60
|
+
maxQubits: 5760,
|
|
61
|
+
// D-Wave is an annealer — no gate model. Mneme will refuse to route
|
|
62
|
+
// a gate-model circuit here.
|
|
63
|
+
nativeGates: [],
|
|
64
|
+
estimatedQueueMs: 1_000,
|
|
65
|
+
costPerShotUsd: 0,
|
|
66
|
+
supportsParametric: false,
|
|
67
|
+
isAnnealer: true,
|
|
68
|
+
notes: "Annealer (Advantage 5760-qubit). Free tier 1 min/month QPU. Accepts QUBO/Ising only — gate-model circuits will be REJECTED until v1.97 ships QUBO translator.",
|
|
69
|
+
},
|
|
70
|
+
];
|
|
71
|
+
export function capabilitiesOf(name) {
|
|
72
|
+
return PROVIDER_CAPABILITIES.find((c) => c.name === name) ?? null;
|
|
73
|
+
}
|
|
74
|
+
/** Check whether a circuit can run on a given provider. Returns a structured
|
|
75
|
+
* match result with issues + decomposition needs. Pure function. */
|
|
76
|
+
export function matchCircuitToProvider(circuit, provider, shots) {
|
|
77
|
+
const caps = capabilitiesOf(provider);
|
|
78
|
+
if (!caps) {
|
|
79
|
+
return { fits: false, reason: `unknown provider ${provider}`, gatesToDecompose: [], estimatedQueueMs: 0, estimatedCostUsd: 0, blockingIssues: [`unknown provider ${provider}`] };
|
|
80
|
+
}
|
|
81
|
+
const blocking = [];
|
|
82
|
+
if (caps.isAnnealer) {
|
|
83
|
+
blocking.push(`provider '${provider}' is an annealer (no gate model support). Use QUBO translator (v1.97).`);
|
|
84
|
+
}
|
|
85
|
+
if (circuit.numQubits > caps.maxQubits) {
|
|
86
|
+
blocking.push(`circuit needs ${circuit.numQubits} qubits but ${provider} max is ${caps.maxQubits}`);
|
|
87
|
+
}
|
|
88
|
+
const native = new Set(caps.nativeGates);
|
|
89
|
+
const usedGates = new Set();
|
|
90
|
+
for (const g of circuit.gates)
|
|
91
|
+
usedGates.add(g.type);
|
|
92
|
+
const toDecompose = [];
|
|
93
|
+
for (const g of usedGates) {
|
|
94
|
+
if (!native.has(g))
|
|
95
|
+
toDecompose.push(g);
|
|
96
|
+
}
|
|
97
|
+
const estCost = caps.costPerShotUsd * shots;
|
|
98
|
+
const estQueue = caps.estimatedQueueMs;
|
|
99
|
+
return {
|
|
100
|
+
fits: blocking.length === 0,
|
|
101
|
+
reason: blocking.length > 0
|
|
102
|
+
? blocking.join(" · ")
|
|
103
|
+
: toDecompose.length > 0
|
|
104
|
+
? `fits after decomposing ${toDecompose.length} gate type(s): ${toDecompose.join(", ")}`
|
|
105
|
+
: `fits natively (no decomposition needed)`,
|
|
106
|
+
gatesToDecompose: toDecompose,
|
|
107
|
+
estimatedQueueMs: estQueue,
|
|
108
|
+
estimatedCostUsd: estCost,
|
|
109
|
+
blockingIssues: blocking,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/** One-line capability summary for AI agents / pulse output. */
|
|
113
|
+
export function summarizeCapabilities() {
|
|
114
|
+
return PROVIDER_CAPABILITIES.map((c) => `${c.name}(${c.maxQubits}q · $${c.costPerShotUsd}/shot · ${Math.round(c.estimatedQueueMs / 1000)}s queue${c.isAnnealer ? " · annealer" : ""})`).join(" · ");
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/qx_bridge/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAuBH,sCAAsC;AACtC,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D;QACE,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3E,gBAAgB,EAAE,CAAC;QACnB,cAAc,EAAE,CAAC;QACjB,kBAAkB,EAAE,IAAI;QACxB,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,6EAA6E;KACrF;IACD;QACE,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,GAAG;QACd,qEAAqE;QACrE,mEAAmE;QACnE,WAAW,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC;QAChC,gBAAgB,EAAE,OAAO,EAAE,iCAAiC;QAC5D,cAAc,EAAE,CAAC;QACjB,kBAAkB,EAAE,IAAI;QACxB,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,oEAAoE;KAC5E;IACD;QACE,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,GAAG;QACd,mEAAmE;QACnE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACrE,gBAAgB,EAAE,MAAM;QACxB,cAAc,EAAE,MAAM,EAAE,4BAA4B;QACpD,kBAAkB,EAAE,IAAI;QACxB,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,uFAAuF;KAC/F;IACD;QACE,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,GAAG;QACd,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3D,gBAAgB,EAAE,MAAM;QACxB,cAAc,EAAE,MAAM;QACtB,kBAAkB,EAAE,IAAI;QACxB,UAAU,EAAE,KAAK;QACjB,KAAK,EAAE,uEAAuE;KAC/E;IACD;QACE,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,IAAI;QACf,oEAAoE;QACpE,6BAA6B;QAC7B,WAAW,EAAE,EAAE;QACf,gBAAgB,EAAE,KAAK;QACvB,cAAc,EAAE,CAAC;QACjB,kBAAkB,EAAE,KAAK;QACzB,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,+JAA+J;KACvK;CACF,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,IAAkB;IAC/C,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;AACpE,CAAC;AAcD;qEACqE;AACrE,MAAM,UAAU,sBAAsB,CACpC,OAAkB,EAClB,QAAsB,EACtB,KAAa;IAEb,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,QAAQ,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,oBAAoB,QAAQ,EAAE,CAAC,EAAE,CAAC;IACnL,CAAC;IACD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,aAAa,QAAQ,wEAAwE,CAAC,CAAC;IAC/G,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,SAAS,eAAe,QAAQ,WAAW,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACtG,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAY,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK;QAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,WAAW,GAAe,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;IAEvC,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;QAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC;YACzB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YACtB,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;gBACtB,CAAC,CAAC,0BAA0B,WAAW,CAAC,MAAM,kBAAkB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACxF,CAAC,CAAC,yCAAyC;QAC/C,gBAAgB,EAAE,WAAW;QAC7B,gBAAgB,EAAE,QAAQ;QAC1B,gBAAgB,EAAE,OAAO;QACzB,cAAc,EAAE,QAAQ;KACzB,CAAC;AACJ,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,qBAAqB;IACnC,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,cAAc,WAAW,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtM,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.96.0 -- QX-BRIDGE · Gate decomposer.
|
|
3
|
+
*
|
|
4
|
+
* Each provider has its own NATIVE gate set. Mneme accepts a generic
|
|
5
|
+
* CircuitIR with a wide gate vocabulary and decomposes any non-native
|
|
6
|
+
* gate into native ones BEFORE submission.
|
|
7
|
+
*
|
|
8
|
+
* Example: IBM's native set is roughly {x, rz, cnot} (after sx is
|
|
9
|
+
* lowered to rz·rx). A user circuit with H and S and T gates gets
|
|
10
|
+
* automatically rewritten to a sequence of {x, rz, cnot} that produces
|
|
11
|
+
* the SAME unitary (up to a global phase).
|
|
12
|
+
*
|
|
13
|
+
* Decomposition rules used (mathematically equivalent up to global phase):
|
|
14
|
+
* H = RZ(π/2) · RX(π/2) · RZ(π/2) (Z-X-Z Euler form)
|
|
15
|
+
* Y = RZ(π) · X
|
|
16
|
+
* Z = RZ(π)
|
|
17
|
+
* S = RZ(π/2)
|
|
18
|
+
* T = RZ(π/4)
|
|
19
|
+
* CZ = H(target) · CX(ctrl, target) · H(target)
|
|
20
|
+
* SWAP = CX(a,b) · CX(b,a) · CX(a,b)
|
|
21
|
+
* RX(θ) = RZ(-π/2) · RY(θ) · RZ(π/2) (only if RX itself isn't native)
|
|
22
|
+
*
|
|
23
|
+
* Decomposition is recursive: if a sub-rule output also contains a
|
|
24
|
+
* non-native gate, it gets further decomposed until everything is native.
|
|
25
|
+
*
|
|
26
|
+
* Pure-function. Deterministic. No external deps.
|
|
27
|
+
*/
|
|
28
|
+
import type { CircuitIR, GateName } from "./simulator.js";
|
|
29
|
+
export interface DecomposeResult {
|
|
30
|
+
circuit: CircuitIR;
|
|
31
|
+
/** Number of input gates → number of output gates. */
|
|
32
|
+
expansion: {
|
|
33
|
+
input: number;
|
|
34
|
+
output: number;
|
|
35
|
+
ratio: number;
|
|
36
|
+
};
|
|
37
|
+
/** Per-rule application count. */
|
|
38
|
+
rulesApplied: Record<string, number>;
|
|
39
|
+
}
|
|
40
|
+
/** Decompose a circuit until all gates are native (or no further rules
|
|
41
|
+
* apply). Bounded by maxIterations to avoid pathological loops. */
|
|
42
|
+
export declare function decompose(circuit: CircuitIR, nativeGates: readonly GateName[], maxIterations?: number): DecomposeResult;
|
|
43
|
+
//# sourceMappingURL=decomposer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decomposer.d.ts","sourceRoot":"","sources":["../../src/qx_bridge/decomposer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAQ,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEhE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,SAAS,CAAC;IACnB,sDAAsD;IACtD,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AA2DD;oEACoE;AACpE,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,QAAQ,EAAE,EAAE,aAAa,SAAI,GAAG,eAAe,CAkClH"}
|