@thi.ng/tensors 0.10.14 → 0.11.2
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 +4 -1
- package/api.d.ts +204 -173
- package/broadcast.d.ts +2 -2
- package/cdf.d.ts +25 -0
- package/cdf.js +25 -0
- package/convert.d.ts +1 -1
- package/diagonal.d.ts +2 -3
- package/diagonal.js +8 -10
- package/find.d.ts +4 -0
- package/find.js +14 -0
- package/histogram.d.ts +69 -0
- package/histogram.js +60 -0
- package/identity.d.ts +2 -3
- package/index.d.ts +3 -0
- package/index.js +3 -0
- package/integrate.d.ts +2 -3
- package/integrate.js +1 -1
- package/kernels.d.ts +7 -7
- package/mulm.d.ts +2 -2
- package/mulv.d.ts +2 -2
- package/normalize.d.ts +2 -2
- package/normalize.js +1 -1
- package/package.json +11 -2
- package/rand-distrib.d.ts +6 -7
- package/range.d.ts +3 -4
- package/range.js +1 -1
- package/sample.d.ts +8 -9
- package/sample.js +25 -5
- package/select.d.ts +5 -6
- package/set.d.ts +1 -1
- package/softmax.d.ts +2 -2
- package/svd.d.ts +5 -5
- package/tensor.d.ts +21 -20
- package/tensor.js +60 -53
package/tensor.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { NumericArray } from "@thi.ng/api";
|
|
2
|
-
import type { ITensor, ITensorStorage, Nested, NestedTensor, NumType, Shape, ShapeTensor, TensorCtor, TensorData, TensorFromArrayOpts, TensorOpts, Type, TypeMap } from "./api.js";
|
|
2
|
+
import type { ITensor, ITensor0, ITensor1, ITensor2, ITensor3, ITensor4, ITensorStorage, Nested, NestedTensor, NumType, Shape, ShapeTensor, TensorCtor, TensorData, TensorFromArrayOpts, TensorOpts, Type, TypeMap } from "./api.js";
|
|
3
3
|
export declare abstract class ATensor<T = number> implements ITensor<T> {
|
|
4
4
|
type: Type;
|
|
5
5
|
storage: ITensorStorage<T>;
|
|
@@ -8,12 +8,13 @@ export declare abstract class ATensor<T = number> implements ITensor<T> {
|
|
|
8
8
|
stride: number[];
|
|
9
9
|
offset: number;
|
|
10
10
|
constructor(type: Type, storage: ITensorStorage<T>, data: TensorData<T>, shape: number[], stride: number[], offset?: number);
|
|
11
|
+
protected _n: number;
|
|
11
12
|
abstract get dim(): number;
|
|
12
13
|
abstract get length(): number;
|
|
13
14
|
get order(): number[];
|
|
14
15
|
get orderedShape(): number[];
|
|
15
16
|
get orderedStride(): number[];
|
|
16
|
-
|
|
17
|
+
[Symbol.iterator](): IterableIterator<T>;
|
|
17
18
|
broadcast<S extends Shape>(shape: S, stride: S): ShapeTensor<S, T>;
|
|
18
19
|
copy(): typeof this;
|
|
19
20
|
empty(storage?: ITensorStorage<T>): typeof this;
|
|
@@ -23,7 +24,9 @@ export declare abstract class ATensor<T = number> implements ITensor<T> {
|
|
|
23
24
|
release(): boolean;
|
|
24
25
|
equiv(o: any): boolean;
|
|
25
26
|
eqDelta(o: ITensor<T>, eps?: number): boolean;
|
|
27
|
+
fill(value: T): this;
|
|
26
28
|
abstract index(pos: NumericArray): number;
|
|
29
|
+
abstract indices(): IterableIterator<number>;
|
|
27
30
|
position(index: number): number[];
|
|
28
31
|
abstract get(pos: NumericArray): T;
|
|
29
32
|
abstract set(pos: NumericArray, v: T): this;
|
|
@@ -43,12 +46,13 @@ export declare abstract class ATensor<T = number> implements ITensor<T> {
|
|
|
43
46
|
stride: number[];
|
|
44
47
|
};
|
|
45
48
|
}
|
|
46
|
-
export declare class Tensor0<T = number> extends ATensor<T> {
|
|
47
|
-
|
|
48
|
-
get dim(): number;
|
|
49
|
+
export declare class Tensor0<T = number> extends ATensor<T> implements ITensor0<T> {
|
|
50
|
+
get dim(): 0;
|
|
49
51
|
get order(): number[];
|
|
50
52
|
get length(): number;
|
|
53
|
+
fill(x: T): this;
|
|
51
54
|
index(): number;
|
|
55
|
+
indices(): Generator<number, void, unknown>;
|
|
52
56
|
position(): number[];
|
|
53
57
|
get(): T;
|
|
54
58
|
set(_: NumericArray, v: T): this;
|
|
@@ -57,12 +61,12 @@ export declare class Tensor0<T = number> extends ATensor<T> {
|
|
|
57
61
|
transpose(_: number[]): this;
|
|
58
62
|
toString(): string;
|
|
59
63
|
}
|
|
60
|
-
export declare class Tensor1<T = number> extends ATensor<T> {
|
|
61
|
-
|
|
62
|
-
get dim(): number;
|
|
64
|
+
export declare class Tensor1<T = number> extends ATensor<T> implements ITensor1<T> {
|
|
65
|
+
get dim(): 1;
|
|
63
66
|
get order(): number[];
|
|
64
67
|
get length(): number;
|
|
65
68
|
index([x]: NumericArray): number;
|
|
69
|
+
indices(): Generator<number, void, unknown>;
|
|
66
70
|
position(index: number): number[];
|
|
67
71
|
get([x]: NumericArray): T;
|
|
68
72
|
set([x]: NumericArray, v: T): this;
|
|
@@ -71,35 +75,32 @@ export declare class Tensor1<T = number> extends ATensor<T> {
|
|
|
71
75
|
transpose(_: number[]): this;
|
|
72
76
|
toString(): string;
|
|
73
77
|
}
|
|
74
|
-
export declare class Tensor2<T = number> extends ATensor<T> {
|
|
75
|
-
protected _n: number;
|
|
76
|
-
[Symbol.iterator](): Generator<T, void, unknown>;
|
|
78
|
+
export declare class Tensor2<T = number> extends ATensor<T> implements ITensor2<T> {
|
|
77
79
|
get length(): number;
|
|
78
|
-
get dim():
|
|
80
|
+
get dim(): 2;
|
|
79
81
|
get order(): number[];
|
|
80
82
|
index(pos: NumericArray): number;
|
|
83
|
+
indices(): Generator<number, void, unknown>;
|
|
81
84
|
get(pos: NumericArray): T;
|
|
82
85
|
set(pos: NumericArray, v: T): this;
|
|
83
86
|
resize<S extends Shape>(newShape: S, fill?: T, storage?: ITensorStorage<T>): ShapeTensor<S, T>;
|
|
84
87
|
toString(): string;
|
|
85
88
|
}
|
|
86
|
-
export declare class Tensor3<T = number> extends ATensor<T> {
|
|
87
|
-
protected _n: number;
|
|
88
|
-
[Symbol.iterator](): Generator<T, void, unknown>;
|
|
89
|
+
export declare class Tensor3<T = number> extends ATensor<T> implements ITensor3<T> {
|
|
89
90
|
get length(): number;
|
|
90
|
-
get dim():
|
|
91
|
+
get dim(): 3;
|
|
91
92
|
index(pos: NumericArray): number;
|
|
93
|
+
indices(): Generator<number, void, unknown>;
|
|
92
94
|
get(pos: NumericArray): T;
|
|
93
95
|
set(pos: NumericArray, v: T): this;
|
|
94
96
|
resize<S extends Shape>(newShape: S, fill?: T, storage?: ITensorStorage<T>): ShapeTensor<S, T>;
|
|
95
97
|
toString(): string;
|
|
96
98
|
}
|
|
97
|
-
export declare class Tensor4<T = number> extends ATensor<T> {
|
|
98
|
-
protected _n: number;
|
|
99
|
-
[Symbol.iterator](): Generator<T, void, unknown>;
|
|
99
|
+
export declare class Tensor4<T = number> extends ATensor<T> implements ITensor4<T> {
|
|
100
100
|
get length(): number;
|
|
101
|
-
get dim():
|
|
101
|
+
get dim(): 4;
|
|
102
102
|
index(pos: NumericArray): number;
|
|
103
|
+
indices(): Generator<number, void, unknown>;
|
|
103
104
|
get(pos: NumericArray): T;
|
|
104
105
|
set(pos: NumericArray, v: T): this;
|
|
105
106
|
resize<S extends Shape>(newShape: S, fill?: T, storage?: ITensorStorage<T>): ShapeTensor<S, T>;
|
package/tensor.js
CHANGED
|
@@ -20,6 +20,7 @@ class ATensor {
|
|
|
20
20
|
this.stride = stride;
|
|
21
21
|
this.offset = offset;
|
|
22
22
|
}
|
|
23
|
+
_n;
|
|
23
24
|
get order() {
|
|
24
25
|
return strideOrder(this.stride);
|
|
25
26
|
}
|
|
@@ -29,6 +30,10 @@ class ATensor {
|
|
|
29
30
|
get orderedStride() {
|
|
30
31
|
return swizzle(this.order)(this.stride);
|
|
31
32
|
}
|
|
33
|
+
*[Symbol.iterator]() {
|
|
34
|
+
const { data } = this;
|
|
35
|
+
for (let i of this.indices()) yield data[i];
|
|
36
|
+
}
|
|
32
37
|
broadcast(shape, stride) {
|
|
33
38
|
return new TENSOR_IMPLS[shape.length](
|
|
34
39
|
this.type,
|
|
@@ -70,6 +75,11 @@ class ATensor {
|
|
|
70
75
|
eqDelta(o, eps = 1e-6) {
|
|
71
76
|
return this === o || equiv(this.shape, o.shape) && _eqDelta([...this], [...o], this.length, eps);
|
|
72
77
|
}
|
|
78
|
+
fill(value) {
|
|
79
|
+
const { data } = this;
|
|
80
|
+
for (let i of this.indices()) data[i] = value;
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
73
83
|
position(index) {
|
|
74
84
|
const { order, stride } = this;
|
|
75
85
|
index |= 0;
|
|
@@ -174,9 +184,6 @@ class ATensor {
|
|
|
174
184
|
}
|
|
175
185
|
}
|
|
176
186
|
class Tensor0 extends ATensor {
|
|
177
|
-
*[Symbol.iterator]() {
|
|
178
|
-
yield this.data[this.offset];
|
|
179
|
-
}
|
|
180
187
|
get dim() {
|
|
181
188
|
return 0;
|
|
182
189
|
}
|
|
@@ -186,9 +193,16 @@ class Tensor0 extends ATensor {
|
|
|
186
193
|
get length() {
|
|
187
194
|
return 1;
|
|
188
195
|
}
|
|
196
|
+
fill(x) {
|
|
197
|
+
this.data[this.offset] = x;
|
|
198
|
+
return this;
|
|
199
|
+
}
|
|
189
200
|
index() {
|
|
190
201
|
return this.offset;
|
|
191
202
|
}
|
|
203
|
+
*indices() {
|
|
204
|
+
yield this.offset;
|
|
205
|
+
}
|
|
192
206
|
position() {
|
|
193
207
|
return [0];
|
|
194
208
|
}
|
|
@@ -229,15 +243,6 @@ class Tensor0 extends ATensor {
|
|
|
229
243
|
}
|
|
230
244
|
}
|
|
231
245
|
class Tensor1 extends ATensor {
|
|
232
|
-
*[Symbol.iterator]() {
|
|
233
|
-
let {
|
|
234
|
-
data,
|
|
235
|
-
shape: [sx],
|
|
236
|
-
stride: [tx],
|
|
237
|
-
offset
|
|
238
|
-
} = this;
|
|
239
|
-
for (; sx-- > 0; offset += tx) yield data[offset];
|
|
240
|
-
}
|
|
241
246
|
get dim() {
|
|
242
247
|
return 1;
|
|
243
248
|
}
|
|
@@ -250,6 +255,14 @@ class Tensor1 extends ATensor {
|
|
|
250
255
|
index([x]) {
|
|
251
256
|
return this.offset + x * this.stride[0];
|
|
252
257
|
}
|
|
258
|
+
*indices() {
|
|
259
|
+
let {
|
|
260
|
+
shape: [sx],
|
|
261
|
+
stride: [tx],
|
|
262
|
+
offset
|
|
263
|
+
} = this;
|
|
264
|
+
for (; sx-- > 0; offset += tx) yield offset;
|
|
265
|
+
}
|
|
253
266
|
position(index) {
|
|
254
267
|
return [~~(((index | 0) - this.offset) / this.stride[0])];
|
|
255
268
|
}
|
|
@@ -300,22 +313,8 @@ class Tensor1 extends ATensor {
|
|
|
300
313
|
}
|
|
301
314
|
}
|
|
302
315
|
class Tensor2 extends ATensor {
|
|
303
|
-
_n;
|
|
304
|
-
*[Symbol.iterator]() {
|
|
305
|
-
const {
|
|
306
|
-
data,
|
|
307
|
-
shape: [sx, sy],
|
|
308
|
-
stride: [tx, ty]
|
|
309
|
-
} = this;
|
|
310
|
-
let ox, x, y;
|
|
311
|
-
for (ox = this.offset, x = 0; x < sx; x++, ox += tx) {
|
|
312
|
-
for (y = 0; y < sy; y++) {
|
|
313
|
-
yield data[ox + y * ty];
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
316
|
get length() {
|
|
318
|
-
return this._n
|
|
317
|
+
return this._n ?? (this._n = product2(this.shape));
|
|
319
318
|
}
|
|
320
319
|
get dim() {
|
|
321
320
|
return 2;
|
|
@@ -326,6 +325,18 @@ class Tensor2 extends ATensor {
|
|
|
326
325
|
index(pos) {
|
|
327
326
|
return this.offset + dot2(pos, this.stride);
|
|
328
327
|
}
|
|
328
|
+
*indices() {
|
|
329
|
+
const {
|
|
330
|
+
shape: [sx, sy],
|
|
331
|
+
stride: [tx, ty]
|
|
332
|
+
} = this;
|
|
333
|
+
let ox, x, y;
|
|
334
|
+
for (ox = this.offset, x = 0; x < sx; x++, ox += tx) {
|
|
335
|
+
for (y = 0; y < sy; y++) {
|
|
336
|
+
yield ox + y * ty;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
329
340
|
get(pos) {
|
|
330
341
|
return this.data[this.offset + dot2(pos, this.stride)];
|
|
331
342
|
}
|
|
@@ -364,10 +375,17 @@ class Tensor2 extends ATensor {
|
|
|
364
375
|
}
|
|
365
376
|
}
|
|
366
377
|
class Tensor3 extends ATensor {
|
|
367
|
-
|
|
368
|
-
|
|
378
|
+
get length() {
|
|
379
|
+
return this._n ?? (this._n = product3(this.shape));
|
|
380
|
+
}
|
|
381
|
+
get dim() {
|
|
382
|
+
return 3;
|
|
383
|
+
}
|
|
384
|
+
index(pos) {
|
|
385
|
+
return this.offset + dot3(pos, this.stride);
|
|
386
|
+
}
|
|
387
|
+
*indices() {
|
|
369
388
|
const {
|
|
370
|
-
data,
|
|
371
389
|
shape: [sx, sy, sz],
|
|
372
390
|
stride: [tx, ty, tz]
|
|
373
391
|
} = this;
|
|
@@ -375,20 +393,11 @@ class Tensor3 extends ATensor {
|
|
|
375
393
|
for (ox = this.offset, x = 0; x < sx; x++, ox += tx) {
|
|
376
394
|
for (oy = ox, y = 0; y < sy; y++, oy += ty) {
|
|
377
395
|
for (z = 0; z < sz; z++) {
|
|
378
|
-
yield
|
|
396
|
+
yield oy + z * tz;
|
|
379
397
|
}
|
|
380
398
|
}
|
|
381
399
|
}
|
|
382
400
|
}
|
|
383
|
-
get length() {
|
|
384
|
-
return this._n || (this._n = product3(this.shape));
|
|
385
|
-
}
|
|
386
|
-
get dim() {
|
|
387
|
-
return 3;
|
|
388
|
-
}
|
|
389
|
-
index(pos) {
|
|
390
|
-
return this.offset + dot3(pos, this.stride);
|
|
391
|
-
}
|
|
392
401
|
get(pos) {
|
|
393
402
|
return this.data[this.offset + dot3(pos, this.stride)];
|
|
394
403
|
}
|
|
@@ -429,10 +438,17 @@ class Tensor3 extends ATensor {
|
|
|
429
438
|
}
|
|
430
439
|
}
|
|
431
440
|
class Tensor4 extends ATensor {
|
|
432
|
-
|
|
433
|
-
|
|
441
|
+
get length() {
|
|
442
|
+
return this._n ?? (this._n = product4(this.shape));
|
|
443
|
+
}
|
|
444
|
+
get dim() {
|
|
445
|
+
return 4;
|
|
446
|
+
}
|
|
447
|
+
index(pos) {
|
|
448
|
+
return this.offset + dot4(pos, this.stride);
|
|
449
|
+
}
|
|
450
|
+
*indices() {
|
|
434
451
|
const {
|
|
435
|
-
data,
|
|
436
452
|
shape: [sx, sy, sz, sw],
|
|
437
453
|
stride: [tx, ty, tz, tw],
|
|
438
454
|
offset
|
|
@@ -442,21 +458,12 @@ class Tensor4 extends ATensor {
|
|
|
442
458
|
for (oy = ox, y = 0; y < sy; y++, oy += ty) {
|
|
443
459
|
for (oz = oy, z = 0; z < sz; z++, oz += tz) {
|
|
444
460
|
for (w = 0; w < sw; w++) {
|
|
445
|
-
yield
|
|
461
|
+
yield oz + w * tw;
|
|
446
462
|
}
|
|
447
463
|
}
|
|
448
464
|
}
|
|
449
465
|
}
|
|
450
466
|
}
|
|
451
|
-
get length() {
|
|
452
|
-
return this._n || (this._n = product4(this.shape));
|
|
453
|
-
}
|
|
454
|
-
get dim() {
|
|
455
|
-
return 4;
|
|
456
|
-
}
|
|
457
|
-
index(pos) {
|
|
458
|
-
return this.offset + dot4(pos, this.stride);
|
|
459
|
-
}
|
|
460
467
|
get(pos) {
|
|
461
468
|
return this.data[this.offset + dot4(pos, this.stride)];
|
|
462
469
|
}
|