@thi.ng/tensors 0.1.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 (124) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/LICENSE +201 -0
  3. package/README.md +307 -0
  4. package/abs.d.ts +37 -0
  5. package/abs.js +14 -0
  6. package/add.d.ts +42 -0
  7. package/add.js +15 -0
  8. package/addn.d.ts +42 -0
  9. package/addn.js +15 -0
  10. package/api.d.ts +137 -0
  11. package/api.js +0 -0
  12. package/clamp.d.ts +47 -0
  13. package/clamp.js +15 -0
  14. package/clampn.d.ts +47 -0
  15. package/clampn.js +15 -0
  16. package/cos.d.ts +37 -0
  17. package/cos.js +14 -0
  18. package/defopn.d.ts +13 -0
  19. package/defopn.js +65 -0
  20. package/defoprt.d.ts +14 -0
  21. package/defoprt.js +77 -0
  22. package/defoprtt.d.ts +14 -0
  23. package/defoprtt.js +113 -0
  24. package/defopt.d.ts +13 -0
  25. package/defopt.js +109 -0
  26. package/defoptn.d.ts +13 -0
  27. package/defoptn.js +109 -0
  28. package/defoptnn.d.ts +13 -0
  29. package/defoptnn.js +109 -0
  30. package/defoptt.d.ts +13 -0
  31. package/defoptt.js +144 -0
  32. package/defopttt.d.ts +13 -0
  33. package/defopttt.js +177 -0
  34. package/div.d.ts +42 -0
  35. package/div.js +15 -0
  36. package/divn.d.ts +42 -0
  37. package/divn.js +15 -0
  38. package/dot.d.ts +31 -0
  39. package/dot.js +17 -0
  40. package/errors.d.ts +15 -0
  41. package/errors.js +9 -0
  42. package/exp.d.ts +37 -0
  43. package/exp.js +14 -0
  44. package/exp2.d.ts +37 -0
  45. package/exp2.js +14 -0
  46. package/format.d.ts +14 -0
  47. package/format.js +37 -0
  48. package/identity.d.ts +4 -0
  49. package/identity.js +11 -0
  50. package/index.d.ts +60 -0
  51. package/index.js +59 -0
  52. package/log.d.ts +37 -0
  53. package/log.js +14 -0
  54. package/log2.d.ts +37 -0
  55. package/log2.js +14 -0
  56. package/mag.d.ts +3 -0
  57. package/mag.js +5 -0
  58. package/magsq.d.ts +31 -0
  59. package/magsq.js +17 -0
  60. package/max.d.ts +37 -0
  61. package/max.js +14 -0
  62. package/maxn.d.ts +42 -0
  63. package/maxn.js +14 -0
  64. package/min.d.ts +37 -0
  65. package/min.js +14 -0
  66. package/minn.d.ts +42 -0
  67. package/minn.js +14 -0
  68. package/mul.d.ts +42 -0
  69. package/mul.js +15 -0
  70. package/mulm.d.ts +12 -0
  71. package/mulm.js +49 -0
  72. package/muln.d.ts +42 -0
  73. package/muln.js +15 -0
  74. package/mulv.d.ts +11 -0
  75. package/mulv.js +39 -0
  76. package/normalize.d.ts +3 -0
  77. package/normalize.js +11 -0
  78. package/package.json +261 -0
  79. package/pow.d.ts +37 -0
  80. package/pow.js +14 -0
  81. package/pown.d.ts +42 -0
  82. package/pown.js +14 -0
  83. package/product.d.ts +31 -0
  84. package/product.js +15 -0
  85. package/rand-distrib.d.ts +49 -0
  86. package/rand-distrib.js +52 -0
  87. package/relu.d.ts +37 -0
  88. package/relu.js +14 -0
  89. package/relun.d.ts +43 -0
  90. package/relun.js +14 -0
  91. package/select.d.ts +91 -0
  92. package/select.js +111 -0
  93. package/set.d.ts +8 -0
  94. package/set.js +14 -0
  95. package/setn.d.ts +8 -0
  96. package/setn.js +14 -0
  97. package/sigmoid.d.ts +39 -0
  98. package/sigmoid.js +15 -0
  99. package/sin.d.ts +37 -0
  100. package/sin.js +14 -0
  101. package/softmax.d.ts +27 -0
  102. package/softmax.js +10 -0
  103. package/softplus.d.ts +48 -0
  104. package/softplus.js +15 -0
  105. package/sqrt.d.ts +37 -0
  106. package/sqrt.js +14 -0
  107. package/step.d.ts +48 -0
  108. package/step.js +14 -0
  109. package/storage.d.ts +3 -0
  110. package/storage.js +32 -0
  111. package/sub.d.ts +42 -0
  112. package/sub.js +15 -0
  113. package/subn.d.ts +42 -0
  114. package/subn.js +15 -0
  115. package/sum.d.ts +31 -0
  116. package/sum.js +15 -0
  117. package/tan.d.ts +37 -0
  118. package/tan.js +14 -0
  119. package/tanh.d.ts +37 -0
  120. package/tanh.js +14 -0
  121. package/tensor.d.ts +127 -0
  122. package/tensor.js +517 -0
  123. package/top.d.ts +16 -0
  124. package/top.js +15 -0
package/subn.d.ts ADDED
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Componentwise nD tensor subtraction with uniform scalar `n`. Writes result to
3
+ * `out`. If `out` is null, mutates `a`. Multi-method.
4
+ *
5
+ * @param out - output tensor
6
+ * @param a - input tensor
7
+ * @param n - scalar
8
+ */
9
+ export declare const subN: import("./api.js").MultiTensorOpTN<number>;
10
+ /**
11
+ * Same as {@link subN} for 1D tensors.
12
+ *
13
+ * @param out - output tensor
14
+ * @param a - input tensor
15
+ * @param n - scalar
16
+ */
17
+ export declare const subN1: import("./api.js").TensorOpTN<number, number, import("./tensor.js").Tensor1<number>, import("./tensor.js").Tensor1<number>>;
18
+ /**
19
+ * Same as {@link subN} for 2D tensors.
20
+ *
21
+ * @param out - output tensor
22
+ * @param a - input tensor
23
+ * @param n - scalar
24
+ */
25
+ export declare const subN2: import("./api.js").TensorOpTN<number, number, import("./tensor.js").Tensor2<number>, import("./tensor.js").Tensor2<number>>;
26
+ /**
27
+ * Same as {@link subN} for 3D tensors.
28
+ *
29
+ * @param out - output tensor
30
+ * @param a - input tensor
31
+ * @param n - scalar
32
+ */
33
+ export declare const subN3: import("./api.js").TensorOpTN<number, number, import("./tensor.js").Tensor3<number>, import("./tensor.js").Tensor3<number>>;
34
+ /**
35
+ * Same as {@link subN} for 4D tensors.
36
+ *
37
+ * @param out - output tensor
38
+ * @param a - input tensor
39
+ * @param n - scalar
40
+ */
41
+ export declare const subN4: import("./api.js").TensorOpTN<number, number, import("./tensor.js").Tensor4<number>, import("./tensor.js").Tensor4<number>>;
42
+ //# sourceMappingURL=subn.d.ts.map
package/subn.js ADDED
@@ -0,0 +1,15 @@
1
+ import { $sub } from "@thi.ng/vectors/ops";
2
+ import { defOpTN } from "./defoptn.js";
3
+ const [a, b, c, d, e] = defOpTN($sub);
4
+ const subN = a;
5
+ const subN1 = b;
6
+ const subN2 = c;
7
+ const subN3 = d;
8
+ const subN4 = e;
9
+ export {
10
+ subN,
11
+ subN1,
12
+ subN2,
13
+ subN3,
14
+ subN4
15
+ };
package/sum.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Componentwise sum of given nD tensor. Multi-method.
3
+ *
4
+ * @param a - input tensor
5
+ */
6
+ export declare const sum: import("./api.js").MultiTensorOpRT<number, number>;
7
+ /**
8
+ * Componentwise sum of given 1D tensor.
9
+ *
10
+ * @param a - input tensor
11
+ */
12
+ export declare const sum1: import("./api.js").TensorOpRT<number, number, import("./tensor.js").Tensor1<number>>;
13
+ /**
14
+ * Componentwise sum of given 2D tensor.
15
+ *
16
+ * @param a - input tensor
17
+ */
18
+ export declare const sum2: import("./api.js").TensorOpRT<number, number, import("./tensor.js").Tensor2<number>>;
19
+ /**
20
+ * Componentwise sum of given 3D tensor.
21
+ *
22
+ * @param a - input tensor
23
+ */
24
+ export declare const sum3: import("./api.js").TensorOpRT<number, number, import("./tensor.js").Tensor3<number>>;
25
+ /**
26
+ * Componentwise sum of given 4D tensor.
27
+ *
28
+ * @param a - input tensor
29
+ */
30
+ export declare const sum4: import("./api.js").TensorOpRT<number, number, import("./tensor.js").Tensor4<number>>;
31
+ //# sourceMappingURL=sum.d.ts.map
package/sum.js ADDED
@@ -0,0 +1,15 @@
1
+ import { $add } from "@thi.ng/vectors/ops";
2
+ import { defOpRT } from "./defoprt.js";
3
+ const [a, b, c, d, e] = defOpRT($add, () => 0);
4
+ const sum = a;
5
+ const sum1 = b;
6
+ const sum2 = c;
7
+ const sum3 = d;
8
+ const sum4 = e;
9
+ export {
10
+ sum,
11
+ sum1,
12
+ sum2,
13
+ sum3,
14
+ sum4
15
+ };
package/tan.d.ts ADDED
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Componentwise computes `Math.tan` of given nD tensor and writes result to
3
+ * `out`. If `out` is null, mutates original. Multi-method.
4
+ *
5
+ * @param out - output tensor
6
+ * @param a - input tensor
7
+ */
8
+ export declare const tan: import("./api.js").MultiTensorOpT<number>;
9
+ /**
10
+ * Same as {@link tan} for 1D tensors.
11
+ *
12
+ * @param out - output tensor
13
+ * @param a - input tensor
14
+ */
15
+ export declare const tan1: import("./api.js").TensorOpT<number, number, import("./tensor.js").Tensor1<number>, import("./tensor.js").Tensor1<number>>;
16
+ /**
17
+ * Same as {@link tan} for 2D tensors.
18
+ *
19
+ * @param out - output tensor
20
+ * @param a - input tensor
21
+ */
22
+ export declare const tan2: import("./api.js").TensorOpT<number, number, import("./tensor.js").Tensor2<number>, import("./tensor.js").Tensor2<number>>;
23
+ /**
24
+ * Same as {@link tan} for 3D tensors.
25
+ *
26
+ * @param out - output tensor
27
+ * @param a - input tensor
28
+ */
29
+ export declare const tan3: import("./api.js").TensorOpT<number, number, import("./tensor.js").Tensor3<number>, import("./tensor.js").Tensor3<number>>;
30
+ /**
31
+ * Same as {@link tan} for 4D tensors.
32
+ *
33
+ * @param out - output tensor
34
+ * @param a - input tensor
35
+ */
36
+ export declare const tan4: import("./api.js").TensorOpT<number, number, import("./tensor.js").Tensor4<number>, import("./tensor.js").Tensor4<number>>;
37
+ //# sourceMappingURL=tan.d.ts.map
package/tan.js ADDED
@@ -0,0 +1,14 @@
1
+ import { defOpT } from "./defopt.js";
2
+ const [a, b, c, d, e] = defOpT(Math.tan);
3
+ const tan = a;
4
+ const tan1 = b;
5
+ const tan2 = c;
6
+ const tan3 = d;
7
+ const tan4 = e;
8
+ export {
9
+ tan,
10
+ tan1,
11
+ tan2,
12
+ tan3,
13
+ tan4
14
+ };
package/tanh.d.ts ADDED
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Componentwise computes `Math.tanh` of given nD tensor and writes result to
3
+ * `out`. If `out` is null, mutates original. Multi-method.
4
+ *
5
+ * @param out - output tensor
6
+ * @param a - input tensor
7
+ */
8
+ export declare const tanh: import("./api.js").MultiTensorOpT<number>;
9
+ /**
10
+ * Same as {@link tanh} for 1D tensors.
11
+ *
12
+ * @param out - output tensor
13
+ * @param a - input tensor
14
+ */
15
+ export declare const tanh1: import("./api.js").TensorOpT<number, number, import("./tensor.js").Tensor1<number>, import("./tensor.js").Tensor1<number>>;
16
+ /**
17
+ * Same as {@link tanh} for 2D tensors.
18
+ *
19
+ * @param out - output tensor
20
+ * @param a - input tensor
21
+ */
22
+ export declare const tanh2: import("./api.js").TensorOpT<number, number, import("./tensor.js").Tensor2<number>, import("./tensor.js").Tensor2<number>>;
23
+ /**
24
+ * Same as {@link tanh} for 3D tensors.
25
+ *
26
+ * @param out - output tensor
27
+ * @param a - input tensor
28
+ */
29
+ export declare const tanh3: import("./api.js").TensorOpT<number, number, import("./tensor.js").Tensor3<number>, import("./tensor.js").Tensor3<number>>;
30
+ /**
31
+ * Same as {@link tanh} for 4D tensors.
32
+ *
33
+ * @param out - output tensor
34
+ * @param a - input tensor
35
+ */
36
+ export declare const tanh4: import("./api.js").TensorOpT<number, number, import("./tensor.js").Tensor4<number>, import("./tensor.js").Tensor4<number>>;
37
+ //# sourceMappingURL=tanh.d.ts.map
package/tanh.js ADDED
@@ -0,0 +1,14 @@
1
+ import { defOpT } from "./defopt.js";
2
+ const [a, b, c, d, e] = defOpT(Math.tanh);
3
+ const tanh = a;
4
+ const tanh1 = b;
5
+ const tanh2 = c;
6
+ const tanh3 = d;
7
+ const tanh4 = e;
8
+ export {
9
+ tanh,
10
+ tanh1,
11
+ tanh2,
12
+ tanh3,
13
+ tanh4
14
+ };
package/tensor.d.ts ADDED
@@ -0,0 +1,127 @@
1
+ import type { Maybe, NumericArray } from "@thi.ng/api";
2
+ import type { ITensor, ITensorStorage, Nested, NestedTensor, NumType, Shape, ShapeTensor, TensorCtor, TensorData, TensorFromArrayOpts, TensorOpts, Type, TypeMap } from "./api.js";
3
+ export declare abstract class ATensor<T = number> implements ITensor<T> {
4
+ type: Type;
5
+ storage: ITensorStorage<T>;
6
+ data: TensorData<T>;
7
+ shape: number[];
8
+ stride: number[];
9
+ offset: number;
10
+ constructor(type: Type, storage: ITensorStorage<T>, data: TensorData<T>, shape: number[], stride: number[], offset?: number);
11
+ abstract get dim(): number;
12
+ abstract get length(): number;
13
+ get order(): number[];
14
+ get orderedShape(): number[];
15
+ get orderedStride(): number[];
16
+ abstract [Symbol.iterator](): IterableIterator<T>;
17
+ copy(): typeof this;
18
+ empty(storage?: ITensorStorage<T>): typeof this;
19
+ equiv(o: any): boolean;
20
+ eqDelta(o: ITensor<T>, eps?: number): boolean;
21
+ abstract index(pos: NumericArray): number;
22
+ abstract get(pos: NumericArray): T;
23
+ abstract set(pos: NumericArray, v: T): this;
24
+ hi(pos: NumericArray): this;
25
+ lo(pos: NumericArray): this;
26
+ step(select: NumericArray): typeof this;
27
+ pick(select: NumericArray): ITensor<T>;
28
+ pack(storage?: ITensorStorage<T>): typeof this;
29
+ reshape<S extends Shape>(newShape: S, newStride?: S): ShapeTensor<S, T>;
30
+ abstract resize<S extends Shape>(newShape: S, fill?: T, storage?: ITensorStorage<T>): ShapeTensor<S, T>;
31
+ transpose(order: NumericArray): typeof this;
32
+ abstract toString(): string;
33
+ toJSON(): {
34
+ buf: T[];
35
+ shape: number[];
36
+ stride: any[];
37
+ };
38
+ }
39
+ export declare class Tensor1<T = number> extends ATensor<T> {
40
+ [Symbol.iterator](): IterableIterator<T>;
41
+ get dim(): number;
42
+ get order(): number[];
43
+ get length(): number;
44
+ index([x]: NumericArray): number;
45
+ get([x]: NumericArray): T;
46
+ set([x]: NumericArray, v: T): this;
47
+ pick([x]: NumericArray): Tensor1<T>;
48
+ resize<S extends Shape>(newShape: S, fill?: T, storage?: ITensorStorage<T>): ShapeTensor<S, T>;
49
+ transpose(_: number[]): this;
50
+ toString(): string;
51
+ }
52
+ export declare class Tensor2<T = number> extends ATensor<T> {
53
+ protected _n: number;
54
+ [Symbol.iterator](): Generator<T, void, unknown>;
55
+ get length(): number;
56
+ get dim(): number;
57
+ get order(): number[];
58
+ index(pos: NumericArray): number;
59
+ get(pos: NumericArray): T;
60
+ set(pos: NumericArray, v: T): this;
61
+ resize<S extends Shape>(newShape: S, fill?: T, storage?: ITensorStorage<T>): ShapeTensor<S, T>;
62
+ toString(): string;
63
+ }
64
+ export declare class Tensor3<T = number> extends ATensor<T> {
65
+ protected _n: number;
66
+ [Symbol.iterator](): Generator<T, void, unknown>;
67
+ get length(): number;
68
+ get dim(): number;
69
+ index(pos: NumericArray): number;
70
+ get(pos: NumericArray): T;
71
+ set(pos: NumericArray, v: T): this;
72
+ resize<S extends Shape>(newShape: S, fill?: T, storage?: ITensorStorage<T>): ShapeTensor<S, T>;
73
+ toString(): string;
74
+ }
75
+ export declare class Tensor4<T = number> extends ATensor<T> {
76
+ protected _n: number;
77
+ [Symbol.iterator](): Generator<T, void, unknown>;
78
+ get length(): number;
79
+ get dim(): number;
80
+ index(pos: NumericArray): number;
81
+ get(pos: NumericArray): T;
82
+ set(pos: NumericArray, v: T): this;
83
+ resize<S extends Shape>(newShape: S, fill?: T, storage?: ITensorStorage<T>): ShapeTensor<S, T>;
84
+ toString(): string;
85
+ }
86
+ export declare const TENSOR_IMPLS: Maybe<TensorCtor<any>>[];
87
+ /** Syntax sugar for {@link tensorFromArray}. */
88
+ export declare function tensor<T extends NumType, N extends Nested<number>>(data: N, opts?: TensorFromArrayOpts<T, number>): NestedTensor<N, number>;
89
+ /** Syntax sugar for {@link tensorFromArray}. */
90
+ export declare function tensor<N extends Nested<string>>(data: N, opts?: TensorFromArrayOpts<"str", string>): NestedTensor<N, string>;
91
+ /**
92
+ * Creates a new {@link ITensor} instance for given data type, shape and
93
+ * options.
94
+ *
95
+ * @remarks
96
+ * Currently only 1D - 4D tensors are supported.
97
+ *
98
+ * @param type
99
+ * @param shape
100
+ * @param opts
101
+ */
102
+ export declare function tensor<T extends Type, S extends Shape>(type: T, shape: S, opts?: TensorOpts<TypeMap[T], S>): ShapeTensor<S, TypeMap[T]>;
103
+ /**
104
+ * Creates a new {@link ITensor} instance from given (possibly nested) numeric
105
+ * array, and options.
106
+ *
107
+ * @remarks
108
+ * Currently only 1D - 4D tensors are supported.
109
+ *
110
+ * @param data
111
+ * @param opts
112
+ */
113
+ export declare function tensorFromArray<T extends NumType, N extends Nested<number>>(data: N, opts?: TensorFromArrayOpts<T, number>): NestedTensor<N, number>;
114
+ /**
115
+ * Creates a new {@link ITensor} instance from given (possibly nested) string
116
+ * array, and options.
117
+ *
118
+ * @remarks
119
+ * Currently only 1D - 4D tensors are supported.
120
+ *
121
+ * @param data
122
+ * @param opts
123
+ */
124
+ export declare function tensorFromArray<N extends Nested<string>>(data: N, opts?: TensorFromArrayOpts<"str", string>): NestedTensor<N, string>;
125
+ export declare const shapeToStride: (shape: NumericArray) => any[];
126
+ export declare const strideOrder: (strides: number[]) => number[];
127
+ //# sourceMappingURL=tensor.d.ts.map