@danielsimonjr/mathts-autograd 0.3.19 → 0.3.21

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 CHANGED
@@ -12,8 +12,9 @@ npm install @danielsimonjr/mathts-autograd
12
12
 
13
13
  ## What it provides
14
14
 
15
- - Forward mode via `DualTensor` (dual numbers).
16
- - Reverse mode via a `Tape` / `TapedTensor` (backprop).
15
+ - Forward mode via `DualTensor` (dual numbers, `core` dual rules).
16
+ - Reverse mode via `Tape`, `TapedTensor`, `grad`, `valueAndGrad`, `jacobian`,
17
+ `derivative`, `reverseGrad` (see `docs/api/autograd.md`).
17
18
  - Gradients of tensor-valued expressions for optimization / ML workloads.
18
19
 
19
20
  ## License
@@ -1 +1 @@
1
- {"version":3,"file":"dual-tensor.d.ts","sourceRoot":"","sources":["../src/dual-tensor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dual-tensor.d.ts","sourceRoot":"","sources":["../src/dual-tensor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAItD;;;;;;;GAOG;AACH,qBAAa,UAAU;IACrB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAE/B,YAAY,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EASpF;IAED;;;;;OAKG;IACH,IAAI,IAAI,IAAI,YAAY,CAEvB;IAED,uDAAuD;IACvD,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAEvC;IAED,2EAA2E;IAC3E,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAI9C;IAED,4CAA4C;IAC5C,cAAc,IAAI,MAAM,CAEvB;IAED,6CAA6C;IAC7C,eAAe,IAAI,MAAM,CAExB;IAED,qEAAqE;IACrE,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CASjC;IAED,wEAAwE;IACxE,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CASjC;IAED;;;;;;;OAOG;IACH,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAkBjC;IAED,qEAAqE;IACrE,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAQ3B;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAkBpC;IASD,OAAO,CAAC,iBAAiB;IAczB;;;;;;OAMG;IACH,OAAO,CAAC,KAAK;IAIb,mCAAmC;IACnC,GAAG,IAAI,UAAU,CAEhB;IAED,sCAAsC;IACtC,GAAG,IAAI,UAAU,CAEhB;IAED,4BAA4B;IAC5B,GAAG,IAAI,UAAU,CAEhB;IAED,+BAA+B;IAC/B,GAAG,IAAI,UAAU,CAEhB;IAED,kCAAkC;IAClC,GAAG,IAAI,UAAU,CAEhB;IAED,iDAAiD;IACjD,IAAI,IAAI,UAAU,CAEjB;IAED,+BAA+B;IAC/B,MAAM,IAAI,UAAU,CAEnB;IAED,uCAAuC;IACvC,UAAU,IAAI,UAAU,CAEvB;IAED,qEAAqE;IACrE,GAAG,IAAI,UAAU,CAEhB;IAED,mDAAmD;IACnD,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAKzB;IAED,wCAAwC;IACxC,IAAI,IAAI,UAAU,CAEjB;IAED,0CAA0C;IAC1C,IAAI,IAAI,UAAU,CAEjB;IAED,yDAAyD;IACzD,IAAI,IAAI,UAAU,CAEjB;IAED,oCAAoC;IACpC,IAAI,IAAI,UAAU,CAEjB;IAED,uCAAuC;IACvC,IAAI,IAAI,UAAU,CAEjB;IAED,sCAAsC;IACtC,IAAI,IAAI,UAAU,CAEjB;IAED,oDAAoD;IACpD,KAAK,IAAI,UAAU,CAElB;IAED,8DAA8D;IAC9D,KAAK,IAAI,UAAU,CAElB;IAED,gEAAgE;IAChE,KAAK,IAAI,UAAU,CAElB;IAED,2CAA2C;IAC3C,IAAI,IAAI,UAAU,CAEjB;IAED,6CAA6C;IAC7C,KAAK,IAAI,UAAU,CAElB;IAED,qCAAqC;IACrC,KAAK,IAAI,UAAU,CAElB;IAED,sCAAsC;IACtC,KAAK,IAAI,UAAU,CAElB;IAED,mEAAmE;IACnE,IAAI,IAAI,UAAU,CAEjB;IAED,mDAAmD;IACnD,IAAI,IAAI,UAAU,CAEjB;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAYnC;IAED,OAAO,CAAC,cAAc;CAGvB"}
@@ -17,8 +17,8 @@
17
17
  * makes this work for the implemented ops). v0.2.0 may broaden via decorator
18
18
  * instrumentation.
19
19
  *
20
- * For UPT v0.4.0's call-sites (metric functions in christoffel lowering),
21
- * fn uses only add/sub/mul/scale → safe.
20
+ * When fn uses only add/sub/mul/scale it stays on the traced path.
21
+ *
22
22
  *
23
23
  * @packageDocumentation
24
24
  */
package/dist/index.js CHANGED
@@ -1,5 +1,10 @@
1
1
  import { Tensor, tensorEig, tensorSvd } from "@danielsimonjr/mathts-tensor";
2
2
  import { DUAL_UNARY_RULES } from "@danielsimonjr/mathts-core";
3
+ //#region src/shape.ts
4
+ function assertSameShape(aShape, bShape, typeName, op) {
5
+ if (aShape.length !== bShape.length || !aShape.every((v, i) => v === bShape[i])) throw new Error(`${typeName}.${op}: shape mismatch [${aShape}] vs [${bShape}]`);
6
+ }
7
+ //#endregion
3
8
  //#region src/dual-tensor.ts
4
9
  var DualTensor = class DualTensor {
5
10
  shape;
@@ -189,7 +194,7 @@ var DualTensor = class DualTensor {
189
194
  return new DualTensor(this.shape, p, t);
190
195
  }
191
196
  checkSameShape(other, op) {
192
- if (this.shape.length !== other.shape.length || !this.shape.every((v, i) => v === other.shape[i])) throw new Error(`DualTensor.${op}: shape mismatch [${this.shape}] vs [${other.shape}]`);
197
+ assertSameShape(this.shape, other.shape, "DualTensor", op);
193
198
  }
194
199
  };
195
200
  //#endregion
@@ -431,12 +436,11 @@ var TapedTensor = class TapedTensor {
431
436
  return new TapedTensor(yShape, new Float64Array(yData), this.tape, id);
432
437
  }
433
438
  checkSameShape(other, op) {
434
- if (this.shape.length !== other.shape.length || !this.shape.every((v, i) => v === other.shape[i])) throw new Error(`TapedTensor.${op}: shape mismatch [${this.shape}] vs [${other.shape}]`);
439
+ assertSameShape(this.shape, other.shape, "TapedTensor", op);
435
440
  }
436
441
  sum(axis, opts) {
437
442
  const outT = this.toPrimalTensor().sum(axis, opts);
438
443
  const inputShape = [...this.shape];
439
- const inputSize = this.primal.length;
440
444
  const keepDims = opts?.keepDims ?? false;
441
445
  const axes = _resolveAxes(axis, this.shape.length);
442
446
  const axisSet = new Set(axes);
@@ -444,30 +448,13 @@ var TapedTensor = class TapedTensor {
444
448
  const { id } = this.tape.record([this.id], outT.data.length, (outputGrad) => {
445
449
  const outShape = [...outT.shape];
446
450
  const outStrides = Tensor.rowMajorStrides(outShape);
447
- Tensor.rowMajorStrides(inputShape);
448
- const inCoords = new Array(inputShape.length).fill(0);
449
- for (let n = 0; n < inputSize; n++) {
450
- let outFlat = 0;
451
- let outDim = 0;
452
- for (let k = 0; k < inputShape.length; k++) if (axisSet.has(k)) {
453
- if (keepDims) outDim++;
454
- } else {
455
- outFlat += inCoords[k] * outStrides[outDim];
456
- outDim++;
457
- }
458
- thisGradSlot[n] += outputGrad[outFlat];
459
- for (let k = inputShape.length - 1; k >= 0; k--) {
460
- if (++inCoords[k] < inputShape[k]) break;
461
- inCoords[k] = 0;
462
- }
463
- }
451
+ addReducedBroadcast(thisGradSlot, outputGrad, inputShape, axisSet, keepDims, outStrides);
464
452
  });
465
453
  return new TapedTensor([...outT.shape], new Float64Array(outT.data), this.tape, id);
466
454
  }
467
455
  mean(axis, opts) {
468
456
  const outT = this.toPrimalTensor().mean(axis, opts);
469
457
  const inputShape = [...this.shape];
470
- const inputSize = this.primal.length;
471
458
  const keepDims = opts?.keepDims ?? false;
472
459
  const axes = _resolveAxes(axis, this.shape.length);
473
460
  const axisSet = new Set(axes);
@@ -476,22 +463,7 @@ var TapedTensor = class TapedTensor {
476
463
  const { id } = this.tape.record([this.id], outT.data.length, (outputGrad) => {
477
464
  const outShape = [...outT.shape];
478
465
  const outStrides = Tensor.rowMajorStrides(outShape);
479
- const inCoords = new Array(inputShape.length).fill(0);
480
- for (let n = 0; n < inputSize; n++) {
481
- let outFlat = 0;
482
- let outDim = 0;
483
- for (let k = 0; k < inputShape.length; k++) if (axisSet.has(k)) {
484
- if (keepDims) outDim++;
485
- } else {
486
- outFlat += inCoords[k] * outStrides[outDim];
487
- outDim++;
488
- }
489
- thisGradSlot[n] += outputGrad[outFlat] / N;
490
- for (let k = inputShape.length - 1; k >= 0; k--) {
491
- if (++inCoords[k] < inputShape[k]) break;
492
- inCoords[k] = 0;
493
- }
494
- }
466
+ addReducedBroadcast(thisGradSlot, outputGrad, inputShape, axisSet, keepDims, outStrides, N);
495
467
  });
496
468
  return new TapedTensor([...outT.shape], new Float64Array(outT.data), this.tape, id);
497
469
  }
@@ -541,74 +513,12 @@ var TapedTensor = class TapedTensor {
541
513
  return new TapedTensor([...outT.shape], new Float64Array(outT.data), this.tape, id);
542
514
  }
543
515
  max(axis, opts) {
544
- const outT = this.toPrimalTensor().max(axis, opts);
545
- const inputShape = [...this.shape];
546
- const keepDims = opts?.keepDims ?? false;
547
- const axes = _resolveAxes(axis, this.shape.length);
548
- const axisSet = new Set(axes);
549
- const primalData = new Float64Array(this.primal);
550
- const thisGradSlot = this.tape.getInputGrad(this.id);
551
- const { id } = this.tape.record([this.id], outT.data.length, (outputGrad) => {
552
- const outShape = [...outT.shape];
553
- const outStrides = Tensor.rowMajorStrides(outShape);
554
- const argmaxSlot = new Int32Array(outT.data.length).fill(-1);
555
- const inCoords = new Array(inputShape.length).fill(0);
556
- for (let n = 0; n < primalData.length; n++) {
557
- let outFlat = 0;
558
- let outDim = 0;
559
- for (let k = 0; k < inputShape.length; k++) if (axisSet.has(k)) {
560
- if (keepDims) outDim++;
561
- } else {
562
- outFlat += inCoords[k] * outStrides[outDim];
563
- outDim++;
564
- }
565
- if (argmaxSlot[outFlat] === -1 || primalData[n] > primalData[argmaxSlot[outFlat]]) argmaxSlot[outFlat] = n;
566
- for (let k = inputShape.length - 1; k >= 0; k--) {
567
- if (++inCoords[k] < inputShape[k]) break;
568
- inCoords[k] = 0;
569
- }
570
- }
571
- for (let outFlat = 0; outFlat < outT.data.length; outFlat++) {
572
- const winner = argmaxSlot[outFlat];
573
- if (winner !== -1) thisGradSlot[winner] += outputGrad[outFlat];
574
- }
575
- });
576
- return new TapedTensor([...outT.shape], new Float64Array(outT.data), this.tape, id);
516
+ const primalT = this.toPrimalTensor();
517
+ return scatterArgExtrema(this, primalT.max(axis, opts), axis, opts, (candidate, incumbent) => candidate > incumbent);
577
518
  }
578
519
  min(axis, opts) {
579
- const outT = this.toPrimalTensor().min(axis, opts);
580
- const inputShape = [...this.shape];
581
- const keepDims = opts?.keepDims ?? false;
582
- const axes = _resolveAxes(axis, this.shape.length);
583
- const axisSet = new Set(axes);
584
- const primalData = new Float64Array(this.primal);
585
- const thisGradSlot = this.tape.getInputGrad(this.id);
586
- const { id } = this.tape.record([this.id], outT.data.length, (outputGrad) => {
587
- const outShape = [...outT.shape];
588
- const outStrides = Tensor.rowMajorStrides(outShape);
589
- const argminSlot = new Int32Array(outT.data.length).fill(-1);
590
- const inCoords = new Array(inputShape.length).fill(0);
591
- for (let n = 0; n < primalData.length; n++) {
592
- let outFlat = 0;
593
- let outDim = 0;
594
- for (let k = 0; k < inputShape.length; k++) if (axisSet.has(k)) {
595
- if (keepDims) outDim++;
596
- } else {
597
- outFlat += inCoords[k] * outStrides[outDim];
598
- outDim++;
599
- }
600
- if (argminSlot[outFlat] === -1 || primalData[n] < primalData[argminSlot[outFlat]]) argminSlot[outFlat] = n;
601
- for (let k = inputShape.length - 1; k >= 0; k--) {
602
- if (++inCoords[k] < inputShape[k]) break;
603
- inCoords[k] = 0;
604
- }
605
- }
606
- for (let outFlat = 0; outFlat < outT.data.length; outFlat++) {
607
- const winner = argminSlot[outFlat];
608
- if (winner !== -1) thisGradSlot[winner] += outputGrad[outFlat];
609
- }
610
- });
611
- return new TapedTensor([...outT.shape], new Float64Array(outT.data), this.tape, id);
520
+ const primalT = this.toPrimalTensor();
521
+ return scatterArgExtrema(this, primalT.min(axis, opts), axis, opts, (candidate, incumbent) => candidate < incumbent);
612
522
  }
613
523
  norm(opts) {
614
524
  const p = opts?.p ?? 2;
@@ -1118,6 +1028,81 @@ var TapedTensor = class TapedTensor {
1118
1028
  };
1119
1029
  }
1120
1030
  };
1031
+ function addReducedBroadcast(thisGradSlot, outputGrad, inputShape, axisSet, keepDims, outStrides, divideBy) {
1032
+ let inputSize = 1;
1033
+ for (let i = 0; i < inputShape.length; i++) inputSize *= inputShape[i];
1034
+ const rank = inputShape.length;
1035
+ const inCoords = new Array(rank).fill(0);
1036
+ if (divideBy === void 0) {
1037
+ for (let n = 0; n < inputSize; n++) {
1038
+ let outFlat = 0;
1039
+ let outDim = 0;
1040
+ for (let k = 0; k < rank; k++) if (axisSet.has(k)) {
1041
+ if (keepDims) outDim++;
1042
+ } else {
1043
+ outFlat += inCoords[k] * outStrides[outDim];
1044
+ outDim++;
1045
+ }
1046
+ thisGradSlot[n] += outputGrad[outFlat];
1047
+ for (let k = rank - 1; k >= 0; k--) {
1048
+ if (++inCoords[k] < inputShape[k]) break;
1049
+ inCoords[k] = 0;
1050
+ }
1051
+ }
1052
+ return;
1053
+ }
1054
+ const nReduce = divideBy;
1055
+ for (let n = 0; n < inputSize; n++) {
1056
+ let outFlat = 0;
1057
+ let outDim = 0;
1058
+ for (let k = 0; k < rank; k++) if (axisSet.has(k)) {
1059
+ if (keepDims) outDim++;
1060
+ } else {
1061
+ outFlat += inCoords[k] * outStrides[outDim];
1062
+ outDim++;
1063
+ }
1064
+ thisGradSlot[n] += outputGrad[outFlat] / nReduce;
1065
+ for (let k = rank - 1; k >= 0; k--) {
1066
+ if (++inCoords[k] < inputShape[k]) break;
1067
+ inCoords[k] = 0;
1068
+ }
1069
+ }
1070
+ }
1071
+ function scatterArgExtrema(self, outT, axis, opts, better) {
1072
+ const inputShape = [...self.shape];
1073
+ const keepDims = opts?.keepDims ?? false;
1074
+ const axes = _resolveAxes(axis, self.shape.length);
1075
+ const axisSet = new Set(axes);
1076
+ const primalData = new Float64Array(self.primal);
1077
+ const thisGradSlot = self.tape.getInputGrad(self.id);
1078
+ const { id } = self.tape.record([self.id], outT.data.length, (outputGrad) => {
1079
+ const outShape = [...outT.shape];
1080
+ const outStrides = Tensor.rowMajorStrides(outShape);
1081
+ const winnerSlot = new Int32Array(outT.data.length).fill(-1);
1082
+ const inCoords = new Array(inputShape.length).fill(0);
1083
+ for (let n = 0; n < primalData.length; n++) {
1084
+ let outFlat = 0;
1085
+ let outDim = 0;
1086
+ for (let k = 0; k < inputShape.length; k++) if (axisSet.has(k)) {
1087
+ if (keepDims) outDim++;
1088
+ } else {
1089
+ outFlat += inCoords[k] * outStrides[outDim];
1090
+ outDim++;
1091
+ }
1092
+ const winner = winnerSlot[outFlat];
1093
+ if (winner === -1 || better(primalData[n], primalData[winner])) winnerSlot[outFlat] = n;
1094
+ for (let k = inputShape.length - 1; k >= 0; k--) {
1095
+ if (++inCoords[k] < inputShape[k]) break;
1096
+ inCoords[k] = 0;
1097
+ }
1098
+ }
1099
+ for (let outFlat = 0; outFlat < outT.data.length; outFlat++) {
1100
+ const winner = winnerSlot[outFlat];
1101
+ if (winner !== -1) thisGradSlot[winner] += outputGrad[outFlat];
1102
+ }
1103
+ });
1104
+ return new TapedTensor([...outT.shape], new Float64Array(outT.data), self.tape, id);
1105
+ }
1121
1106
  function _svdBackward(U, s, Vt, dU, dS, dVt, m, n, k) {
1122
1107
  const REL_TOL = 1e-10;
1123
1108
  let sMax = 0;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared shape guard for DualTensor and TapedTensor elementwise ops.
3
+ */
4
+ export declare function assertSameShape(aShape: ReadonlyArray<number>, bShape: ReadonlyArray<number>, typeName: string, op: string): void;
5
+ //# sourceMappingURL=shape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../src/shape.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,GACT,IAAI,CAIN"}
@@ -1 +1 @@
1
- {"version":3,"file":"tape.d.ts","sourceRoot":"","sources":["../src/tape.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tape.d.ts","sourceRoot":"","sources":["../src/tape.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danielsimonjr/mathts-autograd",
3
- "version": "0.3.19",
3
+ "version": "0.3.21",
4
4
  "description": "Forward + reverse-mode automatic differentiation for MathTS rank-N Tensor",
5
5
  "author": "Daniel Simon Jr.",
6
6
  "license": "MIT",
@@ -42,8 +42,8 @@
42
42
  }
43
43
  },
44
44
  "dependencies": {
45
- "@danielsimonjr/mathts-core": "^0.19.0",
46
- "@danielsimonjr/mathts-tensor": "^0.2.25"
45
+ "@danielsimonjr/mathts-core": "^0.21.0",
46
+ "@danielsimonjr/mathts-tensor": "^0.2.27"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@types/node": "^26.4.0",