gen-7a3f91c4e28b / generator.py
edward56's picture
cascade generator submission: submit_A
2c75f72 verified
Raw History Blame Contribute Delete
67 kB
from __future__ import annotations
import json
from collections.abc import Iterator
from functools import lru_cache, partial
from pathlib import Path
from queue import Full, Queue
from threading import Event, Lock, Thread
import numpy as np
from numba import njit
from scipy.signal import lfilter
from cascade.interface import DataGenerator
_qsv00 = False
_qsv01 = Lock()
_qsv02 = 2048
_qsv03 = 256
_qsv04 = 1024
_qsv05 = np.array([4, 7, 12, 15, 24, 30, 48, 52, 60, 90, 96, 144, 168, 183, 240, 288, 336, 365, 672, 730], dtype=np.float64)
_qsv06 = np.array([0.01, 0.23, 0.02, 0.02, 0.07, 0.01, 0.06, 0.01, 0.08, 0.01, 0.14, 0.07, 0.04, 0.01, 0.08, 0.08, 0.02, 0.02, 0.01, 0.01], dtype=np.float64)
_qsv06 /= _qsv06.sum()
_qsv07 = np.array([[15, 60], [60, 240], [24, 168], [48, 336], [96, 672], [7, 365], [12, 52]], dtype=np.float64)
_qsv08: tuple[str, ...] = ('k00', 'k01', 'k02', 'k03', 'k04', 'k05', 'k06', 'k07', 'k08', 'k09', 'k10', 'k11', 'k12', 'k13', 'k14', 'k15', 'k16', 'k17', 'k18', 'k19', 'k20', 'k21', 'k22', 'k23', 'k24', 'k25', 'k26', 'k27', 'k28', 'k29', 'k30', 'k31')
_qsv09: dict[str, float] = {'k28': 0.0, 'k29': 0.0, 'k30': 0.0, 'k31': 0.0, 'k00': 0.095, 'k01': 0.095, 'k02': 0.06, 'k03': 0.105, 'k04': 0.095, 'k05': 0.06, 'k06': 0.02, 'k07': 0.07, 'k08': 0.07, 'k09': 0.08, 'k10': 0.08, 'k11': 0.06, 'k12': 0.02, 'k13': 0.02, 'k14': 0.07, 'k15': 0.0, 'k16': 0.0, 'k17': 0.0, 'k18': 0.0, 'k19': 0.0, 'k20': 0.0, 'k21': 0.0, 'k22': 0.0, 'k23': 0.0, 'k24': 0.0, 'k25': 0.0, 'k26': 0.0, 'k27': 0.0}
_qsv10: frozenset[str] = frozenset({'k21', 'k15', 'k18', 'k17', 'k19'})
def _k15(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
_qsv34 = _qsv33.uniform(1.0, 8.0, size=(n, 1))
at = _qsv33.random((n, L)) < _qsv34 / max(L, 1)
at[:, 0] = True
size = _qsv33.normal(0.0, 1.0, size=(n, L)) * _qsv33.uniform(0.4, 3.0, size=(n, 1))
size *= at
np.cumsum(size, axis=1, out=size)
_qsv35 = size
scale = np.exp(_qsv33.uniform(np.log(1.0), np.log(2000.0), size=(n, 1)))
_qsv36 = _qsv33.random((n, 1)) < 0.6
sd = np.where(_qsv36, 0.0, _qsv33.uniform(0.002, 0.03, size=(n, 1)))
out = (_qsv33.uniform(-2.0, 2.0, size=(n, 1)) + _qsv35) * scale
out = out + _qsv33.normal(0.0, 1.0, size=(n, L)) * sd * scale
_qsv37 = _qsv33.random((n, 1)) < 0.65
return np.where(_qsv37, np.rint(out), out)
def _k16(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
_qsv38 = _qsv13(_qsv33.normal(0.0, 1.0, size=(n, L)), _qsv33.uniform(0.99, 0.9995, size=(n, 1)))
_qsv38 = (_qsv38 - _qsv38.mean(axis=1, keepdims=True)) / np.maximum(_qsv38.std(axis=1, keepdims=True), 1e-09)
_qsv39 = _qsv38 > _qsv33.uniform(0.2, 1.2, size=(n, 1))
lo = _qsv33.uniform(0.02, 0.2, size=(n, 1))
_qsv40 = _qsv33.uniform(4.0, 25.0, size=(n, 1))
sd = np.where(_qsv39, lo * _qsv40, lo)
x = _qsv13(_qsv33.normal(0.0, 1.0, size=(n, L)) * sd, _qsv33.uniform(0.9, 0.999, size=(n, 1)))
scale = np.exp(_qsv33.uniform(np.log(1.0), np.log(500.0), size=(n, 1)))
return x * scale + _qsv33.uniform(-1.0, 1.0, size=(n, 1)) * scale
def _k17(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
"""Wholesale-power / geophysical burst regime.
The reigning body models volatility as a PERSISTENT state (slow AR crossing
a threshold lifts sd 4-25x for long stretches). The pool's dispatch and
flux feeds do the opposite: a quiet, tightly-banded level punctuated by
rare excursions of 10-1000x that revert within a handful of steps, some of
them NEGATIVE (a market paying to offload). Measured against that body:
aemo_nem_5min +38.9%/window, nz_emi +10.0%, usace_cwms +38.3%,
swpc_solar_xray +1114%. Short persistence plus a two-sided heavy tail plus
a hard floor is what those windows need, and no family here produces it.
"""
t = np.arange(L, dtype=np.float64)[None, :]
day = _qsv33.choice(np.array([12.0, 24.0, 48.0, 96.0, 288.0]), size=(n, 1))
amp = _qsv33.uniform(0.1, 0.7, size=(n, 1))
base_shape = amp * np.sin(2 * np.pi * t / day
+ _qsv33.uniform(0, 2 * np.pi, (n, 1)))
base_shape += 0.35 * amp * np.sin(2 * np.pi * t / (day * 7.0)
+ _qsv33.uniform(0, 2 * np.pi, (n, 1)))
calm = _qsv33.uniform(0.01, 0.08, size=(n, 1))
level = _qsv13(_qsv33.normal(0.0, 1.0, size=(n, L)) * calm,
_qsv33.uniform(0.95, 0.999, size=(n, 1)))
x = base_shape + level
rate = _qsv33.uniform(0.0015, 0.02, size=(n, 1))
hit = _qsv33.random((n, L)) < rate
mag = _qsv33.lognormal(mean=np.log(6.0), sigma=1.4, size=(n, L))
downward = _qsv33.uniform(0.05, 0.45, size=(n, 1))
sign = np.where(_qsv33.random((n, L)) < downward, -1.0, 1.0)
spike = hit * mag * sign * _qsv33.uniform(0.5, 3.0, size=(n, 1))
# short persistence: a 1-5 step exponential tail, not a regime
decay = _qsv33.uniform(0.05, 0.6, size=(n, 1))
spike = _qsv13(np.ascontiguousarray(spike), decay.reshape(-1))
x = x + spike
scale = np.exp(_qsv33.uniform(np.log(5.0), np.log(900.0), size=(n, 1)))
out = x * scale
# market floor: most rows are non-negative with a hard cap, a minority
# admit negative clearing prices
allow_neg = _qsv33.random((n, 1)) < 0.3
floor = np.where(allow_neg, -scale * _qsv33.uniform(0.2, 1.5, size=(n, 1)), 0.0)
cap = scale * _qsv33.uniform(4.0, 60.0, size=(n, 1))
out = np.clip(out + scale * _qsv33.uniform(0.3, 2.0, size=(n, 1)), floor, cap)
integer = _qsv33.random((n, 1)) < 0.25
return np.where(integer, np.rint(out), out)
def _k18(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
"""Coastal / hydrological: incommensurate tidal skeleton + storm residual.
Tide gauges, river stages and sea-surface temperature share a shape no
family in this body produces. The constituents are INCOMMENSURATE with the
sampling day -- M2 at 12.42h, S2 at 12.00h, K1 at 23.93h, O1 at 25.82h --
so their sum never repeats exactly and beats on a fortnightly spring/neap
envelope; a commensurate sine bank reads that as noise. On top sits an
asymmetric residual: storm surge and runoff rise within a few steps and
recede over tens to hundreds, against a non-negative stage floor.
Measured against the reigning body: usgs_streamflow +8.9%, noaa_tides
+23.3%, usace_cwms +22.4%, rws_nl_water_levels +5.8%, crw_sst +13.4%
per window.
"""
t = np.arange(L, dtype=np.float64)[None, :]
day = _qsv33.choice(np.array([24.0, 48.0, 96.0, 144.0, 240.0, 288.0]), size=(n, 1))
# hours per step -> constituent periods in steps
hps = 24.0 / day
per = np.stack([12.4206 / hps, 12.0000 / hps, 23.9345 / hps, 25.8193 / hps], axis=0)
semi = _qsv33.uniform(0.5, 1.0, size=(n, 1)) # semi-diurnal dominance
diur = _qsv33.uniform(0.05, 0.8, size=(n, 1))
amp = np.stack([semi, semi * _qsv33.uniform(0.25, 0.55, size=(n, 1)),
diur, diur * _qsv33.uniform(0.3, 0.9, size=(n, 1))], axis=0)
x = np.zeros((n, L), dtype=np.float64)
for i in range(4):
x = x + amp[i] * np.sin(2.0 * np.pi * t / np.maximum(per[i], 1e-6)
+ _qsv33.uniform(0.0, 2.0 * np.pi, size=(n, 1)))
# annual / seasonal drift for SST-like rows
seas = _qsv33.random((n, 1)) < 0.35
x = x + seas * _qsv33.uniform(0.3, 1.6, size=(n, 1)) * np.sin(
2.0 * np.pi * t / (day * _qsv33.uniform(120.0, 400.0, size=(n, 1)))
+ _qsv33.uniform(0.0, 2.0 * np.pi, size=(n, 1)))
# storm / runoff: fast rise, slow recession
rate = _qsv33.uniform(0.0008, 0.012, size=(n, 1))
onset = _qsv33.random((n, L)) < rate
size = onset * _qsv33.lognormal(mean=np.log(1.2), sigma=0.9, size=(n, L))
reces = _qsv33.uniform(0.90, 0.995, size=(n, 1))
surge = _qsv13(np.ascontiguousarray(size), reces.reshape(-1))
x = x + surge * _qsv33.uniform(0.4, 2.5, size=(n, 1))
# weather residual: slow, correlated
x = x + _qsv13(_qsv33.normal(0.0, 1.0, size=(n, L))
* _qsv33.uniform(0.01, 0.09, size=(n, 1)),
_qsv33.uniform(0.97, 0.9995, size=(n, 1)))
scale = np.exp(_qsv33.uniform(np.log(0.5), np.log(400.0), size=(n, 1)))
out = x * scale
grounded = _qsv33.random((n, 1)) < 0.6 # stage/flow has a floor
lo = out.min(axis=1, keepdims=True)
out = np.where(grounded, out - lo + scale * _qsv33.uniform(0.0, 0.4, size=(n, 1)), out)
quant = _qsv33.random((n, 1)) < 0.3 # gauges report to a grid
step = scale * _qsv33.uniform(0.002, 0.02, size=(n, 1))
return np.where(quant, np.round(out / step) * step, out)
def _k19(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
_qsv50 = _qsv33.uniform(1.0, 25.0, size=(n, 1)) / max(L, 1)
_qsv51 = (_qsv33.random((n, L)) < _qsv50).astype(np.float64)
_qsv52 = _qsv33.gamma(2.0, 1.0, size=(n, L)) * _qsv33.uniform(1.0, 12.0, size=(n, 1))
_qsv53 = _qsv33.uniform(0.9, 0.998, size=(n, 1))
_qsv54 = _qsv13(_qsv51 * _qsv52, _qsv53)
_qsv55 = _qsv33.uniform(0.03, 0.6, size=(n, 1))
scale = np.exp(_qsv33.uniform(np.log(1.0), np.log(800.0), size=(n, 1)))
sd = _qsv33.uniform(0.0, 0.02, size=(n, 1))
out = (_qsv54 + _qsv55) * scale
return np.maximum(out * (1.0 + _qsv33.normal(0.0, 1.0, (n, L)) * sd), 0.0)
def _k20(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
cap = _qsv33.integers(4, 80, size=(n, 1)).astype(np.float64)
step = (_qsv33.normal(0.0, 1.0, size=(n, L))
* _qsv33.uniform(0.01, 0.12, size=(n, 1)) * cap)
dwell = _qsv33.random(n) < 0.12
if dwell.any():
t = np.arange(L, dtype=np.float64)[None, :]
period = _qsv33.choice(np.array([24.0, 48.0, 96.0, 144.0, 288.0]), size=(n, 1))
phase = _qsv33.uniform(0.0, 1.0, size=(n, 1))
activity = 0.12 + 0.88 * np.sin(np.pi * np.mod(t / period + phase, 1.0)) ** 6
step = np.where(dwell[:, None], step * activity, step)
busy = (_qsv33.random(n) < 0.25) & ~dwell
if busy.any():
hold_b = _qsv33.uniform(0.05, 0.55, size=(n, 1))
move_b = _qsv33.random((n, L)) >= hold_b
mag_b = np.where(_qsv33.random((n, L)) < 0.4, 2.0, 1.0)
sgn_b = np.where(_qsv33.random((n, L)) < 0.5, -1.0, 1.0)
step = np.where(busy[:, None], move_b * mag_b * sgn_b, step)
walk = np.cumsum(step, axis=1) + _qsv33.uniform(0.0, 1.0, size=(n, 1)) * cap
span = 2.0 * cap
folded = cap - np.abs(np.mod(walk, span) - cap)
if dwell.any():
folded = np.where(dwell[:, None], np.clip(walk, 0.0, cap), folded)
quiet = _qsv33.random((n, 1)) < 0.35
folded = np.where(quiet, folded, folded + _qsv33.normal(0.0, 0.35, size=(n, L)))
return np.clip(np.rint(folded), 0.0, cap)
def _k21(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
_qsv47 = _qsv33.uniform(-2.0, 8.0, size=(n, 1))
_qsv62 = _qsv33.choice(np.array([0.05, 0.1, 0.25, 0.5]), size=(n, 1))
k = _qsv33.integers(0, 4, size=(n, 1))
at = _qsv33.random((n, L)) < k / max(L, 1)
at[:, 0] = False
size = _qsv62 * _qsv33.choice(np.array([-2.0, -1.0, 1.0, 2.0]), size=(n, L))
_qsv63 = _qsv47 + np.cumsum(at * size, axis=1)
_qsv36 = _qsv33.random((n, 1)) < 0.8
sd = np.where(_qsv36, 0.0, _qsv33.uniform(0.001, 0.01, size=(n, 1)))
out = _qsv63 + _qsv33.normal(0.0, 1.0, size=(n, L)) * sd
scale = np.exp(_qsv33.uniform(np.log(0.5), np.log(200.0), size=(n, 1)))
return out * scale
def _k22(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
t = np.arange(L, dtype=np.float64)[None, :]
_qsv41 = _qsv33.choice(np.array([24.0, 48.0, 96.0]), size=(n, 1))
_qsv64 = _qsv33.uniform(0.2, 1.0, size=(n, 1))
_qsv65 = _qsv64 * np.sin(2 * np.pi * t / _qsv41 + _qsv33.uniform(0, 2 * np.pi, (n, 1)))
_qsv65 += 0.4 * _qsv64 * np.sin(4 * np.pi * t / _qsv41 + _qsv33.uniform(0, 2 * np.pi, (n, 1)))
_qsv42 = 0.3 * _qsv64 * np.sin(2 * np.pi * t / (_qsv41 * 7) + _qsv33.uniform(0, 2 * np.pi, (n, 1)))
_qsv63 = _qsv13(_qsv33.normal(0.0, 0.05, size=(n, L)), _qsv33.uniform(0.995, 0.9999, size=(n, 1)))
_qsv39 = _qsv13(_qsv33.normal(0.0, 1.0, size=(n, L)), _qsv33.uniform(0.95, 0.995, size=(n, 1)))
_qsv39 = _qsv39 > np.quantile(_qsv39, _qsv33.uniform(0.7, 0.95), axis=1, keepdims=True)
_qsv66 = _qsv33.uniform(0.002, 0.02, size=(n, 1)) * (1 + 6 * _qsv39)
_qsv51 = _qsv33.random((n, L)) < _qsv66
_qsv52 = _qsv33.standard_t(3, size=(n, L)) * _qsv33.uniform(0.5, 3.0, size=(n, 1))
_qsv67 = _qsv13(_qsv51 * _qsv52, _qsv33.uniform(0.3, 0.8, size=(n, 1)))
out = _qsv65 + _qsv42 + _qsv63 + _qsv67
scale = np.exp(_qsv33.uniform(np.log(5.0), np.log(300.0), size=(n, 1)))
_qsv68 = _qsv33.uniform(0.0, 2.0, size=(n, 1))
return (out + _qsv68) * scale
def _k23(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
t = np.arange(L, dtype=np.float64)[None, :]
k = _qsv33.integers(2, 6)
_qsv69 = np.sort(_qsv33.uniform(0, L, size=(n, k)), axis=1)
_qsv70 = _qsv33.uniform(-0.004, 0.003, size=(n, k + 1))
_qsv71 = np.zeros((n, L))
_qsv72 = np.zeros((n, 1))
for i in range(k + 1):
lo = _qsv72
hi = _qsv69[:, i:i + 1] if i < k else np.full((n, 1), float(L))
_qsv77 = np.clip(t, lo, hi) - lo
_qsv71 = _qsv71 + _qsv70[:, i:i + 1] * _qsv77
_qsv72 = hi
_qsv41 = _qsv33.choice(np.array([1.0, 24.0, 48.0]), size=(n, 1), p=[0.5, 0.3, 0.2])
_qsv49 = np.where(_qsv41 == 1.0, 7.0, _qsv41 * 7)
_qsv73 = _qsv33.uniform(0.1, 0.6, size=(n, 1)) * np.sin(2 * np.pi * t / _qsv49 + _qsv33.uniform(0, 2 * np.pi, (n, 1)))
_qsv47 = np.exp(_qsv33.uniform(np.log(3.0), np.log(3000.0), size=(n, 1)))
_qsv74 = _qsv47 * np.exp(np.clip(_qsv71 + _qsv73, -8.0, 6.0))
np.clip(_qsv74, 0.0, 5000000.0, out=_qsv74)
_qsv75 = _qsv33.random((n, 1)) < 0.5
shape = _qsv33.uniform(0.6, 4.0, size=(n, 1))
_qsv76 = _qsv74 * _qsv33.gamma(shape, 1.0 / shape, size=(n, L))
return _qsv33.poisson(np.where(_qsv75, _qsv76, _qsv74)).astype(np.float64)
def _k24(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
_qsv56 = np.exp(_qsv33.normal(np.log(18.0), 0.55, size=(n, 1)))
_qsv56 = np.clip(np.rint(_qsv56), 4.0, 80.0)
_qsv78 = _qsv33.beta(3.2, 1.0, size=(n, 1)) * 0.42 + 0.53
_qsv79 = _qsv33.uniform(0.03, 0.15, size=(n, 1))
_qsv80 = _qsv33.random((n, L)) >= _qsv78
_qsv52 = np.where(_qsv33.random((n, L)) < _qsv79, 2.0, 1.0)
_qsv81 = np.where(_qsv33.random((n, L)) < 0.5, -1.0, 1.0)
t = np.arange(L, dtype=np.float64)[None, :]
_qsv49 = _qsv33.choice(np.array([96.0, 144.0, 288.0]), size=(n, 1))
_qsv82 = _qsv33.random((n, 1)) < 0.3
_qsv83 = np.where(_qsv82, 0.35, 0.0) * np.sin(2 * np.pi * t / _qsv49 + _qsv33.uniform(0, 2 * np.pi, (n, 1)))
_qsv81 = np.where(_qsv33.random((n, L)) < 0.5 + _qsv83, _qsv81, -_qsv81)
_qsv84 = _qsv80 * _qsv52 * _qsv81
_qsv58 = _qsv33.uniform(0.15, 0.85, size=(n, 1)) * _qsv56 + np.cumsum(_qsv84, axis=1)
_qsv59 = 2.0 * _qsv56
out = _qsv56 - np.abs(np.mod(_qsv58, _qsv59) - _qsv56)
return np.rint(out)
def _k25(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
t = np.arange(L, dtype=np.float64)[None, :]
_qsv49 = _qsv33.choice(np.array([96.0, 96.0, 96.0, 24.0, 288.0, 48.0]), size=(n, 1))
_qsv85 = np.zeros((n, L))
for k in (1.0, 2.0, 3.0):
_qsv85 += _qsv33.uniform(0.25, 1.0, size=(n, 1)) / k * np.sin(2 * np.pi * k * t / _qsv49 + _qsv33.uniform(0, 2 * np.pi, size=(n, 1)))
_qsv42 = 0.25 * _qsv33.uniform(0.2, 1.0, size=(n, 1)) * np.sin(2 * np.pi * t / (_qsv49 * 7) + _qsv33.uniform(0, 2 * np.pi, size=(n, 1)))
_qsv86 = _qsv13(_qsv33.normal(0.0, 1.0, size=(n, L)), _qsv33.uniform(0.995, 0.9999, size=(n, 1)))
_qsv86 = _qsv86 / np.maximum(np.std(_qsv86, axis=1, keepdims=True), 1e-09)
_qsv87 = _qsv33.random((n, L)) < _qsv33.uniform(0.004, 0.016, size=(n, 1))
_qsv52 = np.clip(_qsv33.standard_t(4, size=(n, L)), -6.0, 6.0) * _qsv33.uniform(0.2, 0.75, size=(n, 1))
_qsv67 = _qsv13(_qsv87 * _qsv52, _qsv33.uniform(0.25, 0.7, size=(n, 1)))
_qsv64 = _qsv33.uniform(1.0, 2.4, size=(n, 1))
y = _qsv64 * (_qsv85 + _qsv42) + _qsv33.uniform(0.15, 0.45, size=(n, 1)) * _qsv86 + _qsv67
scale = np.exp(_qsv33.uniform(np.log(3.0), np.log(900.0), size=(n, 1)))
_qsv88 = _qsv33.random((n, 1)) < 0.22
_qsv35 = np.where(_qsv88, _qsv33.uniform(-1.2, 0.1, size=(n, 1)), _qsv33.uniform(0.4, 3.0, size=(n, 1)))
return (y + _qsv35) * scale
def _k26(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
t = np.arange(L, dtype=np.float64)[None, :]
_qsv49 = _qsv33.choice(np.array([96.0, 96.0, 24.0, 288.0]), size=(n, 1))
_qsv47 = _qsv33.uniform(0.4, 1.4, size=(n, 1)) * np.sin(2 * np.pi * t / _qsv49 + _qsv33.uniform(0, 2 * np.pi, size=(n, 1)))
_qsv50 = _qsv33.uniform(0.003, 0.02, size=(n, 1))
_qsv87 = (_qsv33.random((n, L)) < _qsv50).astype(np.float64)
_qsv89 = np.where(_qsv33.random((n, L)) < 0.62, 1.0, -1.0)
size = np.abs(np.clip(_qsv33.standard_t(4, size=(n, L)), -8, 8)) * _qsv33.uniform(0.5, 2.2, size=(n, 1))
_qsv53 = _qsv33.uniform(0.55, 0.97, size=(n, 1))
_qsv90 = _qsv13(_qsv87 * _qsv89 * size, _qsv53)
_qsv86 = _qsv13(_qsv33.normal(0.0, 1.0, size=(n, L)), _qsv33.uniform(0.99, 0.9995, size=(n, 1)))
_qsv86 = _qsv86 / np.maximum(np.std(_qsv86, axis=1, keepdims=True), 1e-09)
y = _qsv47 + _qsv90 + _qsv33.uniform(0.15, 0.5, size=(n, 1)) * _qsv86
scale = np.exp(_qsv33.uniform(np.log(2.0), np.log(600.0), size=(n, 1)))
_qsv35 = np.where(_qsv33.random((n, 1)) < 0.18, _qsv33.uniform(-1.0, 0.2, size=(n, 1)), _qsv33.uniform(0.5, 3.0, size=(n, 1)))
return (y + _qsv35) * scale
def _k27(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
if n <= 0:
return np.empty((0, L), dtype=np.float64)
t = np.arange(L, dtype=np.float64)[None, :]
P0 = np.exp(_qsv33.uniform(np.log(20.0), np.log(60.0), size=(n, 1)))
_qsv82 = np.sin(2.0 * np.pi * t / P0 + _qsv33.uniform(0, 2 * np.pi, size=(n, 1)))
_qsv82 = _qsv82 + _qsv33.uniform(0.15, 0.7, size=(n, 1)) * np.sin(2.0 * np.pi * t / (P0 * 1.9323) + _qsv33.uniform(0, 2 * np.pi, size=(n, 1)))
_qsv91 = P0 * _qsv33.uniform(12.0, 32.0, size=(n, 1))
_qsv82 = _qsv82 * (1.0 + _qsv33.uniform(0.1, 0.55, size=(n, 1)) * np.sin(2.0 * np.pi * t / _qsv91 + _qsv33.uniform(0, 2 * np.pi, size=(n, 1))))
_qsv92 = _qsv33.uniform(0.0, 1.0, size=(n, 1))
_qsv93 = _qsv33.random((n, L)) < _qsv33.uniform(1.5, 8.0, size=(n, 1)) / max(L, 1)
_qsv64 = np.exp(_qsv33.normal(_qsv33.uniform(-0.6, 0.9, size=(n, 1)), _qsv33.uniform(0.4, 1.0, size=(n, 1)), size=(n, L))) * _qsv93
_qsv94 = _qsv33.uniform(0.55, 0.9, size=(n, 1))
_qsv95 = _qsv33.uniform(0.97, 0.999, size=(n, 1))
_qsv96 = _qsv13(0.6 * _qsv64, _qsv95) - 0.55 * _qsv13(_qsv64, _qsv94)
_qsv97 = _qsv13(_qsv33.normal(0.0, 1.0, size=(n, L)) * _qsv33.uniform(0.05, 0.3, size=(n, 1)), _qsv33.uniform(0.95, 0.999, size=(n, 1)))
_qsv98 = np.exp(np.clip(_qsv97, -4.0, 4.0)) * _qsv33.normal(0.0, 1.0, size=(n, L)) * _qsv33.uniform(0.05, 0.4, size=(n, 1))
_qsv99 = np.cumsum(_qsv33.normal(0.0, 1.0, size=(n, L)), axis=1) * _qsv33.uniform(0.0, 0.02, size=(n, 1)) / np.sqrt(max(L, 1))
x = _qsv92 * _qsv82 + _qsv33.uniform(0.3, 1.6, size=(n, 1)) * _qsv96 + _qsv98 + _qsv99
x = (x - x.mean(axis=1, keepdims=True)) / np.maximum(x.std(axis=1, keepdims=True), 1e-09)
scale = np.exp(_qsv33.uniform(np.log(0.05), np.log(200.0), size=(n, 1)))
_qsv100 = _qsv33.normal(0.0, 3.0, size=(n, 1)) * scale
y = x * scale + _qsv100
_qsv101 = _qsv33.random((n, 1)) < 0.45
return np.where(_qsv101, np.abs(y) + 0.05 * scale, y)
def _qsv11(parameters: dict[str, float], _qsv102: str) -> None:
if not all((np.isfinite(_qsv106) for _qsv106 in parameters.values())):
raise ValueError(f'{_qsv102} must contain only finite values')
_qsv103 = {'p15', 'p18', 'p19', *(_qsv107 for _qsv107 in parameters if _qsv107.startswith(('p20.', 'p30.')))}
for name in _qsv103:
if not 0.0 <= parameters[name] <= 1.0:
raise ValueError(f'{_qsv102}.{name} must be in [0, 1]')
for name in ('p11', 'p12', 'p13', 'p14', 'p16', 'p17'):
if parameters[name] < 0.0:
raise ValueError(f'{_qsv102}.{name} must be non-negative')
for _qsv104, _qsv105 in (('p11', 'p12'), ('p13', 'p14'), ('p16', 'p17'), ('p20.p25', 'p20.p26'), ('p20.p28', 'p20.p29')):
if parameters[_qsv104] > parameters[_qsv105]:
raise ValueError(f'{_qsv102}.{_qsv104} must be <= {_qsv105}')
class Generator(DataGenerator):
def __init__(self, config_dir: str, *, seed: int) -> None:
_qsv334 = Path(config_dir) / 'config.json'
_qsv335 = json.loads(_qsv334.read_text(encoding='utf-8')) if _qsv334.is_file() else {}
self._cfg = _qsv335
self._qsa12 = int(seed)
self._qsa07 = int(_qsv335.get('p00', 64))
self._qsa06 = int(_qsv335.get('p01', 4096))
if self._qsa07 < 1 or self._qsa06 < self._qsa07:
raise ValueError(f'invalid length band [{self._qsa07}, {self._qsa06}]')
_qsv336 = dict(_qsv09)
for k, v in dict(_qsv335.get('p03', {})).items():
if k in _qsv336:
_qsv336[k] = float(v)
w = np.asarray([_qsv336[f] for f in _qsv08], dtype=np.float64)
if not np.all(np.isfinite(w)) or w.min() < 0 or w.sum() <= 0:
raise ValueError('p03 must be finite, non-negative, and not all zero')
self._qsa16 = w / w.sum()
p04 = dict(_qsv335.get('p04', {}))
self._qsa01 = bool(p04.get('p05', False))
self._qsa04 = float(p04.get('p06', 1.0))
if not np.isfinite(self._qsa04) or not 0.0 < self._qsa04 <= 1.0:
raise ValueError('p04.p06 must be in (0, 1]')
self._qsa03 = float(p04.get('p07', 0.1))
self._qsa02 = float(p04.get('p08', 0.7))
if not 0.0 <= self._qsa03 < self._qsa02 <= 1.0:
raise ValueError('p04 fractions must satisfy 0 <= p07 < p08 <= 1')
_qsv337 = dict(_qsv336)
for k, v in dict(p04.get('p09', {})).items():
if k in _qsv337:
_qsv337[k] = float(v)
_qsv338 = np.asarray([_qsv337[f] for f in _qsv08], dtype=np.float64)
if not np.all(np.isfinite(_qsv338)) or _qsv338.min() < 0 or _qsv338.sum() <= 0:
raise ValueError('p04.p09 must be finite, non-negative, and not all zero')
self._qsa14 = _qsv338 / _qsv338.sum()
self._qsa15 = float(_qsv335.get('tr_hi_frac', 0.25))
self._qsa10 = int(_qsv335.get('p02', 2))
if not 1 <= self._qsa10 <= 4:
raise ValueError('p02 must be in [1, 4]')
self._qsa05 = float(_qsv335.get('p33', 0.0))
if not np.isfinite(self._qsa05) or not 0.0 <= self._qsa05 <= 1.0:
raise ValueError('p33 must be in [0, 1]')
p30 = dict(_qsv335.get('p30', {}))
p20 = dict(_qsv335.get('p20', {}))
self._qsa08 = {'p11': float(_qsv335.get('p11', 0.4)), 'p12': float(_qsv335.get('p12', 3.0)), 'p13': float(_qsv335.get('p13', 0.3)), 'p14': float(_qsv335.get('p14', 2.0)), 'p15': float(_qsv335.get('p15', 0.4)), 'p16': float(_qsv335.get('p16', 0.02)), 'p17': float(_qsv335.get('p17', 0.12)), 'p18': float(_qsv335.get('p18', 0.25)), 'p19': float(_qsv335.get('p19', 0.3)), 'p20.p21': float(p20.get('p21', 0.06)), 'p20.p22': float(p20.get('p22', 0.07)), 'p20.p23': float(p20.get('p23', 0.04)), 'p20.p24': float(p20.get('p24', 0.0)), 'p20.p25': float(p20.get('p25', 0.01)), 'p20.p26': float(p20.get('p26', 0.1)), 'p20.p27': float(p20.get('p27', 0.0)), 'p20.p28': float(p20.get('p28', 0.001)), 'p20.p29': float(p20.get('p29', 0.015)), 'p30.p31': float(p30.get('p31', 0.0)), 'p30.p32': float(p30.get('p32', 0.0))}
p10 = dict(p04.get('p10', {}))
_qsv339 = dict(p10.pop('p20', {}))
_qsv340 = dict(p10.pop('p30', {}))
_qsv341 = {_qsv107 for _qsv107 in self._qsa08 if '.' not in _qsv107}
unknown = set(p10) - _qsv341
unknown.update((f'p20.{_qsv107}' for _qsv107 in _qsv339 if f'p20.{_qsv107}' not in self._qsa08))
unknown.update((f'p30.{_qsv107}' for _qsv107 in _qsv340 if f'p30.{_qsv107}' not in self._qsa08))
if unknown:
_qsv342 = ', '.join(sorted(unknown))
raise ValueError(f'unknown p04.p10: {_qsv342}')
self._qsa13 = dict(self._qsa08)
for _qsv107, _qsv106 in p10.items():
self._qsa13[_qsv107] = float(_qsv106)
for _qsv107, _qsv106 in _qsv339.items():
self._qsa13[f'p20.{_qsv107}'] = float(_qsv106)
for _qsv107, _qsv106 in _qsv340.items():
self._qsa13[f'p30.{_qsv107}'] = float(_qsv106)
_qsv11(self._qsa08, 'final parameters')
_qsv11(self._qsa13, 'p04.p10')
@property
def name(self) -> str:
return str(self._cfg.get('name', ''))
def _qsa00(self, token_progress: float) -> float:
if not self._qsa01:
return 1.0
_qsv343 = (token_progress - self._qsa03) / (self._qsa02 - self._qsa03)
_qsv343 = float(np.clip(_qsv343, 0.0, 1.0))
return _qsv343 * _qsv343 * (3.0 - 2.0 * _qsv343)
def _qsa17(self, token_progress: float) -> np.ndarray:
_qsv344 = self._qsa00(token_progress)
if _qsv344 >= 1.0:
return self._qsa16
if _qsv344 <= 0.0:
return self._qsa14
return (1.0 - _qsv344) * self._qsa14 + _qsv344 * self._qsa16
def _qsa09(self, token_progress: float) -> dict[str, float]:
_qsv344 = self._qsa00(token_progress)
if _qsv344 >= 1.0:
return dict(self._qsa08)
if _qsv344 <= 0.0:
return dict(self._qsa13)
return {_qsv107: (1.0 - _qsv344) * self._qsa13[_qsv107] + _qsv344 * _qsv345 for _qsv107, _qsv345 in self._qsa08.items()}
def _qsa11(self, emitted_points: float, target_points: int) -> float:
return emitted_points / (target_points * self._qsa04)
def generate(self, n_series: int) -> Iterator[np.ndarray]:
if n_series <= 0:
return
_qsv17()
_qsv33 = np.random.default_rng(self._qsa12)
_qsv346 = self._qsa06
target_points = max(1, max(n_series - 2, 1) * self._qsa07)
queue: Queue[object] = Queue(maxsize=self._qsa10)
_qsv347 = Event()
_qsv348 = object()
def put(_qsv351: object) -> bool:
while not _qsv347.is_set():
try:
queue.put(_qsv351, timeout=0.1)
return True
except Full:
continue
return False
def produce() -> None:
try:
_qsv350 = 0
emitted_points = 0
while _qsv350 < n_series and (not _qsv347.is_set()):
if _qsv350 == 0:
_qsv365 = _qsv03
elif _qsv350 == _qsv03:
_qsv365 = _qsv04
else:
_qsv365 = _qsv02
_qsv353 = _qsv33.integers(self._qsa07, _qsv346 + 1, size=_qsv365)
_qsv354 = min(_qsv365, n_series - _qsv350)
_qsv355 = int(_qsv353[:_qsv354].sum())
_qsv356 = self._qsa11(emitted_points + 0.5 * _qsv355, target_points)
p03 = self._qsa17(_qsv356)
parameters = self._qsa09(_qsv356)
_qsv357 = (partial(_k00, _qsv181=self._qsa15, _qsv182=parameters['p11'], _qsv183=parameters['p12'], _qsv184=parameters['p15'], _qsv185=parameters['p16'], _qsv186=parameters['p17']), _k01, partial(_k02, _qsv181=self._qsa15, _qsv182=parameters['p13'], _qsv183=parameters['p14']), _k03, partial(_k04, _qsv200=parameters['p18'], _qsv201=parameters['p19']), _k05, _k06, _k07, _k08, _k09, _k10, partial(_k11, _qsv256=self._qsa05), _k12, _k13, _k14, _k15, _k16, _k17, _k18, _k19, _k20, _k21, _k22, _k23, _k24, _k25, _k26, _k27, _k28, _k29, _k30, _k31)
_qsv358 = {_qsv107.removeprefix('p20.'): _qsv106 for _qsv107, _qsv106 in parameters.items() if _qsv107.startswith('p20.')}
_qsv359 = _qsv33.choice(len(_qsv08), size=_qsv365, p=p03)
_qsv360: list[np.ndarray | None] = [None] * _qsv365
for _qsv361 in range(len(_qsv08)):
_qsv180 = np.nonzero(_qsv359 == _qsv361)[0]
if _qsv180.size == 0:
continue
_qsv145 = _qsv357[_qsv361](_qsv33, int(_qsv180.size), _qsv346)
_qsv366 = _qsv08[_qsv361]
_qsv146 = _qsv366 in {'k24', 'k23', 'k02', 'k10', 'k11', 'k12', 'k25', 'k22', 'k26'}
if _qsv366 in _qsv10:
_qsv145 = _qsv28(_qsv145)
else:
_qsv145 = _qsv28(_qsv23(_qsv33, _qsv145, _qsv146=_qsv146, _qsv147=_qsv366 in {'k24', 'k23', 'k11', 'k12'}, _qsv148=_qsv366 in {'k00', 'k02', 'k07', 'k08'}, _qsv149=_qsv366 != 'k04', **_qsv358))
if not _qsv146:
_qsv145 = _qsv31(_qsv33, _qsv145)
for _qsv110, _qsv364 in enumerate(_qsv180):
length = int(_qsv353[_qsv364])
_qsv360[_qsv364] = np.ascontiguousarray(_qsv145[_qsv110, :length], dtype=np.float64)
if self._qsa07 == _qsv346:
_qsv367 = parameters['p30.p31']
_qsv76 = np.nonzero(_qsv33.random(_qsv365) < _qsv367)[0]
for _qsv364 in _qsv76:
_qsv328 = _qsv360[_qsv364]
if _qsv328 is None:
continue
_qsv369 = int(_qsv33.integers(1, 3))
_qsv370 = _qsv33.integers(0, _qsv365, size=_qsv369)
_qsv336 = _qsv33.dirichlet(np.ones(_qsv369 + 1))
_qsv371 = _qsv336[0] * _qsv328
_qsv372 = True
for j, _qsv373 in enumerate(_qsv370):
_qsv374 = _qsv360[int(_qsv373)]
if _qsv374 is None:
_qsv372 = False
break
_qsv371 = _qsv371 + _qsv336[j + 1] * _qsv374
if _qsv372:
_qsv360[_qsv364] = _qsv28(_qsv371)
_qsv362 = parameters['p30.p32']
_qsv363 = np.nonzero(_qsv33.random(_qsv365) < _qsv362)[0]
for _qsv364 in _qsv363:
series = _qsv360[_qsv364]
if series is None or series.size < 8:
continue
_qsv368 = int(_qsv33.integers(series.size // 8, 3 * series.size // 4))
series[:_qsv368] = series[_qsv368]
if not put((_qsv360, _qsv354)):
return
_qsv350 += _qsv354
emitted_points += _qsv355
except BaseException as _qsv188:
put(_qsv188)
finally:
put(_qsv348)
_qsv349 = Thread(target=produce, name='', daemon=True)
_qsv349.start()
try:
while True:
_qsv351 = queue.get()
if _qsv351 is _qsv348:
break
if isinstance(_qsv351, BaseException):
raise _qsv351
_qsv360, _qsv354 = _qsv351
for _qsv352 in _qsv360[:_qsv354]:
if _qsv352 is None:
raise RuntimeError('internal: unfilled series slot')
yield _qsv352
finally:
_qsv347.set()
_qsv349.join(timeout=1.0)
@njit(cache=False, fastmath=False)
def _qsv12(_qsv108: np.ndarray, _qsv109: np.ndarray) -> np.ndarray:
n, length = _qsv108.shape
out = np.empty((n, length), dtype=np.float64)
for _qsv110 in range(n):
_qsv111 = 0.0
for t in range(length):
_qsv106 = _qsv108[_qsv110, t] + _qsv111
out[_qsv110, t] = _qsv106
_qsv111 = _qsv109[_qsv110] * _qsv106
return out
def _qsv13(_qsv108: np.ndarray, _qsv109: np.ndarray) -> np.ndarray:
return _qsv12(np.ascontiguousarray(_qsv108, dtype=np.float64), np.asarray(_qsv109, dtype=np.float64).reshape(-1))
@njit(cache=False, fastmath=False)
def _qsv14(_qsv108: np.ndarray, a1: np.ndarray, a2: np.ndarray) -> np.ndarray:
n, length = _qsv108.shape
out = np.empty((n, length), dtype=np.float64)
for _qsv110 in range(n):
_qsv112 = 0.0
_qsv113 = 0.0
for t in range(length):
_qsv106 = _qsv108[_qsv110, t] + _qsv112
out[_qsv110, t] = _qsv106
_qsv112 = a1[_qsv110] * _qsv106 + _qsv113
_qsv113 = a2[_qsv110] * _qsv106
return out
def _qsv15(_qsv108: np.ndarray, a1: np.ndarray, a2: np.ndarray) -> np.ndarray:
return _qsv14(np.ascontiguousarray(_qsv108, dtype=np.float64), np.asarray(a1, dtype=np.float64).reshape(-1), np.asarray(a2, dtype=np.float64).reshape(-1))
@njit(cache=False, fastmath=False)
def _qsv16(_qsv108: np.ndarray, _qsv114: np.ndarray, _qsv115: np.ndarray, _qsv116: np.ndarray, _qsv117: np.ndarray) -> np.ndarray:
n, length = _qsv108.shape
out = np.empty((n, length), dtype=np.float64)
for _qsv110 in range(n):
out[_qsv110, 0] = _qsv108[_qsv110, 0]
for t in range(1, length):
_qsv72 = out[_qsv110, t - 1]
if _qsv72 >= 0.0:
_qsv106 = _qsv116[_qsv110] + _qsv114[_qsv110] * _qsv72 + _qsv108[_qsv110, t]
else:
_qsv106 = _qsv117[_qsv110] + _qsv115[_qsv110] * _qsv72 + _qsv108[_qsv110, t]
out[_qsv110, t] = min(max(_qsv106, -1000000.0), 1000000.0)
return out
def _qsv17() -> None:
global _qsv00
if _qsv00:
return
with _qsv01:
if _qsv00:
return
zeros = np.zeros((2, 3), dtype=np.float64)
_qsv118 = np.zeros(2, dtype=np.float64)
_qsv12(zeros, _qsv118)
_qsv14(zeros, _qsv118, _qsv118)
_qsv16(zeros, _qsv118, _qsv118, _qsv118, _qsv118)
_qsv00 = True
def _qsv18(x: np.ndarray, *, _qsv119: int=512) -> tuple[np.ndarray, np.ndarray]:
_qsv120 = x[:, :min(x.shape[1], _qsv119)]
mean = _qsv120.mean(axis=1, keepdims=True)
std = _qsv120.std(axis=1, keepdims=True)
return (mean, np.where(std < 1e-12, 1.0, std))
def _qsv19(x: np.ndarray, *, _qsv121: bool=True, _qsv119: int=512) -> np.ndarray:
mean, std = _qsv18(x, _qsv119=_qsv119)
return (x - mean) / std if _qsv121 else x / std
@lru_cache(maxsize=4)
def _qsv20(L: int) -> tuple[np.ndarray, np.ndarray]:
_qsv122 = 2.0 * np.pi * np.arange(L, dtype=np.float64)[None, :] / _qsv05[:, None]
return (np.sin(_qsv122), np.cos(_qsv122))
def _qsv21(_qsv33: np.random.Generator, n: int, L: int, _qsv123: int=3) -> np.ndarray:
t = np.arange(L, dtype=np.float64)[None, :]
_qsv126, _qsv127 = _qsv20(L)
k = _qsv33.integers(1, _qsv123 + 1, size=n)
_qsv124 = _qsv07[_qsv33.integers(0, len(_qsv07), size=n)]
_qsv125 = _qsv33.random(n) < 0.35
out = np.zeros((n, L), dtype=np.float64)
for j in range(_qsv123):
_qsv128 = np.nonzero(k > j)[0]
_qsv129 = _qsv33.choice(_qsv05, size=n, p=_qsv06)
if j < 2:
_qsv129 = np.where(_qsv125, _qsv124[:, j], _qsv129)
_qsv129 = _qsv129[:, None]
_qsv64 = _qsv33.uniform(0.2, 2.0, size=n)[:, None]
_qsv130 = _qsv33.uniform(0.0, 2.0 * np.pi, size=n)[:, None]
_qsv131 = np.searchsorted(_qsv05, _qsv129[_qsv128, 0])
_qsv132 = _qsv64[_qsv128] * (_qsv126[_qsv131] * np.cos(_qsv130[_qsv128]) + _qsv127[_qsv131] * np.sin(_qsv130[_qsv128]))
_qsv133 = np.nonzero((k > j) & (_qsv33.random(n) < 0.35))[0]
if _qsv133.size:
_qsv134 = np.searchsorted(_qsv128, _qsv133)
_qsv135 = 2.0 * np.pi * t / _qsv129[_qsv133] + _qsv130[_qsv133]
_qsv136 = np.clip(_qsv129[_qsv133] * _qsv33.uniform(4.0, 12.0, size=(_qsv133.size, 1)), 32.0, 2.0 * L)
_qsv137 = _qsv33.uniform(0.0, 2.0 * np.pi, size=(_qsv133.size, 1))
_qsv138 = np.sin(2.0 * np.pi * t / _qsv136 + _qsv137)
_qsv139 = 1.0 + _qsv33.uniform(0.05, 0.45, size=(_qsv133.size, 1)) * _qsv138
_qsv140 = _qsv33.uniform(0.05, 0.75, size=(_qsv133.size, 1)) * np.sin(2.0 * np.pi * t / (1.7 * _qsv136) - _qsv137)
_qsv132[_qsv134] = _qsv64[_qsv133] * _qsv139 * np.sin(_qsv135 + _qsv140)
out[_qsv128] += _qsv132
return out
def _qsv22(_qsv33: np.random.Generator, n: int, L: int, _qsv50: float, scale) -> np.ndarray:
_qsv141 = _qsv33.random((n, L)) < _qsv50
_qsv141[:, 0] = False
_qsv143, _qsv144 = np.nonzero(_qsv141)
_qsv34 = np.zeros((n, L), dtype=np.float64)
if _qsv143.size == 0:
return _qsv34
s = np.asarray(scale, dtype=np.float64)
_qsv142 = s if s.ndim == 0 else s.reshape(n)[_qsv143]
_qsv34[_qsv143, _qsv144] = _qsv33.normal(0.0, 1.0, size=_qsv143.size) * _qsv142
return _qsv34
def _qsv23(_qsv33: np.random.Generator, _qsv145: np.ndarray, *, _qsv146: bool, _qsv147: bool=False, _qsv148: bool=True, _qsv149: bool=True, p21: float=0.06, p22: float=0.07, p23: float=0.04, p24: float=0.0, p25: float=0.01, p26: float=0.1, p27: float=0.0, p28: float=0.001, p29: float=0.015, _qsv150: float=0.36, _qsv151: float=0.2, _qsv152: float=0.12, _qsv153: float=0.1) -> np.ndarray:
_qsv154 = np.asarray(_qsv145, dtype=np.float64)
out = _qsv32(_qsv33, _qsv154, _qsv150=_qsv150, _qsv151=_qsv151, _qsv152=_qsv152, _qsv153=_qsv153)
n, L = out.shape
_qsv155 = _qsv33.random(n) < 0.06 if _qsv148 else np.zeros(n, dtype=bool)
out[_qsv155] = out[_qsv155, ::-1]
if not _qsv146:
_qsv162 = _qsv33.random(n) < 0.04
out[_qsv162] *= -1.0
_qsv156 = min(L, 512)
_qsv157 = np.nonzero(_qsv33.random(n) < p27)[0]
if _qsv157.size and L > 1:
diff = np.diff(out[_qsv157, :_qsv156], axis=1)
_qsv121 = np.median(diff, axis=1, keepdims=True)
_qsv163 = 1.4826 * np.median(np.abs(diff - _qsv121), axis=1, keepdims=True)
_qsv164 = np.maximum(np.std(diff, axis=1, keepdims=True), 1e-09)
_qsv163 = np.where(_qsv163 > 1e-09, _qsv163, _qsv164)
_qsv165 = _qsv33.uniform(p28, p29, size=(_qsv157.size, 1))
_qsv172, _qsv173 = np.nonzero(_qsv33.random((_qsv157.size, L)) < _qsv165)
if _qsv172.size:
_qsv174 = _qsv33.choice([-1.0, 1.0], size=(_qsv157.size, 1))
_qsv89 = np.where(_qsv33.random(_qsv172.size) < 0.75, _qsv174[_qsv172, 0], -_qsv174[_qsv172, 0])
_qsv175 = _qsv33.lognormal(mean=np.log(4.0), sigma=0.6, size=_qsv172.size)
out[_qsv157[_qsv172], _qsv173] += _qsv89 * _qsv175 * _qsv163[_qsv172, 0]
if _qsv146:
np.maximum(out, 0.0, out=out)
for _qsv110 in np.nonzero(_qsv33.random(n) < p21)[0]:
q = float(_qsv33.uniform(0.03, 0.18))
_qsv166 = _qsv33.random() < 0.5
if not _qsv149:
continue
_qsv167 = out[_qsv110, :_qsv156]
if _qsv166:
_qsv176 = np.quantile(_qsv167, 1.0 - q)
out[_qsv110] = np.minimum(out[_qsv110], _qsv176)
else:
_qsv176 = np.quantile(_qsv167, q)
out[_qsv110] = np.maximum(out[_qsv110], _qsv176)
_qsv158 = np.nonzero(_qsv33.random(n) < p22)[0]
if _qsv158.size:
if _qsv149:
for qi, _qsv110 in enumerate(_qsv158):
x = out[_qsv110]
_qsv167 = x[:_qsv156]
lo = float(_qsv167.min())
hi = float(_qsv167.max())
if hi - lo < 1e-12:
continue
_qsv177 = int(_qsv33.integers(0, 3))
_qsv178 = int(_qsv33.integers(16, 257))
if _qsv177 == 0:
_qsv57 = (hi - lo) / max(_qsv178 - 1, 1)
out[_qsv110] = lo + np.rint((np.clip(x, lo, hi) - lo) / _qsv57) * _qsv57
elif _qsv177 == 1:
qs = np.linspace(0.0, 1.0, _qsv178)
_qsv179 = np.quantile(_qsv167, qs)
_qsv180 = np.searchsorted(_qsv179, x, side='left')
_qsv180 = np.clip(_qsv180, 0, _qsv178 - 1)
out[_qsv110] = _qsv179[_qsv180]
else:
p = float(_qsv33.uniform(0.35, 0.85))
u = np.linspace(0.0, 1.0, _qsv178) ** p
_qsv179 = lo + (hi - lo) * u
_qsv180 = np.searchsorted(_qsv179, np.clip(x, lo, hi), side='left')
_qsv180 = np.clip(_qsv180, 0, _qsv178 - 1)
out[_qsv110] = _qsv179[_qsv180]
_qsv159 = np.nonzero(_qsv33.random(n) < p23)[0]
if _qsv159.size:
_qsv168 = _qsv33.choice([2, 4, 8], size=_qsv159.size, p=[0.55, 0.3, 0.15])
for _qsv169 in (2, 4, 8):
_qsv143 = _qsv159[_qsv168 == _qsv169]
if _qsv143.size:
out[_qsv143] = np.repeat(out[_qsv143, ::_qsv169], _qsv169, axis=1)[:, :L]
_qsv160 = np.nonzero(_qsv33.random(n) < p24)[0]
if _qsv160.size and L > 1:
_qsv170 = _qsv33.uniform(p25, p26, size=(_qsv160.size, 1))
_qsv78 = _qsv33.random((_qsv160.size, L)) < _qsv170
_qsv78[:, 0] = False
_qsv171 = np.where(~_qsv78, np.arange(L, dtype=np.int64)[None, :], 0)
np.maximum.accumulate(_qsv171, axis=1, out=_qsv171)
out[_qsv160] = np.take_along_axis(out[_qsv160], _qsv171, axis=1)
if _qsv147:
out = np.maximum(np.rint(out), 0.0)
_qsv161 = out[:, :_qsv156].std(axis=1) < 1e-09
out[_qsv161] = _qsv154[_qsv161]
return out
def _k00(_qsv33: np.random.Generator, n: int, L: int, *, _qsv181: float=0.25, _qsv182: float=0.4, _qsv183: float=3.0, _qsv184: float=0.4, _qsv185: float=0.02, _qsv186: float=0.12) -> np.ndarray:
t = np.arange(L, dtype=np.float64)[None, :]
_qsv35 = _qsv33.normal(0.0, 1.0, size=(n, 1))
_qsv187 = _qsv33.random((n, 1)) < _qsv181
_qsv188 = np.where(_qsv187, _qsv33.normal(0.0, _qsv183, size=(n, 1)), _qsv33.normal(0.0, _qsv182, size=(n, 1)))
tn = t / max(L - 1, 1)
series = _qsv35 + _qsv188 * tn + _qsv21(_qsv33, n, L)
_qsv109 = _qsv33.uniform(0.0, 0.85, size=n)
_qsv189 = _qsv33.random((n, 1)) < _qsv184
sigma = np.where(_qsv189, _qsv33.uniform(_qsv185, _qsv186, size=(n, 1)), _qsv33.uniform(0.1, 0.6, size=(n, 1)))
_qsv108 = _qsv33.normal(0.0, 1.0, size=(n, L)) * sigma
return series + _qsv13(_qsv108, _qsv109)
def _k01(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
_qsv35 = np.cumsum(_qsv22(_qsv33, n, L, _qsv50=3.0 / L, scale=2.0), axis=1)
_qsv190 = np.cumsum(_qsv22(_qsv33, n, L, _qsv50=3.0 / L, scale=0.5), axis=1)
_qsv191 = np.exp(np.clip(_qsv190, -3.0, 3.0)) * _qsv33.uniform(0.1, 0.5, size=(n, 1))
_qsv46 = _qsv33.normal(0.0, 1.0, size=(n, L)) * _qsv191
_qsv192 = _qsv21(_qsv33, n, L, _qsv123=2) * _qsv33.uniform(0.0, 1.0, size=(n, 1))
_qsv193 = _qsv33.normal(0.0, 1.0 / L, size=(n, 1)) + np.cumsum(_qsv22(_qsv33, n, L, _qsv50=2.0 / L, scale=4.0 / L), axis=1)
_qsv194 = np.cumsum(_qsv193, axis=1)
return _qsv35 + _qsv194 + _qsv192 + _qsv46
def _k02(_qsv33: np.random.Generator, n: int, L: int, *, _qsv181: float=0.25, _qsv182: float=0.3, _qsv183: float=2.0) -> np.ndarray:
t = np.arange(L, dtype=np.float64)[None, :]
_qsv195 = _qsv33.random((n, 1)) < _qsv181
_qsv196 = np.where(_qsv195, _qsv33.normal(0.0, _qsv183, size=(n, 1)), _qsv33.normal(0.0, _qsv182, size=(n, 1)))
tn = t / max(L - 1, 1)
_qsv197 = np.exp(_qsv196 * tn + _qsv33.normal(0.0, 0.3, size=(n, 1)))
_qsv64 = _qsv33.uniform(0.1, 0.6, size=(n, 1))
_qsv198 = _qsv21(_qsv33, n, L, _qsv123=1)
_qsv198 = _qsv19(_qsv198, _qsv121=False)
_qsv192 = 1.0 + _qsv64 * _qsv198
_qsv46 = 1.0 + _qsv33.normal(0.0, 1.0, size=(n, L)) * _qsv33.uniform(0.02, 0.15, size=(n, 1))
scale = _qsv33.uniform(1.0, 50.0, size=(n, 1))
return scale * _qsv197 * np.clip(_qsv192, 0.05, None) * np.clip(_qsv46, 0.05, None)
def _k03(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
p1 = _qsv33.uniform(0.3, 0.98, size=n)
p2 = _qsv33.uniform(-0.6, 0.6, size=n)
a2 = p2
a1 = p1 * (1.0 - p2)
sigma = _qsv33.uniform(0.2, 0.8, size=(n, 1))
_qsv199 = 512
_qsv108 = _qsv33.normal(0.0, 1.0, size=(n, L + _qsv199)) * sigma
return _qsv15(_qsv108, a1, a2)[:, _qsv199:]
def _k04(_qsv33: np.random.Generator, n: int, L: int, *, _qsv200: float=0.25, _qsv201: float=0.3) -> np.ndarray:
_qsv202 = _qsv33.random(n) < 0.35
_qsv45 = _qsv33.normal(0.0, 0.02, size=(n, 1))
sigma = _qsv33.uniform(0.2, 1.0, size=(n, 1))
_qsv203 = _qsv33.normal(0.0, 1.0, size=(n, L))
_qsv204 = np.nonzero(_qsv33.random(n) < _qsv200)[0]
if _qsv204.size:
df = _qsv33.uniform(3.0, 12.0, size=(_qsv204.size, 1))
_qsv203[_qsv204] = _qsv33.standard_t(df, size=(_qsv204.size, L)) / np.sqrt(df / (df - 2.0))
_qsv205 = np.nonzero(_qsv33.random(n) < _qsv201)[0]
if _qsv205.size:
_qsv109 = 0.995
_qsv199 = 256
_qsv207 = _qsv33.standard_normal((_qsv205.size, L + _qsv199)) * np.sqrt(1.0 - _qsv109 * _qsv109)
_qsv190 = lfilter([1.0], [1.0, -_qsv109], _qsv207, axis=1)[:, _qsv199:]
_qsv190 *= _qsv33.uniform(0.1, 0.55, size=(_qsv205.size, 1))
_qsv203[_qsv205] *= np.exp(np.clip(_qsv190, -2.0, 2.0))
_qsv84 = _qsv203 * sigma + _qsv45
_qsv58 = np.cumsum(_qsv84, axis=1)
_qsv206 = np.cumsum(_qsv58, axis=1)
o2 = _qsv202[:, None]
return np.where(o2, _qsv206 / max(L, 1), _qsv58)
def _k05(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
_qsv114 = _qsv33.uniform(0.3, 0.9, size=n)
_qsv115 = _qsv33.uniform(-0.9, 0.3, size=n)
_qsv116 = _qsv33.normal(0.0, 0.3, size=n)
_qsv117 = _qsv33.normal(0.0, 0.3, size=n)
sigma = _qsv33.uniform(0.2, 0.7, size=(n, 1))
_qsv199 = 256
_qsv208 = L + _qsv199
_qsv108 = _qsv33.normal(0.0, 1.0, size=(n, _qsv208)) * sigma
x = _qsv16(np.ascontiguousarray(_qsv108, dtype=np.float64), np.asarray(_qsv114, dtype=np.float64), np.asarray(_qsv115, dtype=np.float64), np.asarray(_qsv116, dtype=np.float64), np.asarray(_qsv117, dtype=np.float64))
return x[:, _qsv199:]
def _k06(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
_qsv209 = _qsv33.random(n) < 0.5
_qsv210 = _qsv33.uniform(3.6, 4.0, size=n)
_qsv211 = _qsv33.uniform(0.85, 1.0, size=n)
x0 = _qsv33.uniform(0.05, 0.95, size=n)
_qsv212 = x0.copy()
for _ in range(64):
_qsv213 = _qsv210 * _qsv212 * (1.0 - _qsv212)
_qsv214 = _qsv211 * np.sin(np.pi * _qsv212)
_qsv212 = np.clip(np.where(_qsv209, _qsv214, _qsv213), 0.0, 1.0)
x = np.empty((n, L), dtype=np.float64)
x[:, 0] = _qsv212
for t in range(1, L):
_qsv213 = _qsv210 * _qsv212 * (1.0 - _qsv212)
_qsv214 = _qsv211 * np.sin(np.pi * _qsv212)
_qsv212 = np.where(_qsv209, _qsv214, _qsv213)
_qsv212 = np.clip(_qsv212, 0.0, 1.0)
x[:, t] = _qsv212
return _qsv19(x)
def _k07(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
_qsv215 = 2 * L
f = np.fft.rfftfreq(_qsv215)[None, :]
_qsv216 = np.exp(_qsv33.uniform(np.log(8.0), np.log(256.0), size=(n, 1)))
_qsv217 = np.exp(-0.5 * (2.0 * np.pi * _qsv216 * f) ** 2)
z = _qsv33.standard_normal((n, f.shape[1])) + 1j * _qsv33.standard_normal((n, f.shape[1]))
z[:, 0] = 0.0
x = np.fft.irfft(z * np.sqrt(_qsv217), n=_qsv215, axis=1)[:, :L]
return _qsv19(x)
def _k08(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
_qsv215 = 2 * L
f = np.fft.rfftfreq(_qsv215)
_qsv218 = np.maximum(f, 1.0 / _qsv215)[None, :]
beta = _qsv33.uniform(-0.6, 2.4, size=(n, 1))
_qsv64 = _qsv218 ** (-0.5 * beta)
_qsv219 = _qsv33.random((n, 1)) < 0.4
_qsv220 = _qsv33.integers(8, max(9, f.size // 3), size=(n, 1))
_qsv221 = np.maximum(_qsv220 / _qsv215, 1.0 / _qsv215)
_qsv222 = _qsv33.uniform(-0.6, 2.8, size=(n, 1))
_qsv223 = np.arange(f.size)[None, :] > _qsv220
_qsv224 = _qsv221 ** (-0.5 * beta) * (_qsv218 / _qsv221) ** (-0.5 * _qsv222)
_qsv64 = np.where(_qsv219 & _qsv223, _qsv224, _qsv64)
_qsv64[:, 0] = 0.0
z = _qsv33.standard_normal((n, f.size)) + 1j * _qsv33.standard_normal((n, f.size))
x = np.fft.irfft(z * _qsv64, n=_qsv215, axis=1)[:, :L]
_qsv225 = _qsv33.random(n) < 0.25
if _qsv225.any():
x[_qsv225] = np.cumsum(x[_qsv225], axis=1)
return _qsv19(x)
def _k09(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
_qsv226 = np.exp(_qsv33.uniform(np.log(0.001), np.log(0.15), size=(n, 1)))
_qsv227 = _qsv33.random((n, L)) < _qsv226
_qsv227[:, 0] = _qsv33.random(n) < 0.5
_qsv228 = np.bitwise_and(np.cumsum(_qsv227, axis=1), 1).astype(np.int8)
_qsv138 = _qsv33.random((n, 1)) < 0.5
_qsv109 = np.where(_qsv138, _qsv33.uniform(0.995, 0.9995, size=(n, 1)), _qsv33.uniform(0.9, 0.99, size=(n, 1)))
_qsv229 = _qsv33.normal(-2.0, 1.0, size=(n, 1))
_qsv230 = _qsv33.normal(2.0, 1.0, size=(n, 1))
mean = np.where(_qsv228 == 0, _qsv229, _qsv230)
_qsv231 = _qsv33.random((n, 1)) < 0.6
mean += _qsv231 * _qsv21(_qsv33, n, L, _qsv123=3) * _qsv33.uniform(0.5, 3.0, size=(n, 1))
_qsv232 = _qsv33.normal(np.log(0.3), 0.3, size=(n, 1))
_qsv233 = _qsv33.normal(np.log(1.5), 0.5, size=(n, 1))
_qsv234 = np.where(_qsv228 == 0, _qsv232, _qsv233)
_qsv235 = _qsv33.uniform(0.951, 0.995, size=(n, 1))
_qsv236 = _qsv33.uniform(0.03, 0.2, size=(n, 1))
_qsv237 = _qsv33.standard_normal((n, L))
_qsv238 = (1.0 - _qsv235) * _qsv234 + np.sqrt(1.0 - _qsv235 * _qsv235) * _qsv236 * _qsv237
_qsv190 = np.empty((n, L), dtype=np.float64)
_qsv190[:, 0] = _qsv234[:, 0]
for i in range(n):
_qsv241 = float(_qsv235[i, 0])
_qsv190[i, 1:] = lfilter([1.0], [1.0, -_qsv241], _qsv238[i, 1:], zi=[_qsv241 * _qsv190[i, 0]])[0]
_qsv191 = np.exp(np.clip(_qsv190, -5.0, 5.0))
_qsv203 = _qsv33.standard_normal((n, L))
_qsv204 = np.nonzero(_qsv33.random(n) < 0.35)[0]
if _qsv204.size:
_qsv203[_qsv204] = _qsv33.standard_t(4.0, size=(_qsv204.size, L)) / np.sqrt(2.0)
_qsv239 = _qsv33.random((n, L)) < 3.0 / L
_qsv242, _qsv243 = np.nonzero(_qsv239)
_qsv203[_qsv242, _qsv243] += _qsv33.normal(0.0, 5.0, size=_qsv242.size)
_qsv240 = np.sqrt(np.maximum(1.0 - _qsv109 * _qsv109, 1e-06))
_qsv38 = (1.0 - _qsv109) * mean + _qsv240 * _qsv191 * _qsv203
out = np.empty((n, L), dtype=np.float64)
out[:, 0] = mean[:, 0] + _qsv191[:, 0] * _qsv203[:, 0]
for i in range(n):
p = float(_qsv109[i, 0])
out[i, 1:] = lfilter([1.0], [1.0, -p], _qsv38[i, 1:], zi=[p * out[i, 0]])[0]
scale = np.exp(_qsv33.uniform(np.log(0.1), np.log(50.0), size=(n, 1)))
_qsv68 = _qsv33.uniform(-100.0, 100.0, size=(n, 1))
return out * scale + _qsv68
def _k10(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
_qsv244 = _qsv21(_qsv33, n, L, _qsv123=2)
_qsv245 = _k07(_qsv33, n, L)
_qsv246 = np.cumsum(_qsv22(_qsv33, n, L, _qsv50=5.0 / L, scale=1.0), axis=1)
_qsv47 = _qsv244 * _qsv33.uniform(0.3, 2.0, size=(n, 1)) + _qsv245 * _qsv33.uniform(0.2, 1.2, size=(n, 1)) + _qsv246 * _qsv33.uniform(0.2, 1.0, size=(n, 1))
_qsv247 = _qsv33.integers(0, 4, size=n)
out = _qsv47.copy()
_qsv248 = _qsv247 == 1
if _qsv248.any():
_qsv250 = _qsv33.uniform(0.8, 3.5, size=(int(_qsv248.sum()), 1))
_qsv251 = _qsv33.uniform(-0.8, 0.8, size=(int(_qsv248.sum()), 1))
out[_qsv248] = 100.0 / (1.0 + np.exp(-_qsv250 * (_qsv47[_qsv248] - _qsv251)))
_qsv249 = _qsv247 == 2
if _qsv249.any():
_qsv252 = int(_qsv249.sum())
_qsv253 = np.exp(_qsv33.uniform(np.log(0.03), np.log(0.2), size=(_qsv252, 1)))
_qsv58 = np.cumsum(_qsv33.standard_normal((_qsv252, L)) * _qsv253, axis=1)
_qsv35 = _qsv33.uniform(900.0, 1100.0, size=(_qsv252, 1))
out[_qsv249] = _qsv35 + _qsv58 + 2.0 * _qsv246[_qsv249] + 0.5 * _qsv244[_qsv249]
_qsv175 = _qsv247 == 3
if _qsv175.any():
_qsv252 = int(_qsv175.sum())
_qsv254 = (_qsv33.random((_qsv252, L)) < 8.0 / L) * _qsv33.lognormal(0.0, 0.8, size=(_qsv252, L))
_qsv255 = _qsv33.uniform(1.0, 1.6, size=(_qsv252, 1))
out[_qsv175] = np.abs(_qsv47[_qsv175]) ** _qsv255 + _qsv254
return out
def _k11(_qsv33: np.random.Generator, n: int, L: int, *, _qsv256: float=0.0) -> np.ndarray:
t = np.arange(L, dtype=np.float64)[None, :]
_qsv49 = _qsv33.choice(_qsv05, size=(n, 1), p=_qsv06)
_qsv130 = _qsv33.uniform(0.0, 2.0 * np.pi, size=(n, 1))
_qsv64 = _qsv33.uniform(0.15, 0.8, size=(n, 1))
_qsv71 = _qsv64 * np.sin(2.0 * np.pi * t / _qsv49 + _qsv130)
_qsv257 = _qsv33.random((n, 1)) < 0.55
_qsv71 += _qsv257 * (0.5 * _qsv64) * np.sin(4.0 * np.pi * t / _qsv49 + _qsv33.uniform(0.0, 2.0 * np.pi, size=(n, 1)))
_qsv258 = _qsv33.random((n, 1)) < 0.35
_qsv259 = _qsv33.choice([24, 48, 96, 144], size=(n, 1))
_qsv260 = (np.floor_divide(np.arange(L)[None, :], _qsv259) % 7).astype(np.int64)
_qsv261 = _qsv33.normal(0.0, 0.12, size=(n, 7))
_qsv261[:, 5:] += _qsv33.uniform(-0.8, 0.3, size=(n, 1))
_qsv262 = np.take_along_axis(_qsv261, _qsv260, axis=1)
_qsv71 += _qsv258 * _qsv262
_qsv263 = _qsv33.uniform(-0.5, 0.5, size=(n, 1))
_qsv71 += _qsv263 * t / max(L - 1, 1)
_qsv264 = (_qsv33.random((n, L)) < 2.0 / L) * _qsv33.uniform(1.0, 10.0, size=(n, L))
_qsv265 = _qsv13(_qsv264, _qsv33.uniform(0.85, 0.995, size=(n, 1)))
_qsv47 = np.exp(_qsv33.uniform(np.log(3.0), np.log(3000.0), size=(n, 1)))
_qsv74 = _qsv47 * np.exp(np.clip(_qsv71, -5.0, 5.0)) * (1.0 + _qsv265)
np.clip(_qsv74, 0.0, 10000000.0, out=_qsv74)
_qsv266 = _qsv33.random((n, 1)) < 0.5
shape = _qsv33.uniform(0.5, 4.0, size=(n, 1))
_qsv76 = _qsv74 * _qsv33.gamma(shape, 1.0 / shape, size=(n, L))
out = _qsv33.poisson(np.where(_qsv266, _qsv76, _qsv74)).astype(np.float64)
if _qsv256 > 0.0:
_qsv267 = np.nonzero(_qsv33.random(n) < _qsv256)[0]
if _qsv267.size:
_qsv268 = _qsv33.choice(np.array([7, 7, 7, 14, 24, 48, 168], dtype=np.int64), size=_qsv267.size)
_qsv269 = np.array([int(_qsv33.integers(0, int(_qsv49))) for _qsv49 in _qsv268], dtype=np.int64)
_qsv270 = np.arange(L, dtype=np.int64)
for _qsv110, _qsv271, _qsv272 in zip(_qsv267, _qsv268, _qsv269):
_qsv273 = (_qsv270 - _qsv272) % _qsv271 == 0
_qsv273[0] = True
_qsv274 = np.maximum.accumulate(np.where(_qsv273, _qsv270, 0))
out[_qsv110] = out[_qsv110, _qsv274]
return out
def _k12(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
t = np.arange(L, dtype=np.float64)[None, :]
_qsv275 = _qsv33.uniform(0.03, 0.35, size=(n, 1))
_qsv49 = _qsv33.choice([7.0, 12.0, 24.0, 48.0, 168.0], size=(n, 1))
_qsv276 = _qsv33.uniform(0.2, 1.2, size=(n, 1)) * np.sin(2.0 * np.pi * t / _qsv49 + _qsv33.uniform(0.0, 2.0 * np.pi, size=(n, 1)))
_qsv277 = np.log(_qsv275 / (1.0 - _qsv275)) + _qsv276
p = 1.0 / (1.0 + np.exp(-_qsv277))
_qsv278 = (_qsv33.random((n, L)) < p).astype(np.float64)
_qsv175 = np.maximum(1.0, np.rint(_qsv33.gamma(shape=2.0, scale=1.0, size=(n, L)) * _qsv33.uniform(1.0, 10.0, size=(n, 1)) * np.exp(0.25 * _qsv276)))
return _qsv278 * _qsv175
def _k13(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
_qsv47 = _k07(_qsv33, n, L) * _qsv33.uniform(0.5, 2.0, size=(n, 1))
_qsv47 += _qsv21(_qsv33, n, L, _qsv123=1) * _qsv33.uniform(0.0, 1.0, size=(n, 1))
_qsv279 = _qsv22(_qsv33, n, L, _qsv50=3.0 / L, scale=_qsv33.uniform(3.0, 8.0, size=n))
_qsv264 = _qsv22(_qsv33, n, L, _qsv50=2.0 / L, scale=_qsv33.uniform(2.0, 7.0, size=n))
_qsv280 = _qsv13(_qsv264, _qsv33.uniform(0.75, 0.995, size=n))
series = _qsv47 + _qsv279 + _qsv280
_qsv281 = _qsv33.random((n, L)) < 2.0 / L
_qsv281[:, 0] = False
for _qsv110 in range(n):
for start in np.nonzero(_qsv281[_qsv110])[0]:
_qsv282 = int(_qsv33.integers(3, 65))
_qsv283 = min(int(start) + _qsv282, L)
series[_qsv110, start:_qsv283] = series[_qsv110, start - 1]
return series
_qsv24 = 192
_qsv25 = 1024
_qsv26 = 192
_qsv27 = 1024
def _k14(_qsv33: np.random.Generator, n: int, L: int, *, _qsv284: int | None=None) -> np.ndarray:
if n <= 0:
return np.empty((0, L), dtype=np.float64)
if L <= 0:
return np.empty((n, 0), dtype=np.float64)
_qsv247 = _qsv33.integers(0, 4, size=n)
_qsv285 = np.empty((n, L), dtype=np.float64)
for _k in range(4):
_qsv290 = np.nonzero(_qsv247 == _k)[0]
if _qsv290.size == 0:
continue
_m = int(_qsv290.size)
if _k == 0:
_v = _qsv21(_qsv33, _m, L, _qsv123=2)
elif _k == 1:
_v = _qsv13(_qsv33.normal(size=(_m, L)) * _qsv33.uniform(0.12, 0.55, size=(_m, 1)), _qsv33.uniform(0.35, 0.92, size=_m))
elif _k == 2:
_v = _k07(_qsv33, _m, L)
else:
_v = np.cumsum(_qsv33.normal(size=(_m, L)) * _qsv33.uniform(0.025, 0.16, size=(_m, 1)), axis=1)
_qsv285[_qsv290] = _v
_qsv286 = None
_qsv287 = _qsv33.integers(0, 4, size=n)
if _qsv284 is not None:
_qsv287 = np.full(n, int(_qsv284), dtype=_qsv287.dtype)
_qsv35 = _qsv33.normal(0.0, 2.0, size=n)
scale = np.exp(_qsv33.uniform(np.log(0.4), np.log(12.0), size=n))
_qsv288 = _qsv33.uniform(0.6, 2.2, size=n)
_qsv289 = _qsv33.random(n) < 0.65
out = np.empty((n, L), dtype=np.float64)
for _qsv110 in range(n):
_qsv291 = _qsv285[_qsv110]
_qsv167 = _qsv291[:min(L, 512)]
_qsv292 = float(_qsv167.mean())
_qsv293 = float(_qsv167.std())
_qsv291 -= _qsv292
if _qsv293 > 1e-12:
_qsv291 /= _qsv293
_qsv294 = float(_qsv35[_qsv110])
_qsv295 = bool(_qsv289[_qsv110])
_qsv296 = 0
_qsv297 = 0
_qsv298 = False
while _qsv296 < L:
if _qsv295:
_qsv300 = int(_qsv33.integers(_qsv24, _qsv25 + 1))
else:
_qsv300 = int(_qsv33.integers(_qsv26, _qsv27 + 1))
if _qsv297 == 0 and L >= 2 * _qsv26:
_qsv300 = min(_qsv300, L - _qsv26)
_qsv283 = min(_qsv296 + max(_qsv300, 1), L)
_qsv59 = _qsv283 - _qsv296
if _qsv295:
_qsv177 = int(_qsv287[_qsv110])
if _qsv177 == 0:
out[_qsv110, _qsv296:_qsv283] = _qsv294
values = None
elif _qsv177 == 1:
_qsv45 = _qsv33.normal(0.0, 0.0025, size=_qsv59).cumsum()
_qsv45 += np.linspace(0.0, float(_qsv33.normal(0.0, 0.025)), _qsv59)
values = _qsv294 + _qsv45
elif _qsv177 == 2:
if not _qsv298:
_qsv305 = max(0.0, float(np.rint(abs(_qsv294) * 8.0)))
_qsv298 = True
else:
_qsv305 = max(0.0, float(np.rint(_qsv294)))
_qsv302 = _qsv33.random(_qsv59) < 0.025
_qsv303 = _qsv302 * _qsv33.choice([-1.0, 1.0], size=_qsv59)
values = np.maximum(_qsv305 + np.cumsum(_qsv303), 0.0)
else:
_qsv304 = _qsv33.random(_qsv59) < 0.012
values = _qsv304 * _qsv33.gamma(1.5, 0.35, size=_qsv59)
else:
_qsv301 = _qsv291[_qsv296:_qsv283] * float(_qsv288[_qsv110])
values = _qsv301 - _qsv301[0] + _qsv294
if _qsv59 > 1 and np.ptp(values) < 1e-10:
values = _qsv294 + np.linspace(0.0, 1.0, _qsv59)
if values is not None:
out[_qsv110, _qsv296:_qsv283] = values
_qsv294 = float(values[-1])
_qsv296 = _qsv283
_qsv295 = not _qsv295
_qsv297 += 1
_qsv299 = 1.0 if int(_qsv287[_qsv110]) == 2 else float(scale[_qsv110])
out[_qsv110] *= _qsv299
if L > 1 and np.ptp(out[_qsv110]) < 1e-10:
out[_qsv110, -1] += max(0.001, 0.01 * _qsv299)
return out
def _qsv28(_qsv145: np.ndarray) -> np.ndarray:
x = np.asarray(_qsv145, dtype=np.float64)
np.nan_to_num(x, copy=False, nan=0.0, posinf=1000000.0, neginf=-1000000.0)
if x.ndim == 1:
_qsv306 = float(np.max(np.abs(x)))
if _qsv306 > 1000000.0:
x *= 1000000.0 / _qsv306
else:
_qsv306 = np.max(np.abs(x), axis=1, keepdims=True)
scale = np.where(_qsv306 > 1000000.0, 1000000.0 / np.maximum(_qsv306, 1e-12), 1.0)
x *= scale
return x
def _k28(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
return _k14(_qsv33, n, L, _qsv284=0)
def _k29(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
return _k14(_qsv33, n, L, _qsv284=1)
def _k30(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
return _k14(_qsv33, n, L, _qsv284=2)
def _k31(_qsv33: np.random.Generator, n: int, L: int) -> np.ndarray:
return _k14(_qsv33, n, L, _qsv284=3)
_qsv29 = 0.85
_qsv30 = 0.7
def _qsv31(_qsv33: np.random.Generator, _qsv145: np.ndarray) -> np.ndarray:
n = _qsv145.shape[0]
if n == 0:
return _qsv145
_qsv307 = _qsv33.random(n) < _qsv29
if not _qsv307.any():
return _qsv145
_qsv308 = np.nonzero(_qsv307)[0]
_qsv143 = _qsv145[_qsv308]
_qsv309 = _qsv143.min(axis=1, keepdims=True)
_qsv299 = np.maximum(_qsv143.std(axis=1, keepdims=True), 1e-09)
floor = _qsv299 * _qsv33.uniform(0.0, 0.15, size=(_qsv308.size, 1))
_qsv68 = np.where(_qsv309 < floor, floor - _qsv309, 0.0)
_qsv143 = _qsv143 + _qsv68
_qsv310 = _qsv33.random(_qsv308.size) < _qsv30
if _qsv310.any():
_qsv311 = _qsv308[_qsv310]
_qsv312 = np.rint(_qsv143[_qsv310])
_qsv145[_qsv311] = _qsv312
_qsv313 = ~_qsv310
if _qsv313.any():
_qsv145[_qsv308[_qsv313]] = _qsv143[_qsv313]
else:
_qsv145[_qsv308] = _qsv143
return _qsv145
def _qsv32(_qsv33: np.random.Generator, _qsv145: np.ndarray, *, _qsv150: float=0.0, _qsv151: float=0.0, _qsv152: float=0.0, _qsv153: float=0.0) -> np.ndarray:
out = np.asarray(_qsv145, dtype=np.float64)
if out.ndim != 2:
return out
n, L = out.shape
if n == 0 or L < 8:
return out
t = np.arange(L, dtype=np.float64)
_qsv314 = np.nonzero(_qsv33.random(n) < _qsv150)[0]
for i in _qsv314:
_qsv318 = int(_qsv33.integers(2, 6))
_qsv319 = np.sort(_qsv33.choice(L, size=_qsv318, replace=False).astype(np.float64))
_qsv319[0] = 0.0
_qsv319[-1] = float(L - 1)
_qsv320 = np.exp(_qsv33.normal(0.0, 0.45, size=_qsv318))
_qsv217 = np.interp(t, _qsv319, _qsv320)
_qsv321 = float(np.median(out[i]))
out[i] = _qsv321 + (out[i] - _qsv321) * _qsv217
_qsv315 = np.nonzero(_qsv33.random(n) < _qsv151)[0]
if _qsv315.size:
_qsv322 = out[_qsv315, :min(L, 512)]
_qsv121 = np.median(_qsv322, axis=1, keepdims=True)
_qsv323 = 1.4826 * np.median(np.abs(_qsv322 - _qsv121), axis=1, keepdims=True)
_qsv164 = np.maximum(np.std(_qsv322, axis=1, keepdims=True), 1e-09)
_qsv323 = np.where(_qsv323 > 1e-09, _qsv323, _qsv164)
for k, i in enumerate(_qsv315):
_qsv329 = int(_qsv33.integers(1, 5))
_qsv330 = float(_qsv33.uniform(1.5, max(2.0, 0.03 * L)))
_qsv52 = float(_qsv33.lognormal(np.log(3.0), 0.55)) * float(_qsv323[k, 0])
_qsv89 = float(_qsv33.choice([-1.0, 1.0]))
_qsv331 = _qsv33.integers(0, L, size=_qsv329)
_qsv332 = int(_qsv33.integers(0, 3))
for c in _qsv331:
if _qsv332 == 0:
_qsv333 = np.exp(-0.5 * ((t - c) / _qsv330) ** 2)
elif _qsv332 == 1:
_qsv333 = np.maximum(0.0, 1.0 - np.abs(t - c) / (_qsv330 * 2.0))
else:
_qsv333 = (np.abs(t - c) <= _qsv330).astype(np.float64)
out[i] = out[i] + _qsv89 * _qsv52 * _qsv333
_qsv316 = np.nonzero(_qsv33.random(n) < _qsv152)[0]
for i in _qsv316:
_qsv84 = _qsv33.normal(0.0, 1.0, size=L).cumsum()
_qsv324 = _qsv84 - t / max(L - 1, 1) * _qsv84[-1]
_qsv324 = _qsv324 - _qsv324.mean()
_qsv325 = float(_qsv324.std()) or 1.0
_qsv64 = float(_qsv33.uniform(0.5, 3.0))
_qsv326 = _qsv64 * (_qsv324 / _qsv325)
_qsv327 = np.clip(t + _qsv326, 0.0, float(L - 1))
lo = np.floor(_qsv327).astype(np.int64)
hi = np.minimum(lo + 1, L - 1)
w = _qsv327 - lo
out[i] = (1.0 - w) * out[i, lo] + w * out[i, hi]
_qsv317 = np.nonzero(_qsv33.random(n) < _qsv153)[0]
for i in _qsv317:
_qsv49 = int(_qsv33.choice([4, 8, 12, 16, 24, 48]))
on = int(_qsv33.integers(1, max(2, _qsv49)))
_qsv130 = int(_qsv33.integers(0, _qsv49))
_qsv128 = (t.astype(np.int64) + _qsv130) % _qsv49 < on
_qsv328 = np.where(_qsv128, np.arange(L, dtype=np.int64), 0)
np.maximum.accumulate(_qsv328, out=_qsv328)
out[i] = out[i, _qsv328]
return out