@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.
Files changed (51) hide show
  1. package/dist/EntanglementEngine.d.ts +8 -44
  2. package/dist/EntanglementEngine.js +7 -487
  3. package/dist/EntanglementEngine.js.map +1 -1
  4. package/dist/Operations.d.ts +6 -0
  5. package/dist/Operations.js +48 -0
  6. package/dist/Operations.js.map +1 -1
  7. package/dist/QuantumEntity.d.ts +18 -11
  8. package/dist/QuantumEntity.js +47 -101
  9. package/dist/QuantumEntity.js.map +1 -1
  10. package/dist/QuantumSystem.d.ts +64 -0
  11. package/dist/QuantumSystem.js +510 -0
  12. package/dist/QuantumSystem.js.map +1 -0
  13. package/dist/index.d.ts +1 -0
  14. package/dist/index.js +1 -0
  15. package/dist/index.js.map +1 -1
  16. package/package.json +1 -1
  17. package/dist/src/CircuitLog.d.ts +0 -54
  18. package/dist/src/CircuitLog.js +0 -80
  19. package/dist/src/CircuitLog.js.map +0 -1
  20. package/dist/src/Complex.d.ts +0 -13
  21. package/dist/src/Complex.d.ts.map +0 -1
  22. package/dist/src/Complex.js +0 -49
  23. package/dist/src/Complex.js.map +0 -1
  24. package/dist/src/EntanglementEngine.d.ts +0 -48
  25. package/dist/src/EntanglementEngine.d.ts.map +0 -1
  26. package/dist/src/EntanglementEngine.js +0 -456
  27. package/dist/src/EntanglementEngine.js.map +0 -1
  28. package/dist/src/Operations.d.ts +0 -18
  29. package/dist/src/Operations.d.ts.map +0 -1
  30. package/dist/src/Operations.js +0 -107
  31. package/dist/src/Operations.js.map +0 -1
  32. package/dist/src/QuantumEntity.d.ts +0 -26
  33. package/dist/src/QuantumEntity.d.ts.map +0 -1
  34. package/dist/src/QuantumEntity.js +0 -142
  35. package/dist/src/QuantumEntity.js.map +0 -1
  36. package/dist/src/index.d.ts +0 -5
  37. package/dist/src/index.d.ts.map +0 -1
  38. package/dist/src/index.js +0 -6
  39. package/dist/src/index.js.map +0 -1
  40. package/dist/tests/DensityMatrix.test.d.ts +0 -1
  41. package/dist/tests/DensityMatrix.test.d.ts.map +0 -1
  42. package/dist/tests/DensityMatrix.test.js +0 -41
  43. package/dist/tests/DensityMatrix.test.js.map +0 -1
  44. package/dist/tests/EntanglementEngine.test.d.ts +0 -1
  45. package/dist/tests/EntanglementEngine.test.d.ts.map +0 -1
  46. package/dist/tests/EntanglementEngine.test.js +0 -72
  47. package/dist/tests/EntanglementEngine.test.js.map +0 -1
  48. package/dist/tests/QuantumEntity.test.d.ts +0 -1
  49. package/dist/tests/QuantumEntity.test.d.ts.map +0 -1
  50. package/dist/tests/QuantumEntity.test.js +0 -60
  51. package/dist/tests/QuantumEntity.test.js.map +0 -1
@@ -0,0 +1,510 @@
1
+ import { ComplexMath } from "./Complex.js";
2
+ import { cleanAmplitudes } from "./Operations.js";
3
+ import { CircuitLogger } from "./CircuitLog.js";
4
+ function sampleDiscreteDistribution(probs, forcedOutcome) {
5
+ if (forcedOutcome !== undefined) {
6
+ return forcedOutcome;
7
+ }
8
+ const rand = Math.random();
9
+ let cumulative = 0;
10
+ let selectedState = -1;
11
+ for (const [stateStr, prob] of Object.entries(probs)) {
12
+ const state = parseInt(stateStr);
13
+ cumulative += prob;
14
+ if (rand <= cumulative) {
15
+ selectedState = state;
16
+ break;
17
+ }
18
+ }
19
+ if (selectedState === -1) {
20
+ const keys = Object.keys(probs);
21
+ if (keys.length === 0) {
22
+ throw new Error("Cannot measure an entity with 0 probability mass (Decoherence error)");
23
+ }
24
+ selectedState = parseInt(keys[keys.length - 1]);
25
+ }
26
+ return selectedState;
27
+ }
28
+ export class QuantumSystem {
29
+ static _nextId = 0;
30
+ static maxDimensionLimit = 32768;
31
+ static setMaxDimensionLimit(limit) {
32
+ QuantumSystem.maxDimensionLimit = limit;
33
+ }
34
+ static resetIdCounter() {
35
+ QuantumSystem._nextId = 0;
36
+ }
37
+ id;
38
+ entities;
39
+ dimensions;
40
+ dimension;
41
+ amplitudes;
42
+ get totalDimension() {
43
+ return this.dimension;
44
+ }
45
+ get jointAmplitudes() {
46
+ return this.amplitudes;
47
+ }
48
+ set jointAmplitudes(val) {
49
+ this.amplitudes = val;
50
+ }
51
+ constructor(entities, initialStateOrAmplitudes = 0) {
52
+ this.id = QuantumSystem._nextId++;
53
+ this.entities = [...entities];
54
+ this.dimensions = entities.map(e => e.dimension);
55
+ this.dimension = this.dimensions.reduce((acc, dim) => acc * dim, 1);
56
+ if (this.dimension > QuantumSystem.maxDimensionLimit) {
57
+ throw new Error(`QuantumLimitExceeded: Attempted to create a system of dimension ${this.dimension}. Maximum allowed is ${QuantumSystem.maxDimensionLimit}. If you need a larger state space, you can increase this limit using 'QuantumSystem.setMaxDimensionLimit(newLimit)'. Note that larger dimensions can cause performance issues or crash the thread.`);
58
+ }
59
+ if (typeof initialStateOrAmplitudes === 'number') {
60
+ this.amplitudes = {};
61
+ if (initialStateOrAmplitudes >= 0 && initialStateOrAmplitudes < this.dimension) {
62
+ this.amplitudes[initialStateOrAmplitudes] = { re: 1.0, im: 0.0 };
63
+ }
64
+ }
65
+ else {
66
+ this.amplitudes = { ...initialStateOrAmplitudes };
67
+ }
68
+ for (const entity of entities) {
69
+ entity.system = this;
70
+ }
71
+ }
72
+ is(state) {
73
+ return { entity: this.entities[0], state };
74
+ }
75
+ decomposeState(jointState) {
76
+ const states = new Array(this.dimensions.length);
77
+ let remainder = jointState;
78
+ for (let i = this.dimensions.length - 1; i >= 0; i--) {
79
+ const dim = this.dimensions[i];
80
+ states[i] = remainder % dim;
81
+ remainder = Math.floor(remainder / dim);
82
+ }
83
+ return states;
84
+ }
85
+ composeState(states) {
86
+ let jointState = 0;
87
+ for (let i = 0; i < states.length; i++) {
88
+ jointState = (jointState * this.dimensions[i]) + states[i];
89
+ }
90
+ return jointState;
91
+ }
92
+ getProbabilities() {
93
+ const probs = {};
94
+ for (const [key, amp] of Object.entries(this.amplitudes)) {
95
+ const k = parseInt(key);
96
+ probs[k] = amp.re * amp.re + amp.im * amp.im;
97
+ }
98
+ return probs;
99
+ }
100
+ getProbabilityOf(state) {
101
+ return this.getProbabilities()[state] ?? 0;
102
+ }
103
+ getProbabilityArray() {
104
+ const probs = this.getProbabilities();
105
+ const arr = new Array(this.dimension).fill(0);
106
+ for (const [k, p] of Object.entries(probs)) {
107
+ arr[parseInt(k)] = p;
108
+ }
109
+ return arr;
110
+ }
111
+ getAmplitudes() {
112
+ const amps = {};
113
+ for (const key in this.amplitudes) {
114
+ const k = parseInt(key);
115
+ amps[k] = { ...this.amplitudes[k] };
116
+ }
117
+ return amps;
118
+ }
119
+ getEntityProbabilities(targetEntity) {
120
+ const targetIndex = this.entities.indexOf(targetEntity);
121
+ if (targetIndex === -1)
122
+ throw new Error("Entity is not in this quantum system");
123
+ if (this.entities.length === 1) {
124
+ return this.getProbabilities();
125
+ }
126
+ const probs = {};
127
+ for (const [jointKStr, amp] of Object.entries(this.amplitudes)) {
128
+ const jointK = parseInt(jointKStr);
129
+ const states = this.decomposeState(jointK);
130
+ const targetState = states[targetIndex];
131
+ const prob = ComplexMath.magnitudeSquared(amp);
132
+ probs[targetState] = (probs[targetState] || 0) + prob;
133
+ }
134
+ return probs;
135
+ }
136
+ getTargetProbabilities(targetEntity) {
137
+ return this.getEntityProbabilities(targetEntity);
138
+ }
139
+ getEntityAmplitudes(targetEntity) {
140
+ const targetIndex = this.entities.indexOf(targetEntity);
141
+ if (targetIndex === -1)
142
+ throw new Error("Entity is not in this quantum system");
143
+ if (this.entities.length === 1) {
144
+ return this.getAmplitudes();
145
+ }
146
+ const amps = {};
147
+ for (const [jointKStr, amp] of Object.entries(this.amplitudes)) {
148
+ const jointK = parseInt(jointKStr);
149
+ const states = this.decomposeState(jointK);
150
+ const targetState = states[targetIndex];
151
+ if (!amps[targetState]) {
152
+ amps[targetState] = { re: 0, im: 0 };
153
+ }
154
+ amps[targetState] = ComplexMath.add(amps[targetState], amp);
155
+ }
156
+ return amps;
157
+ }
158
+ getTargetAmplitudes(targetEntity) {
159
+ return this.getEntityAmplitudes(targetEntity);
160
+ }
161
+ getEntityReducedDensityMatrix(targetEntity) {
162
+ const targetIndex = this.entities.indexOf(targetEntity);
163
+ if (targetIndex === -1)
164
+ throw new Error("Entity is not in this quantum system");
165
+ const dim = targetEntity.dimension;
166
+ const rho = {};
167
+ for (let i = 0; i < dim; i++) {
168
+ rho[i] = {};
169
+ for (let j = 0; j < dim; j++) {
170
+ rho[i][j] = { re: 0.0, im: 0.0 };
171
+ }
172
+ }
173
+ if (this.entities.length === 1) {
174
+ for (let i = 0; i < dim; i++) {
175
+ for (let j = 0; j < dim; j++) {
176
+ const ampI = this.amplitudes[i];
177
+ const ampJ = this.amplitudes[j];
178
+ if (ampI && ampJ) {
179
+ const conjJ = ComplexMath.conjugate(ampJ);
180
+ rho[i][j] = ComplexMath.multiply(ampI, conjJ);
181
+ }
182
+ }
183
+ }
184
+ return rho;
185
+ }
186
+ const bMap = new Map();
187
+ for (const [jointKStr, amp] of Object.entries(this.amplitudes)) {
188
+ const jointK = parseInt(jointKStr);
189
+ const states = this.decomposeState(jointK);
190
+ const a = states[targetIndex];
191
+ let bIndex = 0;
192
+ for (let i = 0; i < states.length; i++) {
193
+ if (i !== targetIndex) {
194
+ bIndex = bIndex * this.dimensions[i] + states[i];
195
+ }
196
+ }
197
+ let list = bMap.get(bIndex);
198
+ if (!list) {
199
+ list = [];
200
+ bMap.set(bIndex, list);
201
+ }
202
+ list.push({ a, amp });
203
+ }
204
+ for (const terms of bMap.values()) {
205
+ for (let i = 0; i < terms.length; i++) {
206
+ const a = terms[i].a;
207
+ const ampA = terms[i].amp;
208
+ for (let j = 0; j < terms.length; j++) {
209
+ const aPrime = terms[j].a;
210
+ const ampAPrimeStar = ComplexMath.conjugate(terms[j].amp);
211
+ const product = ComplexMath.multiply(ampA, ampAPrimeStar);
212
+ rho[a][aPrime] = ComplexMath.add(rho[a][aPrime], product);
213
+ }
214
+ }
215
+ }
216
+ return rho;
217
+ }
218
+ getReducedDensityMatrix(targetEntity) {
219
+ return this.getEntityReducedDensityMatrix(targetEntity);
220
+ }
221
+ applyLocal(entityIndex, operation) {
222
+ this.applyToSubspace([this.entities[entityIndex]], operation);
223
+ }
224
+ applyToSubspace(targetEntities, operation) {
225
+ const targetIndices = targetEntities.map(e => this.entities.indexOf(e));
226
+ if (targetIndices.some(i => i === -1)) {
227
+ throw new Error("Target entities not in this quantum system");
228
+ }
229
+ if (this.entities.length === 1 && targetEntities.length === 1) {
230
+ this.amplitudes = operation.apply(this.amplitudes, this.dimension);
231
+ return;
232
+ }
233
+ const targetDimensions = targetIndices.map(i => this.dimensions[i]);
234
+ const targetTotalDim = targetDimensions.reduce((a, b) => a * b, 1);
235
+ const spectatorIndices = [];
236
+ for (let i = 0; i < this.entities.length; i++) {
237
+ if (!targetIndices.includes(i))
238
+ spectatorIndices.push(i);
239
+ }
240
+ const spectatorDimensions = spectatorIndices.map(i => this.dimensions[i]);
241
+ const bMap = new Map();
242
+ for (const [jointKStr, amp] of Object.entries(this.amplitudes)) {
243
+ const jointK = parseInt(jointKStr);
244
+ const states = this.decomposeState(jointK);
245
+ let targetK = 0;
246
+ for (let i = 0; i < targetIndices.length; i++) {
247
+ targetK = targetK * targetDimensions[i] + states[targetIndices[i]];
248
+ }
249
+ let specIndex = 0;
250
+ for (let i = 0; i < spectatorIndices.length; i++) {
251
+ specIndex = specIndex * spectatorDimensions[i] + states[spectatorIndices[i]];
252
+ }
253
+ let subAmps = bMap.get(specIndex);
254
+ if (!subAmps) {
255
+ subAmps = {};
256
+ bMap.set(specIndex, subAmps);
257
+ }
258
+ subAmps[targetK] = amp;
259
+ }
260
+ const newAmps = {};
261
+ for (const [specIndex, subspaceAmps] of bMap.entries()) {
262
+ const resultAmps = operation.apply(subspaceAmps, targetTotalDim);
263
+ const spectatorStates = new Array(spectatorIndices.length);
264
+ let remS = specIndex;
265
+ for (let i = spectatorIndices.length - 1; i >= 0; i--) {
266
+ spectatorStates[i] = remS % spectatorDimensions[i];
267
+ remS = Math.floor(remS / spectatorDimensions[i]);
268
+ }
269
+ for (const [newTargetKStr, newAmp] of Object.entries(resultAmps)) {
270
+ const newTargetK = parseInt(newTargetKStr);
271
+ const newTargetStates = new Array(targetIndices.length);
272
+ let remT = newTargetK;
273
+ for (let i = targetIndices.length - 1; i >= 0; i--) {
274
+ newTargetStates[i] = remT % targetDimensions[i];
275
+ remT = Math.floor(remT / targetDimensions[i]);
276
+ }
277
+ const newFullStates = new Array(this.entities.length);
278
+ for (let i = 0; i < targetIndices.length; i++) {
279
+ newFullStates[targetIndices[i]] = newTargetStates[i];
280
+ }
281
+ for (let i = 0; i < spectatorIndices.length; i++) {
282
+ newFullStates[spectatorIndices[i]] = spectatorStates[i];
283
+ }
284
+ const newJointK = this.composeState(newFullStates);
285
+ if (!newAmps[newJointK])
286
+ newAmps[newJointK] = { re: 0, im: 0 };
287
+ newAmps[newJointK] = ComplexMath.add(newAmps[newJointK], newAmp);
288
+ }
289
+ }
290
+ this.amplitudes = cleanAmplitudes(newAmps);
291
+ }
292
+ measure(forcedOutcome) {
293
+ const probs = this.getProbabilities();
294
+ const selectedState = sampleDiscreteDistribution(probs, forcedOutcome);
295
+ this.amplitudes = { [selectedState]: { re: 1.0, im: 0.0 } };
296
+ if (CircuitLogger.isRecording()) {
297
+ CircuitLogger.addMeasurement(this.id, this.dimension, selectedState);
298
+ }
299
+ return selectedState;
300
+ }
301
+ measureEntity(targetEntity, forcedOutcome) {
302
+ const targetIndex = this.entities.indexOf(targetEntity);
303
+ if (targetIndex === -1)
304
+ throw new Error("Entity is not in this quantum system");
305
+ if (this.entities.length === 1) {
306
+ const probs = this.getProbabilities();
307
+ const selectedState = sampleDiscreteDistribution(probs, forcedOutcome);
308
+ this.amplitudes = { [selectedState]: { re: 1.0, im: 0.0 } };
309
+ if (CircuitLogger.isRecording()) {
310
+ CircuitLogger.addMeasurement(targetEntity.id, targetEntity.dimension, selectedState);
311
+ }
312
+ return selectedState;
313
+ }
314
+ const marginalProbs = this.getEntityProbabilities(targetEntity);
315
+ const selectedState = sampleDiscreteDistribution(marginalProbs, forcedOutcome);
316
+ let collapsedAmps = {};
317
+ const prob = marginalProbs[selectedState] ?? 0;
318
+ if (prob > 1e-12) {
319
+ const normalizationFactor = 1.0 / Math.sqrt(prob);
320
+ for (const [jointKStr, amp] of Object.entries(this.amplitudes)) {
321
+ const jointK = parseInt(jointKStr);
322
+ const states = this.decomposeState(jointK);
323
+ if (states[targetIndex] === selectedState) {
324
+ collapsedAmps[jointK] = ComplexMath.scale(amp, normalizationFactor);
325
+ }
326
+ }
327
+ }
328
+ else {
329
+ let maxProb = -1;
330
+ let maxJointK = -1;
331
+ for (const [jointKStr, amp] of Object.entries(this.amplitudes)) {
332
+ const jointK = parseInt(jointKStr);
333
+ const magnitude = amp.re * amp.re + amp.im * amp.im;
334
+ if (magnitude > maxProb) {
335
+ maxProb = magnitude;
336
+ maxJointK = jointK;
337
+ }
338
+ }
339
+ if (maxJointK !== -1) {
340
+ const states = this.decomposeState(maxJointK);
341
+ states[targetIndex] = selectedState;
342
+ const newJointK = this.composeState(states);
343
+ collapsedAmps = { [newJointK]: { re: 1.0, im: 0.0 } };
344
+ }
345
+ else {
346
+ const states = new Array(this.entities.length).fill(0);
347
+ states[targetIndex] = selectedState;
348
+ const newJointK = this.composeState(states);
349
+ collapsedAmps = { [newJointK]: { re: 1.0, im: 0.0 } };
350
+ }
351
+ }
352
+ this.amplitudes = cleanAmplitudes(collapsedAmps);
353
+ if (CircuitLogger.isRecording()) {
354
+ CircuitLogger.addMeasurement(targetEntity.id, targetEntity.dimension, selectedState);
355
+ }
356
+ return selectedState;
357
+ }
358
+ measureTarget(targetEntity, forcedOutcome) {
359
+ return this.measureEntity(targetEntity, forcedOutcome);
360
+ }
361
+ getProjectedAmplitudes(conditions) {
362
+ const mappedConditions = conditions.map(c => {
363
+ const index = this.entities.indexOf(c.entity);
364
+ if (index === -1)
365
+ throw new Error("Entity in condition is not in this quantum system");
366
+ return { index, requiredState: c.state };
367
+ });
368
+ const projectedAmps = {};
369
+ for (const [jointKStr, amp] of Object.entries(this.amplitudes)) {
370
+ const jointK = parseInt(jointKStr);
371
+ const states = this.decomposeState(jointK);
372
+ let allMatch = true;
373
+ for (const cond of mappedConditions) {
374
+ if (states[cond.index] !== cond.requiredState) {
375
+ allMatch = false;
376
+ break;
377
+ }
378
+ }
379
+ if (allMatch) {
380
+ projectedAmps[jointK] = amp;
381
+ }
382
+ }
383
+ return projectedAmps;
384
+ }
385
+ getJointProbability(conditions) {
386
+ const projectedAmps = this.getProjectedAmplitudes(conditions);
387
+ let prob = 0;
388
+ for (const [_, amp] of Object.entries(projectedAmps)) {
389
+ prob += ComplexMath.magnitudeSquared(amp);
390
+ }
391
+ return prob;
392
+ }
393
+ areMutuallyExclusive(conditions) {
394
+ return this.getJointProbability(conditions) < 1e-10;
395
+ }
396
+ static create(entities) {
397
+ return QuantumSystem.merge(entities);
398
+ }
399
+ static inject(entities, jointAmplitudes) {
400
+ return new QuantumSystem(entities, jointAmplitudes);
401
+ }
402
+ static merge(involvedEntities) {
403
+ const uniqueSystems = new Set();
404
+ for (const entity of involvedEntities) {
405
+ uniqueSystems.add(entity.system);
406
+ }
407
+ if (uniqueSystems.size === 1) {
408
+ const singleSys = Array.from(uniqueSystems)[0];
409
+ if (involvedEntities.every(e => singleSys.entities.includes(e))) {
410
+ return singleSys;
411
+ }
412
+ }
413
+ const systemsArray = Array.from(uniqueSystems);
414
+ const mergedEntities = [];
415
+ for (const sys of systemsArray) {
416
+ mergedEntities.push(...sys.entities);
417
+ }
418
+ let currentAmplitudes = { 0: { re: 1.0, im: 0.0 } };
419
+ for (const sys of systemsArray) {
420
+ const nextAmps = {};
421
+ const nextDim = sys.dimension;
422
+ for (const [k1Str, amp1] of Object.entries(currentAmplitudes)) {
423
+ const k1 = parseInt(k1Str);
424
+ for (const [k2Str, amp2] of Object.entries(sys.amplitudes)) {
425
+ const k2 = parseInt(k2Str);
426
+ const jointK = (k1 * nextDim) + k2;
427
+ nextAmps[jointK] = ComplexMath.multiply(amp1, amp2);
428
+ }
429
+ }
430
+ currentAmplitudes = cleanAmplitudes(nextAmps);
431
+ }
432
+ return new QuantumSystem(mergedEntities, currentAmplitudes);
433
+ }
434
+ static interact(entities, operation) {
435
+ if (entities.length === 0)
436
+ return;
437
+ const system = QuantumSystem.merge(entities);
438
+ system.applyToSubspace(entities, operation);
439
+ if (CircuitLogger.isRecording()) {
440
+ CircuitLogger.addGate(operation.name, entities.map(e => e.id), entities.map(e => e.dimension), operation.params);
441
+ }
442
+ }
443
+ static conditionalInteract(args) {
444
+ const allEntities = [
445
+ ...args.controls.map(c => c.entity),
446
+ ...args.targets.map(t => t.entity)
447
+ ];
448
+ const uniqueEntities = Array.from(new Set(allEntities));
449
+ const system = QuantumSystem.merge(uniqueEntities);
450
+ const newAmps = {};
451
+ for (const [jointKStr, amp] of Object.entries(system.amplitudes)) {
452
+ const jointK = parseInt(jointKStr);
453
+ const states = system.decomposeState(jointK);
454
+ let conditionMet = true;
455
+ for (const control of args.controls) {
456
+ const entityIndex = system.entities.indexOf(control.entity);
457
+ if (states[entityIndex] !== control.state) {
458
+ conditionMet = false;
459
+ break;
460
+ }
461
+ }
462
+ if (conditionMet) {
463
+ let currentBranchAmps = { [jointK]: amp };
464
+ for (const target of args.targets) {
465
+ const targetEntityIndex = system.entities.indexOf(target.entity);
466
+ const targetDim = system.dimensions[targetEntityIndex];
467
+ const nextBranchAmps = {};
468
+ for (const [bJointKStr, bAmp] of Object.entries(currentBranchAmps)) {
469
+ const bJointK = parseInt(bJointKStr);
470
+ const bStates = system.decomposeState(bJointK);
471
+ const targetState = bStates[targetEntityIndex];
472
+ const localRes = target.operation.apply({ [targetState]: bAmp }, targetDim);
473
+ for (const [newTargetStateStr, newAmp] of Object.entries(localRes)) {
474
+ const newStates = [...bStates];
475
+ newStates[targetEntityIndex] = parseInt(newTargetStateStr);
476
+ const newJointK = system.composeState(newStates);
477
+ if (!nextBranchAmps[newJointK])
478
+ nextBranchAmps[newJointK] = { re: 0, im: 0 };
479
+ nextBranchAmps[newJointK] = ComplexMath.add(nextBranchAmps[newJointK], newAmp);
480
+ }
481
+ }
482
+ currentBranchAmps = nextBranchAmps;
483
+ }
484
+ for (const [resKStr, resAmp] of Object.entries(currentBranchAmps)) {
485
+ const resK = parseInt(resKStr);
486
+ if (!newAmps[resK])
487
+ newAmps[resK] = { re: 0, im: 0 };
488
+ newAmps[resK] = ComplexMath.add(newAmps[resK], resAmp);
489
+ }
490
+ }
491
+ else {
492
+ if (!newAmps[jointK])
493
+ newAmps[jointK] = { re: 0, im: 0 };
494
+ newAmps[jointK] = ComplexMath.add(newAmps[jointK], amp);
495
+ }
496
+ }
497
+ system.amplitudes = cleanAmplitudes(newAmps);
498
+ if (CircuitLogger.isRecording()) {
499
+ CircuitLogger.addGate('ConditionalInteract', args.targets.map(t => t.entity.id), args.targets.map(t => t.entity.dimension), {
500
+ targets: args.targets.map(t => ({
501
+ entityId: t.entity.id,
502
+ operation: t.operation.name,
503
+ params: t.operation.params
504
+ }))
505
+ }, args.controls.map(c => ({ entityId: c.entity.id, state: c.state })));
506
+ }
507
+ return system;
508
+ }
509
+ }
510
+ //# sourceMappingURL=QuantumSystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuantumSystem.js","sourceRoot":"","sources":["../src/QuantumSystem.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { type Complex, ComplexMath } from './Complex.js';
2
2
  export { QuantumEntity } from './QuantumEntity.js';
3
+ export { QuantumSystem, type Predicate, type TargetOperation } from './QuantumSystem.js';
3
4
  export { Operations, type QuantumOperation, type SparseAmplitudes, cleanAmplitudes } from './Operations.js';
4
5
  export { EntanglementEngine, JointQuantumSystem } from './EntanglementEngine.js';
5
6
  export { CircuitLogger, type CircuitEntry, type GateEntry, type MeasurementEntry } from './CircuitLog.js';
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { ComplexMath } from './Complex.js';
2
2
  export { QuantumEntity } from './QuantumEntity.js';
3
+ export { QuantumSystem } from './QuantumSystem.js';
3
4
  export { Operations, cleanAmplitudes } from './Operations.js';
4
5
  export { EntanglementEngine, JointQuantumSystem } from './EntanglementEngine.js';
5
6
  export { CircuitLogger } from './CircuitLog.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAgD,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC5G,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,aAAa,EAA4D,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAwC,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,UAAU,EAAgD,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC5G,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,aAAa,EAA4D,MAAM,iBAAiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quantumplayed/quantum-game-engine",
3
- "version": "1.0.3",
3
+ "version": "1.2.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -1,54 +0,0 @@
1
- /**
2
- * CircuitLog — toggleable, append-only log of quantum operations.
3
- *
4
- * When recording is active, every state-mutating call (gate or measurement)
5
- * appends an entry. The log is designed for future incremental OpenQASM export:
6
- * each new entry maps to one circuit instruction, so the export never rebuilds.
7
- */
8
- export interface GateEntry {
9
- type: 'gate';
10
- name: string;
11
- entityIds: number[];
12
- dimensions: number[];
13
- controls?: {
14
- entityId: number;
15
- state: number;
16
- }[];
17
- params?: Record<string, any>;
18
- timestamp: number;
19
- }
20
- export interface MeasurementEntry {
21
- type: 'measurement';
22
- entityId: number;
23
- dimension: number;
24
- outcome: number;
25
- timestamp: number;
26
- }
27
- export type CircuitEntry = GateEntry | MeasurementEntry;
28
- declare class CircuitLoggerImpl {
29
- private _recording;
30
- private _log;
31
- private _counter;
32
- /** Begin recording. Resets the existing log. */
33
- startRecording(): void;
34
- /** Stop recording and return the captured log. */
35
- stopRecording(): CircuitEntry[];
36
- /** Fast guard — check before constructing entry objects on the hot path. */
37
- isRecording(): boolean;
38
- /** Append an entry (auto-assigns timestamp). */
39
- addGate(name: string, entityIds: number[], dimensions: number[], params?: Record<string, any>, controls?: {
40
- entityId: number;
41
- state: number;
42
- }[]): void;
43
- /** Append a measurement entry. */
44
- addMeasurement(entityId: number, dimension: number, outcome: number): void;
45
- /** Get a copy of the current log. */
46
- getLog(): CircuitEntry[];
47
- /** Filter log to entries involving any of the given entity IDs. */
48
- getLogForEntities(entityIds: number[]): CircuitEntry[];
49
- /** Clear the log and reset the counter. */
50
- reset(): void;
51
- }
52
- /** Global singleton circuit logger. */
53
- export declare const CircuitLogger: CircuitLoggerImpl;
54
- export {};