diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 52938203..fc0fe069 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,7 +11,7 @@ minimum_pre_commit_version: 1.21.0 repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v6.0.0 hooks: # Prevent giant files from being committed. - id: check-added-large-files @@ -27,34 +27,34 @@ repos: - id: no-commit-to-branch - repo: https://github.com/codespell-project/codespell - rev: "v2.2.2" + rev: "v2.4.1" hooks: - id: codespell types_or: [asciidoc, python, markdown, rst] additional_dependencies: [tomli] - repo: https://github.com/psf/black - rev: 23.3.0 + rev: 25.1.0 hooks: - id: black pass_filenames: false args: [--config=./pyproject.toml, .] - repo: https://github.com/PyCQA/flake8 - rev: 7.0.0 + rev: 7.3.0 hooks: - id: flake8 types: [file, python] - repo: https://github.com/pycqa/isort - rev: 5.12.0 + rev: 6.0.1 hooks: - id: isort types: [file, python] args: [--filter-files, --skip=./lib/ncdata/__init__.py] - repo: https://github.com/asottile/blacken-docs - rev: 1.13.0 + rev: 1.19.1 hooks: - id: blacken-docs types: [file, rst] diff --git a/lib/ncdata/__init__.py b/lib/ncdata/__init__.py index a12b6a56..02d25dd2 100644 --- a/lib/ncdata/__init__.py +++ b/lib/ncdata/__init__.py @@ -8,6 +8,7 @@ thus acting as an efficient exchange channel between any of those forms. """ + # N.B. this file excluded from isort, as we want a specific class order for the docs from ._core import NameMap, NcAttribute, NcData, NcDimension, NcVariable diff --git a/lib/ncdata/_core.py b/lib/ncdata/_core.py index 2beecccb..56807e68 100644 --- a/lib/ncdata/_core.py +++ b/lib/ncdata/_core.py @@ -11,6 +11,7 @@ of dimensions referenced by variables. """ + from functools import wraps from typing import ( Any, @@ -377,7 +378,7 @@ def _addlines_indent(text, indent=""): # common indent spacing -_indent = " " * 4 +_STANDARD_INDENT = " " * 4 class NcData(_AttributeAccessMixin): @@ -420,7 +421,7 @@ def _print_content(self) -> str: class, so it isn't technically an abstract method). This "NcData._print_content()" is called recursively for groups. """ - global _indent + global _STANDARD_INDENT # noqa: F824 # Define a header line (always a separate line). noname = "<'no-name'>" lines = [f" str: if len(els): if eltype == "attributes": # Attributes a bit different: #1 add 'globol' to section title. - lines += [f"{_indent}global attributes:"] + lines += [f"{_STANDARD_INDENT}global attributes:"] # NOTE: #2 show like variable attributes, but *no parent name*. attrs_lines = [ f":{attr._print_content()}" for attr in self.attributes.values() ] lines += _addlines_indent( - "\n".join(attrs_lines), _indent * 2 + "\n".join(attrs_lines), _STANDARD_INDENT * 2 ) else: - lines += [f"{_indent}{eltype}:"] + lines += [f"{_STANDARD_INDENT}{eltype}:"] for el in els.values(): lines += _addlines_indent( - el._print_content(), _indent * 2 + el._print_content(), _STANDARD_INDENT * 2 ) lines.append("") @@ -589,7 +590,7 @@ def __init__( # return self.data.shape def _print_content(self): - global _indent + global _STANDARD_INDENT # noqa: F824 dimstr = ", ".join(self.dimensions) typestr = str(self.dtype) if self.dtype else "" hdr = f""] return "\n".join(lines) diff --git a/lib/ncdata/dataset_like.py b/lib/ncdata/dataset_like.py index cdd9e28b..3702f95f 100644 --- a/lib/ncdata/dataset_like.py +++ b/lib/ncdata/dataset_like.py @@ -15,7 +15,7 @@ :class:`~ncdata.NcVariable` objects, but emulate the access APIs of :class:`netCDF4.Dataset` :class:`netCDF4.Dimension` and :class:`netCDF4.Variable`. -This is provided primarily to support a re-use of the :mod:`iris.fileformats.netcdf` +This is provided primarily to support the reuse of the :mod:`iris.fileformats.netcdf` file format load + save, to convert cubes to + from ncdata objects (and hence, especially, to convert Iris :class:`~iris.cube.Cube`\s to + from an Xarray :class:`~xarray.Dataset` @@ -29,6 +29,7 @@ complete, so this module may need to be extended, in future, to support other such uses. """ + from typing import Any, Dict, List import dask.array as da diff --git a/lib/ncdata/iris.py b/lib/ncdata/iris.py index 536a8cdf..f20bbd32 100644 --- a/lib/ncdata/iris.py +++ b/lib/ncdata/iris.py @@ -4,6 +4,7 @@ Convert :class:`~ncdata.NcData`\s to and from Iris :class:`~iris.cube.Cube`\s. """ + from typing import Any, AnyStr, Dict, Iterable, List, Union # diff --git a/lib/ncdata/iris_xarray.py b/lib/ncdata/iris_xarray.py index 0a6891e6..41982005 100644 --- a/lib/ncdata/iris_xarray.py +++ b/lib/ncdata/iris_xarray.py @@ -9,6 +9,7 @@ the relevant load/save routines. """ + import xarray from iris.cube import CubeList diff --git a/lib/ncdata/netcdf4.py b/lib/ncdata/netcdf4.py index 1f8c419b..b70a9288 100644 --- a/lib/ncdata/netcdf4.py +++ b/lib/ncdata/netcdf4.py @@ -4,6 +4,7 @@ Converts :class:`ncdata.NcData` to and from :class:`netCDF4.Dataset` objects. """ + from pathlib import Path from threading import Lock from typing import Dict, Optional, Union diff --git a/lib/ncdata/threadlock_sharing.py b/lib/ncdata/threadlock_sharing.py index 51ef2374..a245fc3b 100644 --- a/lib/ncdata/threadlock_sharing.py +++ b/lib/ncdata/threadlock_sharing.py @@ -49,6 +49,7 @@ thread-safe. So probably can only be applied at the outer level of an operation. """ + from contextlib import contextmanager from unittest import mock diff --git a/lib/ncdata/utils/__init__.py b/lib/ncdata/utils/__init__.py index 508abac8..c2e0b445 100644 --- a/lib/ncdata/utils/__init__.py +++ b/lib/ncdata/utils/__init__.py @@ -1,4 +1,5 @@ """General user utility functions.""" + from ._compare_nc_datasets import dataset_differences, variable_differences from ._copy import ncdata_copy from ._save_errors import save_errors diff --git a/lib/ncdata/utils/_compare_nc_datasets.py b/lib/ncdata/utils/_compare_nc_datasets.py index 8c7053db..b9892a39 100644 --- a/lib/ncdata/utils/_compare_nc_datasets.py +++ b/lib/ncdata/utils/_compare_nc_datasets.py @@ -14,7 +14,6 @@ import netCDF4 import netCDF4 as nc import numpy as np - from ncdata import NcData, NcVariable diff --git a/lib/ncdata/utils/_save_errors.py b/lib/ncdata/utils/_save_errors.py index aa2e7228..b6b07138 100644 --- a/lib/ncdata/utils/_save_errors.py +++ b/lib/ncdata/utils/_save_errors.py @@ -1,9 +1,9 @@ """User utility routines for ncdata.""" + from typing import Dict, List, Union import netCDF4 as nc import numpy as np - from ncdata import NcData, NcVariable diff --git a/tests/__init__.py b/tests/__init__.py index 349186b4..ac3feabb 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,4 +1,5 @@ """Tests for :mod:`ncdata`.""" + from pathlib import Path testdata_dir = Path(__file__).parent / "testdata" diff --git a/tests/data_testcase_schemas.py b/tests/data_testcase_schemas.py index 8ccb8af7..7622da3b 100644 --- a/tests/data_testcase_schemas.py +++ b/tests/data_testcase_schemas.py @@ -9,6 +9,7 @@ specs. This enables us to perform various translation tests on standard testfiles from the Iris and Xarray test suites. """ + from dataclasses import dataclass from pathlib import Path from typing import Dict, Union @@ -298,7 +299,7 @@ def make_testcase_dataset(filepath, spec): } # Define a sequence of standard testfile specs, with suitable param-names. -_Standard_Testcases: Dict[str, Union[Path, dict]] = {} +_STANDARD_TESTCASES: Dict[str, Union[Path, dict]] = {} # A decorator for spec-generating routines. @@ -311,8 +312,7 @@ def standard_testcases_func(func): A decorator for spec-generating routines. It automatically **calls** the wrapped function, and adds the results into the global "_Standard_Testcases" dictionary. """ - global _Standard_Testcases - _Standard_Testcases.update(func()) + _STANDARD_TESTCASES.update(func()) return func @@ -473,7 +473,7 @@ class TestcaseSchema: filepath: Path = None -@pytest.fixture(params=list(_Standard_Testcases.keys())) +@pytest.fixture(params=list(_STANDARD_TESTCASES.keys())) def standard_testcase(request, session_testdir): """ Provide a set of "standard" dataset testcases. @@ -489,7 +489,7 @@ def standard_testcase(request, session_testdir): For those not based on a spec, 'spec' is None. """ name = request.param - spec = _Standard_Testcases[name] + spec = _STANDARD_TESTCASES[name] if isinstance(spec, dict): # Build a temporary testfile from the spec, and pass that out. filepath = session_testdir / f"sampledata_{name}.nc" diff --git a/tests/integration/equivalence_testing_utils.py b/tests/integration/equivalence_testing_utils.py index 8693bc6d..521a2a52 100644 --- a/tests/integration/equivalence_testing_utils.py +++ b/tests/integration/equivalence_testing_utils.py @@ -4,12 +4,12 @@ Used by routines in tests/integration which attempt to show that conversions between ncdata and other types of data preserve information. """ + import dask.array as da +import iris.mesh import numpy as np import pytest -import iris.mesh - def cubes_equal__corrected(c1, c2): """ @@ -127,7 +127,6 @@ def adjust_chunks(): """ import dask.config as dcfg - global _USE_TINY_CHUNKS, _CHUNKSIZE_SPEC if _USE_TINY_CHUNKS: with dcfg.set({"array.chunk-size": _CHUNKSIZE_SPEC}): yield diff --git a/tests/integration/example_scripts/ex_dataset_print.py b/tests/integration/example_scripts/ex_dataset_print.py index 5f3251fb..63bda231 100644 --- a/tests/integration/example_scripts/ex_dataset_print.py +++ b/tests/integration/example_scripts/ex_dataset_print.py @@ -1,8 +1,9 @@ """Temporary integrational proof-of-concept example for dataset printout.""" -import iris +import iris import ncdata.iris as nci from ncdata import NcData, NcDimension, NcVariable + from tests import testdata_dir diff --git a/tests/integration/example_scripts/ex_iris_saveto_ncdata.py b/tests/integration/example_scripts/ex_iris_saveto_ncdata.py index c4a3c14b..f9261910 100644 --- a/tests/integration/example_scripts/ex_iris_saveto_ncdata.py +++ b/tests/integration/example_scripts/ex_iris_saveto_ncdata.py @@ -3,9 +3,10 @@ Check that conversion succeeds and print the resulting dataset. """ -import iris +import iris from ncdata.iris import from_iris + from tests import testdata_dir diff --git a/tests/integration/example_scripts/ex_iris_xarray_conversion.py b/tests/integration/example_scripts/ex_iris_xarray_conversion.py index 018c1548..7ef473c4 100644 --- a/tests/integration/example_scripts/ex_iris_xarray_conversion.py +++ b/tests/integration/example_scripts/ex_iris_xarray_conversion.py @@ -3,12 +3,13 @@ Showing conversion from Xarray to Iris, and back again. """ + import dask.array as da import iris import numpy as np import xarray as xr - from ncdata.iris_xarray import cubes_from_xarray, cubes_to_xarray + from tests import testdata_dir diff --git a/tests/integration/example_scripts/ex_ncdata_netcdf_conversion.py b/tests/integration/example_scripts/ex_ncdata_netcdf_conversion.py index 7f2e614e..bb97f154 100644 --- a/tests/integration/example_scripts/ex_ncdata_netcdf_conversion.py +++ b/tests/integration/example_scripts/ex_ncdata_netcdf_conversion.py @@ -3,16 +3,17 @@ Showing loading and saving ncdata to/from netcdf files. """ + import tempfile from pathlib import Path from shutil import rmtree import netCDF4 as nc import numpy as np - from ncdata import NcData, NcDimension, NcVariable from ncdata.netcdf4 import from_nc4, to_nc4 from ncdata.utils import dataset_differences + from tests import testdata_dir diff --git a/tests/integration/test_iris_load_and_save_equivalence.py b/tests/integration/test_iris_load_and_save_equivalence.py index 7ad3eb95..1d875dac 100644 --- a/tests/integration/test_iris_load_and_save_equivalence.py +++ b/tests/integration/test_iris_load_and_save_equivalence.py @@ -5,13 +5,14 @@ (1) check equivalence of cubes : iris.load(file) VS iris.load(ncdata(file)) (2) check equivalence of files : iris -> file VS iris->ncdata->file """ + from subprocess import check_output import iris import pytest - from ncdata.netcdf4 import from_nc4, to_nc4 from ncdata.utils import dataset_differences + from tests.data_testcase_schemas import session_testdir, standard_testcase from tests.integration.equivalence_testing_utils import ( adjust_chunks, diff --git a/tests/integration/test_iris_xarray_roundtrips.py b/tests/integration/test_iris_xarray_roundtrips.py index 9ece022b..b9577078 100644 --- a/tests/integration/test_iris_xarray_roundtrips.py +++ b/tests/integration/test_iris_xarray_roundtrips.py @@ -5,6 +5,7 @@ (1) check equivalence of cubes : iris.load(file) VS iris.load(ncdata(file)) (2) check equivalence of files : iris -> file VS iris->ncdata->file """ + from subprocess import check_output import dask.array as da @@ -13,13 +14,13 @@ import numpy as np import pytest import xarray - from ncdata.iris import from_iris from ncdata.iris_xarray import cubes_to_xarray from ncdata.netcdf4 import from_nc4 from ncdata.threadlock_sharing import lockshare_context from ncdata.utils import dataset_differences from ncdata.xarray import from_xarray + from tests.data_testcase_schemas import ( BAD_LOADSAVE_TESTCASES, session_testdir, diff --git a/tests/integration/test_netcdf_roundtrips.py b/tests/integration/test_netcdf_roundtrips.py index 6fe635d5..d5e136b2 100644 --- a/tests/integration/test_netcdf_roundtrips.py +++ b/tests/integration/test_netcdf_roundtrips.py @@ -1,10 +1,12 @@ """ Test ncdata.netcdf by checking load-save roundtrips for standard testcases. """ + from subprocess import check_output from ncdata.netcdf4 import from_nc4, to_nc4 from ncdata.utils import dataset_differences + from tests.data_testcase_schemas import session_testdir, standard_testcase # Avoid complaints that the imported fixtures are "unused" diff --git a/tests/integration/test_xarray_load_and_save_equivalence.py b/tests/integration/test_xarray_load_and_save_equivalence.py index d7fb3164..a9148133 100644 --- a/tests/integration/test_xarray_load_and_save_equivalence.py +++ b/tests/integration/test_xarray_load_and_save_equivalence.py @@ -5,13 +5,14 @@ (1) check equivalence of cubes : xarray.load(file) VS xarray.load(ncdata(file)) (2) check equivalence of files : xarray -> file VS xarray->ncdata->file """ + import pytest import xarray - from ncdata.netcdf4 import from_nc4, to_nc4 from ncdata.threadlock_sharing import lockshare_context from ncdata.utils import dataset_differences from ncdata.xarray import from_xarray, to_xarray + from tests.data_testcase_schemas import ( BAD_LOADSAVE_TESTCASES, session_testdir, diff --git a/tests/test_samplecode_cdlgen_comparablecdl.py b/tests/test_samplecode_cdlgen_comparablecdl.py index 558774fb..2245cffb 100644 --- a/tests/test_samplecode_cdlgen_comparablecdl.py +++ b/tests/test_samplecode_cdlgen_comparablecdl.py @@ -5,6 +5,7 @@ The status and usage of this are yet to be determined. """ + import os import subprocess from pathlib import Path diff --git a/tests/unit/core/test_AttributeAccessMixin.py b/tests/unit/core/test_AttributeAccessMixin.py index 803b6b15..ad484509 100644 --- a/tests/unit/core/test_AttributeAccessMixin.py +++ b/tests/unit/core/test_AttributeAccessMixin.py @@ -4,9 +4,9 @@ Note: actually tested via the inheriting classes NcData and NcVariable. All tests are run for both of those. """ + import numpy as np import pytest - from ncdata import NcData, NcVariable diff --git a/tests/unit/core/test_AttrvalsDict.py b/tests/unit/core/test_AttrvalsDict.py index d15ad262..ffebe81f 100644 --- a/tests/unit/core/test_AttrvalsDict.py +++ b/tests/unit/core/test_AttrvalsDict.py @@ -1,9 +1,9 @@ """Tests for class :class:`ncdata._core.AttrvalsDict`.""" + from copy import deepcopy import numpy as np import pytest - from ncdata import NcAttribute, NcVariable diff --git a/tests/unit/core/test_NameMap.py b/tests/unit/core/test_NameMap.py index 72650ce5..956f6d82 100644 --- a/tests/unit/core/test_NameMap.py +++ b/tests/unit/core/test_NameMap.py @@ -1,10 +1,10 @@ """ Tests for class :class:`ncdata.NameMap`. """ + from copy import deepcopy import pytest - from ncdata import NameMap, NcAttribute diff --git a/tests/unit/core/test_NcAttribute.py b/tests/unit/core/test_NcAttribute.py index 26ef2e10..9e3cf1c0 100644 --- a/tests/unit/core/test_NcAttribute.py +++ b/tests/unit/core/test_NcAttribute.py @@ -3,9 +3,9 @@ Very simple for now, but we may add more behaviour in future. """ + import numpy as np import pytest - from ncdata import NcAttribute # Support for building testcases diff --git a/tests/unit/core/test_NcData.py b/tests/unit/core/test_NcData.py index eaceb02f..e4fb0ba2 100644 --- a/tests/unit/core/test_NcData.py +++ b/tests/unit/core/test_NcData.py @@ -2,6 +2,7 @@ There is almost no behaviour, but we can test some constructor usages. """ + from ncdata import NcData, NcDimension, NcVariable diff --git a/tests/unit/core/test_NcDimension.py b/tests/unit/core/test_NcDimension.py index 6af29e79..6e17ea4f 100644 --- a/tests/unit/core/test_NcDimension.py +++ b/tests/unit/core/test_NcDimension.py @@ -1,7 +1,7 @@ """Tests for class :class:`ncdata.NcDimension`.""" + import numpy as np import pytest - from ncdata import NcDimension diff --git a/tests/unit/core/test_NcVariable.py b/tests/unit/core/test_NcVariable.py index 7376d183..3965037a 100644 --- a/tests/unit/core/test_NcVariable.py +++ b/tests/unit/core/test_NcVariable.py @@ -3,10 +3,10 @@ There is almost no actual behaviour, but we can test some constructor behaviours, such as valid calling options and possibilities for data and dtype. """ + import dask.array as da import numpy as np import pytest - from ncdata import NcVariable from ncdata.utils import variable_differences diff --git a/tests/unit/iris/test_from_iris.py b/tests/unit/iris/test_from_iris.py index 8ce3555a..937cccc5 100644 --- a/tests/unit/iris/test_from_iris.py +++ b/tests/unit/iris/test_from_iris.py @@ -8,6 +8,7 @@ This module only tests some specific API and behaviours of the top-level function, not covered by the generic 'roundtrip' testcases. """ + from unittest.mock import patch import dask.array as da @@ -15,8 +16,8 @@ import pytest from iris.coords import DimCoord from iris.cube import Cube - from ncdata.iris import from_iris + from tests import MonitoredArray diff --git a/tests/unit/iris/test_to_iris.py b/tests/unit/iris/test_to_iris.py index 8170e804..5ed0e700 100644 --- a/tests/unit/iris/test_to_iris.py +++ b/tests/unit/iris/test_to_iris.py @@ -8,13 +8,14 @@ This module only tests some specific API and behaviours of the top-level function, not covered by the generic 'roundtrip' testcases. """ + import dask.array as da import numpy as np from iris._constraints import NameConstraint from iris.cube import CubeList - from ncdata import NcData, NcDimension, NcVariable from ncdata.iris import to_iris + from tests import MonitoredArray diff --git a/tests/unit/netcdf/test_from_nc4.py b/tests/unit/netcdf/test_from_nc4.py index ea612912..8270c562 100644 --- a/tests/unit/netcdf/test_from_nc4.py +++ b/tests/unit/netcdf/test_from_nc4.py @@ -8,15 +8,16 @@ This module only tests some specific API of the top-level access function, not covered by the generic 'roundtrip' testcases. """ + from pathlib import Path import netCDF4 as nc import numpy as np import pytest - from ncdata import NcData, NcDimension, NcVariable from ncdata.netcdf4 import from_nc4 from ncdata.utils import dataset_differences + from tests.data_testcase_schemas import make_testcase_dataset diff --git a/tests/unit/netcdf/test_to_nc4.py b/tests/unit/netcdf/test_to_nc4.py index 8f2934a2..c5e3bd9d 100644 --- a/tests/unit/netcdf/test_to_nc4.py +++ b/tests/unit/netcdf/test_to_nc4.py @@ -8,16 +8,17 @@ This module tests specific API properties of the top-level access function not covered by the generic 'roundtrip' testcases. This includes error cases. """ + from pathlib import Path from typing import List import netCDF4 as nc import numpy as np import pytest - from ncdata import NcData from ncdata.netcdf4 import from_nc4, to_nc4 from ncdata.utils import dataset_differences + from tests.data_testcase_schemas import make_testcase_dataset diff --git a/tests/unit/utils/compare_nc_datasets/test_dataset_differences__additional.py b/tests/unit/utils/compare_nc_datasets/test_dataset_differences__additional.py index 373c62d8..6c678526 100644 --- a/tests/unit/utils/compare_nc_datasets/test_dataset_differences__additional.py +++ b/tests/unit/utils/compare_nc_datasets/test_dataset_differences__additional.py @@ -6,18 +6,19 @@ * ( ALSO: "mainfunctions" (q.v.) cover the core functionality -- which elements are compared and what errors this constructs. ) """ + import shutil import warnings import netCDF4 as nc import numpy as np import pytest - from ncdata.utils._compare_nc_datasets import ( _attribute_differences, _namelist_differences, dataset_differences, ) + from tests.test_samplecode_cdlgen_comparablecdl import ncgen_from_cdl _simple_cdl = """ diff --git a/tests/unit/utils/compare_nc_datasets/test_dataset_differences__mainfunctions.py b/tests/unit/utils/compare_nc_datasets/test_dataset_differences__mainfunctions.py index 4d3a3294..6549af77 100644 --- a/tests/unit/utils/compare_nc_datasets/test_dataset_differences__mainfunctions.py +++ b/tests/unit/utils/compare_nc_datasets/test_dataset_differences__mainfunctions.py @@ -6,9 +6,9 @@ * ( ALSO: "additional" tests (q.v.) cover subsidiary routines and the main API usage modes. ) """ + import numpy as np import pytest - from ncdata import NcAttribute, NcData, NcDimension, NcVariable from ncdata.utils import dataset_differences diff --git a/tests/unit/utils/compare_nc_datasets/test_variable_differences.py b/tests/unit/utils/compare_nc_datasets/test_variable_differences.py index 840d8ef8..ddb60110 100644 --- a/tests/unit/utils/compare_nc_datasets/test_variable_differences.py +++ b/tests/unit/utils/compare_nc_datasets/test_variable_differences.py @@ -1,7 +1,6 @@ import dask.array as da import numpy as np import pytest - from ncdata import NcVariable from ncdata.utils import variable_differences diff --git a/tests/unit/utils/test_ncdata_copy.py b/tests/unit/utils/test_ncdata_copy.py index 17a0cc6e..6a49bd83 100644 --- a/tests/unit/utils/test_ncdata_copy.py +++ b/tests/unit/utils/test_ncdata_copy.py @@ -2,9 +2,9 @@ This is generic utility function version of the copy operation. """ + import numpy as np import pytest - from ncdata import NameMap, NcAttribute, NcData, NcDimension, NcVariable from ncdata.utils import dataset_differences, ncdata_copy diff --git a/tests/unit/utils/test_save_errors.py b/tests/unit/utils/test_save_errors.py index f9ad4c92..e4901bff 100644 --- a/tests/unit/utils/test_save_errors.py +++ b/tests/unit/utils/test_save_errors.py @@ -1,13 +1,14 @@ """ Tests for :mod:`ncdata.utils.save_errors` """ + import re import numpy as np import pytest - from ncdata import NcData, NcDimension, NcVariable from ncdata.utils import save_errors + from tests.unit.core.test_NcAttribute import attrvalue, datatype, structuretype _ = datatype, structuretype diff --git a/tests/unit/xarray/test_from_xarray.py b/tests/unit/xarray/test_from_xarray.py index 587c1983..2807067e 100644 --- a/tests/unit/xarray/test_from_xarray.py +++ b/tests/unit/xarray/test_from_xarray.py @@ -8,14 +8,15 @@ This module only tests some specific API and behaviours of the top-level function, not covered by the generic 'roundtrip' testcases. """ + from pathlib import Path import dask.array as da import numpy as np import pytest import xarray as xr - from ncdata.xarray import from_xarray + from tests import MonitoredArray from tests.data_testcase_schemas import make_testcase_dataset diff --git a/tests/unit/xarray/test_to_xarray.py b/tests/unit/xarray/test_to_xarray.py index f2e777f4..3420e52d 100644 --- a/tests/unit/xarray/test_to_xarray.py +++ b/tests/unit/xarray/test_to_xarray.py @@ -8,12 +8,13 @@ This module only tests some specific API and behaviours of the top-level function, not covered by the generic 'roundtrip' testcases. """ + import dask.array as da import numpy as np import pytest - from ncdata import NcData, NcDimension, NcVariable from ncdata.xarray import to_xarray + from tests import MonitoredArray