@quantumplayed/quantum-game-engine 1.0.3 → 1.2.1
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/README.md +251 -240
- package/dist/EntanglementEngine.d.ts +8 -44
- package/dist/EntanglementEngine.js +7 -487
- package/dist/EntanglementEngine.js.map +1 -1
- package/dist/Operations.d.ts +7 -0
- package/dist/Operations.js +86 -0
- package/dist/Operations.js.map +1 -1
- package/dist/QuantumEntity.d.ts +27 -11
- package/dist/QuantumEntity.js +61 -101
- package/dist/QuantumEntity.js.map +1 -1
- package/dist/QuantumSystem.d.ts +71 -0
- package/dist/QuantumSystem.js +533 -0
- package/dist/QuantumSystem.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/CircuitLog.d.ts +0 -54
- package/dist/src/CircuitLog.js +0 -80
- package/dist/src/CircuitLog.js.map +0 -1
- package/dist/src/Complex.d.ts +0 -13
- package/dist/src/Complex.d.ts.map +0 -1
- package/dist/src/Complex.js +0 -49
- package/dist/src/Complex.js.map +0 -1
- package/dist/src/EntanglementEngine.d.ts +0 -48
- package/dist/src/EntanglementEngine.d.ts.map +0 -1
- package/dist/src/EntanglementEngine.js +0 -456
- package/dist/src/EntanglementEngine.js.map +0 -1
- package/dist/src/Operations.d.ts +0 -18
- package/dist/src/Operations.d.ts.map +0 -1
- package/dist/src/Operations.js +0 -107
- package/dist/src/Operations.js.map +0 -1
- package/dist/src/QuantumEntity.d.ts +0 -26
- package/dist/src/QuantumEntity.d.ts.map +0 -1
- package/dist/src/QuantumEntity.js +0 -142
- package/dist/src/QuantumEntity.js.map +0 -1
- package/dist/src/index.d.ts +0 -5
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -6
- package/dist/src/index.js.map +0 -1
- package/dist/tests/DensityMatrix.test.d.ts +0 -1
- package/dist/tests/DensityMatrix.test.d.ts.map +0 -1
- package/dist/tests/DensityMatrix.test.js +0 -41
- package/dist/tests/DensityMatrix.test.js.map +0 -1
- package/dist/tests/EntanglementEngine.test.d.ts +0 -1
- package/dist/tests/EntanglementEngine.test.d.ts.map +0 -1
- package/dist/tests/EntanglementEngine.test.js +0 -72
- package/dist/tests/EntanglementEngine.test.js.map +0 -1
- package/dist/tests/QuantumEntity.test.d.ts +0 -1
- package/dist/tests/QuantumEntity.test.d.ts.map +0 -1
- package/dist/tests/QuantumEntity.test.js +0 -60
- package/dist/tests/QuantumEntity.test.js.map +0 -1
package/dist/Operations.js
CHANGED
|
@@ -152,6 +152,92 @@ export const Operations = {
|
|
|
152
152
|
return cleanAmplitudes(newAmps);
|
|
153
153
|
}
|
|
154
154
|
};
|
|
155
|
+
},
|
|
156
|
+
// High-level helper: split a state into equal superposition of target states (1/√N)
|
|
157
|
+
Split(from, targets) {
|
|
158
|
+
if (!targets || targets.length === 0) {
|
|
159
|
+
throw new Error("Split requires at least one target state.");
|
|
160
|
+
}
|
|
161
|
+
const ampVal = 1 / Math.sqrt(targets.length);
|
|
162
|
+
const transitions = targets.map(to => ({
|
|
163
|
+
from,
|
|
164
|
+
to,
|
|
165
|
+
amplitude: { re: ampVal, im: 0 }
|
|
166
|
+
}));
|
|
167
|
+
return Operations.SparseTransition(transitions);
|
|
168
|
+
},
|
|
169
|
+
// High-level helper: branch a state into weighted probabilities
|
|
170
|
+
Branch(from, branches) {
|
|
171
|
+
if (!branches || branches.length === 0) {
|
|
172
|
+
throw new Error("Branch requires at least one target branch.");
|
|
173
|
+
}
|
|
174
|
+
const totalWeight = branches.reduce((acc, b) => acc + b.weight, 0);
|
|
175
|
+
if (totalWeight <= 0) {
|
|
176
|
+
throw new Error("Total branch weight must be positive.");
|
|
177
|
+
}
|
|
178
|
+
const transitions = branches.map(b => ({
|
|
179
|
+
from,
|
|
180
|
+
to: b.to,
|
|
181
|
+
amplitude: { re: Math.sqrt(b.weight / totalWeight), im: 0 }
|
|
182
|
+
}));
|
|
183
|
+
return Operations.SparseTransition(transitions);
|
|
184
|
+
},
|
|
185
|
+
// High-level helper: apply phase rotation in degrees
|
|
186
|
+
PhaseDegrees(degrees) {
|
|
187
|
+
return {
|
|
188
|
+
name: "PhaseDegrees",
|
|
189
|
+
params: { degrees },
|
|
190
|
+
apply(amplitudes, dimension) {
|
|
191
|
+
const newAmps = {};
|
|
192
|
+
const rad = (degrees * Math.PI) / 180;
|
|
193
|
+
for (const key in amplitudes) {
|
|
194
|
+
const k = parseInt(key);
|
|
195
|
+
const amp = amplitudes[key];
|
|
196
|
+
const angle = rad * k;
|
|
197
|
+
const phase = ComplexMath.phase(angle);
|
|
198
|
+
newAmps[k] = ComplexMath.multiply(amp, phase);
|
|
199
|
+
}
|
|
200
|
+
return cleanAmplitudes(newAmps);
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
},
|
|
204
|
+
// Continuous 2-level unitary rotation (Givens / Ry-style rotation) between two basis states:
|
|
205
|
+
// |stateA⟩ -> cos(theta)|stateA⟩ + sin(theta)|stateB⟩
|
|
206
|
+
// |stateB⟩ -> -sin(theta)|stateA⟩ + cos(theta)|stateB⟩
|
|
207
|
+
// Composable, reversible, and accounts for constructive/destructive interference.
|
|
208
|
+
Rotate(stateA, stateB, theta) {
|
|
209
|
+
if (stateA === stateB) {
|
|
210
|
+
throw new Error("Rotate requires two distinct basis states.");
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
name: "Rotate",
|
|
214
|
+
params: { stateA, stateB, theta },
|
|
215
|
+
apply(amplitudes, _dimension) {
|
|
216
|
+
const cosT = Math.cos(theta);
|
|
217
|
+
const sinT = Math.sin(theta);
|
|
218
|
+
const newAmps = {};
|
|
219
|
+
for (const key in amplitudes) {
|
|
220
|
+
const k = parseInt(key);
|
|
221
|
+
const amp = amplitudes[key];
|
|
222
|
+
if (k === stateA) {
|
|
223
|
+
const termA = ComplexMath.scale(amp, cosT);
|
|
224
|
+
const termB = ComplexMath.scale(amp, sinT);
|
|
225
|
+
newAmps[stateA] = ComplexMath.add(newAmps[stateA] ?? { re: 0, im: 0 }, termA);
|
|
226
|
+
newAmps[stateB] = ComplexMath.add(newAmps[stateB] ?? { re: 0, im: 0 }, termB);
|
|
227
|
+
}
|
|
228
|
+
else if (k === stateB) {
|
|
229
|
+
const termA = ComplexMath.scale(amp, -sinT);
|
|
230
|
+
const termB = ComplexMath.scale(amp, cosT);
|
|
231
|
+
newAmps[stateA] = ComplexMath.add(newAmps[stateA] ?? { re: 0, im: 0 }, termA);
|
|
232
|
+
newAmps[stateB] = ComplexMath.add(newAmps[stateB] ?? { re: 0, im: 0 }, termB);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
newAmps[k] = ComplexMath.add(newAmps[k] ?? { re: 0, im: 0 }, amp);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return cleanAmplitudes(newAmps);
|
|
239
|
+
}
|
|
240
|
+
};
|
|
155
241
|
}
|
|
156
242
|
};
|
|
157
243
|
//# sourceMappingURL=Operations.js.map
|
package/dist/Operations.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Operations.js","sourceRoot":"","sources":["../src/Operations.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Operations.js","sourceRoot":"","sources":["../src/Operations.ts"],"names":[],"mappings":"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"}
|
package/dist/QuantumEntity.d.ts
CHANGED
|
@@ -1,27 +1,43 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import { type
|
|
3
|
-
import { type
|
|
4
|
-
export
|
|
5
|
-
entity: QuantumEntity;
|
|
6
|
-
state: number;
|
|
7
|
-
}
|
|
1
|
+
import { QuantumSystem, type Predicate, type TargetOperation } from "./QuantumSystem.js";
|
|
2
|
+
import { type QuantumOperation } from "./Operations.js";
|
|
3
|
+
import { type Complex } from "./Complex.js";
|
|
4
|
+
export { type Predicate, type TargetOperation, QuantumSystem };
|
|
8
5
|
export declare class QuantumEntity {
|
|
9
6
|
private static _nextId;
|
|
10
7
|
readonly id: number;
|
|
11
8
|
dimension: number;
|
|
12
|
-
|
|
13
|
-
entangledSystem?: JointQuantumSystem;
|
|
9
|
+
system: QuantumSystem;
|
|
14
10
|
constructor(options: {
|
|
15
11
|
dimension: number;
|
|
16
12
|
initialState: number;
|
|
17
13
|
});
|
|
18
14
|
/** Reset the auto-increment counter (useful in tests). */
|
|
19
15
|
static resetIdCounter(): void;
|
|
16
|
+
/**
|
|
17
|
+
* Always returns the current amplitudes for this entity.
|
|
18
|
+
* When entangled, returns the marginal branch amplitudes.
|
|
19
|
+
*/
|
|
20
|
+
get amplitudes(): Record<number, Complex>;
|
|
21
|
+
set amplitudes(amps: Record<number, Complex>);
|
|
22
|
+
/**
|
|
23
|
+
* Set the amplitudes for this entity in-place.
|
|
24
|
+
* If the entity was previously entangled with other entities, it detaches into a standalone 1-entity system.
|
|
25
|
+
* By default, normalizes the amplitude vector so total probability equals 1.0.
|
|
26
|
+
*/
|
|
27
|
+
setAmplitudes(amplitudes: Record<number, Complex>, options?: {
|
|
28
|
+
normalize?: boolean;
|
|
29
|
+
}): void;
|
|
30
|
+
/**
|
|
31
|
+
* Backwards-compatible handle to the entangled system.
|
|
32
|
+
* Returns the joint system if entangled with other entities, otherwise undefined.
|
|
33
|
+
*/
|
|
34
|
+
get entangledSystem(): QuantumSystem | undefined;
|
|
20
35
|
is(state: number): Predicate;
|
|
21
|
-
apply(operation: QuantumOperation, controls?: Predicate[]):
|
|
36
|
+
apply(operation: QuantumOperation, controls?: Predicate[]): QuantumSystem | undefined;
|
|
22
37
|
measure(forcedOutcome?: number): number;
|
|
23
38
|
getProbabilities(): Record<number, number>;
|
|
39
|
+
getProbabilityOf(state: number): number;
|
|
40
|
+
getProbabilityArray(): number[];
|
|
24
41
|
getAmplitudes(): Record<number, Complex>;
|
|
25
42
|
getReducedDensityMatrix(): Record<number, Record<number, Complex>>;
|
|
26
|
-
setState(amplitudes: SparseAmplitudes): void;
|
|
27
43
|
}
|
package/dist/QuantumEntity.js
CHANGED
|
@@ -1,22 +1,48 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { QuantumSystem } from "./QuantumSystem.js";
|
|
2
|
+
import { CircuitLogger } from "./CircuitLog.js";
|
|
3
|
+
export { QuantumSystem };
|
|
4
4
|
export class QuantumEntity {
|
|
5
5
|
static _nextId = 0;
|
|
6
6
|
id;
|
|
7
7
|
dimension;
|
|
8
|
-
|
|
9
|
-
entangledSystem;
|
|
8
|
+
system;
|
|
10
9
|
constructor(options) {
|
|
11
10
|
this.id = QuantumEntity._nextId++;
|
|
12
11
|
this.dimension = options.dimension;
|
|
13
|
-
this.
|
|
14
|
-
this.amplitudes[options.initialState] = { re: 1.0, im: 0.0 };
|
|
12
|
+
this.system = new QuantumSystem([this], options.initialState);
|
|
15
13
|
}
|
|
16
14
|
/** Reset the auto-increment counter (useful in tests). */
|
|
17
15
|
static resetIdCounter() {
|
|
18
16
|
QuantumEntity._nextId = 0;
|
|
19
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Always returns the current amplitudes for this entity.
|
|
20
|
+
* When entangled, returns the marginal branch amplitudes.
|
|
21
|
+
*/
|
|
22
|
+
get amplitudes() {
|
|
23
|
+
return this.getAmplitudes();
|
|
24
|
+
}
|
|
25
|
+
set amplitudes(amps) {
|
|
26
|
+
this.setAmplitudes(amps, { normalize: false });
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Set the amplitudes for this entity in-place.
|
|
30
|
+
* If the entity was previously entangled with other entities, it detaches into a standalone 1-entity system.
|
|
31
|
+
* By default, normalizes the amplitude vector so total probability equals 1.0.
|
|
32
|
+
*/
|
|
33
|
+
setAmplitudes(amplitudes, options) {
|
|
34
|
+
if (this.system.entities.length > 1) {
|
|
35
|
+
this.system = new QuantumSystem([this], 0);
|
|
36
|
+
}
|
|
37
|
+
this.system.setAmplitudes(amplitudes, options);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Backwards-compatible handle to the entangled system.
|
|
41
|
+
* Returns the joint system if entangled with other entities, otherwise undefined.
|
|
42
|
+
*/
|
|
43
|
+
get entangledSystem() {
|
|
44
|
+
return this.system.entities.length > 1 ? this.system : undefined;
|
|
45
|
+
}
|
|
20
46
|
// Return a Predicate for conditional interactions
|
|
21
47
|
is(state) {
|
|
22
48
|
return { entity: this, state };
|
|
@@ -24,119 +50,53 @@ export class QuantumEntity {
|
|
|
24
50
|
// Apply an operation directly to this entity, optionally conditionally
|
|
25
51
|
apply(operation, controls) {
|
|
26
52
|
if (controls && controls.length > 0) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
controls: controls,
|
|
53
|
+
return QuantumSystem.conditionalInteract({
|
|
54
|
+
controls,
|
|
30
55
|
targets: [{ entity: this, operation }]
|
|
31
56
|
});
|
|
32
|
-
return;
|
|
33
57
|
}
|
|
34
|
-
if (this.
|
|
35
|
-
|
|
36
|
-
this.
|
|
58
|
+
if (this.system.entities.length > 1) {
|
|
59
|
+
this.system.applyToSubspace([this], operation);
|
|
60
|
+
return this.system;
|
|
37
61
|
}
|
|
38
62
|
else {
|
|
39
|
-
this.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
63
|
+
this.system.applyLocal(0, operation);
|
|
64
|
+
if (CircuitLogger.isRecording()) {
|
|
65
|
+
CircuitLogger.addGate(operation.name, [this.id], [this.dimension], operation.params);
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
44
68
|
}
|
|
45
69
|
}
|
|
46
70
|
// Measure the entity, collapsing its state.
|
|
47
71
|
// If forcedOutcome is provided (0..dimension-1), collapse directly to that state.
|
|
48
72
|
measure(forcedOutcome) {
|
|
49
|
-
|
|
50
|
-
// measureTarget handles its own logging
|
|
51
|
-
return this.entangledSystem.measureTarget(this, forcedOutcome);
|
|
52
|
-
}
|
|
53
|
-
// Forced outcome — collapse directly
|
|
54
|
-
if (forcedOutcome !== undefined) {
|
|
55
|
-
this.amplitudes = { [forcedOutcome]: { re: 1.0, im: 0.0 } };
|
|
56
|
-
if (CircuitLogger.isRecording()) {
|
|
57
|
-
CircuitLogger.addMeasurement(this.id, this.dimension, forcedOutcome);
|
|
58
|
-
}
|
|
59
|
-
return forcedOutcome;
|
|
60
|
-
}
|
|
61
|
-
const rand = Math.random();
|
|
62
|
-
let cumulativeProb = 0;
|
|
63
|
-
for (const key in this.amplitudes) {
|
|
64
|
-
const k = parseInt(key);
|
|
65
|
-
const amp = this.amplitudes[k];
|
|
66
|
-
const prob = amp.re * amp.re + amp.im * amp.im;
|
|
67
|
-
cumulativeProb += prob;
|
|
68
|
-
if (rand <= cumulativeProb) {
|
|
69
|
-
// Collapse!
|
|
70
|
-
this.amplitudes = { [k]: { re: 1.0, im: 0.0 } };
|
|
71
|
-
if (CircuitLogger.isRecording()) {
|
|
72
|
-
CircuitLogger.addMeasurement(this.id, this.dimension, k);
|
|
73
|
-
}
|
|
74
|
-
return k;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// Fallback for floating point error
|
|
78
|
-
const keys = Object.keys(this.amplitudes);
|
|
79
|
-
if (keys.length === 0) {
|
|
80
|
-
throw new Error("Cannot measure an entity with 0 probability mass (Decoherence error)");
|
|
81
|
-
}
|
|
82
|
-
const k = parseInt(keys[keys.length - 1]);
|
|
83
|
-
this.amplitudes = { [k]: { re: 1.0, im: 0.0 } };
|
|
84
|
-
if (CircuitLogger.isRecording()) {
|
|
85
|
-
CircuitLogger.addMeasurement(this.id, this.dimension, k);
|
|
86
|
-
}
|
|
87
|
-
return k;
|
|
73
|
+
return this.system.measureEntity(this, forcedOutcome);
|
|
88
74
|
}
|
|
89
75
|
// Extract the raw probability map for UIs
|
|
90
76
|
getProbabilities() {
|
|
91
|
-
|
|
92
|
-
return this.entangledSystem.getTargetProbabilities(this);
|
|
93
|
-
}
|
|
94
|
-
const probs = {};
|
|
95
|
-
for (const key in this.amplitudes) {
|
|
96
|
-
const k = parseInt(key);
|
|
97
|
-
const amp = this.amplitudes[k];
|
|
98
|
-
probs[k] = amp.re * amp.re + amp.im * amp.im;
|
|
99
|
-
}
|
|
100
|
-
return probs;
|
|
77
|
+
return this.system.getEntityProbabilities(this);
|
|
101
78
|
}
|
|
102
|
-
//
|
|
79
|
+
// Get probability of a specific state
|
|
80
|
+
getProbabilityOf(state) {
|
|
81
|
+
return this.getProbabilities()[state] ?? 0;
|
|
82
|
+
}
|
|
83
|
+
// Extract fixed-length probability array [P(0), P(1), ..., P(D-1)]
|
|
84
|
+
getProbabilityArray() {
|
|
85
|
+
const probs = this.getProbabilities();
|
|
86
|
+
const arr = new Array(this.dimension).fill(0);
|
|
87
|
+
for (const [k, p] of Object.entries(probs)) {
|
|
88
|
+
arr[parseInt(k)] = p;
|
|
89
|
+
}
|
|
90
|
+
return arr;
|
|
91
|
+
}
|
|
92
|
+
// Extract raw complex amplitudes
|
|
103
93
|
getAmplitudes() {
|
|
104
|
-
|
|
105
|
-
return this.entangledSystem.getTargetAmplitudes(this);
|
|
106
|
-
}
|
|
107
|
-
const amps = {};
|
|
108
|
-
for (const key in this.amplitudes) {
|
|
109
|
-
const k = parseInt(key);
|
|
110
|
-
amps[k] = { ...this.amplitudes[k] };
|
|
111
|
-
}
|
|
112
|
-
return amps;
|
|
94
|
+
return this.system.getEntityAmplitudes(this);
|
|
113
95
|
}
|
|
114
96
|
// Get the One-Body Reduced Density Matrix
|
|
115
97
|
// Diagonal elements = classical probability. Off-diagonal elements = coherence.
|
|
116
98
|
getReducedDensityMatrix() {
|
|
117
|
-
|
|
118
|
-
return this.entangledSystem.getReducedDensityMatrix(this);
|
|
119
|
-
}
|
|
120
|
-
// Pure state density matrix: rho_{j,k} = c_j * c_k^*
|
|
121
|
-
const rho = {};
|
|
122
|
-
for (const [jStr, ampJ] of Object.entries(this.amplitudes)) {
|
|
123
|
-
const j = parseInt(jStr);
|
|
124
|
-
if (!rho[j])
|
|
125
|
-
rho[j] = {};
|
|
126
|
-
for (const [kStr, ampK] of Object.entries(this.amplitudes)) {
|
|
127
|
-
const k = parseInt(kStr);
|
|
128
|
-
const ampKStar = ComplexMath.conjugate(ampK);
|
|
129
|
-
rho[j][k] = ComplexMath.multiply(ampJ, ampKStar);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return rho;
|
|
133
|
-
}
|
|
134
|
-
// Manually set the state (Use with caution, primarily for state restoration/cloning)
|
|
135
|
-
setState(amplitudes) {
|
|
136
|
-
if (this.entangledSystem) {
|
|
137
|
-
throw new Error("Cannot manually set state of an entangled entity. Set the state on the JointQuantumSystem instead.");
|
|
138
|
-
}
|
|
139
|
-
this.amplitudes = { ...amplitudes };
|
|
99
|
+
return this.system.getEntityReducedDensityMatrix(this);
|
|
140
100
|
}
|
|
141
101
|
}
|
|
142
102
|
//# sourceMappingURL=QuantumEntity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuantumEntity.js","sourceRoot":"","sources":["../src/QuantumEntity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"QuantumEntity.js","sourceRoot":"","sources":["../src/QuantumEntity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { type Complex } from "./Complex.js";
|
|
2
|
+
import { type QuantumOperation, type SparseAmplitudes } from "./Operations.js";
|
|
3
|
+
import type { QuantumEntity } from "./QuantumEntity.js";
|
|
4
|
+
export interface Predicate {
|
|
5
|
+
entity: QuantumEntity;
|
|
6
|
+
state: number;
|
|
7
|
+
}
|
|
8
|
+
export interface TargetOperation {
|
|
9
|
+
entity: QuantumEntity;
|
|
10
|
+
operation: QuantumOperation;
|
|
11
|
+
}
|
|
12
|
+
export declare class QuantumSystem {
|
|
13
|
+
private static _nextId;
|
|
14
|
+
static maxDimensionLimit: number;
|
|
15
|
+
static setMaxDimensionLimit(limit: number): void;
|
|
16
|
+
static resetIdCounter(): void;
|
|
17
|
+
readonly id: number;
|
|
18
|
+
entities: QuantumEntity[];
|
|
19
|
+
dimensions: number[];
|
|
20
|
+
dimension: number;
|
|
21
|
+
amplitudes: SparseAmplitudes;
|
|
22
|
+
get totalDimension(): number;
|
|
23
|
+
get jointAmplitudes(): SparseAmplitudes;
|
|
24
|
+
set jointAmplitudes(val: SparseAmplitudes);
|
|
25
|
+
constructor(entities: QuantumEntity[], initialStateOrAmplitudes?: number | SparseAmplitudes);
|
|
26
|
+
is(state: number): Predicate;
|
|
27
|
+
decomposeState(jointState: number): number[];
|
|
28
|
+
composeState(states: number[]): number;
|
|
29
|
+
getProbabilities(): Record<number, number>;
|
|
30
|
+
getProbabilityOf(state: number): number;
|
|
31
|
+
getProbabilityArray(): number[];
|
|
32
|
+
getAmplitudes(): Record<number, Complex>;
|
|
33
|
+
/**
|
|
34
|
+
* Set the amplitudes of this system in-place.
|
|
35
|
+
* By default, normalizes the amplitude vector so total probability equals 1.0.
|
|
36
|
+
*/
|
|
37
|
+
setAmplitudes(amplitudes: SparseAmplitudes, options?: {
|
|
38
|
+
normalize?: boolean;
|
|
39
|
+
}): void;
|
|
40
|
+
getEntityProbabilities(targetEntity: QuantumEntity): Record<number, number>;
|
|
41
|
+
getTargetProbabilities(targetEntity: QuantumEntity): Record<number, number>;
|
|
42
|
+
getEntityAmplitudes(targetEntity: QuantumEntity): Record<number, Complex>;
|
|
43
|
+
getTargetAmplitudes(targetEntity: QuantumEntity): Record<number, Complex>;
|
|
44
|
+
getEntityReducedDensityMatrix(targetEntity: QuantumEntity): Record<number, Record<number, Complex>>;
|
|
45
|
+
getReducedDensityMatrix(targetEntity: QuantumEntity): Record<number, Record<number, Complex>>;
|
|
46
|
+
applyLocal(entityIndex: number, operation: QuantumOperation): void;
|
|
47
|
+
applyToSubspace(targetEntities: QuantumEntity[], operation: QuantumOperation): void;
|
|
48
|
+
measure(forcedOutcome?: number): number;
|
|
49
|
+
measureEntity(targetEntity: QuantumEntity, forcedOutcome?: number): number;
|
|
50
|
+
measureTarget(targetEntity: QuantumEntity, forcedOutcome?: number): number;
|
|
51
|
+
getProjectedAmplitudes(conditions: {
|
|
52
|
+
entity: QuantumEntity;
|
|
53
|
+
state: number;
|
|
54
|
+
}[]): SparseAmplitudes;
|
|
55
|
+
getJointProbability(conditions: {
|
|
56
|
+
entity: QuantumEntity;
|
|
57
|
+
state: number;
|
|
58
|
+
}[]): number;
|
|
59
|
+
areMutuallyExclusive(conditions: {
|
|
60
|
+
entity: QuantumEntity;
|
|
61
|
+
state: number;
|
|
62
|
+
}[]): boolean;
|
|
63
|
+
static create(entities: QuantumEntity[]): QuantumSystem;
|
|
64
|
+
static inject(entities: QuantumEntity[], jointAmplitudes: SparseAmplitudes): QuantumSystem;
|
|
65
|
+
static merge(involvedEntities: QuantumEntity[]): QuantumSystem;
|
|
66
|
+
static interact(entities: QuantumEntity[], operation: QuantumOperation): void;
|
|
67
|
+
static conditionalInteract(args: {
|
|
68
|
+
controls: Predicate[];
|
|
69
|
+
targets: TargetOperation[];
|
|
70
|
+
}): QuantumSystem;
|
|
71
|
+
}
|