@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.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- 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 +64 -0
- package/dist/qx_bridge/index.d.ts.map +1 -0
- package/dist/qx_bridge/index.js +69 -0
- package/dist/qx_bridge/index.js.map +1 -0
- package/dist/qx_bridge/providers.d.ts +61 -0
- package/dist/qx_bridge/providers.d.ts.map +1 -0
- package/dist/qx_bridge/providers.js +126 -0
- package/dist/qx_bridge/providers.js.map +1 -0
- 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/qx_bridge.test.d.ts +2 -0
- package/dist/qx_bridge/qx_bridge.test.d.ts.map +1 -0
- package/dist/qx_bridge/qx_bridge.test.js +165 -0
- package/dist/qx_bridge/qx_bridge.test.js.map +1 -0
- package/dist/qx_bridge/simulator.d.ts +95 -0
- package/dist/qx_bridge/simulator.d.ts.map +1 -0
- package/dist/qx_bridge/simulator.js +316 -0
- package/dist/qx_bridge/simulator.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.95.0 -- QX-BRIDGE · Pure-TS state-vector quantum simulator.
|
|
3
|
+
*
|
|
4
|
+
* Real quantum mechanics on the CPU. Works for up to ~12 qubits before
|
|
5
|
+
* heap pressure (2^12 = 4096 complex amplitudes). Verified against
|
|
6
|
+
* analytical expectations for Bell pair (50/50 ⟨00|, ⟨11|), 1-iteration
|
|
7
|
+
* Grover search (success amplitude ≈ 1.0 on 2 qubits), QFT.
|
|
8
|
+
*
|
|
9
|
+
* This is NOT a real quantum computer — it's a deterministic classical
|
|
10
|
+
* simulator that produces the same probability distribution a real
|
|
11
|
+
* device would. Real-device adapters (IBM, AWS Braket, Azure, D-Wave)
|
|
12
|
+
* live in `providers.ts` and require API tokens.
|
|
13
|
+
*/
|
|
14
|
+
/** Complex number {re, im}. */
|
|
15
|
+
export interface Complex {
|
|
16
|
+
re: number;
|
|
17
|
+
im: number;
|
|
18
|
+
}
|
|
19
|
+
export interface MeasurementResult {
|
|
20
|
+
/** Map bitstring → shot count. */
|
|
21
|
+
counts: Record<string, number>;
|
|
22
|
+
/** Map bitstring → probability (counts/shots). */
|
|
23
|
+
probabilities: Record<string, number>;
|
|
24
|
+
/** Total shots that materialized (after stochastic sampling). */
|
|
25
|
+
shots: number;
|
|
26
|
+
/** Exact probabilities derived from amplitudes (independent of shots). */
|
|
27
|
+
exactProbabilities: Record<string, number>;
|
|
28
|
+
}
|
|
29
|
+
/** A state vector over N qubits. Index i corresponds to the basis state
|
|
30
|
+
* whose binary representation (LSB = qubit 0) is i. */
|
|
31
|
+
export declare class QuantumState {
|
|
32
|
+
readonly numQubits: number;
|
|
33
|
+
readonly dim: number;
|
|
34
|
+
amplitudes: Complex[];
|
|
35
|
+
constructor(numQubits: number);
|
|
36
|
+
/** Apply a single-qubit gate (2×2 matrix in row-major) to qubit q. */
|
|
37
|
+
applySingleQubit(q: number, m: [Complex, Complex, Complex, Complex]): void;
|
|
38
|
+
/** Hadamard: |0⟩ → (|0⟩+|1⟩)/√2 ; |1⟩ → (|0⟩-|1⟩)/√2. */
|
|
39
|
+
h(q: number): void;
|
|
40
|
+
/** Pauli-X (NOT): |0⟩↔|1⟩. */
|
|
41
|
+
x(q: number): void;
|
|
42
|
+
/** Pauli-Y. */
|
|
43
|
+
y(q: number): void;
|
|
44
|
+
/** Pauli-Z: phase flip on |1⟩. */
|
|
45
|
+
z(q: number): void;
|
|
46
|
+
/** Phase gate S = diag(1, i). */
|
|
47
|
+
s(q: number): void;
|
|
48
|
+
/** T gate = diag(1, e^(iπ/4)). */
|
|
49
|
+
t(q: number): void;
|
|
50
|
+
/** RX(θ): rotation around X by angle θ. */
|
|
51
|
+
rx(q: number, theta: number): void;
|
|
52
|
+
/** RY(θ). */
|
|
53
|
+
ry(q: number, theta: number): void;
|
|
54
|
+
/** RZ(θ) = diag(e^(-iθ/2), e^(iθ/2)). */
|
|
55
|
+
rz(q: number, theta: number): void;
|
|
56
|
+
/** Controlled-NOT: if ctrl qubit is |1⟩, flip target. */
|
|
57
|
+
cnot(ctrl: number, target: number): void;
|
|
58
|
+
/** SWAP two qubits — exchange their states. */
|
|
59
|
+
swap(a: number, b: number): void;
|
|
60
|
+
/** Controlled-Z: phase flip when both qubits are |1⟩. */
|
|
61
|
+
cz(ctrl: number, target: number): void;
|
|
62
|
+
/** Compute exact probability for each basis state (no sampling noise). */
|
|
63
|
+
exactProbabilities(): Record<string, number>;
|
|
64
|
+
/** Bitstring is MSB...LSB where LSB is qubit 0 (Qiskit convention). */
|
|
65
|
+
indexToBitstring(i: number): string;
|
|
66
|
+
/** Measure all qubits + return shot counts. Uses a seeded RNG for
|
|
67
|
+
* reproducibility when seed is provided. */
|
|
68
|
+
measure(shots: number, seed?: number): MeasurementResult;
|
|
69
|
+
}
|
|
70
|
+
export type GateName = "h" | "x" | "y" | "z" | "s" | "t" | "cnot" | "cz" | "swap" | "rx" | "ry" | "rz";
|
|
71
|
+
export interface Gate {
|
|
72
|
+
type: GateName;
|
|
73
|
+
/** Qubit indices. cnot/cz: [ctrl, target]. rotations: [target]. */
|
|
74
|
+
targets: number[];
|
|
75
|
+
/** Rotation angle (radians) for rx/ry/rz. */
|
|
76
|
+
theta?: number;
|
|
77
|
+
}
|
|
78
|
+
export interface CircuitIR {
|
|
79
|
+
numQubits: number;
|
|
80
|
+
gates: Gate[];
|
|
81
|
+
/** If true, measure all qubits after gate sequence. Default true. */
|
|
82
|
+
measureAll?: boolean;
|
|
83
|
+
/** Optional human label. */
|
|
84
|
+
label?: string;
|
|
85
|
+
}
|
|
86
|
+
/** Run a circuit on the pure-TS simulator. */
|
|
87
|
+
export declare function runOnSimulator(circuit: CircuitIR, shots: number, seed?: number): MeasurementResult;
|
|
88
|
+
/** Bell pair: entangle q0 + q1 → 50/50 of |00⟩ and |11⟩. */
|
|
89
|
+
export declare function bellPairCircuit(): CircuitIR;
|
|
90
|
+
/** GHZ state on N qubits: equal superposition of |00...0⟩ and |11...1⟩. */
|
|
91
|
+
export declare function ghzCircuit(numQubits: number): CircuitIR;
|
|
92
|
+
/** Grover search for a 2-qubit marked state — 1 iteration brings target
|
|
93
|
+
* amplitude to ~1.0. Mark = which 2-bit pattern to find ("00".."11"). */
|
|
94
|
+
export declare function groverCircuit2q(target?: "00" | "01" | "10" | "11"): CircuitIR;
|
|
95
|
+
//# sourceMappingURL=simulator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulator.d.ts","sourceRoot":"","sources":["../../src/qx_bridge/simulator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v1.95.0 -- QX-BRIDGE · Pure-TS state-vector quantum simulator.
|
|
3
|
+
*
|
|
4
|
+
* Real quantum mechanics on the CPU. Works for up to ~12 qubits before
|
|
5
|
+
* heap pressure (2^12 = 4096 complex amplitudes). Verified against
|
|
6
|
+
* analytical expectations for Bell pair (50/50 ⟨00|, ⟨11|), 1-iteration
|
|
7
|
+
* Grover search (success amplitude ≈ 1.0 on 2 qubits), QFT.
|
|
8
|
+
*
|
|
9
|
+
* This is NOT a real quantum computer — it's a deterministic classical
|
|
10
|
+
* simulator that produces the same probability distribution a real
|
|
11
|
+
* device would. Real-device adapters (IBM, AWS Braket, Azure, D-Wave)
|
|
12
|
+
* live in `providers.ts` and require API tokens.
|
|
13
|
+
*/
|
|
14
|
+
const C0 = { re: 0, im: 0 };
|
|
15
|
+
const C1 = { re: 1, im: 0 };
|
|
16
|
+
function cAdd(a, b) { return { re: a.re + b.re, im: a.im + b.im }; }
|
|
17
|
+
function cMul(a, b) {
|
|
18
|
+
return { re: a.re * b.re - a.im * b.im, im: a.re * b.im + a.im * b.re };
|
|
19
|
+
}
|
|
20
|
+
function cNorm2(a) { return a.re * a.re + a.im * a.im; }
|
|
21
|
+
const SQRT2_INV = 1 / Math.sqrt(2);
|
|
22
|
+
/** A state vector over N qubits. Index i corresponds to the basis state
|
|
23
|
+
* whose binary representation (LSB = qubit 0) is i. */
|
|
24
|
+
export class QuantumState {
|
|
25
|
+
numQubits;
|
|
26
|
+
dim;
|
|
27
|
+
amplitudes;
|
|
28
|
+
constructor(numQubits) {
|
|
29
|
+
if (numQubits < 1 || numQubits > 12) {
|
|
30
|
+
throw new Error(`numQubits must be 1..12 for in-process simulator (got ${numQubits})`);
|
|
31
|
+
}
|
|
32
|
+
this.numQubits = numQubits;
|
|
33
|
+
this.dim = 1 << numQubits;
|
|
34
|
+
this.amplitudes = new Array(this.dim).fill(C0);
|
|
35
|
+
this.amplitudes[0] = C1; // |00...0⟩
|
|
36
|
+
}
|
|
37
|
+
/** Apply a single-qubit gate (2×2 matrix in row-major) to qubit q. */
|
|
38
|
+
applySingleQubit(q, m) {
|
|
39
|
+
const [m00, m01, m10, m11] = m;
|
|
40
|
+
const bit = 1 << q;
|
|
41
|
+
const newAmps = new Array(this.dim).fill(C0);
|
|
42
|
+
for (let i = 0; i < this.dim; i++) {
|
|
43
|
+
const a = this.amplitudes[i];
|
|
44
|
+
if (cNorm2(a) === 0)
|
|
45
|
+
continue;
|
|
46
|
+
const zero = (i & bit) === 0;
|
|
47
|
+
const partner = i ^ bit;
|
|
48
|
+
if (zero) {
|
|
49
|
+
// a → m00 * a (stays at i) + m10 * a (goes to partner)
|
|
50
|
+
newAmps[i] = cAdd(newAmps[i], cMul(m00, a));
|
|
51
|
+
newAmps[partner] = cAdd(newAmps[partner], cMul(m10, a));
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
newAmps[partner] = cAdd(newAmps[partner], cMul(m01, a));
|
|
55
|
+
newAmps[i] = cAdd(newAmps[i], cMul(m11, a));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
this.amplitudes = newAmps;
|
|
59
|
+
}
|
|
60
|
+
/** Hadamard: |0⟩ → (|0⟩+|1⟩)/√2 ; |1⟩ → (|0⟩-|1⟩)/√2. */
|
|
61
|
+
h(q) {
|
|
62
|
+
const sqrt2inv = { re: SQRT2_INV, im: 0 };
|
|
63
|
+
const minusSqrt2inv = { re: -SQRT2_INV, im: 0 };
|
|
64
|
+
this.applySingleQubit(q, [sqrt2inv, sqrt2inv, sqrt2inv, minusSqrt2inv]);
|
|
65
|
+
}
|
|
66
|
+
/** Pauli-X (NOT): |0⟩↔|1⟩. */
|
|
67
|
+
x(q) {
|
|
68
|
+
this.applySingleQubit(q, [C0, C1, C1, C0]);
|
|
69
|
+
}
|
|
70
|
+
/** Pauli-Y. */
|
|
71
|
+
y(q) {
|
|
72
|
+
const iC = { re: 0, im: 1 };
|
|
73
|
+
const negI = { re: 0, im: -1 };
|
|
74
|
+
this.applySingleQubit(q, [C0, negI, iC, C0]);
|
|
75
|
+
}
|
|
76
|
+
/** Pauli-Z: phase flip on |1⟩. */
|
|
77
|
+
z(q) {
|
|
78
|
+
const negOne = { re: -1, im: 0 };
|
|
79
|
+
this.applySingleQubit(q, [C1, C0, C0, negOne]);
|
|
80
|
+
}
|
|
81
|
+
/** Phase gate S = diag(1, i). */
|
|
82
|
+
s(q) {
|
|
83
|
+
const iC = { re: 0, im: 1 };
|
|
84
|
+
this.applySingleQubit(q, [C1, C0, C0, iC]);
|
|
85
|
+
}
|
|
86
|
+
/** T gate = diag(1, e^(iπ/4)). */
|
|
87
|
+
t(q) {
|
|
88
|
+
const t = { re: Math.cos(Math.PI / 4), im: Math.sin(Math.PI / 4) };
|
|
89
|
+
this.applySingleQubit(q, [C1, C0, C0, t]);
|
|
90
|
+
}
|
|
91
|
+
/** RX(θ): rotation around X by angle θ. */
|
|
92
|
+
rx(q, theta) {
|
|
93
|
+
const c = { re: Math.cos(theta / 2), im: 0 };
|
|
94
|
+
const negIsin = { re: 0, im: -Math.sin(theta / 2) };
|
|
95
|
+
this.applySingleQubit(q, [c, negIsin, negIsin, c]);
|
|
96
|
+
}
|
|
97
|
+
/** RY(θ). */
|
|
98
|
+
ry(q, theta) {
|
|
99
|
+
const c = { re: Math.cos(theta / 2), im: 0 };
|
|
100
|
+
const sPlus = { re: Math.sin(theta / 2), im: 0 };
|
|
101
|
+
const sNeg = { re: -Math.sin(theta / 2), im: 0 };
|
|
102
|
+
this.applySingleQubit(q, [c, sNeg, sPlus, c]);
|
|
103
|
+
}
|
|
104
|
+
/** RZ(θ) = diag(e^(-iθ/2), e^(iθ/2)). */
|
|
105
|
+
rz(q, theta) {
|
|
106
|
+
const e_neg = { re: Math.cos(-theta / 2), im: Math.sin(-theta / 2) };
|
|
107
|
+
const e_pos = { re: Math.cos(theta / 2), im: Math.sin(theta / 2) };
|
|
108
|
+
this.applySingleQubit(q, [e_neg, C0, C0, e_pos]);
|
|
109
|
+
}
|
|
110
|
+
/** Controlled-NOT: if ctrl qubit is |1⟩, flip target. */
|
|
111
|
+
cnot(ctrl, target) {
|
|
112
|
+
if (ctrl === target)
|
|
113
|
+
throw new Error("ctrl and target must differ");
|
|
114
|
+
const cBit = 1 << ctrl;
|
|
115
|
+
const tBit = 1 << target;
|
|
116
|
+
const newAmps = new Array(this.dim).fill(C0);
|
|
117
|
+
for (let i = 0; i < this.dim; i++) {
|
|
118
|
+
if ((i & cBit) !== 0) {
|
|
119
|
+
// ctrl is 1 → flip target
|
|
120
|
+
newAmps[i ^ tBit] = this.amplitudes[i];
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
newAmps[i] = this.amplitudes[i];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
this.amplitudes = newAmps;
|
|
127
|
+
}
|
|
128
|
+
/** SWAP two qubits — exchange their states. */
|
|
129
|
+
swap(a, b) {
|
|
130
|
+
if (a === b)
|
|
131
|
+
return;
|
|
132
|
+
this.cnot(a, b);
|
|
133
|
+
this.cnot(b, a);
|
|
134
|
+
this.cnot(a, b);
|
|
135
|
+
}
|
|
136
|
+
/** Controlled-Z: phase flip when both qubits are |1⟩. */
|
|
137
|
+
cz(ctrl, target) {
|
|
138
|
+
if (ctrl === target)
|
|
139
|
+
throw new Error("ctrl and target must differ");
|
|
140
|
+
const mask = (1 << ctrl) | (1 << target);
|
|
141
|
+
const newAmps = this.amplitudes.slice();
|
|
142
|
+
for (let i = 0; i < this.dim; i++) {
|
|
143
|
+
if ((i & mask) === mask) {
|
|
144
|
+
const a = newAmps[i];
|
|
145
|
+
newAmps[i] = { re: -a.re, im: -a.im };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
this.amplitudes = newAmps;
|
|
149
|
+
}
|
|
150
|
+
/** Compute exact probability for each basis state (no sampling noise). */
|
|
151
|
+
exactProbabilities() {
|
|
152
|
+
const out = {};
|
|
153
|
+
for (let i = 0; i < this.dim; i++) {
|
|
154
|
+
const p = cNorm2(this.amplitudes[i]);
|
|
155
|
+
if (p > 1e-12) {
|
|
156
|
+
out[this.indexToBitstring(i)] = p;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return out;
|
|
160
|
+
}
|
|
161
|
+
/** Bitstring is MSB...LSB where LSB is qubit 0 (Qiskit convention). */
|
|
162
|
+
indexToBitstring(i) {
|
|
163
|
+
let s = "";
|
|
164
|
+
for (let q = this.numQubits - 1; q >= 0; q--)
|
|
165
|
+
s += (i >> q) & 1 ? "1" : "0";
|
|
166
|
+
return s;
|
|
167
|
+
}
|
|
168
|
+
/** Measure all qubits + return shot counts. Uses a seeded RNG for
|
|
169
|
+
* reproducibility when seed is provided. */
|
|
170
|
+
measure(shots, seed) {
|
|
171
|
+
const exact = this.exactProbabilities();
|
|
172
|
+
const labels = Object.keys(exact);
|
|
173
|
+
const cumulative = [];
|
|
174
|
+
let acc = 0;
|
|
175
|
+
for (const l of labels) {
|
|
176
|
+
acc += exact[l];
|
|
177
|
+
cumulative.push(acc);
|
|
178
|
+
}
|
|
179
|
+
// Normalize in case of numerical drift.
|
|
180
|
+
const lastAcc = cumulative[cumulative.length - 1] ?? 1;
|
|
181
|
+
for (let i = 0; i < cumulative.length; i++)
|
|
182
|
+
cumulative[i] = cumulative[i] / lastAcc;
|
|
183
|
+
const rng = seed !== undefined ? mulberry32(seed) : Math.random;
|
|
184
|
+
const counts = {};
|
|
185
|
+
for (let s = 0; s < shots; s++) {
|
|
186
|
+
const r = rng();
|
|
187
|
+
// binary search cumulative
|
|
188
|
+
let lo = 0, hi = cumulative.length - 1;
|
|
189
|
+
while (lo < hi) {
|
|
190
|
+
const mid = (lo + hi) >> 1;
|
|
191
|
+
if (r < cumulative[mid])
|
|
192
|
+
hi = mid;
|
|
193
|
+
else
|
|
194
|
+
lo = mid + 1;
|
|
195
|
+
}
|
|
196
|
+
const label = labels[lo];
|
|
197
|
+
counts[label] = (counts[label] ?? 0) + 1;
|
|
198
|
+
}
|
|
199
|
+
const probabilities = {};
|
|
200
|
+
for (const l of Object.keys(counts))
|
|
201
|
+
probabilities[l] = counts[l] / shots;
|
|
202
|
+
return { counts, probabilities, shots, exactProbabilities: exact };
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/** Deterministic 32-bit RNG for reproducible test sampling. */
|
|
206
|
+
function mulberry32(seed) {
|
|
207
|
+
let a = seed | 0;
|
|
208
|
+
return function () {
|
|
209
|
+
a = (a + 0x6D2B79F5) | 0;
|
|
210
|
+
let t = a;
|
|
211
|
+
t = Math.imul(t ^ (t >>> 15), t | 1);
|
|
212
|
+
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
|
|
213
|
+
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/** Run a circuit on the pure-TS simulator. */
|
|
217
|
+
export function runOnSimulator(circuit, shots, seed) {
|
|
218
|
+
const state = new QuantumState(circuit.numQubits);
|
|
219
|
+
for (const g of circuit.gates) {
|
|
220
|
+
switch (g.type) {
|
|
221
|
+
case "h":
|
|
222
|
+
state.h(g.targets[0]);
|
|
223
|
+
break;
|
|
224
|
+
case "x":
|
|
225
|
+
state.x(g.targets[0]);
|
|
226
|
+
break;
|
|
227
|
+
case "y":
|
|
228
|
+
state.y(g.targets[0]);
|
|
229
|
+
break;
|
|
230
|
+
case "z":
|
|
231
|
+
state.z(g.targets[0]);
|
|
232
|
+
break;
|
|
233
|
+
case "s":
|
|
234
|
+
state.s(g.targets[0]);
|
|
235
|
+
break;
|
|
236
|
+
case "t":
|
|
237
|
+
state.t(g.targets[0]);
|
|
238
|
+
break;
|
|
239
|
+
case "cnot":
|
|
240
|
+
state.cnot(g.targets[0], g.targets[1]);
|
|
241
|
+
break;
|
|
242
|
+
case "cz":
|
|
243
|
+
state.cz(g.targets[0], g.targets[1]);
|
|
244
|
+
break;
|
|
245
|
+
case "swap":
|
|
246
|
+
state.swap(g.targets[0], g.targets[1]);
|
|
247
|
+
break;
|
|
248
|
+
case "rx":
|
|
249
|
+
state.rx(g.targets[0], g.theta ?? 0);
|
|
250
|
+
break;
|
|
251
|
+
case "ry":
|
|
252
|
+
state.ry(g.targets[0], g.theta ?? 0);
|
|
253
|
+
break;
|
|
254
|
+
case "rz":
|
|
255
|
+
state.rz(g.targets[0], g.theta ?? 0);
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
if (circuit.measureAll === false) {
|
|
260
|
+
// Return exact probs only, no sampling.
|
|
261
|
+
return { counts: {}, probabilities: {}, shots: 0, exactProbabilities: state.exactProbabilities() };
|
|
262
|
+
}
|
|
263
|
+
return state.measure(shots, seed);
|
|
264
|
+
}
|
|
265
|
+
// ============================================================
|
|
266
|
+
// Famous circuit constructors — easy AI agent on-ramp
|
|
267
|
+
// ============================================================
|
|
268
|
+
/** Bell pair: entangle q0 + q1 → 50/50 of |00⟩ and |11⟩. */
|
|
269
|
+
export function bellPairCircuit() {
|
|
270
|
+
return {
|
|
271
|
+
numQubits: 2,
|
|
272
|
+
label: "bell-pair",
|
|
273
|
+
gates: [
|
|
274
|
+
{ type: "h", targets: [0] },
|
|
275
|
+
{ type: "cnot", targets: [0, 1] },
|
|
276
|
+
],
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
/** GHZ state on N qubits: equal superposition of |00...0⟩ and |11...1⟩. */
|
|
280
|
+
export function ghzCircuit(numQubits) {
|
|
281
|
+
const gates = [{ type: "h", targets: [0] }];
|
|
282
|
+
for (let q = 0; q + 1 < numQubits; q++)
|
|
283
|
+
gates.push({ type: "cnot", targets: [q, q + 1] });
|
|
284
|
+
return { numQubits, label: `ghz-${numQubits}`, gates };
|
|
285
|
+
}
|
|
286
|
+
/** Grover search for a 2-qubit marked state — 1 iteration brings target
|
|
287
|
+
* amplitude to ~1.0. Mark = which 2-bit pattern to find ("00".."11"). */
|
|
288
|
+
export function groverCircuit2q(target = "11") {
|
|
289
|
+
const gates = [
|
|
290
|
+
// Initialize: equal superposition
|
|
291
|
+
{ type: "h", targets: [0] },
|
|
292
|
+
{ type: "h", targets: [1] },
|
|
293
|
+
];
|
|
294
|
+
// Oracle: flip phase of target. Use X gates to align target with |11⟩ first.
|
|
295
|
+
if (target[0] === "0")
|
|
296
|
+
gates.push({ type: "x", targets: [1] }); // q1 is MSB
|
|
297
|
+
if (target[1] === "0")
|
|
298
|
+
gates.push({ type: "x", targets: [0] });
|
|
299
|
+
gates.push({ type: "cz", targets: [0, 1] });
|
|
300
|
+
if (target[1] === "0")
|
|
301
|
+
gates.push({ type: "x", targets: [0] });
|
|
302
|
+
if (target[0] === "0")
|
|
303
|
+
gates.push({ type: "x", targets: [1] });
|
|
304
|
+
// Diffusion (amplitude amplification about mean)
|
|
305
|
+
gates.push({ type: "h", targets: [0] });
|
|
306
|
+
gates.push({ type: "h", targets: [1] });
|
|
307
|
+
gates.push({ type: "x", targets: [0] });
|
|
308
|
+
gates.push({ type: "x", targets: [1] });
|
|
309
|
+
gates.push({ type: "cz", targets: [0, 1] });
|
|
310
|
+
gates.push({ type: "x", targets: [0] });
|
|
311
|
+
gates.push({ type: "x", targets: [1] });
|
|
312
|
+
gates.push({ type: "h", targets: [0] });
|
|
313
|
+
gates.push({ type: "h", targets: [1] });
|
|
314
|
+
return { numQubits: 2, label: `grover-2q-${target}`, gates };
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=simulator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulator.js","sourceRoot":"","sources":["../../src/qx_bridge/simulator.ts"],"names":[],"mappings":"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"}
|