@thi.ng/vectors
Version:
Optimized 2d/3d/4d and arbitrary length vector operations, support for memory mapping/layouts
91 lines (90 loc) • 2.15 kB
JavaScript
import { normal } from "@thi.ng/random/distributions/normal";
import { SYSTEM } from "@thi.ng/random/system";
import { defHofOpS } from "./compile/emit.js";
import { NEW_OUT_A, SARGS_VV } from "./compile/templates.js";
import {
normalizeS,
normalizeS2,
normalizeS3,
normalizeS4
} from "./normalizes.js";
const [randomS, randomS2, randomS3, randomS4] = defHofOpS(
SYSTEM,
([a]) => `${a}=rnd.minmax(n,m);`,
"a",
"n=-1,m=1,rnd=op,ia=0,sa=1",
"a",
"a",
NEW_OUT_A
);
const [
randomDistribS,
randomDistribS2,
randomDistribS3,
randomDistribS4
] = defHofOpS(
normal,
([a]) => `${a}=rnd()*n;`,
"a",
"rnd=op(),n=1,ia=0,sa=1",
"a",
"a",
NEW_OUT_A
);
const $norm = (normalize, random) => (a, n = 1, rnd, ia = 0, sa = 1) => normalize(null, random(a, -1, 1, rnd, ia, sa), n, ia, ia, sa, sa);
const $normDist = (normalize, random) => (a, rnd, n = 1, ia = 0, sa = 1) => normalize(null, random(a, rnd, 1, ia, sa), n, ia, ia, sa, sa);
const randNormS = (a, num, n = 1, rnd, ia = 0, sa = 1) => normalizeS(
a = randomS(a, num, -1, 1, rnd, ia, sa),
a,
num,
n,
ia,
ia,
sa,
sa
);
const randNormS2 = $norm(normalizeS2, randomS2);
const randNormS3 = $norm(normalizeS3, randomS3);
const randNormS4 = $norm(normalizeS4, randomS4);
const randNormDistribS = (a, num, rnd, n = 1, ia = 0, sa = 1) => normalizeS(
null,
randomDistribS(a, num, rnd, 1, ia, sa),
num,
n,
ia,
ia,
sa,
sa
);
const randNormDistribS2 = $normDist(normalizeS2, randomDistribS2);
const randNormDistribS3 = $normDist(normalizeS3, randomDistribS3);
const randNormDistribS4 = $normDist(normalizeS4, randomDistribS4);
const [randMinMaxS, randMinMaxS2, randMinMaxS3, randMinMaxS4] = defHofOpS(
SYSTEM,
([o, a, b]) => `${o}=rnd.minmax(${a},${b});`,
"o,a,b",
`rnd=op,${SARGS_VV}`,
"o,a,b"
);
export {
randMinMaxS,
randMinMaxS2,
randMinMaxS3,
randMinMaxS4,
randNormDistribS,
randNormDistribS2,
randNormDistribS3,
randNormDistribS4,
randNormS,
randNormS2,
randNormS3,
randNormS4,
randomDistribS,
randomDistribS2,
randomDistribS3,
randomDistribS4,
randomS,
randomS2,
randomS3,
randomS4
};