MITgcm / xmitgcm

Read MITgcm mds binary files into xarray
http://xmitgcm.readthedocs.io
MIT License
56 stars 65 forks source link

Edit README to update version requirement for xarray #293

Closed fluidnumerics-joe closed 2 years ago

fluidnumerics-joe commented 2 years ago
rabernat commented 2 years ago

Fantastic, thank you!

rabernat commented 2 years ago

I believe the test failures are unrelated to this PR.

@fraserwg, any insight into this test error?

        with pytest.warns(None) as record:
            llc_global_model.get_dataset(varnames=['Eta'], read_grid=False)
>       assert not record
E       assert not WarningsChecker(record=True)
fraserwg commented 2 years ago

It seems to be being caused by a deprecation warning being raised by distutils and xarray -- see below for the full warnings summary.

=============================== warnings summary ===============================
../../opt/miniconda3/envs/py39/lib/python3.9/site-packages/xarray/core/pycompat.py:22
  /Users/goldsworth/opt/miniconda3/envs/py39/lib/python3.9/site-packages/xarray/core/pycompat.py:22: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
    duck_array_version = LooseVersion(duck_array_module.__version__)

../../opt/miniconda3/envs/py39/lib/python3.9/site-packages/xarray/core/pycompat.py:37
../../opt/miniconda3/envs/py39/lib/python3.9/site-packages/xarray/core/pycompat.py:37
  /Users/goldsworth/opt/miniconda3/envs/py39/lib/python3.9/site-packages/xarray/core/pycompat.py:37: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
    duck_array_version = LooseVersion("0.0.0")

../../opt/miniconda3/envs/py39/lib/python3.9/site-packages/setuptools/_distutils/version.py:351
../../opt/miniconda3/envs/py39/lib/python3.9/site-packages/setuptools/_distutils/version.py:351
../../opt/miniconda3/envs/py39/lib/python3.9/site-packages/setuptools/_distutils/version.py:351
../../opt/miniconda3/envs/py39/lib/python3.9/site-packages/setuptools/_distutils/version.py:351
  /Users/goldsworth/opt/miniconda3/envs/py39/lib/python3.9/site-packages/setuptools/_distutils/version.py:351: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
    other = LooseVersion(other)

../../opt/miniconda3/envs/py39/lib/python3.9/site-packages/xarray/core/npcompat.py:82
  /Users/goldsworth/opt/miniconda3/envs/py39/lib/python3.9/site-packages/xarray/core/npcompat.py:82: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
    if LooseVersion(np.__version__) >= "1.20.0":

../../opt/miniconda3/envs/py39/lib/python3.9/site-packages/xarray/core/pdcompat.py:45
  /Users/goldsworth/opt/miniconda3/envs/py39/lib/python3.9/site-packages/xarray/core/pdcompat.py:45: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
    if LooseVersion(pd.__version__) < "0.25.0":

I've had a play and can get around this by adding a filter to the test_aste_portal_iterations and test_ecco_portal_iterations functions, which ignores deprecation warnings. This can be done by replacing the lines

    with pytest.warns(None) as record:
        iters = aste_model.iters[:2]
        aste_model.get_dataset(varnames=['ETAN'], iters=iters, read_grid=False)
    assert not record

with something like

    with warnings.catch_warnings(record=True) as record:
        # Make sure only deprecation warnings are triggered
        warnings.simplefilter("ignore", category=DeprecationWarning)
        iters = aste_model.iters[:2]
        aste_model.get_dataset(varnames=['ETAN'], iters=iters, read_grid=False)
    assert not record

in both the Ecco and Aste tests (making appropriate changes for the Ecco test).

fraserwg commented 2 years ago

I will add these changes as a pull request now