UNPKG

@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
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 };