@quantumplayed/quantum-game-engine 1.0.0

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