From 6f352f17e6eeb3169f3930441435e5c7fb709093 Mon Sep 17 00:00:00 2001 From: "Jens H. Nielsen" Date: Mon, 30 Mar 2026 08:10:17 +0200 Subject: [PATCH 1/6] Replace legacy np.random calls with np.random.Generator in mock instruments Replace np.random.rand, np.random.randn with np.random.default_rng() methods (random, standard_normal) to fix NPY002 lint violations. The RNG is created once per class instance in __init__ and reused across calls rather than creating a new generator on every invocation. --- .../mock_instruments/__init__.py | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/qcodes/instrument_drivers/mock_instruments/__init__.py b/src/qcodes/instrument_drivers/mock_instruments/__init__.py index 551d9a67546e..75caa788c119 100644 --- a/src/qcodes/instrument_drivers/mock_instruments/__init__.py +++ b/src/qcodes/instrument_drivers/mock_instruments/__init__.py @@ -60,6 +60,8 @@ class MockParabola(DummyBase): def __init__(self, name: str, **kwargs: Unpack[InstrumentBaseKWArgs]): super().__init__(name, **kwargs) + self._rng = np.random.default_rng() + # Instrument parameters for parname in ["x", "y", "z"]: self.add_parameter( @@ -98,7 +100,7 @@ def _measure_parabola(self) -> float: self.x.get() ** 2 + self.y.get() ** 2 + self.z.get() ** 2 - + self.noise.get() * np.random.rand(1) + + self.noise.get() * self._rng.random(1) ) def _measure_skewed_parabola(self) -> float: @@ -107,7 +109,7 @@ def _measure_skewed_parabola(self) -> float: """ return (self.x.get() ** 2 + self.y.get() ** 2 + self.z.get() ** 2) * ( 1 + abs(self.y.get() - self.x.get()) - ) + self.noise.get() * np.random.rand(1) + ) + self.noise.get() * self._rng.random(1) class MockMetaParabola(InstrumentBase): @@ -258,6 +260,7 @@ def __init__(self, name: str = "dummy", **kwargs: Unpack[InstrumentBaseKWArgs]): class DmmExponentialParameter(Parameter): def __init__(self, name: str, **kwargs: Any): super().__init__(name, **kwargs) + self._rng = np.random.default_rng() self._ed = self._exponential_decay(5, 0.2) next(self._ed) @@ -276,14 +279,13 @@ def get_raw(self) -> ParamRawDataType: mylogger.debug("Getting raw value of parameter: %s as %s", self.full_name, val) return val - @staticmethod - def _exponential_decay(a: float, b: float) -> Generator[float, float, None]: + def _exponential_decay(self, a: float, b: float) -> Generator[float, float, None]: """ Yields a*exp(-b*x) where x is put in """ x = 0.0 while True: - x = yield a * np.exp(-b * x) + 0.02 * a * np.random.randn() + x = yield a * np.exp(-b * x) + 0.02 * a * self._rng.standard_normal() class DmmGaussParameter(Parameter): @@ -293,6 +295,7 @@ def __init__(self, name: str, **kwargs: Any): self.y0 = 0.2 self.sigma = 0.25 self.noise: float = 0.0005 + self._rng = np.random.default_rng() self._gauss = self._gauss_model() next(self._gauss) @@ -325,7 +328,7 @@ def gauss_2d(x: float, y: float) -> np.floating: x = 0.0 y = 0.0 while True: - noise = np.random.randn() * self.noise + noise = self._rng.standard_normal() * self.noise (x, y) = yield float(gauss_2d(x, y) + noise) @@ -948,10 +951,14 @@ class DummyParameterWithSetpoints1D(ParameterWithSetpoints): `dummy_n_points` parameter in the instrument. """ + def __init__(self, *args: Any, **kwargs: Any): + super().__init__(*args, **kwargs) + self._rng = np.random.default_rng() + def get_raw(self) -> ParamRawDataType: assert isinstance(self.instrument, DummyChannel) npoints = self.instrument.dummy_n_points() - return np.random.rand(npoints) + return self._rng.random(npoints) class DummyParameterWithSetpoints2D(ParameterWithSetpoints): @@ -960,11 +967,15 @@ class DummyParameterWithSetpoints2D(ParameterWithSetpoints): `dummy_n_points` and `dummy_n_points_2` parameters in the instrument. """ + def __init__(self, *args: Any, **kwargs: Any): + super().__init__(*args, **kwargs) + self._rng = np.random.default_rng() + def get_raw(self) -> ParamRawDataType: assert isinstance(self.instrument, DummyChannel) npoints = self.instrument.dummy_n_points() npoints_2 = self.instrument.dummy_n_points_2() - return np.random.rand(npoints, npoints_2) + return self._rng.random((npoints, npoints_2)) class DummyParameterWithSetpointsComplex(ParameterWithSetpoints): @@ -973,10 +984,14 @@ class DummyParameterWithSetpointsComplex(ParameterWithSetpoints): `dummy_n_points` parameter in the instrument. Returns Complex values """ + def __init__(self, *args: Any, **kwargs: Any): + super().__init__(*args, **kwargs) + self._rng = np.random.default_rng() + def get_raw(self) -> ParamRawDataType: assert isinstance(self.instrument, DummyChannel) npoints = self.instrument.dummy_n_points() - return np.random.rand(npoints) + 1j * np.random.rand(npoints) + return self._rng.random(npoints) + 1j * self._rng.random(npoints) def setpoint_generator( From 9a6cdc7be2beeb68d1ae05e924392bf9959915de Mon Sep 17 00:00:00 2001 From: "Jens H. Nielsen" Date: Mon, 30 Mar 2026 08:10:53 +0200 Subject: [PATCH 2/6] Replace legacy np.random calls with np.random.Generator in tests Replace np.random.rand, np.random.randn, np.random.randint, np.random.choice, np.random.random, np.random.random_sample, and np.random.seed with np.random.default_rng() equivalents to fix NPY002 lint violations. For seeded tests that relied on np.random.seed() to reproduce mock instrument output, capture the actual parameter data during the measurement and use it directly as expected values instead. --- tests/dataset/conftest.py | 13 +-- .../test_measurement_context_manager.py | 84 ++++++++----------- tests/dataset/test__get_data_from_ds.py | 4 +- .../test_database_creation_and_upgrading.py | 7 +- tests/dataset/test_dataset_basic.py | 6 +- tests/dataset/test_plotting.py | 8 +- tests/dataset/test_string_data.py | 2 +- tests/dataset_generators.py | 2 +- .../test_sampling_measurement.py | 4 +- tests/drivers/test_Keithley_2450.py | 5 +- tests/drivers/test_tektronix_AWG5014C.py | 14 ++-- tests/drivers/test_tektronix_AWG70000A.py | 16 ++-- .../parameter/test_parameter_scale_offset.py | 2 +- .../test_parameter_with_setpoints.py | 55 ++++++------ tests/validators/test_arrays.py | 2 +- 15 files changed, 109 insertions(+), 115 deletions(-) diff --git a/tests/dataset/conftest.py b/tests/dataset/conftest.py index 000f7974d5ab..c04de8dae5ee 100644 --- a/tests/dataset/conftest.py +++ b/tests/dataset/conftest.py @@ -377,13 +377,13 @@ def varlen_array_in_scalar_dataset(experiment): param = ArraySetPointParam() meas.register_parameter(scalar_param) meas.register_parameter(param, setpoints=(scalar_param,), paramtype="array") - np.random.seed(0) + rng = np.random.default_rng(0) with meas.run() as datasaver: for i in range(1, 10): scalar_param.set(i) param.setpoints = (np.arange(i),) datasaver.add_result( - (scalar_param, scalar_param.get()), (param, np.random.rand(i)) + (scalar_param, scalar_param.get()), (param, rng.random(i)) ) try: yield datasaver.dataset @@ -685,13 +685,14 @@ def __init__(self, name, instrument, **kwargs): self.npts = 100 self.start = 0 self.stop = 2e6 + self._rng = np.random.default_rng() def get_data(self): # This is how it should be: the setpoints are generated at the # time we get. But that will of course not work with the old Loop self.setpoints = (tuple(np.linspace(self.start, self.stop, self.npts)),) # not the best SA on the market; it just returns noise... - return np.random.randn(self.npts) + return self._rng.standard_normal(self.npts) class Spectrum(BaseSpectrum): def get_raw(self): @@ -718,9 +719,10 @@ def __init__(self, name, instrument, **kwargs): setpoint_units=("Hz", "Other Hz", "Third Hz"), **kwargs, ) + self._rng = np.random.default_rng() def get_raw(self): - return np.random.randn(*self.npts) + return self._rng.standard_normal(self.npts) class ListSpectrum(BaseSpectrum): def get_raw(self): @@ -789,10 +791,11 @@ def _make_dummy_instrument() -> Iterator[DummyChannelInstrument]: class ArrayshapedParam(Parameter): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + self._rng = np.random.default_rng() def get_raw(self): assert isinstance(self.vals, Arrays) assert self.vals.shape is not None shape = self.vals.shape - return np.random.rand(*shape) + return self._rng.random(shape) diff --git a/tests/dataset/measurement/test_measurement_context_manager.py b/tests/dataset/measurement/test_measurement_context_manager.py index c71988f040ac..59c7378ad6aa 100644 --- a/tests/dataset/measurement/test_measurement_context_manager.py +++ b/tests/dataset/measurement/test_measurement_context_manager.py @@ -815,7 +815,7 @@ def test_datasaver_arrays_lists_tuples(bg_writing, N) -> None: with meas.run(write_in_background=bg_writing) as datasaver: freqax = np.linspace(1e6, 2e6, N) - signal = np.random.randn(N) + signal = np.random.default_rng().standard_normal(N) datasaver.add_result(("freqax", freqax), ("signal", signal)) @@ -826,7 +826,7 @@ def test_datasaver_arrays_lists_tuples(bg_writing, N) -> None: with meas.run(write_in_background=bg_writing) as datasaver: freqax = np.linspace(1e6, 2e6, N) - signal = np.random.randn(N - 1) + signal = np.random.default_rng().standard_normal(N - 1) with pytest.raises(ValueError): datasaver.add_result(("freqax", freqax), ("signal", signal)) @@ -845,7 +845,7 @@ def test_datasaver_arrays_lists_tuples(bg_writing, N) -> None: # save arrays with meas.run(write_in_background=bg_writing) as datasaver: freqax = np.linspace(1e6, 2e6, N) - signal1 = np.random.randn(N) + signal1 = np.random.default_rng().standard_normal(N) datasaver.add_result( ("freqax", freqax), ("signal", signal1), ("gate_voltage", 0) @@ -859,7 +859,7 @@ def test_datasaver_arrays_lists_tuples(bg_writing, N) -> None: # save lists with meas.run(write_in_background=bg_writing) as datasaver: freqax2 = np.linspace(1e6, 2e6, N).flatten().tolist() - signal2 = np.random.randn(N).flatten().tolist() + signal2 = np.random.default_rng().standard_normal(N).flatten().tolist() datasaver.add_result( ("freqax", freqax2), ("signal", signal2), ("gate_voltage", 0) @@ -870,7 +870,7 @@ def test_datasaver_arrays_lists_tuples(bg_writing, N) -> None: # save tuples with meas.run(write_in_background=bg_writing) as datasaver: freqax3 = tuple(np.linspace(1e6, 2e6, N).flatten().tolist()) - signal3 = tuple(np.random.randn(N).flatten().tolist()) + signal3 = tuple(np.random.default_rng().standard_normal(N).flatten().tolist()) datasaver.add_result( ("freqax", freqax3), ("signal", signal3), ("gate_voltage", 0) @@ -903,7 +903,7 @@ def test_datasaver_numeric_and_array_paramtype(bg_writing, N) -> None: setpoints=("numeric_1",), ) - signal = np.random.randn(113) + signal = np.random.default_rng().standard_normal(113) with meas.run(bg_writing) as datasaver: datasaver.add_result(("numeric_1", 3.75), ("array_1", signal)) @@ -939,7 +939,7 @@ def test_datasaver_numeric_after_array_paramtype(bg_writing) -> None: setpoints=("numeric_1",), ) - signal = np.random.randn(113) + signal = np.random.default_rng().standard_normal(113) with meas.run(write_in_background=bg_writing) as datasaver: # it is important that first comes the 'array' data and then 'numeric' @@ -996,8 +996,8 @@ def test_datasaver_unsized_arrays(N, storage_type, bg_writing) -> None: # correctly with meas.run(write_in_background=bg_writing) as datasaver: freqax = np.linspace(1e6, 2e6, N) - np.random.seed(0) - signal = np.random.randn(N) + rng = np.random.default_rng(0) + signal = rng.standard_normal(N) for i in range(N): myfreq = np.array(freqax[i]) assert myfreq.shape == () @@ -1010,8 +1010,8 @@ def test_datasaver_unsized_arrays(N, storage_type, bg_writing) -> None: assert isinstance(ds, DataSet) loaded_data = ds.get_parameter_data()["signal"] - np.random.seed(0) - expected_signal = np.random.randn(N) + rng = np.random.default_rng(0) + expected_signal = rng.standard_normal(N) expected_freqax = np.linspace(1e6, 2e6, N) if storage_type == "array": @@ -1079,20 +1079,21 @@ def test_datasaver_arrayparams( spectrum.npts = M - np.random.seed(seed) + collected_outputs = [] with meas.run(write_in_background=bg_writing) as datasaver: for set_v in np.linspace(0, 0.01, N): - datasaver.add_result((DAC.ch1, set_v), (spectrum, spectrum.get())) + output = spectrum.get() + collected_outputs.append(output) + datasaver.add_result((DAC.ch1, set_v), (spectrum, output)) if storage_type == "numeric": assert datasaver.points_written == N * M elif storage_type == "array": assert datasaver.points_written == N - np.random.seed(seed) expected_dac_data = np.repeat(np.linspace(0, 0.01, N), M) expected_freq_axis = np.tile(spectrum.setpoints[0], N) - expected_output = np.array([spectrum.get() for _ in range(N)]).reshape(N * M) + expected_output = np.array(collected_outputs).reshape(N * M) if storage_type == "array": expected_dac_data = expected_dac_data.reshape(N, M) @@ -1187,7 +1188,6 @@ def test_datasaver_array_parameters_channel( def test_datasaver_parameter_with_setpoints( channel_array_instrument, DAC, n, storage_type, bg_writing ) -> None: - random_seed = 1 chan = channel_array_instrument.A param = chan.dummy_parameter_with_setpoints chan.dummy_n_points(n) @@ -1208,10 +1208,8 @@ def test_datasaver_parameter_with_setpoints( # Now for a real measurement with meas.run(write_in_background=bg_writing) as datasaver: - # we seed the random number generator - # so we can test that we get the expected numbers - np.random.seed(random_seed) - datasaver.add_result((param, param.get())) + param_data = param.get() + datasaver.add_result((param, param_data)) if storage_type == "numeric": expected_points_written = n elif storage_type == "array": @@ -1243,8 +1241,7 @@ def test_datasaver_parameter_with_setpoints( expected_dep_data = np.linspace( chan.dummy_start(), chan.dummy_stop(), chan.dummy_n_points() ) - np.random.seed(random_seed) - expected_data = np.random.rand(n) + expected_data = param_data if storage_type == "array": expected_dep_data = expected_dep_data.reshape((1, chan.dummy_n_points())) expected_data = expected_data.reshape((1, chan.dummy_n_points())) @@ -1268,7 +1265,6 @@ def test_datasaver_parameter_with_setpoints( def test_datasaver_parameter_with_setpoints_explicitly_expanded( channel_array_instrument, DAC, n, storage_type, bg_writing ) -> None: - random_seed = 1 chan = channel_array_instrument.A param = chan.dummy_parameter_with_setpoints chan.dummy_n_points(n) @@ -1289,10 +1285,8 @@ def test_datasaver_parameter_with_setpoints_explicitly_expanded( # Now for a real measurement with meas.run(write_in_background=bg_writing) as datasaver: - # we seed the random number generator - # so we can test that we get the expected numbers - np.random.seed(random_seed) - datasaver.add_result(*expand_setpoints_helper(param)) + param_data = param.get() + datasaver.add_result(*expand_setpoints_helper(param, results=param_data)) if storage_type == "numeric": expected_points_written = n elif storage_type == "array": @@ -1324,8 +1318,7 @@ def test_datasaver_parameter_with_setpoints_explicitly_expanded( expected_dep_data = np.linspace( chan.dummy_start(), chan.dummy_stop(), chan.dummy_n_points() ) - np.random.seed(random_seed) - expected_data = np.random.rand(n) + expected_data = param_data if storage_type == "array": expected_dep_data = expected_dep_data.reshape((1, chan.dummy_n_points())) expected_data = expected_data.reshape((1, chan.dummy_n_points())) @@ -1341,7 +1334,6 @@ def test_datasaver_parameter_with_setpoints_explicitly_expanded( def test_datasaver_parameter_with_setpoints_that_are_different_raises( channel_array_instrument, DAC ) -> None: - random_seed = 1 chan = channel_array_instrument.A param = chan.dummy_parameter_with_setpoints_2d chan.dummy_n_points(10) @@ -1364,10 +1356,7 @@ def test_datasaver_parameter_with_setpoints_that_are_different_raises( assert dep_ps in meas._interdeps.dependencies[param_ps] with meas.run() as datasaver: - # we seed the random number generator - # so we can test that we get the expected numbers # This fails because a 2D PWS expects 2D setpoints parameter values (ie a grid) - np.random.seed(random_seed) with pytest.raises(ValueError, match="Multiple distinct values found for"): datasaver.add_result((param, param.get()), (sp_param_1, sp_param_1.get())) @@ -1383,7 +1372,6 @@ def test_datasaver_parameter_with_setpoints_that_are_different_raises( def test_datasaver_parameter_with_setpoints_complex( channel_array_instrument, DAC, n, bg_writing ) -> None: - random_seed = 1 chan = channel_array_instrument.A param = chan.dummy_parameter_with_setpoints_complex chan.dummy_n_points(n) @@ -1408,10 +1396,8 @@ def test_datasaver_parameter_with_setpoints_complex( # Now for a real measurement with meas.run(write_in_background=bg_writing) as datasaver: - # we seed the random number generator - # so we can test that we get the expected numbers - np.random.seed(random_seed) - datasaver.add_result((param, param.get())) + param_data = param.get() + datasaver.add_result((param, param_data)) assert datasaver.points_written == 1 ds = load_by_id(datasaver.run_id) @@ -1427,10 +1413,9 @@ def test_datasaver_parameter_with_setpoints_complex( chan.dummy_start(), chan.dummy_stop(), chan.dummy_n_points() ).reshape(1, chan.dummy_n_points()), ) - np.random.seed(random_seed) assert_allclose( subdata["dummy_channel_inst_ChanA_dummy_parameter_with_setpoints_complex"], - (np.random.rand(n) + 1j * np.random.rand(n)).reshape(1, chan.dummy_n_points()), + param_data.reshape(1, chan.dummy_n_points()), ) @@ -1445,7 +1430,6 @@ def test_datasaver_parameter_with_setpoints_complex( def test_datasaver_parameter_with_setpoints_complex_explicitly_expanded( channel_array_instrument, DAC, n, bg_writing ) -> None: - random_seed = 1 chan = channel_array_instrument.A param = chan.dummy_parameter_with_setpoints_complex chan.dummy_n_points(n) @@ -1470,10 +1454,8 @@ def test_datasaver_parameter_with_setpoints_complex_explicitly_expanded( # Now for a real measurement with meas.run(write_in_background=bg_writing) as datasaver: - # we seed the random number generator - # so we can test that we get the expected numbers - np.random.seed(random_seed) - datasaver.add_result(*expand_setpoints_helper(param)) + param_data = param.get() + datasaver.add_result(*expand_setpoints_helper(param, results=param_data)) assert datasaver.points_written == 1 ds = load_by_id(datasaver.run_id) @@ -1489,10 +1471,9 @@ def test_datasaver_parameter_with_setpoints_complex_explicitly_expanded( chan.dummy_start(), chan.dummy_stop(), chan.dummy_n_points() ).reshape(1, chan.dummy_n_points()), ) - np.random.seed(random_seed) assert_allclose( subdata["dummy_channel_inst_ChanA_dummy_parameter_with_setpoints_complex"], - (np.random.rand(n) + 1j * np.random.rand(n)).reshape(1, chan.dummy_n_points()), + param_data.reshape(1, chan.dummy_n_points()), ) @@ -1804,7 +1785,7 @@ def test_datasaver_multidim_array(experiment, bg_writing) -> None: meas.register_parameter(x2, paramtype="array") meas.register_parameter(y1, setpoints=[x1, x2], paramtype="array") meas.register_parameter(y2, setpoints=[x1, x2], paramtype="array") - data = np.random.rand(4, size1, size2) + data = np.random.default_rng().random((4, size1, size2)) expected = { "x1": data[0, :, :], "x2": data[1, :, :], @@ -1854,7 +1835,7 @@ def test_datasaver_export( meas.register_parameter(x2, paramtype="array") meas.register_parameter(y1, setpoints=[x1, x2], paramtype="array") meas.register_parameter(y2, setpoints=[x1, x2], paramtype="array") - data = np.random.rand(4, size1, size2) + data = np.random.default_rng().random((4, size1, size2)) expected = { "x1": data[0, :, :], "x2": data[1, :, :], @@ -1914,7 +1895,7 @@ def test_datasaver_multidim_numeric(experiment, bg_writing) -> None: meas.register_parameter(x2, paramtype="numeric") meas.register_parameter(y1, setpoints=[x1, x2], paramtype="numeric") meas.register_parameter(y2, setpoints=[x1, x2], paramtype="numeric") - data = np.random.rand(4, size1, size2) + data = np.random.default_rng().random((4, size1, size2)) with meas.run(write_in_background=bg_writing) as datasaver: datasaver.add_result( (str(x1), data[0, :, :]), @@ -2192,7 +2173,8 @@ def test_datasaver_arrays_of_different_length(storage_type, Ns, bg_writing) -> N (f"freqs{n}", np.linspace(0, 1, Ns[n])) for n in range(no_of_signals) ) result_sigs = list( - (f"signal{n}", np.random.randn(Ns[n])) for n in range(no_of_signals) + (f"signal{n}", np.random.default_rng().standard_normal(Ns[n])) + for n in range(no_of_signals) ) full_result: tuple[tuple[str, int | np.ndarray | str], ...] = tuple( result_freqs + result_sigs + [result_t] diff --git a/tests/dataset/test__get_data_from_ds.py b/tests/dataset/test__get_data_from_ds.py index 23d40105323a..350a9f419be8 100644 --- a/tests/dataset/test__get_data_from_ds.py +++ b/tests/dataset/test__get_data_from_ds.py @@ -258,7 +258,7 @@ def test_datasaver_multidim_array(experiment, bg_writing) -> None: meas.register_parameter(x2, paramtype="array") meas.register_parameter(y1, setpoints=[x1, x2], paramtype="array") meas.register_parameter(y2, setpoints=[x1, x2], paramtype="array") - data = np.random.rand(4, size1, size2) + data = np.random.default_rng().random((4, size1, size2)) expected = { "x1": data[0, :, :], "x2": data[1, :, :], @@ -304,7 +304,7 @@ def test_datasaver_multidim_numeric(experiment, bg_writing) -> None: meas.register_parameter(x2, paramtype="numeric") meas.register_parameter(y1, setpoints=[x1, x2], paramtype="numeric") meas.register_parameter(y2, setpoints=[x1, x2], paramtype="numeric") - data = np.random.rand(4, size1, size2) + data = np.random.default_rng().random((4, size1, size2)) with meas.run(write_in_background=bg_writing) as datasaver: datasaver.add_result( (str(x1), data[0, :, :]), diff --git a/tests/dataset/test_database_creation_and_upgrading.py b/tests/dataset/test_database_creation_and_upgrading.py index e0f54cd7077b..e8266b281413 100644 --- a/tests/dataset/test_database_creation_and_upgrading.py +++ b/tests/dataset/test_database_creation_and_upgrading.py @@ -920,9 +920,10 @@ def test_perform_actual_upgrade_6_to_newest_add_new_data() -> None: # Make a number of identical runs for _ in range(10): with meas.run() as datasaver: - for x in np.random.rand(10): - for y in np.random.rand(10): - z = np.random.rand() + rng = np.random.default_rng() + for x in rng.random(10): + for y in rng.random(10): + z = rng.random() datasaver.add_result( (params[0], 0), (params[1], 1), diff --git a/tests/dataset/test_dataset_basic.py b/tests/dataset/test_dataset_basic.py index c6e6884d34ef..335f048004f4 100644 --- a/tests/dataset/test_dataset_basic.py +++ b/tests/dataset/test_dataset_basic.py @@ -492,7 +492,7 @@ def test_add_data_array() -> None: expected_x = np.arange(100) expected_y = [] for x in range(100): - y = np.random.random_sample(10) + y = np.random.default_rng().random(10) expected_y.append(y) mydataset.add_results([{"x": x, "y": y}]) @@ -1146,8 +1146,8 @@ def test_get_varlen_array_in_scalar_param_data(varlen_array_in_scalar_dataset) - setpoint_param_values_list.append(j) scalar_param_values_list.append(i) - np.random.seed(0) - test_parameter_values = np.random.rand(n_points) + rng = np.random.default_rng(0) + test_parameter_values = rng.random(n_points) scalar_param_values = np.array(scalar_param_values_list) setpoint_param_values = np.array(setpoint_param_values_list) diff --git a/tests/dataset/test_plotting.py b/tests/dataset/test_plotting.py index 9d3fe04e666e..a5725e25d29b 100644 --- a/tests/dataset/test_plotting.py +++ b/tests/dataset/test_plotting.py @@ -47,7 +47,7 @@ class TerminateLoopException(Exception): param_label="Larger than the highest scale", scale=max(list(_ENGINEERING_PREFIXES.keys())), unit="V", - data_strategy=np.random.random((5,)) + data_strategy=np.random.default_rng().random((5,)) * 10 ** (3 + max(list(_ENGINEERING_PREFIXES.keys()))), ) @example( @@ -55,7 +55,7 @@ class TerminateLoopException(Exception): param_label="Lower than the lowest scale", scale=min(list(_ENGINEERING_PREFIXES.keys())), unit="V", - data_strategy=np.random.random((5,)) + data_strategy=np.random.default_rng().random((5,)) * 10 ** (-3 + min(list(_ENGINEERING_PREFIXES.keys()))), ) @settings(suppress_health_check=[HealthCheck.too_slow]) @@ -132,8 +132,8 @@ def test_plot_by_id_line_and_heatmap(experiment, request: FixtureRequest) -> Non inst = DummyInstrument("dummy", gates=["s1", "m1", "s2", "m2"]) request.addfinalizer(inst.close) - inst.m1.get = np.random.randn - inst.m2.get = lambda: np.random.randint(0, 5) + inst.m1.get = np.random.default_rng().standard_normal + inst.m2.get = lambda: np.random.default_rng().integers(0, 5) meas = Measurement() meas.register_parameter(inst.s1) diff --git a/tests/dataset/test_string_data.py b/tests/dataset/test_string_data.py index 3193f62ca1db..928ffbd70698 100644 --- a/tests/dataset/test_string_data.py +++ b/tests/dataset/test_string_data.py @@ -170,7 +170,7 @@ def test_list_of_strings(experiment) -> None: Test saving list of strings via DataSaver """ p_values = ["X_Y", "X_X", "X_I", "I_I"] - list_of_strings = list(np.random.choice(p_values, (10,))) + list_of_strings = list(np.random.default_rng().choice(p_values, (10,))) p = Parameter( "p", diff --git a/tests/dataset_generators.py b/tests/dataset_generators.py index ff891f6cb69b..0bc24b866f6a 100644 --- a/tests/dataset_generators.py +++ b/tests/dataset_generators.py @@ -22,7 +22,7 @@ def dataset_with_outliers_generator( if background_noise and ( counter < round(npoints / 2.3) or counter > round(npoints / 1.8) ): - data = np.random.rand(npoints) - data_offset + data = np.random.default_rng().random(npoints) - data_offset else: data = xv * np.linspace(0, 1, npoints) if counter == round(npoints / 1.9): diff --git a/tests/drivers/keysight_b1500/b1500_driver_tests/test_sampling_measurement.py b/tests/drivers/keysight_b1500/b1500_driver_tests/test_sampling_measurement.py index 34e48f8c88fc..973d29f139e7 100644 --- a/tests/drivers/keysight_b1500/b1500_driver_tests/test_sampling_measurement.py +++ b/tests/drivers/keysight_b1500/b1500_driver_tests/test_sampling_measurement.py @@ -30,8 +30,8 @@ def smu(b1500: "KeysightB1500") -> "KeysightB1511B": @pytest.fixture def smu_output() -> tuple[int, npt.NDArray[np.float64]]: n_samples = 7 - np.random.seed(1) - data_to_return = np.random.rand(n_samples) + rng = np.random.default_rng(1) + data_to_return = rng.random(n_samples) return n_samples, data_to_return diff --git a/tests/drivers/test_Keithley_2450.py b/tests/drivers/test_Keithley_2450.py index 3d4cefefdc70..4818f4fd0181 100644 --- a/tests/drivers/test_Keithley_2450.py +++ b/tests/drivers/test_Keithley_2450.py @@ -95,8 +95,9 @@ def test_setpoint_always_follows_source_function(k2450) -> None: should always follow the source module """ n = 100 - sense_modes = np.random.choice(["current", "voltage", "resistance"], n) - source_modes = np.random.choice(["current", "voltage"], n) + rng = np.random.default_rng() + sense_modes = rng.choice(["current", "voltage", "resistance"], n) + source_modes = rng.choice(["current", "voltage"], n) for sense_mode, source_mode in zip(sense_modes, source_modes): k2450.sense.function("voltage") # In 'resistance' sense mode, we cannot diff --git a/tests/drivers/test_tektronix_AWG5014C.py b/tests/drivers/test_tektronix_AWG5014C.py index f30d4f87ecf9..cbc516c9f884 100644 --- a/tests/drivers/test_tektronix_AWG5014C.py +++ b/tests/drivers/test_tektronix_AWG5014C.py @@ -27,9 +27,10 @@ def test_init_awg(awg) -> None: def test_pack_waveform(awg) -> None: N = 25 - waveform = np.random.rand(N) - m1 = np.random.randint(0, 2, N) - m2 = np.random.randint(0, 2, N) + rng = np.random.default_rng() + waveform = rng.random(N) + m1 = rng.integers(0, 2, N) + m2 = rng.integers(0, 2, N) package = awg._pack_waveform(waveform, m1, m2) @@ -39,9 +40,10 @@ def test_pack_waveform(awg) -> None: def test_make_awg_file(awg) -> None: N = 25 - waveforms = [[np.random.rand(N)]] - m1s = [[np.random.randint(0, 2, N)]] - m2s = [[np.random.randint(0, 2, N)]] + rng = np.random.default_rng() + waveforms = [[rng.random(N)]] + m1s = [[rng.integers(0, 2, N)]] + m2s = [[rng.integers(0, 2, N)]] nreps = [1] trig_waits = [0] goto_states = [0] diff --git a/tests/drivers/test_tektronix_AWG70000A.py b/tests/drivers/test_tektronix_AWG70000A.py index 004bb65ca9ca..4c51c97071e0 100644 --- a/tests/drivers/test_tektronix_AWG70000A.py +++ b/tests/drivers/test_tektronix_AWG70000A.py @@ -55,10 +55,11 @@ def random_wfm_m1_m2_package(): """ def make(): - length = np.random.randint(2400, 2500) - wfm = 0.2 * (np.random.rand(length) - 0.5) - m1 = np.random.randint(0, 2, length) - m2 = np.random.randint(0, 2, length) + rng = np.random.default_rng() + length = rng.integers(2400, 2500) + wfm = 0.2 * (rng.random(length) - 0.5) + m1 = rng.integers(0, 2, length) + m2 = rng.integers(0, 2, length) return np.array([wfm, m1, m2]) return make @@ -82,11 +83,12 @@ def random_element(num_chans): 2400 points long, the minimum allowed by the instrument """ data = {n: {} for n in range(1, 1 + num_chans)} + rng = np.random.default_rng() for key in data.keys(): data[key] = { - "wfm": np.random.randn(2400), - "m1": np.random.randint(0, 2, 2400), - "m2": np.random.randint(0, 2, 2400), + "wfm": rng.standard_normal(2400), + "m1": rng.integers(0, 2, 2400), + "m2": rng.integers(0, 2, 2400), } return data diff --git a/tests/parameter/test_parameter_scale_offset.py b/tests/parameter/test_parameter_scale_offset.py index 81d5b6261693..782805409056 100644 --- a/tests/parameter/test_parameter_scale_offset.py +++ b/tests/parameter/test_parameter_scale_offset.py @@ -192,7 +192,7 @@ def test_numpy_array_valued_parameter_preserves_type_if_scale_and_offset_are_set None ): def rands(): - return np.random.randn(5) + return np.random.default_rng().standard_normal(5) param = Parameter(name="test_param", set_cmd=None, get_cmd=rands) diff --git a/tests/parameter/test_parameter_with_setpoints.py b/tests/parameter/test_parameter_with_setpoints.py index 08ef2fda3c64..e2fabadcd73d 100644 --- a/tests/parameter/test_parameter_with_setpoints.py +++ b/tests/parameter/test_parameter_with_setpoints.py @@ -1,10 +1,11 @@ import numpy as np import pytest -from numpy.random import rand import qcodes.validators as vals from qcodes.parameters import Parameter, ParameterWithSetpoints, expand_setpoints_helper +_rng = np.random.default_rng() + @pytest.fixture() def parameters(): @@ -48,18 +49,18 @@ def test_validation_shapes() -> None: setpoints_1 = Parameter( "setpoints_1", - get_cmd=lambda: rand(n_points_1()), + get_cmd=lambda: _rng.random(n_points_1()), vals=vals.Arrays(shape=(n_points_1,)), ) setpoints_2 = Parameter( "setpoints_2", - get_cmd=lambda: rand(n_points_2()), + get_cmd=lambda: _rng.random(n_points_2()), vals=vals.Arrays(shape=(n_points_2,)), ) param_with_setpoints_1 = ParameterWithSetpoints( "param_1", - get_cmd=lambda: rand(n_points_1()), + get_cmd=lambda: _rng.random(n_points_1()), setpoints=(setpoints_1,), vals=vals.Arrays(shape=(n_points_1,)), ) @@ -75,7 +76,7 @@ def test_validation_shapes() -> None: param_with_setpoints_2 = ParameterWithSetpoints( "param_2", - get_cmd=lambda: rand(n_points_1(), n_points_2()), + get_cmd=lambda: _rng.random((n_points_1(), n_points_2())), vals=vals.Arrays(shape=(n_points_1, n_points_2)), ) @@ -101,14 +102,14 @@ def test_setpoints_non_parameter_raises() -> None: with pytest.raises(TypeError, match=err_msg): param_with_setpoints_1 = ParameterWithSetpoints( "param_1", - get_cmd=lambda: rand(n_points_1()), + get_cmd=lambda: _rng.random(n_points_1()), setpoints=(lambda x: x,), # type: ignore[arg-type] vals=vals.Arrays(shape=(n_points_1,)), ) param_with_setpoints_1 = ParameterWithSetpoints( "param_1", - get_cmd=lambda: rand(n_points_1()), + get_cmd=lambda: _rng.random(n_points_1()), vals=vals.Arrays(shape=(n_points_1,)), ) @@ -129,13 +130,13 @@ def test_validation_inconsistent_shape() -> None: setpoints_1 = Parameter( "setpoints_1", - get_cmd=lambda: rand(n_points_1()), + get_cmd=lambda: _rng.random(n_points_1()), vals=vals.Arrays(shape=(n_points_1,)), ) param_with_diff_length = ParameterWithSetpoints( "param_1", - get_cmd=lambda: rand(n_points_2()), + get_cmd=lambda: _rng.random(n_points_2()), setpoints=(setpoints_1,), vals=vals.Arrays(shape=(n_points_2,)), ) @@ -166,13 +167,13 @@ def test_validation_wrong_validator() -> None: n_points_2.set(20) setpoints_1 = Parameter( "setpoints_1", - get_cmd=lambda: rand(n_points_1()), + get_cmd=lambda: _rng.random(n_points_1()), vals=vals.Arrays(shape=(n_points_1,)), ) # output is not consistent with validator param_with_wrong_validator = ParameterWithSetpoints( "param_2", - get_cmd=lambda: rand(n_points_2()), + get_cmd=lambda: _rng.random(n_points_2()), setpoints=(setpoints_1,), vals=vals.Arrays(shape=(n_points_1,)), ) @@ -199,7 +200,7 @@ def test_validation_no_validator() -> None: n_points_1.set(10) setpoints_1 = Parameter( "setpoints_1", - get_cmd=lambda: rand(n_points_1()), + get_cmd=lambda: _rng.random(n_points_1()), vals=vals.Arrays(shape=(n_points_1,)), ) # output does not have a validator @@ -211,7 +212,9 @@ def test_validation_no_validator() -> None: r"", ): ParameterWithSetpoints( - "param_3", get_cmd=lambda: rand(n_points_1()), setpoints=(setpoints_1,) + "param_3", + get_cmd=lambda: _rng.random(n_points_1()), + setpoints=(setpoints_1,), ) @@ -224,10 +227,10 @@ def test_validation_sp_no_validator() -> None: n_points_2.set(20) # setpoints do not have a validator - setpoints_2 = Parameter("setpoints_2", get_cmd=lambda: rand(n_points_2())) + setpoints_2 = Parameter("setpoints_2", get_cmd=lambda: _rng.random(n_points_2())) param_sp_without_validator = ParameterWithSetpoints( "param_4", - get_cmd=lambda: rand(n_points_2()), + get_cmd=lambda: _rng.random(n_points_2()), setpoints=(setpoints_2,), vals=vals.Arrays(shape=(n_points_2,)), ) @@ -252,7 +255,7 @@ def test_validation_without_shape() -> None: n_points_1.set(10) setpoints_1 = Parameter( "setpoints_1", - get_cmd=lambda: rand(n_points_1()), + get_cmd=lambda: _rng.random(n_points_1()), vals=vals.Arrays(shape=(n_points_1,)), ) with pytest.raises( @@ -263,7 +266,7 @@ def test_validation_without_shape() -> None: ): ParameterWithSetpoints( "param_5", - get_cmd=lambda: rand(n_points_1()), + get_cmd=lambda: _rng.random(n_points_1()), setpoints=(setpoints_1,), vals=vals.Arrays(), ) @@ -280,11 +283,11 @@ def test_validation_without_sp_shape() -> None: n_points_2.set(20) setpoints_1 = Parameter( - "setpoints_1", get_cmd=lambda: rand(n_points_1()), vals=vals.Arrays() + "setpoints_1", get_cmd=lambda: _rng.random(n_points_1()), vals=vals.Arrays() ) param_sp_without_shape = ParameterWithSetpoints( "param_6", - get_cmd=lambda: rand(n_points_1()), + get_cmd=lambda: _rng.random(n_points_1()), setpoints=(setpoints_1,), vals=vals.Arrays(shape=(n_points_1,)), ) @@ -312,12 +315,12 @@ def test_validation_one_dim_missing() -> None: n_points_2.set(20) setpoints_1 = Parameter( "setpoints_1", - get_cmd=lambda: rand(n_points_1()), + get_cmd=lambda: _rng.random(n_points_1()), vals=vals.Arrays(shape=(n_points_1, n_points_2)), ) param_sp_without_shape = ParameterWithSetpoints( "param_6", - get_cmd=lambda: rand(n_points_1()), + get_cmd=lambda: _rng.random(n_points_1()), setpoints=(setpoints_1,), vals=vals.Arrays(shape=(n_points_1, None)), # type: ignore[arg-type] ) @@ -345,12 +348,12 @@ def test_validation_one_sp_dim_missing() -> None: n_points_2.set(20) setpoints_1 = Parameter( "setpoints_1", - get_cmd=lambda: rand(n_points_1()), + get_cmd=lambda: _rng.random(n_points_1()), vals=vals.Arrays(shape=(n_points_1, None)), # type: ignore[arg-type] ) param_sp_without_shape = ParameterWithSetpoints( "param_6", - get_cmd=lambda: rand(n_points_1()), + get_cmd=lambda: _rng.random(n_points_1()), setpoints=(setpoints_1,), vals=vals.Arrays(shape=(n_points_1, n_points_2)), ) @@ -378,7 +381,7 @@ def test_expand_setpoints_1c(parameters) -> None: param_with_setpoints_1 = ParameterWithSetpoints( "param_1", - get_cmd=lambda: rand(n_points_1()), + get_cmd=lambda: _rng.random(n_points_1()), setpoints=(setpoints_1,), vals=vals.Arrays(shape=(n_points_1,)), ) @@ -396,7 +399,7 @@ def test_expand_setpoints_2d(parameters) -> None: param_with_setpoints_2 = ParameterWithSetpoints( "param_2", - get_cmd=lambda: rand(n_points_1(), n_points_2()), + get_cmd=lambda: _rng.random((n_points_1(), n_points_2())), vals=vals.Arrays(shape=(n_points_1, n_points_2)), ) param_with_setpoints_2.setpoints = (setpoints_1, setpoints_2) @@ -424,7 +427,7 @@ def test_expand_setpoints_3d(parameters) -> None: param_with_setpoints_3 = ParameterWithSetpoints( "param_2", - get_cmd=lambda: rand(n_points_1(), n_points_2(), n_points_3()), + get_cmd=lambda: _rng.random((n_points_1(), n_points_2(), n_points_3())), vals=vals.Arrays(shape=(n_points_1, n_points_2, n_points_3)), ) param_with_setpoints_3.setpoints = (setpoints_1, setpoints_2, setpoints_3) diff --git a/tests/validators/test_arrays.py b/tests/validators/test_arrays.py index 24dd9bc5c642..02a0549f6709 100644 --- a/tests/validators/test_arrays.py +++ b/tests/validators/test_arrays.py @@ -102,7 +102,7 @@ def test_real_subtypes() -> None: only support other concrete types raises as expected """ types = list(set(numpy_concrete_ints + numpy_floats)) - randint = np.random.randint(0, len(types)) + randint = np.random.default_rng().integers(0, len(types)) mytype = types.pop(randint) a = Arrays(valid_types=(mytype,)) From 7c9f7c47f6e34c2c0f826b7e1a6842fffa17b829 Mon Sep 17 00:00:00 2001 From: "Jens H. Nielsen" Date: Mon, 30 Mar 2026 08:39:06 +0200 Subject: [PATCH 3/6] Replace legacy np.random calls with np.random.Generator in docs examples Replace np.random.rand, np.random.randn, np.random.randint, np.random.random_sample, and np.random.shuffle with np.random.default_rng() equivalents to fix NPY002 lint violations. Extract rng = np.random.default_rng() before loops to avoid creating a new generator on every iteration. --- docs/examples/DataSet/Benchmarking.ipynb | 24 +++++++++++------ .../DataSet/Dataset_Performance.ipynb | 11 ++++---- ...ing-runs-from-one-DB-file-to-another.ipynb | 4 +-- .../DataSet/Linking to parent datasets.ipynb | 4 ++- .../DataSet/Offline Plotting Tutorial.ipynb | 11 +++++--- ...fline plotting with categorical data.ipynb | 26 +++++++++---------- .../DataSet/Paramtypes explained.ipynb | 2 +- ... example of subscribing to a DataSet.ipynb | 6 +++-- ...-using-qcodes-parameters-and-dataset.ipynb | 10 ++++--- .../Saving_data_in_the_background.ipynb | 4 +-- .../DataSet/Threaded data acquisition.ipynb | 3 ++- ...ts-defined-on-a-different-instrument.ipynb | 4 +-- ...le-Example-of-ParameterWithSetpoints.ipynb | 2 +- docs/examples/plotting/auto_color_scale.ipynb | 3 ++- ...etpoints-Example-with-Dual-Setpoints.ipynb | 2 +- 15 files changed, 68 insertions(+), 48 deletions(-) diff --git a/docs/examples/DataSet/Benchmarking.ipynb b/docs/examples/DataSet/Benchmarking.ipynb index 958344b75fd8..80412d30ab5a 100644 --- a/docs/examples/DataSet/Benchmarking.ipynb +++ b/docs/examples/DataSet/Benchmarking.ipynb @@ -163,9 +163,10 @@ ], "source": [ "%%time\n", + "rng = np.random.default_rng()\n", "for x in range(x_shape):\n", " for y in range(y_shape):\n", - " z = np.random.random_sample(1)" + " z = rng.random(1)" ] }, { @@ -202,11 +203,12 @@ ], "source": [ "%%time\n", + "rng = np.random.default_rng()\n", "for x in range(x_shape):\n", " for y in range(y_shape):\n", " x_data[x, y] = x\n", " y_data[x, y] = y\n", - " z_data[x, y] = np.random.random_sample()" + " z_data[x, y] = rng.random()" ] }, { @@ -257,9 +259,10 @@ ], "source": [ "%%time\n", + "rng = np.random.default_rng()\n", "for x in range(x_shape // 10):\n", " for y in range(y_shape):\n", - " double_dataset.add_results([{\"x\": x, \"y\": y, \"z\": np.random.random_sample()}])" + " double_dataset.add_results([{\"x\": x, \"y\": y, \"z\": rng.random()}])" ] }, { @@ -302,11 +305,12 @@ ], "source": [ "%%time\n", + "rng = np.random.default_rng()\n", "for x in range(x_shape):\n", " for y in range(y_shape):\n", " x_data[y] = x\n", " y_data[y] = y\n", - " z_data[y] = np.random.random_sample(1)[0]\n", + " z_data[y] = rng.random(1)[0]\n", " single_dataset.add_results([{\"x\": x_data, \"y\": y_data, \"z\": z_data}])" ] }, @@ -350,11 +354,12 @@ ], "source": [ "%%time\n", + "rng = np.random.default_rng()\n", "for x in range(x_shape):\n", " for y in range(y_shape):\n", " x_data[x, y] = x\n", " y_data[x, y] = y\n", - " z_data[x, y] = np.random.random_sample(1)[0]\n", + " z_data[x, y] = rng.random(1)[0]\n", "zero_dataset.add_results([{\"x\": x_data, \"y\": y_data, \"z\": z_data}])" ] }, @@ -395,10 +400,11 @@ ], "source": [ "%%timeit\n", + "rng = np.random.default_rng()\n", "for x in range(x_shape):\n", " x_data[x, :] = x\n", " array1D_dataset.add_results(\n", - " [{\"x\": x_data[x, :], \"y\": y_setpoints, \"z\": np.random.random_sample(y_shape)}]\n", + " [{\"x\": x_data[x, :], \"y\": y_setpoints, \"z\": rng.random(y_shape)}]\n", " )" ] }, @@ -443,10 +449,11 @@ ], "source": [ "%%timeit\n", + "rng = np.random.default_rng()\n", "for x in range(x_shape):\n", " x_data[x, :] = x\n", " y_data[x, :] = y_setpoints\n", - " z_data[x, :] = np.random.random_sample(y_shape)\n", + " z_data[x, :] = rng.random(y_shape)\n", "array0D_dataset.add_results([{\"x\": x_data, \"y\": y_data, \"z\": z_data}])" ] }, @@ -463,10 +470,11 @@ "metadata": {}, "outputs": [], "source": [ + "rng = np.random.default_rng()\n", "data = []\n", "for i in range(100):\n", " for j in range(100):\n", - " data.append({\"x\": i, \"y\": j, \"z\": np.random.random_sample()})" + " data.append({\"x\": i, \"y\": j, \"z\": rng.random()})" ] }, { diff --git a/docs/examples/DataSet/Dataset_Performance.ipynb b/docs/examples/DataSet/Dataset_Performance.ipynb index cbf899861f18..d2b3bb086c0f 100644 --- a/docs/examples/DataSet/Dataset_Performance.ipynb +++ b/docs/examples/DataSet/Dataset_Performance.ipynb @@ -94,15 +94,16 @@ " meas.register_parameter(y1, setpoints=[x1, x2, x3], paramtype=paramtype)\n", " meas.register_parameter(y2, setpoints=[x1, x2, x3], paramtype=paramtype)\n", " start = time.perf_counter()\n", + " rng = np.random.default_rng()\n", " with meas.run() as datasaver:\n", " start_adding = time.perf_counter()\n", " for i in range(nreps):\n", " datasaver.add_result(\n", - " (x1, np.random.rand(npoints)),\n", - " (x2, np.random.rand(npoints)),\n", - " (x3, np.random.rand(npoints)),\n", - " (y1, np.random.rand(npoints)),\n", - " (y2, np.random.rand(npoints)),\n", + " (x1, rng.random(npoints)),\n", + " (x2, rng.random(npoints)),\n", + " (x3, rng.random(npoints)),\n", + " (y1, rng.random(npoints)),\n", + " (y2, rng.random(npoints)),\n", " )\n", " stop_adding = time.perf_counter()\n", " run_id = datasaver.run_id\n", diff --git a/docs/examples/DataSet/Extracting-runs-from-one-DB-file-to-another.ipynb b/docs/examples/DataSet/Extracting-runs-from-one-DB-file-to-another.ipynb index 02afca7a7ad4..708a80eb8121 100644 --- a/docs/examples/DataSet/Extracting-runs-from-one-DB-file-to-another.ipynb +++ b/docs/examples/DataSet/Extracting-runs-from-one-DB-file-to-another.ipynb @@ -120,7 +120,7 @@ "\n", "for run_id in range(1, 11):\n", " with meas.run() as datasaver:\n", - " for step, noise in enumerate(np.random.randn(run_id)):\n", + " for step, noise in enumerate(np.random.default_rng().standard_normal(run_id)):\n", " datasaver.add_result((my_inst.voltage, step), (my_inst.current, noise))" ] }, @@ -339,7 +339,7 @@ "\n", "for run_id in range(1, 11):\n", " with meas.run() as datasaver:\n", - " for step, noise in enumerate(np.random.randn(run_id)):\n", + " for step, noise in enumerate(np.random.default_rng().standard_normal(run_id)):\n", " datasaver.add_result((my_inst.current, step), (my_inst.voltage, noise))" ] }, diff --git a/docs/examples/DataSet/Linking to parent datasets.ipynb b/docs/examples/DataSet/Linking to parent datasets.ipynb index 2daedd6c86a3..b6e2092b2c12 100644 --- a/docs/examples/DataSet/Linking to parent datasets.ipynb +++ b/docs/examples/DataSet/Linking to parent datasets.ipynb @@ -111,7 +111,9 @@ "\n", "with meas.run() as datasaver:\n", " time_data = np.linspace(0, 1, N)\n", - " signal_data = np.sin(2 * np.pi * time_data) + 0.25 * np.random.randn(N)\n", + " signal_data = np.sin(\n", + " 2 * np.pi * time_data\n", + " ) + 0.25 * np.random.default_rng().standard_normal(N)\n", "\n", " datasaver.add_result((\"time\", time_data), (\"signal\", signal_data))\n", "dataset = datasaver.dataset" diff --git a/docs/examples/DataSet/Offline Plotting Tutorial.ipynb b/docs/examples/DataSet/Offline Plotting Tutorial.ipynb index 3bb073e14124..a784e4e05e62 100644 --- a/docs/examples/DataSet/Offline Plotting Tutorial.ipynb +++ b/docs/examples/DataSet/Offline Plotting Tutorial.ipynb @@ -106,6 +106,7 @@ } ], "source": [ + "rng = np.random.default_rng()\n", "meas = Measurement(exp=exp)\n", "meas.register_parameter(x)\n", "meas.register_parameter(y, setpoints=(x,))\n", @@ -115,11 +116,11 @@ "# Randomly shuffle the values in order to test the plot\n", "# that is to be created for this data is a correct line\n", "# that does not depend on the order of the data.\n", - "np.random.shuffle(xvals)\n", + "rng.shuffle(xvals)\n", "\n", "with meas.run() as datasaver:\n", " for xnum in xvals:\n", - " noise = np.random.randn() * 0.1 # multiplicative noise yeah yeah\n", + " noise = rng.standard_normal() * 0.1 # multiplicative noise yeah yeah\n", " datasaver.add_result(\n", " (x, xnum), (y, 2 * (xnum + noise) ** 3 - 5 * (xnum + noise) ** 2)\n", " )\n", @@ -210,13 +211,14 @@ } ], "source": [ + "rng = np.random.default_rng()\n", "meas = Measurement(exp=exp)\n", "meas.register_parameter(t)\n", "meas.register_parameter(y, setpoints=(t,))\n", "\n", "with meas.run() as datasaver:\n", " for tnum in np.linspace(-3.4, 4.2, 50):\n", - " noise = np.random.randn() * 0.1\n", + " noise = rng.standard_normal() * 0.1\n", " datasaver.add_result(\n", " (t, tnum * 1e-6),\n", " (y, (2 * (tnum + noise) ** 3 - 5 * (tnum + noise) ** 2) * 1e3),\n", @@ -772,6 +774,7 @@ } ], "source": [ + "rng = np.random.default_rng()\n", "# First run\n", "meas = Measurement(exp=exp)\n", "meas.register_parameter(x)\n", @@ -781,7 +784,7 @@ "\n", "with meas.run() as datasaver:\n", " for xnum in xvals:\n", - " noise = np.random.randn() * 0.1 # multiplicative noise yeah yeah\n", + " noise = rng.standard_normal() * 0.1 # multiplicative noise yeah yeah\n", " datasaver.add_result(\n", " (x, xnum), (y, 2 * (xnum + noise) ** 3 - 5 * (xnum + noise) ** 2)\n", " )\n", diff --git a/docs/examples/DataSet/Offline plotting with categorical data.ipynb b/docs/examples/DataSet/Offline plotting with categorical data.ipynb index 79acecd49483..5dbbb6c408d0 100644 --- a/docs/examples/DataSet/Offline plotting with categorical data.ipynb +++ b/docs/examples/DataSet/Offline plotting with categorical data.ipynb @@ -72,6 +72,7 @@ } ], "source": [ + "rng = np.random.default_rng()\n", "voltage = Parameter(\"voltage\", label=\"Voltage\", unit=\"V\", set_cmd=None, get_cmd=None)\n", "fridge_config = Parameter(\n", " \"config\", label=\"Fridge configuration\", set_cmd=None, get_cmd=None\n", @@ -85,9 +86,7 @@ " configurations = [\"open\", \"outer chamber closed\", \"pumping\", \"closed\"]\n", "\n", " for configuration in configurations:\n", - " datasaver.add_result(\n", - " (fridge_config, configuration), (voltage, np.random.rand())\n", - " )\n", + " datasaver.add_result((fridge_config, configuration), (voltage, rng.random()))\n", "\n", "dataset = datasaver.dataset" ] @@ -140,15 +139,14 @@ } ], "source": [ + "rng = np.random.default_rng()\n", "with meas.run() as datasaver:\n", " configurations = [\"open\", \"outer chamber closed\", \"pumping\", \"closed\"]\n", "\n", " for configuration in configurations:\n", - " datasaver.add_result(\n", - " (fridge_config, configuration), (voltage, np.random.rand())\n", - " )\n", + " datasaver.add_result((fridge_config, configuration), (voltage, rng.random()))\n", "\n", - " datasaver.add_result((fridge_config, \"open\"), (voltage, np.random.rand()))\n", + " datasaver.add_result((fridge_config, \"open\"), (voltage, rng.random()))\n", "\n", "dataset = datasaver.dataset\n", "\n", @@ -182,6 +180,7 @@ } ], "source": [ + "rng = np.random.default_rng()\n", "voltage = Parameter(\"voltage\", label=\"Voltage\", unit=\"V\", set_cmd=None, get_cmd=None)\n", "response = Parameter(\"response\", label=\"Sample response\", set_cmd=None, get_cmd=None)\n", "\n", @@ -192,7 +191,7 @@ "\n", "with meas.run() as datasaver:\n", " for volt in np.linspace(0, 1, 50):\n", - " coinvalue = volt + 0.5 * np.random.randn()\n", + " coinvalue = volt + 0.5 * rng.standard_normal()\n", " if coinvalue < 0:\n", " resp = \"Bad\"\n", " elif coinvalue < 0.8:\n", @@ -252,6 +251,7 @@ } ], "source": [ + "rng = np.random.default_rng()\n", "sample = Parameter(\"sample\", label=\"Sample\", unit=\"\", set_cmd=None, get_cmd=None)\n", "feature = Parameter(\"feature\", label=\"Physical feature\", set_cmd=None, get_cmd=None)\n", "\n", @@ -264,10 +264,10 @@ " features = [\"superconducting\", \"qubit\", \"clean states\", \"high bandwidth\"]\n", "\n", " for samp in [\"Nanowire\", \"Silicon Chip\", \"SQUID\", \"Membrane\"]:\n", - " feats = np.random.randint(1, 5)\n", + " feats = rng.integers(1, 5)\n", " for _ in range(feats):\n", " datasaver.add_result(\n", - " (sample, samp), (feature, features[np.random.randint(0, 4)])\n", + " (sample, samp), (feature, features[rng.integers(0, 4)])\n", " )\n", "\n", "dataset = datasaver.dataset" @@ -602,8 +602,8 @@ "\n", "\n", "with meas.run() as datasaver:\n", - " for bias_v in 3 * (np.random.rand(100)):\n", - " for gate_v in 2 * (np.random.rand(75) - 0.5):\n", + " for bias_v in 3 * (np.random.default_rng().random(100)):\n", + " for gate_v in 2 * (np.random.default_rng().random(75) - 0.5):\n", " datasaver.add_result(\n", " (bias_voltage, bias_v),\n", " (gate_voltage, gate_v),\n", @@ -772,7 +772,7 @@ "\n", "with meas.run() as datasaver:\n", " for samp in samples:\n", - " for gate_v in 2 * (np.random.rand(75) - 0.5):\n", + " for gate_v in 2 * (np.random.default_rng().random(75) - 0.5):\n", " datasaver.add_result(\n", " (sample, samp),\n", " (gate_voltage, gate_v),\n", diff --git a/docs/examples/DataSet/Paramtypes explained.ipynb b/docs/examples/DataSet/Paramtypes explained.ipynb index 94c0b5f86493..91ab00f42823 100644 --- a/docs/examples/DataSet/Paramtypes explained.ipynb +++ b/docs/examples/DataSet/Paramtypes explained.ipynb @@ -125,7 +125,7 @@ " )\n", "\n", " def get_raw(self):\n", - " return np.random.randn(self.N)\n", + " return np.random.default_rng().standard_normal(self.N)\n", "\n", "\n", "class MultiDimSpectrum(ArrayParameter):\n", diff --git a/docs/examples/DataSet/Pedestrian example of subscribing to a DataSet.ipynb b/docs/examples/DataSet/Pedestrian example of subscribing to a DataSet.ipynb index 7aa23c831869..98555b21a6fb 100644 --- a/docs/examples/DataSet/Pedestrian example of subscribing to a DataSet.ipynb +++ b/docs/examples/DataSet/Pedestrian example of subscribing to a DataSet.ipynb @@ -162,8 +162,9 @@ } ], "source": [ + "rng = np.random.default_rng()\n", "for x in np.linspace(100, 200, 150):\n", - " y = np.random.randn()\n", + " y = rng.standard_normal()\n", " dataSet.add_results([{\"x\": x, \"y\": y}])" ] }, @@ -349,8 +350,9 @@ } ], "source": [ + "rng = np.random.default_rng()\n", "for x in np.linspace(0, 3 * np.pi, 100):\n", - " yvalue = 0.9 * np.sin(x) + np.random.randn() * 0.05\n", + " yvalue = 0.9 * np.sin(x) + rng.standard_normal() * 0.05\n", " dataSet.add_results([{\"blip\": x, \"blop\": yvalue}])\n", " sleep(0.1)" ] diff --git a/docs/examples/DataSet/Performing-measurements-using-qcodes-parameters-and-dataset.ipynb b/docs/examples/DataSet/Performing-measurements-using-qcodes-parameters-and-dataset.ipynb index 56747cebf294..225174eed913 100644 --- a/docs/examples/DataSet/Performing-measurements-using-qcodes-parameters-and-dataset.ipynb +++ b/docs/examples/DataSet/Performing-measurements-using-qcodes-parameters-and-dataset.ipynb @@ -2436,11 +2436,12 @@ } ], "source": [ + "rng = np.random.default_rng()\n", "with meas.run() as datasaver:\n", " t_start = monotonic()\n", "\n", " while monotonic() - t_start < 3:\n", - " set_v = 10 / 2 * (np.random.rand() + 1)\n", + " set_v = 10 / 2 * (rng.random() + 1)\n", " dac.ch1.set(set_v)\n", "\n", " # some sleep to not get too many points (or to let the system settle)\n", @@ -2719,6 +2720,7 @@ } ], "source": [ + "rng = np.random.default_rng()\n", "meas2 = Measurement(exp=exp, name=\"random_sampling_measurement\")\n", "meas2.register_parameter(dac.ch1)\n", "meas2.register_parameter(dac.ch2)\n", @@ -2730,8 +2732,8 @@ "\n", "with meas2.run() as datasaver:\n", " for i in range(npoints):\n", - " x = 2 * (np.random.rand() - 0.5)\n", - " y = 2 * (np.random.rand() - 0.5)\n", + " x = 2 * (rng.random() - 0.5)\n", + " y = 2 * (rng.random() - 0.5)\n", " dac.ch1(x)\n", " dac.ch2(y)\n", " z = dmm.v2()\n", @@ -3324,7 +3326,7 @@ "\n", "\n", "noise = 0.0005\n", - "x0 = [np.random.rand(), np.random.rand()]\n", + "x0 = [np.random.default_rng().random(), np.random.default_rng().random()]\n", "\n", "with meas.run() as datasaver:\n", "\n", diff --git a/docs/examples/DataSet/Saving_data_in_the_background.ipynb b/docs/examples/DataSet/Saving_data_in_the_background.ipynb index b90d49921b0a..ead35f2425ef 100644 --- a/docs/examples/DataSet/Saving_data_in_the_background.ipynb +++ b/docs/examples/DataSet/Saving_data_in_the_background.ipynb @@ -113,8 +113,8 @@ " freqs = frequency.get()\n", " volt = voltage.get()\n", " time.sleep(0.1)\n", - " volt += 0.2 * np.random.rand()\n", - " noise = 0.01 * np.random.randn(len(freqs))\n", + " volt += 0.2 * np.random.default_rng().random()\n", + " noise = 0.01 * np.random.default_rng().standard_normal(len(freqs))\n", " return gaussian(freqs, volt, 2) + 0.01 * noise" ] }, diff --git a/docs/examples/DataSet/Threaded data acquisition.ipynb b/docs/examples/DataSet/Threaded data acquisition.ipynb index 22584158eb0c..ae5e2c38cbde 100644 --- a/docs/examples/DataSet/Threaded data acquisition.ipynb +++ b/docs/examples/DataSet/Threaded data acquisition.ipynb @@ -118,9 +118,10 @@ " @staticmethod\n", " def _exponential_decay(a: float, b: float):\n", " x = 0\n", + " rng = np.random.default_rng()\n", " while True:\n", " x = yield\n", - " yield a * np.exp(-b * x) + 0.02 * a * np.random.randn()" + " yield a * np.exp(-b * x) + 0.02 * a * rng.standard_normal()" ] }, { diff --git a/docs/examples/Parameters/Parameter-With-Setpoints-defined-on-a-different-instrument.ipynb b/docs/examples/Parameters/Parameter-With-Setpoints-defined-on-a-different-instrument.ipynb index fce4474d12ee..c86165c1306d 100644 --- a/docs/examples/Parameters/Parameter-With-Setpoints-defined-on-a-different-instrument.ipynb +++ b/docs/examples/Parameters/Parameter-With-Setpoints-defined-on-a-different-instrument.ipynb @@ -106,7 +106,7 @@ "class DummyArray(ParameterWithSetpoints):\n", " def get_raw(self):\n", " npoints = self.root_instrument.sweep_n_points.get_latest()\n", - " return np.random.rand(npoints)\n", + " return np.random.default_rng().random(npoints)\n", "\n", "\n", "class DummyBufferedDMM(Instrument):\n", @@ -149,7 +149,7 @@ "\n", " def _get_current_data(self):\n", " npoints = self.sweep_n_points.get_latest()\n", - " return np.random.rand(npoints)\n", + " return np.random.default_rng().random(npoints)\n", "\n", " def set_sweep_parameters(self, start_parameter, stop_parameter, label=None):\n", " if start_parameter.unit != stop_parameter.unit:\n", diff --git a/docs/examples/Parameters/Simple-Example-of-ParameterWithSetpoints.ipynb b/docs/examples/Parameters/Simple-Example-of-ParameterWithSetpoints.ipynb index b9ac23e60edd..0358ae1f4c93 100644 --- a/docs/examples/Parameters/Simple-Example-of-ParameterWithSetpoints.ipynb +++ b/docs/examples/Parameters/Simple-Example-of-ParameterWithSetpoints.ipynb @@ -108,7 +108,7 @@ "class DummyArray(ParameterWithSetpoints):\n", " def get_raw(self):\n", " npoints = self.root_instrument.n_points.get_latest()\n", - " return np.random.rand(npoints)\n", + " return np.random.default_rng().random(npoints)\n", "\n", "\n", "class DummySpectrumAnalyzer(Instrument):\n", diff --git a/docs/examples/plotting/auto_color_scale.ipynb b/docs/examples/plotting/auto_color_scale.ipynb index ddbaaf0fc4b0..9e693fb0b891 100644 --- a/docs/examples/plotting/auto_color_scale.ipynb +++ b/docs/examples/plotting/auto_color_scale.ipynb @@ -122,11 +122,12 @@ " npoints = 50\n", " xvals = np.linspace(0, 1, npoints)\n", " tvals = np.linspace(0, 1, npoints)\n", + " rng = np.random.default_rng()\n", " for counter, xv in enumerate(xvals):\n", " if background_noise and (\n", " counter < round(npoints / 2.3) or counter > round(npoints / 1.8)\n", " ):\n", - " data = np.random.rand(npoints) - data_offset\n", + " data = rng.random(npoints) - data_offset\n", " else:\n", " data = xv * np.linspace(0, 1, npoints)\n", " if counter == round(npoints / 1.9):\n", diff --git a/docs/examples/writing_drivers/A-ParameterWithSetpoints-Example-with-Dual-Setpoints.ipynb b/docs/examples/writing_drivers/A-ParameterWithSetpoints-Example-with-Dual-Setpoints.ipynb index 01d616181a51..b3b9bcbf9247 100644 --- a/docs/examples/writing_drivers/A-ParameterWithSetpoints-Example-with-Dual-Setpoints.ipynb +++ b/docs/examples/writing_drivers/A-ParameterWithSetpoints-Example-with-Dual-Setpoints.ipynb @@ -53,7 +53,7 @@ " decay = 1\n", " time = np.linspace(0, npts * dt, npts, endpoint=False)\n", " signal = np.exp(-decay * time) * np.sin(2 * np.pi * freq * time)\n", - " noise = 0.1 * np.random.randn(npts)\n", + " noise = 0.1 * np.random.default_rng().standard_normal(npts)\n", " return signal + noise" ] }, From 8d91b548802b396e894a9476c6ab57c02d8902cd Mon Sep 17 00:00:00 2001 From: "Jens H. Nielsen" Date: Mon, 30 Mar 2026 08:40:22 +0200 Subject: [PATCH 4/6] Replace legacy np.random.rand with np.random.Generator in benchmarks Fix NPY002 lint violation by using np.random.default_rng().random() instead of np.random.rand(). --- benchmarking/benchmarks/dataset.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/benchmarking/benchmarks/dataset.py b/benchmarking/benchmarks/dataset.py index 5dfdb05ce7a8..8175e19cba43 100644 --- a/benchmarking/benchmarks/dataset.py +++ b/benchmarking/benchmarks/dataset.py @@ -95,8 +95,9 @@ def setup(self, bench_param): self.datasaver = self.runner.__enter__() # Create values for parameters + rng = np.random.default_rng() for _ in range(len(self.parameters)): - self.values.append(np.random.rand(bench_param["n_values"])) + self.values.append(rng.random(bench_param["n_values"])) def teardown(self, bench_param): # Exit runner context manager From c14312eae09c68a784fd9ce36779ad5ef662155f Mon Sep 17 00:00:00 2001 From: "Jens H. Nielsen" Date: Mon, 30 Mar 2026 08:40:43 +0200 Subject: [PATCH 5/6] Enable ruff lint rule NPY002 for legacy numpy random API --- pyproject.toml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a9745ddacc65..5a1c6e089a73 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -256,13 +256,10 @@ select = [ ] # G004 We have a lot of use of f strings in log messages # so disable that lint for now -# NPY002 We have a lot of use of the legacy -# random number generator. Eventually we should port this -# code. # PLxxxx are pylint lints that generate a fair amount of warnings # it may be worth fixing some or these in the future # PYI036 disable until https://github.com/astral-sh/ruff/issues/9794 is fixed -ignore = ["E501", "G004", "NPY002", "PLR2004", "PLR0913", "PLR0911", "PLR0912", "PLR0915", "PLW0602", "PLW0603", "PLW2901", "PYI036"] +ignore = ["E501", "G004", "PLR2004", "PLR0913", "PLR0911", "PLR0912", "PLR0915", "PLW0602", "PLW0603", "PLW2901", "PYI036"] # we want to explicitly use the micro symbol # not the greek letter From fc53730e985b134dba7cb5dbe7dedc5789030a88 Mon Sep 17 00:00:00 2001 From: "Jens H. Nielsen" Date: Mon, 30 Mar 2026 09:36:48 +0200 Subject: [PATCH 6/6] Code review --- .../instrument_drivers/mock_instruments/__init__.py | 4 ++-- tests/dataset/test_dataset_basic.py | 3 ++- tests/dataset/test_plotting.py | 13 +++++++++---- tests/dataset_generators.py | 5 ++++- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/qcodes/instrument_drivers/mock_instruments/__init__.py b/src/qcodes/instrument_drivers/mock_instruments/__init__.py index 75caa788c119..4bf8a9b914cb 100644 --- a/src/qcodes/instrument_drivers/mock_instruments/__init__.py +++ b/src/qcodes/instrument_drivers/mock_instruments/__init__.py @@ -100,7 +100,7 @@ def _measure_parabola(self) -> float: self.x.get() ** 2 + self.y.get() ** 2 + self.z.get() ** 2 - + self.noise.get() * self._rng.random(1) + + self.noise.get() * self._rng.random() ) def _measure_skewed_parabola(self) -> float: @@ -109,7 +109,7 @@ def _measure_skewed_parabola(self) -> float: """ return (self.x.get() ** 2 + self.y.get() ** 2 + self.z.get() ** 2) * ( 1 + abs(self.y.get() - self.x.get()) - ) + self.noise.get() * self._rng.random(1) + ) + self.noise.get() * self._rng.random() class MockMetaParabola(InstrumentBase): diff --git a/tests/dataset/test_dataset_basic.py b/tests/dataset/test_dataset_basic.py index 335f048004f4..e0e45bb3b73d 100644 --- a/tests/dataset/test_dataset_basic.py +++ b/tests/dataset/test_dataset_basic.py @@ -491,8 +491,9 @@ def test_add_data_array() -> None: expected_x = np.arange(100) expected_y = [] + rng = np.random.default_rng() for x in range(100): - y = np.random.default_rng().random(10) + y = rng.random(10) expected_y.append(y) mydataset.add_results([{"x": x, "y": y}]) diff --git a/tests/dataset/test_plotting.py b/tests/dataset/test_plotting.py index a5725e25d29b..94d9e0dcec45 100644 --- a/tests/dataset/test_plotting.py +++ b/tests/dataset/test_plotting.py @@ -31,6 +31,9 @@ class TerminateLoopException(Exception): pass +_RNG = np.random.default_rng() + + @given( param_name=text(min_size=1, max_size=10), param_label=text(min_size=0, max_size=15), @@ -47,7 +50,7 @@ class TerminateLoopException(Exception): param_label="Larger than the highest scale", scale=max(list(_ENGINEERING_PREFIXES.keys())), unit="V", - data_strategy=np.random.default_rng().random((5,)) + data_strategy=_RNG.random((5,)) * 10 ** (3 + max(list(_ENGINEERING_PREFIXES.keys()))), ) @example( @@ -55,7 +58,7 @@ class TerminateLoopException(Exception): param_label="Lower than the lowest scale", scale=min(list(_ENGINEERING_PREFIXES.keys())), unit="V", - data_strategy=np.random.default_rng().random((5,)) + data_strategy=_RNG.random((5,)) * 10 ** (-3 + min(list(_ENGINEERING_PREFIXES.keys()))), ) @settings(suppress_health_check=[HealthCheck.too_slow]) @@ -132,8 +135,10 @@ def test_plot_by_id_line_and_heatmap(experiment, request: FixtureRequest) -> Non inst = DummyInstrument("dummy", gates=["s1", "m1", "s2", "m2"]) request.addfinalizer(inst.close) - inst.m1.get = np.random.default_rng().standard_normal - inst.m2.get = lambda: np.random.default_rng().integers(0, 5) + rng = np.random.default_rng() + + inst.m1.get = rng.standard_normal + inst.m2.get = lambda: rng.integers(0, 5) meas = Measurement() meas.register_parameter(inst.s1) diff --git a/tests/dataset_generators.py b/tests/dataset_generators.py index 0bc24b866f6a..b54624cfa277 100644 --- a/tests/dataset_generators.py +++ b/tests/dataset_generators.py @@ -18,11 +18,14 @@ def dataset_with_outliers_generator( npoints = 50 xvals = np.linspace(0, 1, npoints) tvals = np.linspace(0, 1, npoints) + + rng = np.random.default_rng() + for counter, xv in enumerate(xvals): if background_noise and ( counter < round(npoints / 2.3) or counter > round(npoints / 1.8) ): - data = np.random.default_rng().random(npoints) - data_offset + data = rng.random(npoints) - data_offset else: data = xv * np.linspace(0, 1, npoints) if counter == round(npoints / 1.9):