@quantumplayed/quantum-game-engine 1.0.3 → 1.2.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/EntanglementEngine.d.ts +8 -44
- package/dist/EntanglementEngine.js +7 -487
- package/dist/EntanglementEngine.js.map +1 -1
- package/dist/Operations.d.ts +6 -0
- package/dist/Operations.js +48 -0
- package/dist/Operations.js.map +1 -1
- package/dist/QuantumEntity.d.ts +18 -11
- package/dist/QuantumEntity.js +47 -101
- package/dist/QuantumEntity.js.map +1 -1
- package/dist/QuantumSystem.d.ts +64 -0
- package/dist/QuantumSystem.js +510 -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
|
@@ -1,50 +1,14 @@
|
|
|
1
|
-
import { QuantumEntity
|
|
2
|
-
import { type
|
|
3
|
-
import { type
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
dimensions: number[];
|
|
9
|
-
totalDimension: number;
|
|
10
|
-
jointAmplitudes: SparseAmplitudes;
|
|
11
|
-
private constructor();
|
|
12
|
-
static create(entities: QuantumEntity[]): JointQuantumSystem;
|
|
13
|
-
static merge(involvedEntities: QuantumEntity[]): JointQuantumSystem;
|
|
14
|
-
private _calculateTensorProduct;
|
|
15
|
-
decomposeState(jointState: number): number[];
|
|
16
|
-
composeState(states: number[]): number;
|
|
17
|
-
applyLocal(entityIndex: number, operation: QuantumOperation): void;
|
|
18
|
-
applyToSubspace(targetEntities: QuantumEntity[], operation: QuantumOperation): void;
|
|
19
|
-
getTargetProbabilities(targetEntity: QuantumEntity): Record<number, number>;
|
|
20
|
-
getTargetAmplitudes(targetEntity: QuantumEntity): Record<number, Complex>;
|
|
21
|
-
measureTarget(targetEntity: QuantumEntity, forcedOutcome?: number): number;
|
|
22
|
-
getProjectedAmplitudes(conditions: {
|
|
23
|
-
entity: QuantumEntity;
|
|
24
|
-
state: number;
|
|
25
|
-
}[]): SparseAmplitudes;
|
|
26
|
-
getJointProbability(conditions: {
|
|
27
|
-
entity: QuantumEntity;
|
|
28
|
-
state: number;
|
|
29
|
-
}[]): number;
|
|
30
|
-
areMutuallyExclusive(conditions: {
|
|
31
|
-
entity: QuantumEntity;
|
|
32
|
-
state: number;
|
|
33
|
-
}[]): boolean;
|
|
34
|
-
getReducedDensityMatrix(targetEntity: QuantumEntity): Record<number, Record<number, Complex>>;
|
|
35
|
-
/**
|
|
36
|
-
* Create a joint system from existing amplitudes and entities (Bit-Perfect Restoration/Cloning).
|
|
37
|
-
*/
|
|
38
|
-
static inject(entities: QuantumEntity[], jointAmplitudes: SparseAmplitudes): JointQuantumSystem;
|
|
39
|
-
}
|
|
40
|
-
export interface TargetOperation {
|
|
41
|
-
entity: QuantumEntity;
|
|
42
|
-
operation: QuantumOperation;
|
|
43
|
-
}
|
|
1
|
+
import { QuantumEntity } from './QuantumEntity.js';
|
|
2
|
+
import { QuantumSystem, type Predicate, type TargetOperation } from './QuantumSystem.js';
|
|
3
|
+
import { type QuantumOperation } from './Operations.js';
|
|
4
|
+
export { QuantumSystem as JointQuantumSystem, type TargetOperation, type Predicate };
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated Use QuantumSystem.interact or QuantumSystem.conditionalInteract directly.
|
|
7
|
+
*/
|
|
44
8
|
export declare const EntanglementEngine: {
|
|
45
9
|
interactMany(entities: QuantumEntity[], operation: QuantumOperation): void;
|
|
46
10
|
conditionalInteract(args: {
|
|
47
11
|
controls: Predicate[];
|
|
48
12
|
targets: TargetOperation[];
|
|
49
|
-
}):
|
|
13
|
+
}): QuantumSystem;
|
|
50
14
|
};
|
|
@@ -1,494 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
static setMaxDimensionLimit(limit) {
|
|
7
|
-
JointQuantumSystem.maxDimensionLimit = limit;
|
|
8
|
-
}
|
|
9
|
-
entities;
|
|
10
|
-
dimensions;
|
|
11
|
-
totalDimension;
|
|
12
|
-
jointAmplitudes;
|
|
13
|
-
// Internal constructor used by merge
|
|
14
|
-
constructor(entities, initializeAmplitudes = true) {
|
|
15
|
-
this.entities = entities;
|
|
16
|
-
this.dimensions = entities.map(e => e.dimension);
|
|
17
|
-
this.totalDimension = this.dimensions.reduce((acc, dim) => acc * dim, 1);
|
|
18
|
-
if (this.totalDimension > JointQuantumSystem.maxDimensionLimit) {
|
|
19
|
-
throw new Error(`QuantumLimitExceeded: Attempted to entangle a system of dimension ${this.totalDimension}. Maximum allowed is ${JointQuantumSystem.maxDimensionLimit}. If you need a larger state space, you can increase this limit using 'JointQuantumSystem.setMaxDimensionLimit(newLimit)'. Note that larger dimensions can cause performance issues or crash the thread.`);
|
|
20
|
-
}
|
|
21
|
-
if (initializeAmplitudes) {
|
|
22
|
-
this.jointAmplitudes = this._calculateTensorProduct(entities);
|
|
23
|
-
for (const entity of entities) {
|
|
24
|
-
// Point that entity to this system
|
|
25
|
-
entity.entangledSystem = this;
|
|
26
|
-
// This entity no longer has its own amplitudes
|
|
27
|
-
entity.amplitudes = {};
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
this.jointAmplitudes = {};
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
static create(entities) {
|
|
35
|
-
return new JointQuantumSystem(entities, true);
|
|
36
|
-
}
|
|
37
|
-
static merge(involvedEntities) {
|
|
38
|
-
const uniqueSystems = new Set();
|
|
39
|
-
const standaloneEntities = [];
|
|
40
|
-
for (const entity of involvedEntities) {
|
|
41
|
-
if (entity.entangledSystem) {
|
|
42
|
-
uniqueSystems.add(entity.entangledSystem);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
standaloneEntities.push(entity);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
if (uniqueSystems.size === 0) {
|
|
49
|
-
return JointQuantumSystem.create(involvedEntities);
|
|
50
|
-
}
|
|
51
|
-
if (uniqueSystems.size === 1 && standaloneEntities.length === 0) {
|
|
52
|
-
return Array.from(uniqueSystems)[0];
|
|
53
|
-
}
|
|
54
|
-
const mergedEntities = [];
|
|
55
|
-
const systemsArray = Array.from(uniqueSystems);
|
|
56
|
-
for (const sys of systemsArray) {
|
|
57
|
-
mergedEntities.push(...sys.entities);
|
|
58
|
-
}
|
|
59
|
-
mergedEntities.push(...standaloneEntities);
|
|
60
|
-
const newSystem = new JointQuantumSystem(mergedEntities, false);
|
|
61
|
-
let currentAmplitudes = { 0: { re: 1.0, im: 0.0 } };
|
|
62
|
-
let currentTotalDim = 1;
|
|
63
|
-
for (const sys of systemsArray) {
|
|
64
|
-
const nextAmps = {};
|
|
65
|
-
const nextDim = sys.totalDimension;
|
|
66
|
-
for (const [k1Str, amp1] of Object.entries(currentAmplitudes)) {
|
|
67
|
-
for (const [k2Str, amp2] of Object.entries(sys.jointAmplitudes)) {
|
|
68
|
-
const jointK = (parseInt(k1Str) * nextDim) + parseInt(k2Str);
|
|
69
|
-
nextAmps[jointK] = ComplexMath.multiply(amp1, amp2);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
currentAmplitudes = cleanAmplitudes(nextAmps);
|
|
73
|
-
currentTotalDim *= nextDim;
|
|
74
|
-
}
|
|
75
|
-
for (const entity of standaloneEntities) {
|
|
76
|
-
const nextAmps = {};
|
|
77
|
-
const nextDim = entity.dimension;
|
|
78
|
-
for (const [k1Str, amp1] of Object.entries(currentAmplitudes)) {
|
|
79
|
-
for (const [k2Str, amp2] of Object.entries(entity.amplitudes)) {
|
|
80
|
-
const jointK = (parseInt(k1Str) * nextDim) + parseInt(k2Str);
|
|
81
|
-
nextAmps[jointK] = ComplexMath.multiply(amp1, amp2);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
currentAmplitudes = cleanAmplitudes(nextAmps);
|
|
85
|
-
currentTotalDim *= nextDim;
|
|
86
|
-
}
|
|
87
|
-
newSystem.jointAmplitudes = currentAmplitudes;
|
|
88
|
-
for (const entity of mergedEntities) {
|
|
89
|
-
entity.entangledSystem = newSystem;
|
|
90
|
-
entity.amplitudes = {};
|
|
91
|
-
}
|
|
92
|
-
return newSystem;
|
|
93
|
-
}
|
|
94
|
-
_calculateTensorProduct(entities) {
|
|
95
|
-
let currentAmplitudes = { 0: { re: 1.0, im: 0.0 } };
|
|
96
|
-
let currentTotalDim = 1;
|
|
97
|
-
for (const entity of entities) {
|
|
98
|
-
const nextAmps = {};
|
|
99
|
-
const nextDim = entity.dimension;
|
|
100
|
-
for (const [k1Str, amp1] of Object.entries(currentAmplitudes)) {
|
|
101
|
-
for (const [k2Str, amp2] of Object.entries(entity.amplitudes)) {
|
|
102
|
-
const k1 = parseInt(k1Str);
|
|
103
|
-
const k2 = parseInt(k2Str);
|
|
104
|
-
// The new basis integer: shift the left side by the new dimension size
|
|
105
|
-
// E.g., if A is in state 2 (dim 4) and B is in state 1 (dim 4)
|
|
106
|
-
// Joint state = (2 * 4) + 1 = 9
|
|
107
|
-
const jointK = (k1 * nextDim) + k2;
|
|
108
|
-
const jointAmp = ComplexMath.multiply(amp1, amp2);
|
|
109
|
-
nextAmps[jointK] = jointAmp;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
currentAmplitudes = nextAmps;
|
|
113
|
-
currentTotalDim *= nextDim;
|
|
114
|
-
}
|
|
115
|
-
return currentAmplitudes;
|
|
116
|
-
}
|
|
117
|
-
// Helper to decompose a joint basis integer back into individual state indices
|
|
118
|
-
decomposeState(jointState) {
|
|
119
|
-
const states = new Array(this.dimensions.length);
|
|
120
|
-
let remainder = jointState;
|
|
121
|
-
for (let i = this.dimensions.length - 1; i >= 0; i--) {
|
|
122
|
-
const dim = this.dimensions[i];
|
|
123
|
-
states[i] = remainder % dim;
|
|
124
|
-
remainder = Math.floor(remainder / dim);
|
|
125
|
-
}
|
|
126
|
-
return states;
|
|
127
|
-
}
|
|
128
|
-
// Helper to compose individual state indices into a joint basis integer
|
|
129
|
-
composeState(states) {
|
|
130
|
-
let jointState = 0;
|
|
131
|
-
for (let i = 0; i < states.length; i++) {
|
|
132
|
-
jointState = (jointState * this.dimensions[i]) + states[i];
|
|
133
|
-
}
|
|
134
|
-
return jointState;
|
|
135
|
-
}
|
|
136
|
-
applyLocal(entityIndex, operation) {
|
|
137
|
-
this.applyToSubspace([this.entities[entityIndex]], operation);
|
|
138
|
-
}
|
|
139
|
-
applyToSubspace(targetEntities, operation) {
|
|
140
|
-
const targetIndices = targetEntities.map(e => this.entities.indexOf(e));
|
|
141
|
-
if (targetIndices.some(i => i === -1)) {
|
|
142
|
-
throw new Error("Target entities not in joint system");
|
|
143
|
-
}
|
|
144
|
-
const targetDimensions = targetIndices.map(i => this.dimensions[i]);
|
|
145
|
-
const targetTotalDim = targetDimensions.reduce((a, b) => a * b, 1);
|
|
146
|
-
const newAmps = {};
|
|
147
|
-
const spectatorIndices = [];
|
|
148
|
-
for (let i = 0; i < this.entities.length; i++) {
|
|
149
|
-
if (!targetIndices.includes(i))
|
|
150
|
-
spectatorIndices.push(i);
|
|
151
|
-
}
|
|
152
|
-
const composeSubspace = (states, indices, dims) => {
|
|
153
|
-
let k = 0;
|
|
154
|
-
for (let i = 0; i < indices.length; i++) {
|
|
155
|
-
k = (k * dims[i]) + states[indices[i]];
|
|
156
|
-
}
|
|
157
|
-
return k;
|
|
158
|
-
};
|
|
159
|
-
const bMap = {};
|
|
160
|
-
for (const [jointKStr, amp] of Object.entries(this.jointAmplitudes)) {
|
|
161
|
-
const jointK = parseInt(jointKStr);
|
|
162
|
-
const states = this.decomposeState(jointK);
|
|
163
|
-
let specKey = "";
|
|
164
|
-
for (const idx of spectatorIndices) {
|
|
165
|
-
specKey += states[idx] + ",";
|
|
166
|
-
}
|
|
167
|
-
if (!bMap[specKey])
|
|
168
|
-
bMap[specKey] = {};
|
|
169
|
-
const targetK = composeSubspace(states, targetIndices, targetDimensions);
|
|
170
|
-
bMap[specKey][targetK] = amp;
|
|
171
|
-
}
|
|
172
|
-
for (const specKey in bMap) {
|
|
173
|
-
const subspaceAmps = bMap[specKey];
|
|
174
|
-
const resultAmps = operation.apply(subspaceAmps, targetTotalDim);
|
|
175
|
-
const spectatorStates = specKey === "" ? [] : specKey.split(",").slice(0, -1).map(Number);
|
|
176
|
-
for (const [newTargetKStr, newAmp] of Object.entries(resultAmps)) {
|
|
177
|
-
const newTargetK = parseInt(newTargetKStr);
|
|
178
|
-
const newTargetStates = new Array(targetIndices.length);
|
|
179
|
-
let remainder = newTargetK;
|
|
180
|
-
for (let i = targetIndices.length - 1; i >= 0; i--) {
|
|
181
|
-
newTargetStates[i] = remainder % targetDimensions[i];
|
|
182
|
-
remainder = Math.floor(remainder / targetDimensions[i]);
|
|
183
|
-
}
|
|
184
|
-
const newFullStates = new Array(this.entities.length);
|
|
185
|
-
let specI = 0;
|
|
186
|
-
for (let i = 0; i < this.entities.length; i++) {
|
|
187
|
-
const tIndex = targetIndices.indexOf(i);
|
|
188
|
-
if (tIndex !== -1) {
|
|
189
|
-
newFullStates[i] = newTargetStates[tIndex];
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
newFullStates[i] = spectatorStates[specI++];
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
const newJointK = this.composeState(newFullStates);
|
|
196
|
-
if (!newAmps[newJointK])
|
|
197
|
-
newAmps[newJointK] = { re: 0, im: 0 };
|
|
198
|
-
newAmps[newJointK] = ComplexMath.add(newAmps[newJointK], newAmp);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
this.jointAmplitudes = cleanAmplitudes(newAmps);
|
|
202
|
-
}
|
|
203
|
-
getTargetProbabilities(targetEntity) {
|
|
204
|
-
const targetIndex = this.entities.indexOf(targetEntity);
|
|
205
|
-
if (targetIndex === -1)
|
|
206
|
-
throw new Error("Entity is not in this joint system");
|
|
207
|
-
const probs = {};
|
|
208
|
-
for (const [jointKStr, amp] of Object.entries(this.jointAmplitudes)) {
|
|
209
|
-
const jointK = parseInt(jointKStr);
|
|
210
|
-
const states = this.decomposeState(jointK);
|
|
211
|
-
const targetState = states[targetIndex];
|
|
212
|
-
const prob = ComplexMath.magnitudeSquared(amp);
|
|
213
|
-
probs[targetState] = (probs[targetState] || 0) + prob;
|
|
214
|
-
}
|
|
215
|
-
return probs;
|
|
216
|
-
}
|
|
217
|
-
getTargetAmplitudes(targetEntity) {
|
|
218
|
-
const targetIndex = this.entities.indexOf(targetEntity);
|
|
219
|
-
if (targetIndex === -1)
|
|
220
|
-
throw new Error("Entity is not in this joint system");
|
|
221
|
-
const amps = {};
|
|
222
|
-
for (const [jointKStr, amp] of Object.entries(this.jointAmplitudes)) {
|
|
223
|
-
const jointK = parseInt(jointKStr);
|
|
224
|
-
const states = this.decomposeState(jointK);
|
|
225
|
-
const targetState = states[targetIndex];
|
|
226
|
-
// If a system strictly has 1 entity, this is identical to pure amplitudes.
|
|
227
|
-
// For entangled systems, this simply sums the complex amplitudes across orthogonal bases
|
|
228
|
-
// which serves as an operational branch-phase for game logic purposes in this prototype.
|
|
229
|
-
if (!amps[targetState]) {
|
|
230
|
-
amps[targetState] = { re: 0, im: 0 };
|
|
231
|
-
}
|
|
232
|
-
amps[targetState] = ComplexMath.add(amps[targetState], amp);
|
|
233
|
-
}
|
|
234
|
-
return amps;
|
|
235
|
-
}
|
|
236
|
-
measureTarget(targetEntity, forcedOutcome) {
|
|
237
|
-
const targetIndex = this.entities.indexOf(targetEntity);
|
|
238
|
-
if (targetIndex === -1)
|
|
239
|
-
throw new Error("Entity is not in this joint system");
|
|
240
|
-
const marginalProbs = this.getTargetProbabilities(targetEntity);
|
|
241
|
-
let selectedState;
|
|
242
|
-
if (forcedOutcome !== undefined) {
|
|
243
|
-
// Forced outcome — skip random selection
|
|
244
|
-
selectedState = forcedOutcome;
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
const rand = Math.random();
|
|
248
|
-
let cumulativeProb = 0;
|
|
249
|
-
selectedState = -1;
|
|
250
|
-
for (const [stateStr, prob] of Object.entries(marginalProbs)) {
|
|
251
|
-
const state = parseInt(stateStr);
|
|
252
|
-
cumulativeProb += prob;
|
|
253
|
-
if (rand <= cumulativeProb) {
|
|
254
|
-
selectedState = state;
|
|
255
|
-
break;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
if (selectedState === -1) {
|
|
259
|
-
const keys = Object.keys(marginalProbs);
|
|
260
|
-
selectedState = parseInt(keys[keys.length - 1]);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
// Now we must COLLAPSE the joint system.
|
|
264
|
-
// We throw away any joint states where the targetEntity != selectedState
|
|
265
|
-
// and we normalize the remaining amplitudes.
|
|
266
|
-
let collapsedAmps = {};
|
|
267
|
-
const prob = marginalProbs[selectedState] ?? 0;
|
|
268
|
-
if (prob > 1e-12) {
|
|
269
|
-
const normalizationFactor = 1.0 / Math.sqrt(prob);
|
|
270
|
-
for (const [jointKStr, amp] of Object.entries(this.jointAmplitudes)) {
|
|
271
|
-
const jointK = parseInt(jointKStr);
|
|
272
|
-
const states = this.decomposeState(jointK);
|
|
273
|
-
if (states[targetIndex] === selectedState) {
|
|
274
|
-
// Keep this branch, but scale it to ensure total probability remains 1.0
|
|
275
|
-
collapsedAmps[jointK] = ComplexMath.scale(amp, normalizationFactor);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
280
|
-
// Edge case: Forced measurement to a state with zero probability.
|
|
281
|
-
// We overwrite the target entity's state in the most probable joint state configuration.
|
|
282
|
-
let maxProb = -1;
|
|
283
|
-
let maxJointK = -1;
|
|
284
|
-
for (const [jointKStr, amp] of Object.entries(this.jointAmplitudes)) {
|
|
285
|
-
const jointK = parseInt(jointKStr);
|
|
286
|
-
const magnitude = amp.re * amp.re + amp.im * amp.im;
|
|
287
|
-
if (magnitude > maxProb) {
|
|
288
|
-
maxProb = magnitude;
|
|
289
|
-
maxJointK = jointK;
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
if (maxJointK !== -1) {
|
|
293
|
-
const states = this.decomposeState(maxJointK);
|
|
294
|
-
states[targetIndex] = selectedState;
|
|
295
|
-
const newJointK = this.composeState(states);
|
|
296
|
-
collapsedAmps = { [newJointK]: { re: 1.0, im: 0.0 } };
|
|
297
|
-
}
|
|
298
|
-
else {
|
|
299
|
-
const states = new Array(this.entities.length).fill(0);
|
|
300
|
-
states[targetIndex] = selectedState;
|
|
301
|
-
const newJointK = this.composeState(states);
|
|
302
|
-
collapsedAmps = { [newJointK]: { re: 1.0, im: 0.0 } };
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
this.jointAmplitudes = cleanAmplitudes(collapsedAmps);
|
|
306
|
-
if (CircuitLogger.isRecording()) {
|
|
307
|
-
CircuitLogger.addMeasurement(targetEntity.id, targetEntity.dimension, selectedState);
|
|
308
|
-
}
|
|
309
|
-
return selectedState;
|
|
310
|
-
}
|
|
311
|
-
getProjectedAmplitudes(conditions) {
|
|
312
|
-
const mappedConditions = conditions.map(c => {
|
|
313
|
-
const index = this.entities.indexOf(c.entity);
|
|
314
|
-
if (index === -1)
|
|
315
|
-
throw new Error("Entity in condition is not in this joint system");
|
|
316
|
-
return { index, requiredState: c.state };
|
|
317
|
-
});
|
|
318
|
-
const projectedAmps = {};
|
|
319
|
-
for (const [jointKStr, amp] of Object.entries(this.jointAmplitudes)) {
|
|
320
|
-
const jointK = parseInt(jointKStr);
|
|
321
|
-
const states = this.decomposeState(jointK);
|
|
322
|
-
let allMatch = true;
|
|
323
|
-
for (const cond of mappedConditions) {
|
|
324
|
-
if (states[cond.index] !== cond.requiredState) {
|
|
325
|
-
allMatch = false;
|
|
326
|
-
break;
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
if (allMatch) {
|
|
330
|
-
projectedAmps[jointK] = amp;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
return projectedAmps;
|
|
334
|
-
}
|
|
335
|
-
getJointProbability(conditions) {
|
|
336
|
-
const projectedAmps = this.getProjectedAmplitudes(conditions);
|
|
337
|
-
let prob = 0;
|
|
338
|
-
for (const [_, amp] of Object.entries(projectedAmps)) {
|
|
339
|
-
prob += ComplexMath.magnitudeSquared(amp);
|
|
340
|
-
}
|
|
341
|
-
return prob;
|
|
342
|
-
}
|
|
343
|
-
areMutuallyExclusive(conditions) {
|
|
344
|
-
return this.getJointProbability(conditions) < 1e-10;
|
|
345
|
-
}
|
|
346
|
-
// Calculates the reduced density matrix by taking the partial trace over all other entities
|
|
347
|
-
getReducedDensityMatrix(targetEntity) {
|
|
348
|
-
const targetIndex = this.entities.indexOf(targetEntity);
|
|
349
|
-
if (targetIndex === -1)
|
|
350
|
-
throw new Error("Entity is not in this joint system");
|
|
351
|
-
const rho = {};
|
|
352
|
-
// We want to calculate rho_{a, a'} = sum_b C_{a,b} C_{a',b}^*
|
|
353
|
-
// To do this efficiently with sparse joint amplitudes, we group amplitudes by 'b'
|
|
354
|
-
// 'b' is the combined state of all OUTSIDE entities.
|
|
355
|
-
const bMap = {};
|
|
356
|
-
for (const [jointKStr, amp] of Object.entries(this.jointAmplitudes)) {
|
|
357
|
-
const jointK = parseInt(jointKStr);
|
|
358
|
-
const states = this.decomposeState(jointK);
|
|
359
|
-
const a = states[targetIndex];
|
|
360
|
-
// create string key for all outside states
|
|
361
|
-
let bKey = "";
|
|
362
|
-
for (let i = 0; i < states.length; i++) {
|
|
363
|
-
if (i !== targetIndex)
|
|
364
|
-
bKey += states[i] + ",";
|
|
365
|
-
}
|
|
366
|
-
if (!bMap[bKey])
|
|
367
|
-
bMap[bKey] = [];
|
|
368
|
-
bMap[bKey].push({ a, amp });
|
|
369
|
-
}
|
|
370
|
-
// Now calculate the inner product for each 'b'
|
|
371
|
-
for (const bKey in bMap) {
|
|
372
|
-
const terms = bMap[bKey];
|
|
373
|
-
for (let i = 0; i < terms.length; i++) {
|
|
374
|
-
const a = terms[i].a;
|
|
375
|
-
const ampA = terms[i].amp;
|
|
376
|
-
if (!rho[a])
|
|
377
|
-
rho[a] = {};
|
|
378
|
-
for (let j = 0; j < terms.length; j++) {
|
|
379
|
-
const aPrime = terms[j].a;
|
|
380
|
-
const ampAPrimeStar = ComplexMath.conjugate(terms[j].amp);
|
|
381
|
-
const product = ComplexMath.multiply(ampA, ampAPrimeStar);
|
|
382
|
-
if (!rho[a][aPrime])
|
|
383
|
-
rho[a][aPrime] = { re: 0, im: 0 };
|
|
384
|
-
rho[a][aPrime] = ComplexMath.add(rho[a][aPrime], product);
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
// Note: we could filter out zero entries to maintain sparsity,
|
|
389
|
-
// but density matrices for small entities are generally dense anyway.
|
|
390
|
-
return rho;
|
|
391
|
-
}
|
|
392
|
-
/**
|
|
393
|
-
* Create a joint system from existing amplitudes and entities (Bit-Perfect Restoration/Cloning).
|
|
394
|
-
*/
|
|
395
|
-
static inject(entities, jointAmplitudes) {
|
|
396
|
-
const sys = new JointQuantumSystem(entities, false); // Don't auto-calculate tensor product
|
|
397
|
-
sys.jointAmplitudes = { ...jointAmplitudes };
|
|
398
|
-
for (const entity of entities) {
|
|
399
|
-
entity.entangledSystem = sys;
|
|
400
|
-
entity.amplitudes = {}; // Standalone state is now absorbed into the joint system
|
|
401
|
-
}
|
|
402
|
-
return sys;
|
|
403
|
-
}
|
|
404
|
-
}
|
|
1
|
+
import { QuantumSystem } from './QuantumSystem.js';
|
|
2
|
+
export { QuantumSystem as JointQuantumSystem };
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated Use QuantumSystem.interact or QuantumSystem.conditionalInteract directly.
|
|
5
|
+
*/
|
|
405
6
|
export const EntanglementEngine = {
|
|
406
7
|
interactMany(entities, operation) {
|
|
407
|
-
|
|
408
|
-
return;
|
|
409
|
-
const system = JointQuantumSystem.merge(entities);
|
|
410
|
-
system.applyToSubspace(entities, operation);
|
|
411
|
-
if (CircuitLogger.isRecording()) {
|
|
412
|
-
CircuitLogger.addGate(operation.name, entities.map(e => e.id), entities.map(e => e.dimension), operation.params);
|
|
413
|
-
}
|
|
8
|
+
QuantumSystem.interact(entities, operation);
|
|
414
9
|
},
|
|
415
10
|
conditionalInteract(args) {
|
|
416
|
-
|
|
417
|
-
const allEntities = [
|
|
418
|
-
...args.controls.map(c => c.entity),
|
|
419
|
-
...args.targets.map(t => t.entity)
|
|
420
|
-
];
|
|
421
|
-
// Remove duplicates
|
|
422
|
-
const uniqueEntities = Array.from(new Set(allEntities));
|
|
423
|
-
// Form a new joint system
|
|
424
|
-
const system = JointQuantumSystem.merge(uniqueEntities);
|
|
425
|
-
const newAmps = {};
|
|
426
|
-
for (const [jointKStr, amp] of Object.entries(system.jointAmplitudes)) {
|
|
427
|
-
const jointK = parseInt(jointKStr);
|
|
428
|
-
let states = system.decomposeState(jointK);
|
|
429
|
-
// Check condition: do all control entities match their required state?
|
|
430
|
-
let conditionMet = true;
|
|
431
|
-
for (const control of args.controls) {
|
|
432
|
-
const entityIndex = system.entities.indexOf(control.entity);
|
|
433
|
-
if (states[entityIndex] !== control.state) {
|
|
434
|
-
conditionMet = false;
|
|
435
|
-
break;
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
if (conditionMet) {
|
|
439
|
-
// We need to apply all target operations to this branch.
|
|
440
|
-
// This is mathematically tricky because an operation could split a branch!
|
|
441
|
-
// For this MVP, we assume target operations for conditional interacts are simple Shifts (permutations).
|
|
442
|
-
// We simulate sequential application on this single branch
|
|
443
|
-
let currentBranchAmps = { [jointK]: amp };
|
|
444
|
-
for (const target of args.targets) {
|
|
445
|
-
const targetEntityIndex = system.entities.indexOf(target.entity);
|
|
446
|
-
const targetDim = system.dimensions[targetEntityIndex];
|
|
447
|
-
const nextBranchAmps = {};
|
|
448
|
-
for (const [bJointKStr, bAmp] of Object.entries(currentBranchAmps)) {
|
|
449
|
-
const bJointK = parseInt(bJointKStr);
|
|
450
|
-
const bStates = system.decomposeState(bJointK);
|
|
451
|
-
const targetState = bStates[targetEntityIndex];
|
|
452
|
-
// Apply operation locally
|
|
453
|
-
const localRes = target.operation.apply({ [targetState]: bAmp }, targetDim);
|
|
454
|
-
// Re-integrate
|
|
455
|
-
for (const [newTargetStateStr, newAmp] of Object.entries(localRes)) {
|
|
456
|
-
const newStates = [...bStates];
|
|
457
|
-
newStates[targetEntityIndex] = parseInt(newTargetStateStr);
|
|
458
|
-
const newJointK = system.composeState(newStates);
|
|
459
|
-
if (!nextBranchAmps[newJointK])
|
|
460
|
-
nextBranchAmps[newJointK] = { re: 0, im: 0 };
|
|
461
|
-
nextBranchAmps[newJointK] = ComplexMath.add(nextBranchAmps[newJointK], newAmp);
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
currentBranchAmps = nextBranchAmps;
|
|
465
|
-
}
|
|
466
|
-
// Add the result of the branch to newAmps
|
|
467
|
-
for (const [resKStr, resAmp] of Object.entries(currentBranchAmps)) {
|
|
468
|
-
const resK = parseInt(resKStr);
|
|
469
|
-
// Add this resulting state back to the new sparse tree
|
|
470
|
-
if (!newAmps[resK])
|
|
471
|
-
newAmps[resK] = { re: 0, im: 0 };
|
|
472
|
-
newAmps[resK] = ComplexMath.add(newAmps[resK], resAmp);
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
else {
|
|
476
|
-
// Condition not met, branch applies unchanged
|
|
477
|
-
if (!newAmps[jointK])
|
|
478
|
-
newAmps[jointK] = { re: 0, im: 0 };
|
|
479
|
-
newAmps[jointK] = ComplexMath.add(newAmps[jointK], amp);
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
system.jointAmplitudes = cleanAmplitudes(newAmps);
|
|
483
|
-
if (CircuitLogger.isRecording()) {
|
|
484
|
-
CircuitLogger.addGate('ConditionalInteract', args.targets.map(t => t.entity.id), args.targets.map(t => t.entity.dimension), {
|
|
485
|
-
targets: args.targets.map(t => ({
|
|
486
|
-
entityId: t.entity.id,
|
|
487
|
-
operation: t.operation.name,
|
|
488
|
-
params: t.operation.params
|
|
489
|
-
}))
|
|
490
|
-
}, args.controls.map(c => ({ entityId: c.entity.id, state: c.state })));
|
|
491
|
-
}
|
|
11
|
+
return QuantumSystem.conditionalInteract(args);
|
|
492
12
|
}
|
|
493
13
|
};
|
|
494
14
|
//# sourceMappingURL=EntanglementEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntanglementEngine.js","sourceRoot":"","sources":["../src/EntanglementEngine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EntanglementEngine.js","sourceRoot":"","sources":["../src/EntanglementEngine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAwC,MAAM,oBAAoB,CAAC;AAGzF,OAAO,EAAE,aAAa,IAAI,kBAAkB,EAAwC,CAAC;AAErF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAC9B,YAAY,CAAC,QAAyB,EAAE,SAA2B;QAC/D,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;IAED,mBAAmB,CAAC,IAGnB;QACG,OAAO,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;CACJ,CAAC"}
|
package/dist/Operations.d.ts
CHANGED
|
@@ -18,4 +18,10 @@ export declare const Operations: {
|
|
|
18
18
|
amplitude: Complex;
|
|
19
19
|
}[]): QuantumOperation;
|
|
20
20
|
SqrtSwap(): QuantumOperation;
|
|
21
|
+
Split(from: number, targets: number[]): QuantumOperation;
|
|
22
|
+
Branch(from: number, branches: {
|
|
23
|
+
to: number;
|
|
24
|
+
weight: number;
|
|
25
|
+
}[]): QuantumOperation;
|
|
26
|
+
PhaseDegrees(degrees: number): QuantumOperation;
|
|
21
27
|
};
|
package/dist/Operations.js
CHANGED
|
@@ -152,6 +152,54 @@ 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
|
+
};
|
|
155
203
|
}
|
|
156
204
|
};
|
|
157
205
|
//# sourceMappingURL=Operations.js.map
|