@mni-ml/framework 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/autodiff.d.ts +13 -0
  2. package/dist/autodiff.d.ts.map +1 -0
  3. package/dist/autodiff.js +91 -0
  4. package/dist/autodiff.js.map +1 -0
  5. package/dist/datasets.d.ts +16 -0
  6. package/dist/datasets.d.ts.map +1 -0
  7. package/dist/datasets.js +64 -0
  8. package/dist/datasets.js.map +1 -0
  9. package/dist/fast_ops.d.ts +23 -0
  10. package/dist/fast_ops.d.ts.map +1 -0
  11. package/dist/fast_ops.js +263 -0
  12. package/dist/fast_ops.js.map +1 -0
  13. package/dist/fast_ops_worker.d.ts +2 -0
  14. package/dist/fast_ops_worker.d.ts.map +1 -0
  15. package/dist/fast_ops_worker.js +119 -0
  16. package/dist/fast_ops_worker.js.map +1 -0
  17. package/dist/gpu_backend.d.ts +37 -0
  18. package/dist/gpu_backend.d.ts.map +1 -0
  19. package/dist/gpu_backend.js +163 -0
  20. package/dist/gpu_backend.js.map +1 -0
  21. package/dist/gpu_kernels.d.ts +74 -0
  22. package/dist/gpu_kernels.d.ts.map +1 -0
  23. package/dist/gpu_kernels.js +571 -0
  24. package/dist/gpu_kernels.js.map +1 -0
  25. package/dist/gpu_ops.d.ts +43 -0
  26. package/dist/gpu_ops.d.ts.map +1 -0
  27. package/dist/gpu_ops.js +365 -0
  28. package/dist/gpu_ops.js.map +1 -0
  29. package/dist/index.d.ts +15 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +20 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/module.d.ts +23 -0
  34. package/dist/module.d.ts.map +1 -0
  35. package/dist/module.js +97 -0
  36. package/dist/module.js.map +1 -0
  37. package/dist/nn.d.ts +63 -0
  38. package/dist/nn.d.ts.map +1 -0
  39. package/dist/nn.js +234 -0
  40. package/dist/nn.js.map +1 -0
  41. package/dist/operators.d.ts +29 -0
  42. package/dist/operators.d.ts.map +1 -0
  43. package/dist/operators.js +91 -0
  44. package/dist/operators.js.map +1 -0
  45. package/dist/optimizer.d.ts +15 -0
  46. package/dist/optimizer.d.ts.map +1 -0
  47. package/dist/optimizer.js +62 -0
  48. package/dist/optimizer.js.map +1 -0
  49. package/dist/scalar.d.ts +42 -0
  50. package/dist/scalar.d.ts.map +1 -0
  51. package/dist/scalar.js +126 -0
  52. package/dist/scalar.js.map +1 -0
  53. package/dist/scalar_functions.d.ts +62 -0
  54. package/dist/scalar_functions.d.ts.map +1 -0
  55. package/dist/scalar_functions.js +127 -0
  56. package/dist/scalar_functions.js.map +1 -0
  57. package/dist/tensor.d.ts +58 -0
  58. package/dist/tensor.d.ts.map +1 -0
  59. package/dist/tensor.js +288 -0
  60. package/dist/tensor.js.map +1 -0
  61. package/dist/tensor_data.d.ts +29 -0
  62. package/dist/tensor_data.d.ts.map +1 -0
  63. package/dist/tensor_data.js +131 -0
  64. package/dist/tensor_data.js.map +1 -0
  65. package/dist/tensor_functions.d.ts +97 -0
  66. package/dist/tensor_functions.d.ts.map +1 -0
  67. package/dist/tensor_functions.js +465 -0
  68. package/dist/tensor_functions.js.map +1 -0
  69. package/dist/tensor_ops.d.ts +47 -0
  70. package/dist/tensor_ops.d.ts.map +1 -0
  71. package/dist/tensor_ops.js +249 -0
  72. package/dist/tensor_ops.js.map +1 -0
  73. package/package.json +45 -0
@@ -0,0 +1,62 @@
1
+ import { Context } from "./autodiff.js";
2
+ /**
3
+ * ScalarHistory stores how a Scalar was created.
4
+ * Note: inputs is typed as any[] to avoid circular dependency with Scalar
5
+ */
6
+ export declare class ScalarHistory {
7
+ lastFn: typeof ScalarFunction | null;
8
+ ctx: Context | null;
9
+ inputs: any[];
10
+ constructor(lastFn?: typeof ScalarFunction | null, ctx?: Context | null, inputs?: any[]);
11
+ }
12
+ /**
13
+ * Base class for all scalar operations.
14
+ * Each operation implements forward (and later, backward).
15
+ *
16
+ * Note: The apply() logic lives in Scalar class to avoid circular dependencies.
17
+ */
18
+ export declare abstract class ScalarFunction {
19
+ static forward(ctx: Context, ...inputs: number[]): number;
20
+ static backward(ctx: Context, dOut: number): number[];
21
+ }
22
+ export declare class Add extends ScalarFunction {
23
+ static forward(ctx: Context, a: number, b: number): number;
24
+ static backward(ctx: Context, dOut: number): number[];
25
+ }
26
+ export declare class Log extends ScalarFunction {
27
+ static forward(ctx: Context, a: number): number;
28
+ static backward(ctx: Context, dOut: number): number[];
29
+ }
30
+ export declare class Mul extends ScalarFunction {
31
+ static forward(ctx: Context, a: number, b: number): number;
32
+ static backward(ctx: Context, dOut: number): number[];
33
+ }
34
+ export declare class Inv extends ScalarFunction {
35
+ static forward(ctx: Context, a: number): number;
36
+ static backward(ctx: Context, dOut: number): number[];
37
+ }
38
+ export declare class Neg extends ScalarFunction {
39
+ static forward(ctx: Context, a: number): number;
40
+ static backward(ctx: Context, dOut: number): number[];
41
+ }
42
+ export declare class Sigmoid extends ScalarFunction {
43
+ static forward(ctx: Context, a: number): number;
44
+ static backward(ctx: Context, dOut: number): number[];
45
+ }
46
+ export declare class Relu extends ScalarFunction {
47
+ static forward(ctx: Context, a: number): number;
48
+ static backward(ctx: Context, dOut: number): number[];
49
+ }
50
+ export declare class Exp extends ScalarFunction {
51
+ static forward(ctx: Context, a: number): number;
52
+ static backward(ctx: Context, dOut: number): number[];
53
+ }
54
+ export declare class LT extends ScalarFunction {
55
+ static forward(ctx: Context, a: number, b: number): number;
56
+ static backward(ctx: Context, dOut: number): number[];
57
+ }
58
+ export declare class EQ extends ScalarFunction {
59
+ static forward(ctx: Context, a: number, b: number): number;
60
+ static backward(ctx: Context, dOut: number): number[];
61
+ }
62
+ //# sourceMappingURL=scalar_functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scalar_functions.d.ts","sourceRoot":"","sources":["../src/scalar_functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC;;;GAGG;AACH,qBAAa,aAAa;IAEX,MAAM,EAAE,OAAO,cAAc,GAAG,IAAI;IACpC,GAAG,EAAE,OAAO,GAAG,IAAI;IACnB,MAAM,EAAE,GAAG,EAAE;gBAFb,MAAM,GAAE,OAAO,cAAc,GAAG,IAAW,EAC3C,GAAG,GAAE,OAAO,GAAG,IAAW,EAC1B,MAAM,GAAE,GAAG,EAAO;CAEhC;AAED;;;;;GAKG;AACH,8BAAsB,cAAc;IAChC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IAIzD,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAGxD;AAED,qBAAa,GAAI,SAAQ,cAAc;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAK1D,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAGxD;AAED,qBAAa,GAAI,SAAQ,cAAc;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAK/C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAIxD;AAED,qBAAa,GAAI,SAAQ,cAAc;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAK1D,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAIxD;AAED,qBAAa,GAAI,SAAQ,cAAc;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAK/C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAIxD;AAED,qBAAa,GAAI,SAAQ,cAAc;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAGxD;AAED,qBAAa,OAAQ,SAAQ,cAAc;IACvC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAM/C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAIxD;AAED,qBAAa,IAAK,SAAQ,cAAc;IACpC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAK/C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAIxD;AAED,qBAAa,GAAI,SAAQ,cAAc;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAM/C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAIxD;AAED,qBAAa,EAAG,SAAQ,cAAc;IAClC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAI1D,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAGxD;AAED,qBAAa,EAAG,SAAQ,cAAc;IAClC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAI1D,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAGxD"}
@@ -0,0 +1,127 @@
1
+ import { Context } from "./autodiff.js";
2
+ import * as operators from "./operators.js";
3
+ /**
4
+ * ScalarHistory stores how a Scalar was created.
5
+ * Note: inputs is typed as any[] to avoid circular dependency with Scalar
6
+ */
7
+ export class ScalarHistory {
8
+ lastFn;
9
+ ctx;
10
+ inputs;
11
+ constructor(lastFn = null, ctx = null, inputs = [] // Will be Scalar[] at runtime
12
+ ) {
13
+ this.lastFn = lastFn;
14
+ this.ctx = ctx;
15
+ this.inputs = inputs;
16
+ }
17
+ }
18
+ /**
19
+ * Base class for all scalar operations.
20
+ * Each operation implements forward (and later, backward).
21
+ *
22
+ * Note: The apply() logic lives in Scalar class to avoid circular dependencies.
23
+ */
24
+ export class ScalarFunction {
25
+ static forward(ctx, ...inputs) {
26
+ throw new Error("forward not implemented");
27
+ }
28
+ static backward(ctx, dOut) {
29
+ throw new Error("backward not implemented");
30
+ }
31
+ }
32
+ export class Add extends ScalarFunction {
33
+ static forward(ctx, a, b) {
34
+ // Don't need to save for backward since df/da = 1 and df/db = 1
35
+ return operators.add(a, b);
36
+ }
37
+ static backward(ctx, dOut) {
38
+ return [dOut, dOut];
39
+ }
40
+ }
41
+ export class Log extends ScalarFunction {
42
+ static forward(ctx, a) {
43
+ ctx.saveForBackward(a);
44
+ return operators.log(a);
45
+ }
46
+ static backward(ctx, dOut) {
47
+ const [a] = ctx.savedValues;
48
+ return [dOut * (1 / Math.max(a, 1e-12))];
49
+ }
50
+ }
51
+ export class Mul extends ScalarFunction {
52
+ static forward(ctx, a, b) {
53
+ ctx.saveForBackward(a, b);
54
+ return operators.mul(a, b);
55
+ }
56
+ static backward(ctx, dOut) {
57
+ const [a, b] = ctx.savedValues;
58
+ return [dOut * b, dOut * a];
59
+ }
60
+ }
61
+ export class Inv extends ScalarFunction {
62
+ static forward(ctx, a) {
63
+ ctx.saveForBackward(a);
64
+ return operators.inv(a);
65
+ }
66
+ static backward(ctx, dOut) {
67
+ const [a] = ctx.savedValues;
68
+ return [dOut * (-1 / a ** 2)];
69
+ }
70
+ }
71
+ export class Neg extends ScalarFunction {
72
+ static forward(ctx, a) {
73
+ return operators.neg(a);
74
+ }
75
+ static backward(ctx, dOut) {
76
+ return [dOut * (-1)];
77
+ }
78
+ }
79
+ export class Sigmoid extends ScalarFunction {
80
+ static forward(ctx, a) {
81
+ const result = operators.sigmoid(a);
82
+ ctx.saveForBackward(result);
83
+ return result;
84
+ }
85
+ static backward(ctx, dOut) {
86
+ const [result] = ctx.savedValues;
87
+ return [dOut * result * (1 - result)];
88
+ }
89
+ }
90
+ export class Relu extends ScalarFunction {
91
+ static forward(ctx, a) {
92
+ ctx.saveForBackward(a);
93
+ return operators.relu(a);
94
+ }
95
+ static backward(ctx, dOut) {
96
+ const [a] = ctx.savedValues;
97
+ return [dOut * (a > 0 ? 1 : 0)];
98
+ }
99
+ }
100
+ export class Exp extends ScalarFunction {
101
+ static forward(ctx, a) {
102
+ const result = operators.exp(a);
103
+ ctx.saveForBackward(result);
104
+ return result;
105
+ }
106
+ static backward(ctx, dOut) {
107
+ const [result] = ctx.savedValues;
108
+ return [dOut * result];
109
+ }
110
+ }
111
+ export class LT extends ScalarFunction {
112
+ static forward(ctx, a, b) {
113
+ return operators.lt(a, b);
114
+ }
115
+ static backward(ctx, dOut) {
116
+ return [0, 0];
117
+ }
118
+ }
119
+ export class EQ extends ScalarFunction {
120
+ static forward(ctx, a, b) {
121
+ return operators.eq(a, b);
122
+ }
123
+ static backward(ctx, dOut) {
124
+ return [0, 0];
125
+ }
126
+ }
127
+ //# sourceMappingURL=scalar_functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scalar_functions.js","sourceRoot":"","sources":["../src/scalar_functions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { Shape } from './tensor_data.js';
2
+ import { TensorData } from './tensor_data.js';
3
+ import { TensorHistory, TensorFunction } from './tensor_functions.js';
4
+ export type TensorLike = number | Tensor;
5
+ export declare class Tensor {
6
+ private _data;
7
+ grad: Tensor | null;
8
+ history: TensorHistory | null;
9
+ constructor(data: TensorData, history?: TensorHistory | null);
10
+ isLeaf(): boolean;
11
+ requiresGrad(): boolean;
12
+ accumulateGrad(grad: Tensor): void;
13
+ chainRule(gradOutput: Tensor): [Tensor, Tensor][];
14
+ get parents(): Tensor[];
15
+ static apply(fn: typeof TensorFunction, ...vals: TensorLike[]): Tensor;
16
+ backward(gradOutput?: Tensor): void;
17
+ static tensor(values: any, shape?: Shape): Tensor;
18
+ static zeros(shape: Shape): Tensor;
19
+ static ones(shape: Shape): Tensor;
20
+ static rand(shape: Shape): Tensor;
21
+ get size(): number;
22
+ get dims(): number;
23
+ get shape(): Shape;
24
+ get data(): TensorData;
25
+ private static _ensureTensor;
26
+ neg(): Tensor;
27
+ sigmoid(): Tensor;
28
+ relu(): Tensor;
29
+ log(): Tensor;
30
+ exp(): Tensor;
31
+ inv(): Tensor;
32
+ add(other: number | Tensor): Tensor;
33
+ sub(other: number | Tensor): Tensor;
34
+ mul(other: number | Tensor): Tensor;
35
+ lt(other: number | Tensor): Tensor;
36
+ eq(other: number | Tensor): Tensor;
37
+ gt(other: number | Tensor): Tensor;
38
+ is_close(other: number | Tensor): Tensor;
39
+ radd(other: number | Tensor): Tensor;
40
+ rmul(other: number | Tensor): Tensor;
41
+ matmul(other: Tensor): Tensor;
42
+ conv1d(weight: Tensor): Tensor;
43
+ conv2d(weight: Tensor): Tensor;
44
+ sum(dim?: number): Tensor;
45
+ max(dim: number): Tensor;
46
+ mean(dim?: number): Tensor;
47
+ all(dim?: number): Tensor;
48
+ permute(...order: number[]): Tensor;
49
+ view(...shape: number[]): Tensor;
50
+ contiguous(): Tensor;
51
+ zero_grad_(): void;
52
+ get(idx: number[]): number;
53
+ set(idx: number[], value: number): void;
54
+ item(): number;
55
+ toArray(): any;
56
+ toString(): string;
57
+ }
58
+ //# sourceMappingURL=tensor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tensor.d.ts","sourceRoot":"","sources":["../src/tensor.ts"],"names":[],"mappings":"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"}
package/dist/tensor.js ADDED
@@ -0,0 +1,288 @@
1
+ import { TensorData, shapeProduct, } from './tensor_data.js';
2
+ import * as tensorFunctions from './tensor_functions.js';
3
+ import { tensorMap } from './tensor_ops.js';
4
+ import { TensorContext, TensorHistory, TensorFunction, Neg as NegFn, Sigmoid as SigmoidFn, ReLU as ReLUFn, Log as LogFn, Exp as ExpFn, Inv as InvFn, Add as AddFn, Mul as MulFn, LT as LTFn, EQ as EQFn, Sum as SumFn, Permute as PermuteFn, View as ViewFn, Contiguous as ContiguousFn, MatMul as MatMulFn, Conv1d as Conv1dFn, Conv2d as Conv2dFn, Max as MaxFn, } from './tensor_functions.js';
5
+ import { backPropagateTensor } from './autodiff.js';
6
+ export class Tensor {
7
+ _data;
8
+ grad = null;
9
+ history = null;
10
+ constructor(data, history = null) {
11
+ this._data = data;
12
+ this.history = history;
13
+ }
14
+ isLeaf() {
15
+ return !this.history?.lastFn;
16
+ }
17
+ requiresGrad() {
18
+ return this.history !== null;
19
+ }
20
+ accumulateGrad(grad) {
21
+ if (this.grad === null) {
22
+ this.grad = grad;
23
+ }
24
+ else {
25
+ this.grad = this.grad.add(grad);
26
+ }
27
+ }
28
+ chainRule(gradOutput) {
29
+ const h = this.history;
30
+ if (!h || !h.lastFn || !h.ctx) {
31
+ throw new Error("Cannot call chainRule on leaf tensor");
32
+ }
33
+ const gradients = h.lastFn.backward(h.ctx, gradOutput);
34
+ if (gradients.length !== h.inputs.length) {
35
+ throw new Error(`Backward returned ${gradients.length} gradients but expected ${h.inputs.length} for ${h.inputs.length} inputs`);
36
+ }
37
+ const result = [];
38
+ for (let i = 0; i < h.inputs.length; i++) {
39
+ result.push([h.inputs[i], gradients[i]]);
40
+ }
41
+ return result;
42
+ }
43
+ get parents() {
44
+ return this.history?.inputs ?? [];
45
+ }
46
+ static apply(fn, ...vals) {
47
+ const tensors = vals.map(v => v instanceof Tensor ? v : Tensor.tensor(v));
48
+ const ctx = new TensorContext();
49
+ const result = fn.forward(ctx, ...tensors);
50
+ const history = new TensorHistory(fn, ctx, tensors);
51
+ result.history = history;
52
+ return result;
53
+ }
54
+ backward(gradOutput) {
55
+ if (gradOutput == undefined) {
56
+ gradOutput = Tensor.ones(this.shape);
57
+ }
58
+ backPropagateTensor(this, gradOutput);
59
+ }
60
+ static tensor(values, shape) {
61
+ if (typeof values === 'number') {
62
+ const storage = new Float64Array([values]);
63
+ return new Tensor(new TensorData(storage, []));
64
+ }
65
+ const { flat, inferredShape } = flattenArray(values);
66
+ const finalShape = shape ?? inferredShape;
67
+ if (shapeProduct(finalShape) != flat.length) {
68
+ throw new Error(`Shape is incompatible with flat array size`);
69
+ }
70
+ const storage = new Float64Array(flat);
71
+ return new Tensor(new TensorData(storage, finalShape));
72
+ }
73
+ static zeros(shape) {
74
+ return new Tensor(TensorData.zeros(shape));
75
+ }
76
+ static ones(shape) {
77
+ const size = shapeProduct(shape);
78
+ const storage = new Float64Array(size).fill(1);
79
+ return new Tensor(new TensorData(storage, shape));
80
+ }
81
+ static rand(shape) {
82
+ const size = shapeProduct(shape);
83
+ const storage = new Float64Array(size);
84
+ for (let i = 0; i < size; i++) {
85
+ storage[i] = Math.random();
86
+ }
87
+ return new Tensor(new TensorData(storage, shape));
88
+ }
89
+ get size() {
90
+ return this._data.size;
91
+ }
92
+ get dims() {
93
+ return this._data.dims;
94
+ }
95
+ get shape() {
96
+ return this._data.shape;
97
+ }
98
+ get data() {
99
+ return this._data;
100
+ }
101
+ static _ensureTensor(value) {
102
+ if (value instanceof Tensor) {
103
+ return value;
104
+ }
105
+ return Tensor.tensor(value);
106
+ }
107
+ neg() {
108
+ return Tensor.apply(NegFn, this);
109
+ }
110
+ sigmoid() {
111
+ return Tensor.apply(SigmoidFn, this);
112
+ }
113
+ relu() {
114
+ return Tensor.apply(ReLUFn, this);
115
+ }
116
+ log() {
117
+ return Tensor.apply(LogFn, this);
118
+ }
119
+ exp() {
120
+ return Tensor.apply(ExpFn, this);
121
+ }
122
+ inv() {
123
+ return Tensor.apply(InvFn, this);
124
+ }
125
+ add(other) {
126
+ return Tensor.apply(AddFn, this, Tensor._ensureTensor(other));
127
+ }
128
+ sub(other) {
129
+ // a - b = a + (-b)
130
+ return this.add(Tensor._ensureTensor(other).neg());
131
+ }
132
+ mul(other) {
133
+ return Tensor.apply(MulFn, this, Tensor._ensureTensor(other));
134
+ }
135
+ lt(other) {
136
+ return Tensor.apply(LTFn, this, Tensor._ensureTensor(other));
137
+ }
138
+ eq(other) {
139
+ return Tensor.apply(EQFn, this, Tensor._ensureTensor(other));
140
+ }
141
+ gt(other) {
142
+ // a > b is equivalent to b < a
143
+ const b = Tensor._ensureTensor(other);
144
+ return Tensor.apply(LTFn, b, this);
145
+ }
146
+ is_close(other) {
147
+ // Note: is_close is a comparison operation and does not support gradients
148
+ const b = Tensor._ensureTensor(other);
149
+ return new Tensor(tensorFunctions.isClose(this._data, b._data));
150
+ }
151
+ radd(other) {
152
+ return this.add(other);
153
+ }
154
+ rmul(other) {
155
+ return this.mul(other);
156
+ }
157
+ matmul(other) {
158
+ return Tensor.apply(MatMulFn, this, other);
159
+ }
160
+ conv1d(weight) {
161
+ return Tensor.apply(Conv1dFn, this, weight);
162
+ }
163
+ conv2d(weight) {
164
+ return Tensor.apply(Conv2dFn, this, weight);
165
+ }
166
+ sum(dim) {
167
+ if (dim === undefined) {
168
+ if (this.dims === 0) {
169
+ return this;
170
+ }
171
+ let result = this;
172
+ for (let d = result.dims - 1; d >= 0; d--) {
173
+ result = Tensor.apply(SumFn(d), result);
174
+ }
175
+ return result.view();
176
+ }
177
+ if (dim < 0 || dim >= this.dims) {
178
+ throw new Error(`Invalid dimension ${dim} for tensor with ${this.dims} dimensions`);
179
+ }
180
+ return Tensor.apply(SumFn(dim), this);
181
+ }
182
+ max(dim) {
183
+ if (dim < 0 || dim >= this.dims) {
184
+ throw new Error(`Invalid dimension ${dim} for tensor with ${this.dims} dimensions`);
185
+ }
186
+ return Tensor.apply(MaxFn(dim), this);
187
+ }
188
+ mean(dim) {
189
+ if (dim === undefined) {
190
+ const s = this.sum();
191
+ const count = this.size;
192
+ return s.mul(1 / count);
193
+ }
194
+ if (dim < 0 || dim >= this.dims) {
195
+ throw new Error(`Invalid dimension ${dim} for tensor with ${this.dims} dimensions`);
196
+ }
197
+ const s = this.sum(dim);
198
+ const count = this._data.shape[dim];
199
+ return s.mul(1 / count);
200
+ }
201
+ // Note: all() is a boolean reduction and does not support gradients
202
+ all(dim) {
203
+ if (dim === undefined) {
204
+ let result = this._data;
205
+ for (let d = 0; d < result.dims; d++) {
206
+ result = tensorFunctions.prod(result, d);
207
+ }
208
+ const val = result.storage[0] !== 0 ? 1 : 0;
209
+ return Tensor.tensor(val);
210
+ }
211
+ if (dim < 0 || dim >= this.dims) {
212
+ throw new Error(`Invalid dimension ${dim} for tensor with ${this.dims} dimensions`);
213
+ }
214
+ const p = tensorFunctions.prod(this._data, dim);
215
+ const toBoolean = (x) => (x !== 0 ? 1 : 0);
216
+ const out = TensorData.zeros(p.shape);
217
+ const mapFn = tensorMap(toBoolean);
218
+ mapFn(out.storage, out.shape, out.strides, p.storage, p.shape, p.strides);
219
+ return new Tensor(out);
220
+ }
221
+ permute(...order) {
222
+ return Tensor.apply(PermuteFn(order), this);
223
+ }
224
+ view(...shape) {
225
+ return Tensor.apply(ViewFn(shape), this);
226
+ }
227
+ contiguous() {
228
+ return Tensor.apply(ContiguousFn, this);
229
+ }
230
+ zero_grad_() {
231
+ this.grad = null;
232
+ }
233
+ get(idx) {
234
+ return this._data.get(idx);
235
+ }
236
+ set(idx, value) {
237
+ this._data.set(idx, value);
238
+ }
239
+ item() {
240
+ if (this.size !== 1) {
241
+ throw new Error('item() only works for tensors with exactly one element');
242
+ }
243
+ const idx = new Array(this.dims).fill(0);
244
+ return this._data.get(idx);
245
+ }
246
+ toArray() {
247
+ return buildNestedArray(this._data, 0, new Array(this.dims).fill(0));
248
+ }
249
+ toString() {
250
+ if (this.dims === 0) {
251
+ return `Tensor(${this._data.storage[0]})`;
252
+ }
253
+ return `Tensor(${JSON.stringify(this.toArray())}, shape=[${this.shape.join(', ')}])`;
254
+ }
255
+ }
256
+ function flattenArray(arr) {
257
+ const shape = [];
258
+ let current = arr;
259
+ while (Array.isArray(current)) {
260
+ shape.push(current.length);
261
+ current = current[0];
262
+ }
263
+ const flat = [];
264
+ flattenRecursive(arr, flat);
265
+ return { flat, inferredShape: shape };
266
+ }
267
+ function flattenRecursive(arr, out) {
268
+ if (Array.isArray(arr)) {
269
+ for (const item of arr) {
270
+ flattenRecursive(item, out);
271
+ }
272
+ }
273
+ else {
274
+ out.push(arr);
275
+ }
276
+ }
277
+ function buildNestedArray(data, dim, idx) {
278
+ if (dim == data.dims) {
279
+ return data.get(idx);
280
+ }
281
+ const result = [];
282
+ for (let i = 0; i < data.shape[dim]; i++) {
283
+ idx[dim] = i;
284
+ result.push(buildNestedArray(data, dim + 1, idx));
285
+ }
286
+ return result;
287
+ }
288
+ //# sourceMappingURL=tensor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tensor.js","sourceRoot":"","sources":["../src/tensor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export declare class IndexingError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export type Shape = readonly number[];
5
+ export type Strides = readonly number[];
6
+ export type Index = readonly number[];
7
+ export type OutIndex = number[];
8
+ export type Storage = Float64Array;
9
+ export declare function indexToPosition(idx: Index, strides: Strides): number;
10
+ export declare function toIndex(ordinal: number, shape: Shape, outIndex: OutIndex): void;
11
+ export declare function shapeProduct(shape: Shape): number;
12
+ export declare function strides(shape: Shape): number[];
13
+ export declare function createSharedStorage(size: number): Storage;
14
+ export declare class TensorData {
15
+ readonly storage: Storage;
16
+ readonly shape: Shape;
17
+ readonly strides: Strides;
18
+ readonly size: number;
19
+ readonly dims: number;
20
+ constructor(storage: Storage, shape: Shape, inputStrides?: Strides);
21
+ static zeros(shape: Shape): TensorData;
22
+ get(idx: Index): number;
23
+ set(idx: Index, value: number): void;
24
+ permute(...order: number[]): TensorData;
25
+ toString(): string;
26
+ }
27
+ export declare function shapeBroadcast(shape1: Shape, shape2: Shape): number[];
28
+ export declare function broadcastIndex(bigIndex: Index, bigShape: Shape, shape: Shape, outIndex: OutIndex): void;
29
+ //# sourceMappingURL=tensor_data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tensor_data.d.ts","sourceRoot":"","sources":["../src/tensor_data.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAc,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI9B;AAED,MAAM,MAAM,KAAK,GAAG,SAAS,MAAM,EAAE,CAAC;AAEtC,MAAM,MAAM,OAAO,GAAG,SAAS,MAAM,EAAE,CAAC;AAExC,MAAM,MAAM,KAAK,GAAG,SAAS,MAAM,EAAE,CAAC;AAEtC,MAAM,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC;AAGhC,MAAM,MAAM,OAAO,GAAG,YAAY,CAAC;AAEnC,wBAAgB,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAMpE;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAO/E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAMjD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAQ9C;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,qBAAa,UAAU;IACnB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAGlB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,YAAY,CAAC,EAAE,OAAO;IAe1B,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU;IAMtC,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM;IAIvB,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIpC,OAAO,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU;IA6BvC,QAAQ,IAAI,MAAM;CAGrB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,CA0BrE;AAED,wBAAgB,cAAc,CAC1B,QAAQ,EAAE,KAAK,EACf,QAAQ,EAAE,KAAK,EACf,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,GACnB,IAAI,CAYN"}