function randg(shape) {
let oalph = shape, a1, a2, u, v, x, mat;
if (!shape) shape = 1;
if (shape < 1) shape += 1;
a1 = shape - 1 / 3;
a2 = 1 / Math.sqrt(9 * a1);
do {
do {
x = randn();
v = 1 + a2 * x;
} while (v <= 0);
v = v * v * v;
u = Math.random();
} while (
u > 1 - 0.331 * Math.pow(x, 4) &&
Math.log(u) > 0.5 * x * x + a1 * (1 - v + Math.log(v))
);
if (shape === oalph) return a1 * v;
do u = Math.random(); while (u === 0);
return Math.pow(u, 1 / oalph) * a1 * v;
}