"""
A utility for generating simple smooth noise in your projects.
"""
from . import Math
[docs]class Noise:
"""
A modified implementation of the OpenSimplex2 algorithm.
Attributes:
seed (int): The seed for the random noise. Setting to a fixed value will result in the same noise every time.
"""
seed = 0
_PRIME_X = 0x5205402B9270C86F
_PRIME_Y = 0x598CD327003817B5
_PRIME_Z = 0x5BCC226E9FA0BACB
_PRIME_W = 0x56CC5227E58F554B
_HASH_MULTIPLIER = 0x53A3F72DEEC546F5
_SEED_FLIP_3D = -0x52D547B2E96ED629
_SEED_OFFSET_4D = 0xE83DC3E0DA7164D
_ROOT2OVER2 = 0.7071067811865476
_SKEW_2D = 0.366025403784439
_UNSKEW_2D = -0.21132486540518713
_ROOT3OVER3 = 0.577350269189626
_FALLBACK_ROTATE_3D = 2.0 / 3.0
_ROTATE_3D_ORTHOGONALIZER = _UNSKEW_2D
_SKEW_4D = -0.138196601125011
_UNSKEW_4D = 0.309016994374947
_LATTICE_STEP_4D = 0.2
_N_GRADS_2D_EXPONENT = 7
_N_GRADS_3D_EXPONENT = 8
_N_GRADS_4D_EXPONENT = 9
_N_GRADS_2D = 1 << _N_GRADS_2D_EXPONENT
_N_GRADS_3D = 1 << _N_GRADS_3D_EXPONENT
_N_GRADS_4D = 1 << _N_GRADS_4D_EXPONENT
_NORMALIZER_2D = 0.01001634121365712
_NORMALIZER_3D = 0.07969837668935331
_NORMALIZER_4D = 0.0220065933241897
_RSQUARED_2D = 0.5
_RSQUARED_3D = 0.6
_RSQUARED_4D = 0.6
_GRADIENTS_2D = []
_GRADIENTS_3D = []
_GRADIENTS_4D = []
[docs] @classmethod
def noise(cls, x: float) -> float:
"""
Creates noise from 1 dimensional input.
This is identical to :func:`noise2(x, 0) <rubato.utils.noise.Noise.noise2>`.
Args:
x (float): the x coordinate of noise.
Returns:
float: the random noise value.
"""
return cls.noise2(x, 0)
[docs] @classmethod
def noise2(cls, x: float, y: float) -> float:
"""
Creates noise from 2 dimensional input.
Args:
x (float): the x coordinate of noise.
y (float): the y coordinate of noise.
Returns:
float: the random noise value.
"""
s = cls._SKEW_2D * (x + y)
xs = x + s
ys = y + s
return cls._noise2_base(cls.seed, xs, ys)
[docs] @classmethod
def noise3(cls, x: float, y: float, z: float) -> float:
"""
Creates noise from 3 dimensional input.
Args:
x (float): the x coordinate of noise.
y (float): the y coordinate of noise.
z (float): the z coordinate of noise.
Returns:
float: the random noise value.
"""
r = cls._FALLBACK_ROTATE_3D * (x + y + z)
xr = r - x
yr = r - y
zr = r - z
return cls._noise3_base(cls.seed, xr, yr, zr)
[docs] @classmethod
def noise4(cls, x: float, y: float, z: float, w: float) -> float:
"""
Creates noise from 4 dimensional input.
Args:
x (float): the x coordinate of noise.
y (float): the y coordinate of noise.
z (float): the z coordinate of noise.
w (float): the w coordinate of noise.
Returns:
float: the random noise value.
"""
s = cls._SKEW_4D * (x + y + z + w)
xs = x + s
ys = y + s
zs = z + s
ws = w + s
return cls._noise4_base(cls.seed, xs, ys, zs, ws)
@classmethod
def _noise2_base(cls, seed: int, xs: float, ys: float) -> float:
xsb = Math.floor(xs)
ysb = Math.floor(ys)
xi = xs - xsb
yi = ys - ysb
xsbp = xsb * cls._PRIME_X
ysbp = ysb * cls._PRIME_Y
t = (xi + yi) * cls._UNSKEW_2D
dx0 = xi + t
dy0 = yi + t
value = 0
a0 = cls._RSQUARED_2D - dx0 * dx0 - dy0 * dy0
if a0 > 0:
value = (a0 * a0) * (a0 * a0) * cls._grad2(seed, xsbp, ysbp, dx0, dy0)
a1 = (2 * (1 + 2 * cls._UNSKEW_2D) *
(1 / cls._UNSKEW_2D + 2)) * t + ((-2 * (1 + 2 * cls._UNSKEW_2D) * (1 + 2 * cls._UNSKEW_2D)) + a0)
if a1 > 0:
dx1 = dx0 - (1 + 2 * cls._UNSKEW_2D)
dy1 = dy0 - (1 + 2 * cls._UNSKEW_2D)
value += (a1 * a1) * (a1 * a1) * cls._grad2(seed, xsbp + cls._PRIME_X, ysbp + cls._PRIME_Y, dx1, dy1)
if dy0 > dx0:
dx2 = dx0 - cls._UNSKEW_2D
dy2 = dy0 - (cls._UNSKEW_2D + 1)
a2 = cls._RSQUARED_2D - dx2 * dx2 - dy2 * dy2
if a2 > 0:
value += (a2 * a2) * (a2 * a2) * cls._grad2(seed, xsbp, ysbp + cls._PRIME_Y, dx2, dy2)
else:
dx2 = dx0 - (cls._UNSKEW_2D + 1)
dy2 = dy0 - cls._UNSKEW_2D
a2 = cls._RSQUARED_2D - dx2 * dx2 - dy2 * dy2
if a2 > 0:
value += (a2 * a2) * (a2 * a2) * cls._grad2(seed, xsbp + cls._PRIME_X, ysbp, dx2, dy2)
return value
@classmethod
def _grad2(cls, seed: int, xsvp: int, ysvp: int, dx: float, dy: float) -> float:
hash_val = seed ^ xsvp ^ ysvp
hash_val *= cls._HASH_MULTIPLIER
hash_val ^= hash_val >> (64 - cls._N_GRADS_2D_EXPONENT + 1)
gi = int(hash_val) & ((cls._N_GRADS_2D - 1) << 1)
return cls._GRADIENTS_2D[gi | 0] * dx + cls._GRADIENTS_2D[gi | 1] * dy
@classmethod
def _noise3_base(cls, seed: int, xr: float, yr: float, zr: float) -> float:
xrb = round(xr)
yrb = round(yr)
zrb = round(zr)
xri = xr - xrb
yri = yr - yrb
zri = zr - zrb
x_n_sign = int(-1.0 - xri) | 1
y_n_sign = int(-1.0 - yri) | 1
z_n_sign = int(-1.0 - zri) | 1
ax0 = x_n_sign * -xri
ay0 = y_n_sign * -yri
az0 = z_n_sign * -zri
xrbp = xrb * cls._PRIME_X
yrbp = yrb * cls._PRIME_Y
zrbp = zrb * cls._PRIME_Z
value = 0
a = (cls._RSQUARED_3D - xri * xri) - (yri * yri + zri * zri)
l = 0
while True:
if a > 0:
value += (a * a) * (a * a) * cls._grad3(seed, xrbp, yrbp, zrbp, xri, yri, zri)
if ax0 >= ay0 and ax0 >= az0:
b = a + ax0 + ax0
if b > 1:
b -= 1
value += (b * b) * (b * b) * cls._grad3(
seed, xrbp - x_n_sign * cls._PRIME_X, yrbp, zrbp, xri + x_n_sign, yri, zri
)
elif ay0 > ax0 and ay0 >= az0:
b = a + ay0 + ay0
if b > 1:
b -= 1
value += (b * b) * (b * b) * cls._grad3(
seed, xrbp, yrbp - y_n_sign * cls._PRIME_Y, zrbp, xri, yri + y_n_sign, zri
)
else:
b = a + az0 + az0
if b > 1:
b -= 1
value += (b * b) * (b * b) * cls._grad3(
seed, xrbp, yrbp, zrbp - z_n_sign * cls._PRIME_Z, xri, yri, zri + z_n_sign
)
if l == 1:
break
ax0 = 0.5 - ax0
ay0 = 0.5 - ay0
az0 = 0.5 - az0
xri = x_n_sign * ax0
yri = y_n_sign * ay0
zri = z_n_sign * az0
a += (0.75 - ax0) - (ay0 + az0)
xrbp += (x_n_sign >> 1) & cls._PRIME_X
yrbp += (y_n_sign >> 1) & cls._PRIME_Y
zrbp += (z_n_sign >> 1) & cls._PRIME_Z
x_n_sign = -x_n_sign
y_n_sign = -y_n_sign
z_n_sign = -z_n_sign
seed ^= cls._SEED_FLIP_3D
l += 1
return value
@classmethod
def _grad3(cls, seed: int, xrvp: int, yrvp: int, zrvp: int, dx: float, dy: float, dz: float) -> float:
hash_val = (seed ^ xrvp) ^ (yrvp ^ zrvp)
hash_val *= cls._HASH_MULTIPLIER
hash_val ^= hash_val >> (64 - cls._N_GRADS_3D_EXPONENT + 2)
gi = int(hash_val) & ((cls._N_GRADS_3D - 1) << 2)
return cls._GRADIENTS_3D[gi | 0] * dx + cls._GRADIENTS_3D[gi | 1] * dy + cls._GRADIENTS_3D[gi | 2] * dz
@classmethod
def _noise4_base(cls, seed: int, xs: float, ys: float, zs: float, ws: float) -> float:
xsb = Math.floor(xs)
ysb = Math.floor(ys)
zsb = Math.floor(zs)
wsb = Math.floor(ws)
xsi = xs - xsb
ysi = ys - ysb
zsi = zs - zsb
wsi = ws - wsb
si_sum = (xsi + ysi) + (zsi + wsi)
starting_lattice = int(si_sum * 1.25)
seed += starting_lattice * cls._SEED_OFFSET_4D
starting_lattice_offset = starting_lattice * -cls._LATTICE_STEP_4D
xsi += starting_lattice_offset
ysi += starting_lattice_offset
zsi += starting_lattice_offset
wsi += starting_lattice_offset
ssi = (si_sum + starting_lattice_offset * 4) * cls._UNSKEW_4D
xsvp = xsb * cls._PRIME_X
ysvp = ysb * cls._PRIME_Y
zsvp = zsb * cls._PRIME_Z
wsvp = wsb * cls._PRIME_W
value = 0
i = 0
while True:
score0 = 1.0 + ssi * (-1.0 / cls._UNSKEW_4D)
if (xsi >= ysi and xsi >= zsi and xsi >= wsi and xsi >= score0):
xsvp += cls._PRIME_X
xsi -= 1
ssi -= cls._UNSKEW_4D
elif (ysi > xsi and ysi >= zsi and ysi >= wsi and ysi >= score0):
ysvp += cls._PRIME_Y
ysi -= 1
ssi -= cls._UNSKEW_4D
elif (zsi > xsi and zsi > ysi and zsi >= wsi and zsi >= score0):
zsvp += cls._PRIME_Z
zsi -= 1
ssi -= cls._UNSKEW_4D
elif (wsi > xsi and wsi > ysi and wsi > zsi and wsi >= score0):
wsvp += cls._PRIME_W
wsi -= 1
ssi -= cls._UNSKEW_4D
dx = xsi + ssi
dy = ysi + ssi
dz = zsi + ssi
dw = wsi + ssi
a = (dx * dx + dy * dy) + (dz * dz + dw * dw)
if a < cls._RSQUARED_4D:
a -= cls._RSQUARED_4D
a *= a
value += a * a * cls._grad4(seed, xsvp, ysvp, zsvp, wsvp, dx, dy, dz, dw)
if i == 4:
break
xsi += cls._LATTICE_STEP_4D
ysi += cls._LATTICE_STEP_4D
zsi += cls._LATTICE_STEP_4D
wsi += cls._LATTICE_STEP_4D
ssi += cls._LATTICE_STEP_4D * 4 * cls._UNSKEW_4D
seed -= cls._SEED_OFFSET_4D
if i == starting_lattice:
xsvp -= cls._PRIME_X
ysvp -= cls._PRIME_Y
zsvp -= cls._PRIME_Z
wsvp -= cls._PRIME_W
seed += cls._SEED_OFFSET_4D * 5
i += 1
return value
@classmethod
def _grad4(
cls, seed: int, xsvp: int, ysvp: int, zsvp: int, wsvp: int, dx: float, dy: float, dz: float, dw: float
) -> float:
hash_val = seed ^ (xsvp ^ ysvp) ^ (zsvp ^ wsvp)
hash_val *= cls._HASH_MULTIPLIER
hash_val ^= hash_val >> (64 - cls._N_GRADS_4D_EXPONENT + 2)
gi = int(hash_val) & ((cls._N_GRADS_4D - 1) << 2)
return (cls._GRADIENTS_4D[gi | 0] * dx +
cls._GRADIENTS_4D[gi | 1] * dy) + (cls._GRADIENTS_4D[gi | 2] * dz + cls._GRADIENTS_4D[gi | 3] * dw)
# below is the generator code for the gradients
_gradient2 = [
0.38268343236509,
0.923879532511287,
0.923879532511287,
0.38268343236509,
0.923879532511287,
-0.38268343236509,
0.38268343236509,
-0.923879532511287,
-0.38268343236509,
-0.923879532511287,
-0.923879532511287,
-0.38268343236509,
-0.923879532511287,
0.38268343236509,
-0.38268343236509,
0.923879532511287,
0.130526192220052,
0.99144486137381,
0.608761429008721,
0.793353340291235,
0.793353340291235,
0.608761429008721,
0.99144486137381,
0.130526192220051,
0.99144486137381,
-0.130526192220051,
0.793353340291235,
-0.60876142900872,
0.608761429008721,
-0.793353340291235,
0.130526192220052,
-0.99144486137381,
-0.130526192220052,
-0.99144486137381,
-0.608761429008721,
-0.793353340291235,
-0.793353340291235,
-0.608761429008721,
-0.99144486137381,
-0.130526192220052,
-0.99144486137381,
0.130526192220051,
-0.793353340291235,
0.608761429008721,
-0.608761429008721,
0.793353340291235,
-0.130526192220052,
0.99144486137381,
]
for _gradient_i in range(len(_gradient2)):
_gradient2[_gradient_i] = _gradient2[_gradient_i] / _NORMALIZER_2D
_gradient_j = 0
for _gradient_i in range(_N_GRADS_2D * 2):
if _gradient_j == len(_gradient2):
_gradient_j = 0
_GRADIENTS_2D.append(_gradient2[_gradient_j])
_gradient_j += 1
_gradient3 = [
2.22474487139,
2.22474487139,
-1.0,
0.0,
2.22474487139,
2.22474487139,
1.0,
0.0,
3.0862664687972017,
1.1721513422464978,
0.0,
0.0,
1.1721513422464978,
3.0862664687972017,
0.0,
0.0,
-2.22474487139,
2.22474487139,
-1.0,
0.0,
-2.22474487139,
2.22474487139,
1.0,
0.0,
-1.1721513422464978,
3.0862664687972017,
0.0,
0.0,
-3.0862664687972017,
1.1721513422464978,
0.0,
0.0,
-1.0,
-2.22474487139,
-2.22474487139,
0.0,
1.0,
-2.22474487139,
-2.22474487139,
0.0,
0.0,
-3.0862664687972017,
-1.1721513422464978,
0.0,
0.0,
-1.1721513422464978,
-3.0862664687972017,
0.0,
-1.0,
-2.22474487139,
2.22474487139,
0.0,
1.0,
-2.22474487139,
2.22474487139,
0.0,
0.0,
-1.1721513422464978,
3.0862664687972017,
0.0,
0.0,
-3.0862664687972017,
1.1721513422464978,
0.0,
-2.22474487139,
-2.22474487139,
-1.0,
0.0,
-2.22474487139,
-2.22474487139,
1.0,
0.0,
-3.0862664687972017,
-1.1721513422464978,
0.0,
0.0,
-1.1721513422464978,
-3.0862664687972017,
0.0,
0.0,
-2.22474487139,
-1.0,
-2.22474487139,
0.0,
-2.22474487139,
1.0,
-2.22474487139,
0.0,
-1.1721513422464978,
0.0,
-3.0862664687972017,
0.0,
-3.0862664687972017,
0.0,
-1.1721513422464978,
0.0,
-2.22474487139,
-1.0,
2.22474487139,
0.0,
-2.22474487139,
1.0,
2.22474487139,
0.0,
-3.0862664687972017,
0.0,
1.1721513422464978,
0.0,
-1.1721513422464978,
0.0,
3.0862664687972017,
0.0,
-1.0,
2.22474487139,
-2.22474487139,
0.0,
1.0,
2.22474487139,
-2.22474487139,
0.0,
0.0,
1.1721513422464978,
-3.0862664687972017,
0.0,
0.0,
3.0862664687972017,
-1.1721513422464978,
0.0,
-1.0,
2.22474487139,
2.22474487139,
0.0,
1.0,
2.22474487139,
2.22474487139,
0.0,
0.0,
3.0862664687972017,
1.1721513422464978,
0.0,
0.0,
1.1721513422464978,
3.0862664687972017,
0.0,
2.22474487139,
-2.22474487139,
-1.0,
0.0,
2.22474487139,
-2.22474487139,
1.0,
0.0,
1.1721513422464978,
-3.0862664687972017,
0.0,
0.0,
3.0862664687972017,
-1.1721513422464978,
0.0,
0.0,
2.22474487139,
-1.0,
-2.22474487139,
0.0,
2.22474487139,
1.0,
-2.22474487139,
0.0,
3.0862664687972017,
0.0,
-1.1721513422464978,
0.0,
1.1721513422464978,
0.0,
-3.0862664687972017,
0.0,
2.22474487139,
-1.0,
2.22474487139,
0.0,
2.22474487139,
1.0,
2.22474487139,
0.0,
1.1721513422464978,
0.0,
3.0862664687972017,
0.0,
3.0862664687972017,
0.0,
1.1721513422464978,
0.0,
]
for _gradient_i in range(len(_gradient3)):
_gradient3[_gradient_i] = _gradient3[_gradient_i] / _NORMALIZER_3D
_gradient_j = 0
for _gradient_i in range(_N_GRADS_3D * 2):
if _gradient_j == len(_gradient3):
_gradient_j = 0
_GRADIENTS_3D.append(_gradient3[_gradient_j])
_gradient_j += 1
_gradient4 = [
-0.6740059517812944,
-0.3239847771997537,
-0.3239847771997537,
0.5794684678643381,
-0.7504883828755602,
-0.4004672082940195,
0.15296486218853164,
0.5029860367700724,
-0.7504883828755602,
0.15296486218853164,
-0.4004672082940195,
0.5029860367700724,
-0.8828161875373585,
0.08164729285680945,
0.08164729285680945,
0.4553054119602712,
-0.4553054119602712,
-0.08164729285680945,
-0.08164729285680945,
0.8828161875373585,
-0.5029860367700724,
-0.15296486218853164,
0.4004672082940195,
0.7504883828755602,
-0.5029860367700724,
0.4004672082940195,
-0.15296486218853164,
0.7504883828755602,
-0.5794684678643381,
0.3239847771997537,
0.3239847771997537,
0.6740059517812944,
-0.6740059517812944,
-0.3239847771997537,
0.5794684678643381,
-0.3239847771997537,
-0.7504883828755602,
-0.4004672082940195,
0.5029860367700724,
0.15296486218853164,
-0.7504883828755602,
0.15296486218853164,
0.5029860367700724,
-0.4004672082940195,
-0.8828161875373585,
0.08164729285680945,
0.4553054119602712,
0.08164729285680945,
-0.4553054119602712,
-0.08164729285680945,
0.8828161875373585,
-0.08164729285680945,
-0.5029860367700724,
-0.15296486218853164,
0.7504883828755602,
0.4004672082940195,
-0.5029860367700724,
0.4004672082940195,
0.7504883828755602,
-0.15296486218853164,
-0.5794684678643381,
0.3239847771997537,
0.6740059517812944,
0.3239847771997537,
-0.6740059517812944,
0.5794684678643381,
-0.3239847771997537,
-0.3239847771997537,
-0.7504883828755602,
0.5029860367700724,
-0.4004672082940195,
0.15296486218853164,
-0.7504883828755602,
0.5029860367700724,
0.15296486218853164,
-0.4004672082940195,
-0.8828161875373585,
0.4553054119602712,
0.08164729285680945,
0.08164729285680945,
-0.4553054119602712,
0.8828161875373585,
-0.08164729285680945,
-0.08164729285680945,
-0.5029860367700724,
0.7504883828755602,
-0.15296486218853164,
0.4004672082940195,
-0.5029860367700724,
0.7504883828755602,
0.4004672082940195,
-0.15296486218853164,
-0.5794684678643381,
0.6740059517812944,
0.3239847771997537,
0.3239847771997537,
0.5794684678643381,
-0.6740059517812944,
-0.3239847771997537,
-0.3239847771997537,
0.5029860367700724,
-0.7504883828755602,
-0.4004672082940195,
0.15296486218853164,
0.5029860367700724,
-0.7504883828755602,
0.15296486218853164,
-0.4004672082940195,
0.4553054119602712,
-0.8828161875373585,
0.08164729285680945,
0.08164729285680945,
0.8828161875373585,
-0.4553054119602712,
-0.08164729285680945,
-0.08164729285680945,
0.7504883828755602,
-0.5029860367700724,
-0.15296486218853164,
0.4004672082940195,
0.7504883828755602,
-0.5029860367700724,
0.4004672082940195,
-0.15296486218853164,
0.6740059517812944,
-0.5794684678643381,
0.3239847771997537,
0.3239847771997537,
-0.753341017856078,
-0.37968289875261624,
-0.37968289875261624,
-0.37968289875261624,
-0.7821684431180708,
-0.4321472685365301,
-0.4321472685365301,
0.12128480194602098,
-0.7821684431180708,
-0.4321472685365301,
0.12128480194602098,
-0.4321472685365301,
-0.7821684431180708,
0.12128480194602098,
-0.4321472685365301,
-0.4321472685365301,
-0.8586508742123365,
-0.508629699630796,
0.044802370851755174,
0.044802370851755174,
-0.8586508742123365,
0.044802370851755174,
-0.508629699630796,
0.044802370851755174,
-0.8586508742123365,
0.044802370851755174,
0.044802370851755174,
-0.508629699630796,
-0.9982828964265062,
-0.03381941603233842,
-0.03381941603233842,
-0.03381941603233842,
-0.37968289875261624,
-0.753341017856078,
-0.37968289875261624,
-0.37968289875261624,
-0.4321472685365301,
-0.7821684431180708,
-0.4321472685365301,
0.12128480194602098,
-0.4321472685365301,
-0.7821684431180708,
0.12128480194602098,
-0.4321472685365301,
0.12128480194602098,
-0.7821684431180708,
-0.4321472685365301,
-0.4321472685365301,
-0.508629699630796,
-0.8586508742123365,
0.044802370851755174,
0.044802370851755174,
0.044802370851755174,
-0.8586508742123365,
-0.508629699630796,
0.044802370851755174,
0.044802370851755174,
-0.8586508742123365,
0.044802370851755174,
-0.508629699630796,
-0.03381941603233842,
-0.9982828964265062,
-0.03381941603233842,
-0.03381941603233842,
-0.37968289875261624,
-0.37968289875261624,
-0.753341017856078,
-0.37968289875261624,
-0.4321472685365301,
-0.4321472685365301,
-0.7821684431180708,
0.12128480194602098,
-0.4321472685365301,
0.12128480194602098,
-0.7821684431180708,
-0.4321472685365301,
0.12128480194602098,
-0.4321472685365301,
-0.7821684431180708,
-0.4321472685365301,
-0.508629699630796,
0.044802370851755174,
-0.8586508742123365,
0.044802370851755174,
0.044802370851755174,
-0.508629699630796,
-0.8586508742123365,
0.044802370851755174,
0.044802370851755174,
0.044802370851755174,
-0.8586508742123365,
-0.508629699630796,
-0.03381941603233842,
-0.03381941603233842,
-0.9982828964265062,
-0.03381941603233842,
-0.37968289875261624,
-0.37968289875261624,
-0.37968289875261624,
-0.753341017856078,
-0.4321472685365301,
-0.4321472685365301,
0.12128480194602098,
-0.7821684431180708,
-0.4321472685365301,
0.12128480194602098,
-0.4321472685365301,
-0.7821684431180708,
0.12128480194602098,
-0.4321472685365301,
-0.4321472685365301,
-0.7821684431180708,
-0.508629699630796,
0.044802370851755174,
0.044802370851755174,
-0.8586508742123365,
0.044802370851755174,
-0.508629699630796,
0.044802370851755174,
-0.8586508742123365,
0.044802370851755174,
0.044802370851755174,
-0.508629699630796,
-0.8586508742123365,
-0.03381941603233842,
-0.03381941603233842,
-0.03381941603233842,
-0.9982828964265062,
-0.3239847771997537,
-0.6740059517812944,
-0.3239847771997537,
0.5794684678643381,
-0.4004672082940195,
-0.7504883828755602,
0.15296486218853164,
0.5029860367700724,
0.15296486218853164,
-0.7504883828755602,
-0.4004672082940195,
0.5029860367700724,
0.08164729285680945,
-0.8828161875373585,
0.08164729285680945,
0.4553054119602712,
-0.08164729285680945,
-0.4553054119602712,
-0.08164729285680945,
0.8828161875373585,
-0.15296486218853164,
-0.5029860367700724,
0.4004672082940195,
0.7504883828755602,
0.4004672082940195,
-0.5029860367700724,
-0.15296486218853164,
0.7504883828755602,
0.3239847771997537,
-0.5794684678643381,
0.3239847771997537,
0.6740059517812944,
-0.3239847771997537,
-0.3239847771997537,
-0.6740059517812944,
0.5794684678643381,
-0.4004672082940195,
0.15296486218853164,
-0.7504883828755602,
0.5029860367700724,
0.15296486218853164,
-0.4004672082940195,
-0.7504883828755602,
0.5029860367700724,
0.08164729285680945,
0.08164729285680945,
-0.8828161875373585,
0.4553054119602712,
-0.08164729285680945,
-0.08164729285680945,
-0.4553054119602712,
0.8828161875373585,
-0.15296486218853164,
0.4004672082940195,
-0.5029860367700724,
0.7504883828755602,
0.4004672082940195,
-0.15296486218853164,
-0.5029860367700724,
0.7504883828755602,
0.3239847771997537,
0.3239847771997537,
-0.5794684678643381,
0.6740059517812944,
-0.3239847771997537,
-0.6740059517812944,
0.5794684678643381,
-0.3239847771997537,
-0.4004672082940195,
-0.7504883828755602,
0.5029860367700724,
0.15296486218853164,
0.15296486218853164,
-0.7504883828755602,
0.5029860367700724,
-0.4004672082940195,
0.08164729285680945,
-0.8828161875373585,
0.4553054119602712,
0.08164729285680945,
-0.08164729285680945,
-0.4553054119602712,
0.8828161875373585,
-0.08164729285680945,
-0.15296486218853164,
-0.5029860367700724,
0.7504883828755602,
0.4004672082940195,
0.4004672082940195,
-0.5029860367700724,
0.7504883828755602,
-0.15296486218853164,
0.3239847771997537,
-0.5794684678643381,
0.6740059517812944,
0.3239847771997537,
-0.3239847771997537,
-0.3239847771997537,
0.5794684678643381,
-0.6740059517812944,
-0.4004672082940195,
0.15296486218853164,
0.5029860367700724,
-0.7504883828755602,
0.15296486218853164,
-0.4004672082940195,
0.5029860367700724,
-0.7504883828755602,
0.08164729285680945,
0.08164729285680945,
0.4553054119602712,
-0.8828161875373585,
-0.08164729285680945,
-0.08164729285680945,
0.8828161875373585,
-0.4553054119602712,
-0.15296486218853164,
0.4004672082940195,
0.7504883828755602,
-0.5029860367700724,
0.4004672082940195,
-0.15296486218853164,
0.7504883828755602,
-0.5029860367700724,
0.3239847771997537,
0.3239847771997537,
0.6740059517812944,
-0.5794684678643381,
-0.3239847771997537,
0.5794684678643381,
-0.6740059517812944,
-0.3239847771997537,
-0.4004672082940195,
0.5029860367700724,
-0.7504883828755602,
0.15296486218853164,
0.15296486218853164,
0.5029860367700724,
-0.7504883828755602,
-0.4004672082940195,
0.08164729285680945,
0.4553054119602712,
-0.8828161875373585,
0.08164729285680945,
-0.08164729285680945,
0.8828161875373585,
-0.4553054119602712,
-0.08164729285680945,
-0.15296486218853164,
0.7504883828755602,
-0.5029860367700724,
0.4004672082940195,
0.4004672082940195,
0.7504883828755602,
-0.5029860367700724,
-0.15296486218853164,
0.3239847771997537,
0.6740059517812944,
-0.5794684678643381,
0.3239847771997537,
-0.3239847771997537,
0.5794684678643381,
-0.3239847771997537,
-0.6740059517812944,
-0.4004672082940195,
0.5029860367700724,
0.15296486218853164,
-0.7504883828755602,
0.15296486218853164,
0.5029860367700724,
-0.4004672082940195,
-0.7504883828755602,
0.08164729285680945,
0.4553054119602712,
0.08164729285680945,
-0.8828161875373585,
-0.08164729285680945,
0.8828161875373585,
-0.08164729285680945,
-0.4553054119602712,
-0.15296486218853164,
0.7504883828755602,
0.4004672082940195,
-0.5029860367700724,
0.4004672082940195,
0.7504883828755602,
-0.15296486218853164,
-0.5029860367700724,
0.3239847771997537,
0.6740059517812944,
0.3239847771997537,
-0.5794684678643381,
0.5794684678643381,
-0.3239847771997537,
-0.6740059517812944,
-0.3239847771997537,
0.5029860367700724,
-0.4004672082940195,
-0.7504883828755602,
0.15296486218853164,
0.5029860367700724,
0.15296486218853164,
-0.7504883828755602,
-0.4004672082940195,
0.4553054119602712,
0.08164729285680945,
-0.8828161875373585,
0.08164729285680945,
0.8828161875373585,
-0.08164729285680945,
-0.4553054119602712,
-0.08164729285680945,
0.7504883828755602,
-0.15296486218853164,
-0.5029860367700724,
0.4004672082940195,
0.7504883828755602,
0.4004672082940195,
-0.5029860367700724,
-0.15296486218853164,
0.6740059517812944,
0.3239847771997537,
-0.5794684678643381,
0.3239847771997537,
0.5794684678643381,
-0.3239847771997537,
-0.3239847771997537,
-0.6740059517812944,
0.5029860367700724,
-0.4004672082940195,
0.15296486218853164,
-0.7504883828755602,
0.5029860367700724,
0.15296486218853164,
-0.4004672082940195,
-0.7504883828755602,
0.4553054119602712,
0.08164729285680945,
0.08164729285680945,
-0.8828161875373585,
0.8828161875373585,
-0.08164729285680945,
-0.08164729285680945,
-0.4553054119602712,
0.7504883828755602,
-0.15296486218853164,
0.4004672082940195,
-0.5029860367700724,
0.7504883828755602,
0.4004672082940195,
-0.15296486218853164,
-0.5029860367700724,
0.6740059517812944,
0.3239847771997537,
0.3239847771997537,
-0.5794684678643381,
0.03381941603233842,
0.03381941603233842,
0.03381941603233842,
0.9982828964265062,
-0.044802370851755174,
-0.044802370851755174,
0.508629699630796,
0.8586508742123365,
-0.044802370851755174,
0.508629699630796,
-0.044802370851755174,
0.8586508742123365,
-0.12128480194602098,
0.4321472685365301,
0.4321472685365301,
0.7821684431180708,
0.508629699630796,
-0.044802370851755174,
-0.044802370851755174,
0.8586508742123365,
0.4321472685365301,
-0.12128480194602098,
0.4321472685365301,
0.7821684431180708,
0.4321472685365301,
0.4321472685365301,
-0.12128480194602098,
0.7821684431180708,
0.37968289875261624,
0.37968289875261624,
0.37968289875261624,
0.753341017856078,
0.03381941603233842,
0.03381941603233842,
0.9982828964265062,
0.03381941603233842,
-0.044802370851755174,
0.044802370851755174,
0.8586508742123365,
0.508629699630796,
-0.044802370851755174,
0.508629699630796,
0.8586508742123365,
-0.044802370851755174,
-0.12128480194602098,
0.4321472685365301,
0.7821684431180708,
0.4321472685365301,
0.508629699630796,
-0.044802370851755174,
0.8586508742123365,
-0.044802370851755174,
0.4321472685365301,
-0.12128480194602098,
0.7821684431180708,
0.4321472685365301,
0.4321472685365301,
0.4321472685365301,
0.7821684431180708,
-0.12128480194602098,
0.37968289875261624,
0.37968289875261624,
0.753341017856078,
0.37968289875261624,
0.03381941603233842,
0.9982828964265062,
0.03381941603233842,
0.03381941603233842,
-0.044802370851755174,
0.8586508742123365,
-0.044802370851755174,
0.508629699630796,
-0.044802370851755174,
0.8586508742123365,
0.508629699630796,
-0.044802370851755174,
-0.12128480194602098,
0.7821684431180708,
0.4321472685365301,
0.4321472685365301,
0.508629699630796,
0.8586508742123365,
-0.044802370851755174,
-0.044802370851755174,
0.4321472685365301,
0.7821684431180708,
-0.12128480194602098,
0.4321472685365301,
0.4321472685365301,
0.7821684431180708,
0.4321472685365301,
-0.12128480194602098,
0.37968289875261624,
0.753341017856078,
0.37968289875261624,
0.37968289875261624,
0.9982828964265062,
0.03381941603233842,
0.03381941603233842,
0.03381941603233842,
0.8586508742123365,
-0.044802370851755174,
-0.044802370851755174,
0.508629699630796,
0.8586508742123365,
-0.044802370851755174,
0.508629699630796,
-0.044802370851755174,
0.7821684431180708,
-0.12128480194602098,
0.4321472685365301,
0.4321472685365301,
0.8586508742123365,
0.508629699630796,
-0.044802370851755174,
-0.044802370851755174,
0.7821684431180708,
0.4321472685365301,
-0.12128480194602098,
0.4321472685365301,
0.7821684431180708,
0.4321472685365301,
0.4321472685365301,
-0.12128480194602098,
0.753341017856078,
0.37968289875261624,
0.37968289875261624,
0.37968289875261624,
]
for _gradient_i in range(len(_gradient4)):
_gradient4[_gradient_i] = _gradient4[_gradient_i] / _NORMALIZER_4D
_gradient_j = 0
for _gradient_i in range(_N_GRADS_4D * 2):
if _gradient_j == len(_gradient4):
_gradient_j = 0
_GRADIENTS_4D.append(_gradient4[_gradient_j])
_gradient_j += 1