diff --git a/docker/python36.docker b/docker/python36.docker index 899b5d5..750d5db 100644 --- a/docker/python36.docker +++ b/docker/python36.docker @@ -16,4 +16,6 @@ ADD . /code WORKDIR /code # Install base + testing packages -RUN pip3 install .[testing] \ No newline at end of file +RUN pip3 install .[testing] + +RUN python3 -m pytest --flake8 -s -vvv . \ No newline at end of file diff --git a/docker/python38.docker b/docker/python38.docker index 6221771..7e104a9 100644 --- a/docker/python38.docker +++ b/docker/python38.docker @@ -17,3 +17,5 @@ WORKDIR /code # Install base + testing packages RUN pip3 install .[testing] + +RUN python3 -m pytest --flake8 -s -vvv . \ No newline at end of file diff --git a/setup.py b/setup.py index 4d95568..5312bff 100644 --- a/setup.py +++ b/setup.py @@ -9,14 +9,14 @@ readme = readme_file.read() requirements = [ - 'dask[array] == 2021.2.0', - 'donfig >= 0.4.0', - 'numpy >= 1.14.0, <= 1.19.5', # breakage in newer numpy + numerical errors - 'numba >= 0.43.0', - 'scipy >= 1.2.0', - 'threadpoolctl >= 1.0.0', - 'dask-ms == 0.2.6', - 'zarr >= 2.3.1' + 'dask[array] >= 2021.2.0, <=2024.3.1', + 'donfig >= 0.4.0, <0.8.2', + 'numpy >= 1.14.0, <= 1.22.0', # breakage in newer numpy + numerical errors + 'numba >= 0.43.0, <= 0.59.1', + 'scipy >= 1.2.0, <=1.12.0', + 'threadpoolctl >= 1.0.0, <=3.4.0', + 'dask-ms >= 0.2.6, <=0.2.20', + 'zarr >= 2.3.1, <=2.17.1' ] extras_require = {'testing': ['pytest', diff --git a/tricolour/apps/tricolour/app.py b/tricolour/apps/tricolour/app.py index e420a7f..28de366 100644 --- a/tricolour/apps/tricolour/app.py +++ b/tricolour/apps/tricolour/app.py @@ -386,7 +386,7 @@ def _main(args): # Generate unflagged defaults if we should ignore existing flags # otherwise take flags from the dataset if args.ignore_flags is True: - flags = da.full_like(vis, False, dtype=np.bool) + flags = da.full_like(vis, False, dtype=bool) log.critical("Completely ignoring measurement set " "flags as per '-if' request. " "Strategy WILL NOT or with original flags, even if " diff --git a/tricolour/mask.py b/tricolour/mask.py index da1ab02..27273b1 100644 --- a/tricolour/mask.py +++ b/tricolour/mask.py @@ -60,7 +60,7 @@ def load_mask(filename, dilate): # Load mask mask = np.load(filename) - if mask.dtype[0] != np.bool or mask.dtype[1] != np.float64: + if mask.dtype[0] != bool or mask.dtype[1] != np.float64: raise ValueError("Mask %s is not a valid static mask " "with labelled channel axis " "[dtype == (bool, float64)]" % filename) diff --git a/tricolour/packing.py b/tricolour/packing.py index 6b009b6..11d25de 100644 --- a/tricolour/packing.py +++ b/tricolour/packing.py @@ -90,7 +90,7 @@ def _create_window_dask(name, ntime, nchan, nbl, ncorr, token, graph = HighLevelGraph.from_collections(collection_name, layers, ()) chunks = ((0,),) # One chunk containing single zarr array object - return da.Array(graph, collection_name, chunks, dtype=np.object) + return da.Array(graph, collection_name, chunks, dtype=object) def create_vis_windows(ntime, nchan, nbl, ncorr, token, @@ -343,7 +343,7 @@ def pack_data(time_inv, ubl, flags, ("row", "chan", "corr"), vis_win_obj, ("windim",), flag_win_obj, ("windim",), - dtype=np.bool) + dtype=bool) # Expose visibility data at it's full resolution vis_windows = da.blockwise(_packed_windows, _WINDOW_SCHEMA, diff --git a/tricolour/tests/test_flagging_additional.py b/tricolour/tests/test_flagging_additional.py index 53303f9..3680a0e 100644 --- a/tricolour/tests/test_flagging_additional.py +++ b/tricolour/tests/test_flagging_additional.py @@ -131,7 +131,7 @@ def test_apply_static_mask(wsrt_ants, unique_baselines, accumulation_mode="or") # Check that first mask's flags are applied - chan_sel = np.zeros(chan_freqs.shape[0], dtype=np.bool) + chan_sel = np.zeros(chan_freqs.shape[0], dtype=bool) chan_sel[[2, 10]] = True assert np.all(new_flags[:, :, :, chan_sel] == 1) @@ -144,7 +144,7 @@ def test_apply_static_mask(wsrt_ants, unique_baselines, accumulation_mode="or") # Check that both mask's flags have been applied - chan_sel = np.zeros(chan_freqs.shape[0], dtype=np.bool) + chan_sel = np.zeros(chan_freqs.shape[0], dtype=bool) chan_sel[[2, 10, 4, 11, 5]] = True assert np.all(new_flags[:, :, :, chan_sel] == 1) @@ -157,7 +157,7 @@ def test_apply_static_mask(wsrt_ants, unique_baselines, accumulation_mode="override") # Check that only last mask's flags applied - chan_sel = np.zeros(chan_freqs.shape[0], dtype=np.bool) + chan_sel = np.zeros(chan_freqs.shape[0], dtype=bool) chan_sel[[4, 11, 5]] = True assert np.all(new_flags[:, :, :, chan_sel] == 1) @@ -176,7 +176,7 @@ def test_apply_static_mask(wsrt_ants, unique_baselines, uvrange=uvrange) # Check that both mask's flags have been applied - chan_sel = np.zeros(chan_freqs.shape[0], dtype=np.bool) + chan_sel = np.zeros(chan_freqs.shape[0], dtype=bool) chan_sel[[2, 10, 4, 11, 5]] = True # Select baselines based on the uvrange diff --git a/tricolour/window_statistics.py b/tricolour/window_statistics.py index 6057e70..20d1843 100644 --- a/tricolour/window_statistics.py +++ b/tricolour/window_statistics.py @@ -123,7 +123,7 @@ def window_stats(flag_window, ubls, chan_freqs, field_name, None, ddid, None, nchanbins, None, - meta=np.empty((0,), dtype=np.object)) + meta=np.empty((0,), dtype=object)) # Create an empty stats object if the user hasn't supplied one if prev_stats is None: @@ -131,13 +131,13 @@ def _window_stat_creator(): return WindowStatistics(nchanbins) prev_stats = da.blockwise(_window_stat_creator, (), - meta=np.empty((), dtype=np.object)) + meta=np.empty((), dtype=object)) # Combine per-baseline stats into a single stats object return da.blockwise(_combine_baseline_window_stats, (), stats, ("bl",), prev_stats, (), - meta=np.empty((), dtype=np.object)) + meta=np.empty((), dtype=object)) def _combine_window_stats(*args): @@ -167,7 +167,7 @@ def combine_window_stats(window_stats): args = (v for ws in window_stats for v in (ws, ())) return da.blockwise(_combine_window_stats, (), - *args, dtype=np.object) + *args, dtype=object) class WindowStatistics(object):