@thi.ng/dual-algebra 0.4.1 → 0.4.4
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/CHANGELOG.md +1 -1
- package/README.md +1 -1
- package/ops.d.ts +14 -14
- package/ops.js +14 -14
- package/package.json +7 -7
- package/poly.d.ts +30 -30
- package/poly.js +30 -30
- package/vector.d.ts +10 -10
- package/vector.js +10 -10
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
package/ops.d.ts
CHANGED
|
@@ -10,29 +10,29 @@ export declare const dual: (real: number, n?: number, i?: number) => Dual;
|
|
|
10
10
|
/**
|
|
11
11
|
* Creates a 1-dual number of `r`. Syntax sugar for {@link dual}.
|
|
12
12
|
*
|
|
13
|
-
* @param r
|
|
14
|
-
* @param i
|
|
13
|
+
* @param r -
|
|
14
|
+
* @param i -
|
|
15
15
|
*/
|
|
16
16
|
export declare const $: (r: number, i?: number) => number[];
|
|
17
17
|
/**
|
|
18
18
|
* Creates a 2-dual number of `r`. Syntax sugar for {@link dual}.
|
|
19
19
|
*
|
|
20
|
-
* @param r
|
|
21
|
-
* @param i
|
|
20
|
+
* @param r -
|
|
21
|
+
* @param i -
|
|
22
22
|
*/
|
|
23
23
|
export declare const $2: (r: number, i?: number) => import("@thi.ng/api").NumericArray;
|
|
24
24
|
/**
|
|
25
25
|
* Creates a 3-dual number of `r`. Syntax sugar for {@link dual}.
|
|
26
26
|
*
|
|
27
|
-
* @param r
|
|
28
|
-
* @param i
|
|
27
|
+
* @param r -
|
|
28
|
+
* @param i -
|
|
29
29
|
*/
|
|
30
30
|
export declare const $3: (r: number, i?: number) => import("@thi.ng/api").NumericArray;
|
|
31
31
|
/**
|
|
32
32
|
* Creates a 4-dual number of `r`. Syntax sugar for {@link dual}.
|
|
33
33
|
*
|
|
34
|
-
* @param r
|
|
35
|
-
* @param i
|
|
34
|
+
* @param r -
|
|
35
|
+
* @param i -
|
|
36
36
|
*/
|
|
37
37
|
export declare const $4: (r: number, i?: number) => import("@thi.ng/api").NumericArray;
|
|
38
38
|
export declare const defOp: <T extends Function>(single: T, multi: T, dispatch?: number) => T;
|
|
@@ -53,9 +53,9 @@ export declare const atan: Op1;
|
|
|
53
53
|
/**
|
|
54
54
|
* Linear interpolation for dual numbers: `a + (b - a) * t`
|
|
55
55
|
*
|
|
56
|
-
* @param a
|
|
57
|
-
* @param b
|
|
58
|
-
* @param t
|
|
56
|
+
* @param a -
|
|
57
|
+
* @param b -
|
|
58
|
+
* @param t -
|
|
59
59
|
*/
|
|
60
60
|
export declare const mix: (a: Dual, b: Dual, t: Dual) => import("@thi.ng/api").NumericArray;
|
|
61
61
|
/**
|
|
@@ -71,19 +71,19 @@ export declare const mix: (a: Dual, b: Dual, t: Dual) => import("@thi.ng/api").N
|
|
|
71
71
|
* - index 1 - derivative of first var at `x`
|
|
72
72
|
* - index 2 - derivative of second var at `y`
|
|
73
73
|
*
|
|
74
|
-
* @param fn
|
|
74
|
+
* @param fn -
|
|
75
75
|
*/
|
|
76
76
|
export declare const evalFn2: (fn: Op2) => (x: number, y: number) => import("@thi.ng/api").NumericArray;
|
|
77
77
|
/**
|
|
78
78
|
* Same as {@link evalFn2}, but 3-multivariate functions.
|
|
79
79
|
*
|
|
80
|
-
* @param fn
|
|
80
|
+
* @param fn -
|
|
81
81
|
*/
|
|
82
82
|
export declare const evalFn3: (fn: Op3) => (x: number, y: number, z: number) => import("@thi.ng/api").NumericArray;
|
|
83
83
|
/**
|
|
84
84
|
* Same as {@link evalFn4}, but 4-multivariate functions.
|
|
85
85
|
*
|
|
86
|
-
* @param fn
|
|
86
|
+
* @param fn -
|
|
87
87
|
*/
|
|
88
88
|
export declare const evalFn4: (fn: Op4) => (x: number, y: number, z: number, w: number) => import("@thi.ng/api").NumericArray;
|
|
89
89
|
//# sourceMappingURL=ops.d.ts.map
|
package/ops.js
CHANGED
|
@@ -14,29 +14,29 @@ export const dual = (real, n = 1, i = 0) => {
|
|
|
14
14
|
/**
|
|
15
15
|
* Creates a 1-dual number of `r`. Syntax sugar for {@link dual}.
|
|
16
16
|
*
|
|
17
|
-
* @param r
|
|
18
|
-
* @param i
|
|
17
|
+
* @param r -
|
|
18
|
+
* @param i -
|
|
19
19
|
*/
|
|
20
20
|
export const $ = (r, i = 0) => [r, i === 1 ? 1 : 0];
|
|
21
21
|
/**
|
|
22
22
|
* Creates a 2-dual number of `r`. Syntax sugar for {@link dual}.
|
|
23
23
|
*
|
|
24
|
-
* @param r
|
|
25
|
-
* @param i
|
|
24
|
+
* @param r -
|
|
25
|
+
* @param i -
|
|
26
26
|
*/
|
|
27
27
|
export const $2 = (r, i = 0) => dual(r, 2, i);
|
|
28
28
|
/**
|
|
29
29
|
* Creates a 3-dual number of `r`. Syntax sugar for {@link dual}.
|
|
30
30
|
*
|
|
31
|
-
* @param r
|
|
32
|
-
* @param i
|
|
31
|
+
* @param r -
|
|
32
|
+
* @param i -
|
|
33
33
|
*/
|
|
34
34
|
export const $3 = (r, i = 0) => dual(r, 3, i);
|
|
35
35
|
/**
|
|
36
36
|
* Creates a 4-dual number of `r`. Syntax sugar for {@link dual}.
|
|
37
37
|
*
|
|
38
|
-
* @param r
|
|
39
|
-
* @param i
|
|
38
|
+
* @param r -
|
|
39
|
+
* @param i -
|
|
40
40
|
*/
|
|
41
41
|
export const $4 = (r, i = 0) => dual(r, 4, i);
|
|
42
42
|
export const defOp = (single, multi, dispatch = 0) => (((...xs) => xs[dispatch].length < 3 ? single(...xs) : multi(...xs)));
|
|
@@ -150,9 +150,9 @@ export const atan = defOp(([ar, ad]) => [Math.atan(ar), ad / (1 + ar * ar)], (a)
|
|
|
150
150
|
/**
|
|
151
151
|
* Linear interpolation for dual numbers: `a + (b - a) * t`
|
|
152
152
|
*
|
|
153
|
-
* @param a
|
|
154
|
-
* @param b
|
|
155
|
-
* @param t
|
|
153
|
+
* @param a -
|
|
154
|
+
* @param b -
|
|
155
|
+
* @param t -
|
|
156
156
|
*/
|
|
157
157
|
export const mix = (a, b, t) => add(a, mul(sub(b, a), t));
|
|
158
158
|
/**
|
|
@@ -168,18 +168,18 @@ export const mix = (a, b, t) => add(a, mul(sub(b, a), t));
|
|
|
168
168
|
* - index 1 - derivative of first var at `x`
|
|
169
169
|
* - index 2 - derivative of second var at `y`
|
|
170
170
|
*
|
|
171
|
-
* @param fn
|
|
171
|
+
* @param fn -
|
|
172
172
|
*/
|
|
173
173
|
export const evalFn2 = (fn) => (x, y) => fn([x, 1, 0], [y, 0, 1]);
|
|
174
174
|
/**
|
|
175
175
|
* Same as {@link evalFn2}, but 3-multivariate functions.
|
|
176
176
|
*
|
|
177
|
-
* @param fn
|
|
177
|
+
* @param fn -
|
|
178
178
|
*/
|
|
179
179
|
export const evalFn3 = (fn) => (x, y, z) => fn([x, 1, 0, 0], [y, 0, 1, 0], [z, 0, 0, 1]);
|
|
180
180
|
/**
|
|
181
181
|
* Same as {@link evalFn4}, but 4-multivariate functions.
|
|
182
182
|
*
|
|
183
|
-
* @param fn
|
|
183
|
+
* @param fn -
|
|
184
184
|
*/
|
|
185
185
|
export const evalFn4 = (fn) => (x, y, z, w) => fn([x, 1, 0, 0, 0], [y, 0, 1, 0, 0], [z, 0, 0, 1, 0], [w, 0, 0, 0, 1]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thi.ng/dual-algebra",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"description": "Multivariate dual number algebra, automatic differentiation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "./index.js",
|
|
@@ -34,15 +34,15 @@
|
|
|
34
34
|
"test": "testament test"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@thi.ng/api": "^8.3.
|
|
37
|
+
"@thi.ng/api": "^8.3.4"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@microsoft/api-extractor": "^7.
|
|
41
|
-
"@thi.ng/testament": "^0.2.
|
|
40
|
+
"@microsoft/api-extractor": "^7.19.4",
|
|
41
|
+
"@thi.ng/testament": "^0.2.4",
|
|
42
42
|
"rimraf": "^3.0.2",
|
|
43
43
|
"tools": "^0.0.1",
|
|
44
|
-
"typedoc": "^0.22.
|
|
45
|
-
"typescript": "^4.
|
|
44
|
+
"typedoc": "^0.22.13",
|
|
45
|
+
"typescript": "^4.6.2"
|
|
46
46
|
},
|
|
47
47
|
"keywords": [
|
|
48
48
|
"algebra",
|
|
@@ -91,5 +91,5 @@
|
|
|
91
91
|
"status": "alpha",
|
|
92
92
|
"year": 2020
|
|
93
93
|
},
|
|
94
|
-
"gitHead": "
|
|
94
|
+
"gitHead": "0fc692a3225c068aacafdc4cb6140cf603c67ad8\n"
|
|
95
95
|
}
|
package/poly.d.ts
CHANGED
|
@@ -3,64 +3,64 @@ import type { Dual, Op4, Op5 } from "./api.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* Computes: `ax^2 + bx + c`. All args must have same size/arity.
|
|
5
5
|
*
|
|
6
|
-
* @param x
|
|
7
|
-
* @param a
|
|
8
|
-
* @param b
|
|
9
|
-
* @param c
|
|
6
|
+
* @param x -
|
|
7
|
+
* @param a -
|
|
8
|
+
* @param b -
|
|
9
|
+
* @param c -
|
|
10
10
|
*/
|
|
11
11
|
export declare const quadratic: Op4;
|
|
12
12
|
/**
|
|
13
13
|
* Same as {@link quadratic}, but for real/scalar inputs. `x` is treated as
|
|
14
14
|
* variable `x+1ε`, the rest as `n+0ε`.
|
|
15
15
|
*
|
|
16
|
-
* @param x
|
|
17
|
-
* @param a
|
|
18
|
-
* @param b
|
|
19
|
-
* @param c
|
|
16
|
+
* @param x -
|
|
17
|
+
* @param a -
|
|
18
|
+
* @param b -
|
|
19
|
+
* @param c -
|
|
20
20
|
*/
|
|
21
21
|
export declare const quadraticS: FnU4<number, Dual>;
|
|
22
22
|
/**
|
|
23
23
|
* Computes: `ax^3 + bx^2 + cx + d`. All args must have same size/arity.
|
|
24
24
|
*
|
|
25
|
-
* @param x
|
|
26
|
-
* @param a
|
|
27
|
-
* @param b
|
|
28
|
-
* @param c
|
|
29
|
-
* @param d
|
|
25
|
+
* @param x -
|
|
26
|
+
* @param a -
|
|
27
|
+
* @param b -
|
|
28
|
+
* @param c -
|
|
29
|
+
* @param d -
|
|
30
30
|
*/
|
|
31
31
|
export declare const cubic: Op5;
|
|
32
32
|
/**
|
|
33
33
|
* Same as {@link cubic}, but for real/scalar inputs. `x` is treated as variable
|
|
34
34
|
* `x+1ε`, the rest as `n+0ε`.
|
|
35
35
|
*
|
|
36
|
-
* @param x
|
|
37
|
-
* @param a
|
|
38
|
-
* @param b
|
|
39
|
-
* @param c
|
|
40
|
-
* @param d
|
|
36
|
+
* @param x -
|
|
37
|
+
* @param a -
|
|
38
|
+
* @param b -
|
|
39
|
+
* @param c -
|
|
40
|
+
* @param d -
|
|
41
41
|
*/
|
|
42
42
|
export declare const cubicS: FnU5<number, Dual>;
|
|
43
43
|
/**
|
|
44
44
|
* Computes: `ax^4 + bx^3 + cx^2 + dx + e`. All args must have same size/arity.
|
|
45
45
|
*
|
|
46
|
-
* @param x
|
|
47
|
-
* @param a
|
|
48
|
-
* @param b
|
|
49
|
-
* @param c
|
|
50
|
-
* @param d
|
|
51
|
-
* @param e
|
|
46
|
+
* @param x -
|
|
47
|
+
* @param a -
|
|
48
|
+
* @param b -
|
|
49
|
+
* @param c -
|
|
50
|
+
* @param d -
|
|
51
|
+
* @param e -
|
|
52
52
|
*/
|
|
53
53
|
export declare const quartic: (x: Dual, a: Dual, b: Dual, c: Dual, d: Dual, e: Dual) => import("@thi.ng/api").NumericArray;
|
|
54
54
|
/**
|
|
55
55
|
* Same as {@link quartic}, but for real/scalar inputs. `x` is treated as
|
|
56
56
|
* variable `x+1ε`, the rest as `n+0ε`.
|
|
57
57
|
*
|
|
58
|
-
* @param x
|
|
59
|
-
* @param a
|
|
60
|
-
* @param b
|
|
61
|
-
* @param c
|
|
62
|
-
* @param d
|
|
63
|
-
* @param e
|
|
58
|
+
* @param x -
|
|
59
|
+
* @param a -
|
|
60
|
+
* @param b -
|
|
61
|
+
* @param c -
|
|
62
|
+
* @param d -
|
|
63
|
+
* @param e -
|
|
64
64
|
*/
|
|
65
65
|
export declare const quarticS: FnU6<number, Dual>;
|
|
66
66
|
//# sourceMappingURL=poly.d.ts.map
|
package/poly.js
CHANGED
|
@@ -2,30 +2,30 @@ import { add, mul } from "./ops.js";
|
|
|
2
2
|
/**
|
|
3
3
|
* Computes: `ax^2 + bx + c`. All args must have same size/arity.
|
|
4
4
|
*
|
|
5
|
-
* @param x
|
|
6
|
-
* @param a
|
|
7
|
-
* @param b
|
|
8
|
-
* @param c
|
|
5
|
+
* @param x -
|
|
6
|
+
* @param a -
|
|
7
|
+
* @param b -
|
|
8
|
+
* @param c -
|
|
9
9
|
*/
|
|
10
10
|
export const quadratic = (x, a, b, c) => add(add(mul(a, mul(x, x)), mul(b, x)), c);
|
|
11
11
|
/**
|
|
12
12
|
* Same as {@link quadratic}, but for real/scalar inputs. `x` is treated as
|
|
13
13
|
* variable `x+1ε`, the rest as `n+0ε`.
|
|
14
14
|
*
|
|
15
|
-
* @param x
|
|
16
|
-
* @param a
|
|
17
|
-
* @param b
|
|
18
|
-
* @param c
|
|
15
|
+
* @param x -
|
|
16
|
+
* @param a -
|
|
17
|
+
* @param b -
|
|
18
|
+
* @param c -
|
|
19
19
|
*/
|
|
20
20
|
export const quadraticS = (x, a, b, c) => quadratic([x, 1], [a, 0], [b, 0], [c, 0]);
|
|
21
21
|
/**
|
|
22
22
|
* Computes: `ax^3 + bx^2 + cx + d`. All args must have same size/arity.
|
|
23
23
|
*
|
|
24
|
-
* @param x
|
|
25
|
-
* @param a
|
|
26
|
-
* @param b
|
|
27
|
-
* @param c
|
|
28
|
-
* @param d
|
|
24
|
+
* @param x -
|
|
25
|
+
* @param a -
|
|
26
|
+
* @param b -
|
|
27
|
+
* @param c -
|
|
28
|
+
* @param d -
|
|
29
29
|
*/
|
|
30
30
|
export const cubic = (x, a, b, c, d) => {
|
|
31
31
|
const x2 = mul(x, x);
|
|
@@ -35,22 +35,22 @@ export const cubic = (x, a, b, c, d) => {
|
|
|
35
35
|
* Same as {@link cubic}, but for real/scalar inputs. `x` is treated as variable
|
|
36
36
|
* `x+1ε`, the rest as `n+0ε`.
|
|
37
37
|
*
|
|
38
|
-
* @param x
|
|
39
|
-
* @param a
|
|
40
|
-
* @param b
|
|
41
|
-
* @param c
|
|
42
|
-
* @param d
|
|
38
|
+
* @param x -
|
|
39
|
+
* @param a -
|
|
40
|
+
* @param b -
|
|
41
|
+
* @param c -
|
|
42
|
+
* @param d -
|
|
43
43
|
*/
|
|
44
44
|
export const cubicS = (x, a, b, c, d) => cubic([x, 1], [a, 0], [b, 0], [c, 0], [d, 0]);
|
|
45
45
|
/**
|
|
46
46
|
* Computes: `ax^4 + bx^3 + cx^2 + dx + e`. All args must have same size/arity.
|
|
47
47
|
*
|
|
48
|
-
* @param x
|
|
49
|
-
* @param a
|
|
50
|
-
* @param b
|
|
51
|
-
* @param c
|
|
52
|
-
* @param d
|
|
53
|
-
* @param e
|
|
48
|
+
* @param x -
|
|
49
|
+
* @param a -
|
|
50
|
+
* @param b -
|
|
51
|
+
* @param c -
|
|
52
|
+
* @param d -
|
|
53
|
+
* @param e -
|
|
54
54
|
*/
|
|
55
55
|
export const quartic = (x, a, b, c, d, e) => {
|
|
56
56
|
const x2 = mul(x, x);
|
|
@@ -61,11 +61,11 @@ export const quartic = (x, a, b, c, d, e) => {
|
|
|
61
61
|
* Same as {@link quartic}, but for real/scalar inputs. `x` is treated as
|
|
62
62
|
* variable `x+1ε`, the rest as `n+0ε`.
|
|
63
63
|
*
|
|
64
|
-
* @param x
|
|
65
|
-
* @param a
|
|
66
|
-
* @param b
|
|
67
|
-
* @param c
|
|
68
|
-
* @param d
|
|
69
|
-
* @param e
|
|
64
|
+
* @param x -
|
|
65
|
+
* @param a -
|
|
66
|
+
* @param b -
|
|
67
|
+
* @param c -
|
|
68
|
+
* @param d -
|
|
69
|
+
* @param e -
|
|
70
70
|
*/
|
|
71
71
|
export const quarticS = (x, a, b, c, d, e) => quartic([x, 1], [a, 0], [b, 0], [c, 0], [d, 0], [e, 0]);
|
package/vector.d.ts
CHANGED
|
@@ -4,39 +4,39 @@ import type { Dual, OpV2 } from "./api.js";
|
|
|
4
4
|
* Dual vector addition. Applies {@link add} in a component-wise manner. Returns
|
|
5
5
|
* new (dual) vector.
|
|
6
6
|
*
|
|
7
|
-
* @param a
|
|
8
|
-
* @param b
|
|
7
|
+
* @param a -
|
|
8
|
+
* @param b -
|
|
9
9
|
*/
|
|
10
10
|
export declare const vadd: OpV2;
|
|
11
11
|
/**
|
|
12
12
|
* Dual vector subtraction. Applies {@link sub} in a component-wise manner.
|
|
13
13
|
* Returns new (dual) vector.
|
|
14
14
|
*
|
|
15
|
-
* @param a
|
|
16
|
-
* @param b
|
|
15
|
+
* @param a -
|
|
16
|
+
* @param b -
|
|
17
17
|
*/
|
|
18
18
|
export declare const vsub: OpV2;
|
|
19
19
|
/**
|
|
20
20
|
* Dual vector multiplication. Applies {@link mul} in a component-wise manner.
|
|
21
21
|
* Returns new (dual) vector.
|
|
22
22
|
*
|
|
23
|
-
* @param a
|
|
24
|
-
* @param b
|
|
23
|
+
* @param a -
|
|
24
|
+
* @param b -
|
|
25
25
|
*/
|
|
26
26
|
export declare const vmul: OpV2;
|
|
27
27
|
/**
|
|
28
28
|
* Dual vector division. Applies {@link div} in a component-wise manner.
|
|
29
29
|
* Returns new (dual) vector.
|
|
30
30
|
*
|
|
31
|
-
* @param a
|
|
32
|
-
* @param b
|
|
31
|
+
* @param a -
|
|
32
|
+
* @param b -
|
|
33
33
|
*/
|
|
34
34
|
export declare const vdiv: OpV2;
|
|
35
35
|
/**
|
|
36
36
|
* Computes dot product of 2 dual vectors.
|
|
37
37
|
*
|
|
38
|
-
* @param a
|
|
39
|
-
* @param b
|
|
38
|
+
* @param a -
|
|
39
|
+
* @param b -
|
|
40
40
|
*/
|
|
41
41
|
export declare const dot: FnU2<Dual[], Dual>;
|
|
42
42
|
//# sourceMappingURL=vector.d.ts.map
|
package/vector.js
CHANGED
|
@@ -4,38 +4,38 @@ const defVecOp2 = (op) => (a, b) => a.map((a, i) => op(a, b[i]));
|
|
|
4
4
|
* Dual vector addition. Applies {@link add} in a component-wise manner. Returns
|
|
5
5
|
* new (dual) vector.
|
|
6
6
|
*
|
|
7
|
-
* @param a
|
|
8
|
-
* @param b
|
|
7
|
+
* @param a -
|
|
8
|
+
* @param b -
|
|
9
9
|
*/
|
|
10
10
|
export const vadd = defVecOp2(add);
|
|
11
11
|
/**
|
|
12
12
|
* Dual vector subtraction. Applies {@link sub} in a component-wise manner.
|
|
13
13
|
* Returns new (dual) vector.
|
|
14
14
|
*
|
|
15
|
-
* @param a
|
|
16
|
-
* @param b
|
|
15
|
+
* @param a -
|
|
16
|
+
* @param b -
|
|
17
17
|
*/
|
|
18
18
|
export const vsub = defVecOp2(sub);
|
|
19
19
|
/**
|
|
20
20
|
* Dual vector multiplication. Applies {@link mul} in a component-wise manner.
|
|
21
21
|
* Returns new (dual) vector.
|
|
22
22
|
*
|
|
23
|
-
* @param a
|
|
24
|
-
* @param b
|
|
23
|
+
* @param a -
|
|
24
|
+
* @param b -
|
|
25
25
|
*/
|
|
26
26
|
export const vmul = defVecOp2(mul);
|
|
27
27
|
/**
|
|
28
28
|
* Dual vector division. Applies {@link div} in a component-wise manner.
|
|
29
29
|
* Returns new (dual) vector.
|
|
30
30
|
*
|
|
31
|
-
* @param a
|
|
32
|
-
* @param b
|
|
31
|
+
* @param a -
|
|
32
|
+
* @param b -
|
|
33
33
|
*/
|
|
34
34
|
export const vdiv = defVecOp2(div);
|
|
35
35
|
/**
|
|
36
36
|
* Computes dot product of 2 dual vectors.
|
|
37
37
|
*
|
|
38
|
-
* @param a
|
|
39
|
-
* @param b
|
|
38
|
+
* @param a -
|
|
39
|
+
* @param b -
|
|
40
40
|
*/
|
|
41
41
|
export const dot = (a, b) => a.reduce((acc, a, i) => add(acc, mul(a, b[i])), dual(0, a[0].length));
|