Skip to content

Unpin dask 2 #6342

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 16 commits into from
Feb 28, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs/src/whatsnew/latest.rst
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,11 @@ This document explains the changes made to Iris for this release
#. `@stephenworsley`_ dropped support for ``py310`` and adopted support for ``py313``
as per the `SPEC 0`_ schedule. (:pull:`6195`)

#. `@stephenworsley`_ and `@valeriupredoi`_ removed the pin from dask since newer
versions of dask fix the bug casuing the pin. Introduced a minimum pin (2025.1.0)
to avoid this bug. (:pull:`6342`)


📚 Documentation
================

Expand Down Expand Up @@ -137,6 +142,7 @@ This document explains the changes made to Iris for this release
.. _@fnattino: https://github.com/fnattino
.. _@jrackham-mo: https://github.com/jrackham-mo
.. _@stefsmeets: https://github.com/stefsmeets
.. _@valeriupredoi: https://github.com/valeriupredoi

.. comment
Whatsnew resources in alphabetical order:
Expand Down
4 changes: 2 additions & 2 deletions lib/iris/common/resolve.py
Original file line number Diff line number Diff line change
Expand Up @@ -2592,9 +2592,9 @@ def shape(self):
source 'Data from Met Office Unified Model 6.05'
>>> Resolve().shape is None
True
>>> Resolve(cube1, cube2).shape # doctest: +SKIP
>>> Resolve(cube1, cube2).shape
(240, 37, 49)
>>> Resolve(cube2, cube1).shape # doctest: +SKIP
>>> Resolve(cube2, cube1).shape
(240, 37, 49)

""" # noqa: D214, D406, D407, D410, D411
Expand Down
1 change: 1 addition & 0 deletions lib/iris/tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@

#: Basepath for test results.
_RESULT_PATH = os.path.join(os.path.dirname(__file__), "results")
MIN_PICKLE_PROTOCOL = 4

if "--data-files-used" in sys.argv:
sys.argv.remove("--data-files-used")
Expand Down
63 changes: 29 additions & 34 deletions lib/iris/tests/integration/test_pickle.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,52 +7,47 @@
# Import iris.tests first so that some things can be initialised before
# importing anything else.
import iris.tests as tests # isort:skip

import pickle

import iris

import pytest

class Common:
def pickle_cube(self, protocol):
# Ensure that data proxies are pickleable.
cube = iris.load(self.path)[0]
with self.temp_filename(".pkl") as filename:
with open(filename, "wb") as f:
pickle.dump(cube, f, protocol)
with open(filename, "rb") as f:
ncube = pickle.load(f)
self.assertEqual(ncube, cube)
import iris
from iris.tests import MIN_PICKLE_PROTOCOL

def test_protocol_0(self):
self.pickle_cube(0)
TESTED_PROTOCOLS = list(range(MIN_PICKLE_PROTOCOL, pickle.HIGHEST_PROTOCOL + 1))

def test_protocol_1(self):
self.pickle_cube(1)

def test_protocol_2(self):
self.pickle_cube(2)
def pickle_cube(path, protocol, filename):
# Ensure that data proxies are pickleable.
cube = iris.load(path)[0]
with open(filename, "wb") as f:
pickle.dump(cube, f, protocol)
with open(filename, "rb") as f:
ncube = pickle.load(f)
assert ncube == cube


@pytest.mark.parametrize("protocol", TESTED_PROTOCOLS)
@tests.skip_data
class test_netcdf(Common, tests.IrisTest):
def setUp(self):
self.path = tests.get_data_path(
("NetCDF", "global", "xyt", "SMALL_hires_wind_u_for_ipcc4.nc")
)
def test_netcdf(protocol, tmp_path):
path = tests.get_data_path(
("NetCDF", "global", "xyt", "SMALL_hires_wind_u_for_ipcc4.nc")
)
tmp_file = tmp_path / "netcdf.pkl"
pickle_cube(path, protocol, tmp_file)


@pytest.mark.parametrize("protocol", TESTED_PROTOCOLS)
@tests.skip_data
class test_pp(Common, tests.IrisTest):
def setUp(self):
self.path = tests.get_data_path(("PP", "aPPglob1", "global.pp"))
def test_pp(protocol, tmp_path):
path = tests.get_data_path(("PP", "aPPglob1", "global.pp"))
tmp_file = tmp_path / "pp.pkl"
pickle_cube(path, protocol, tmp_file)


@pytest.mark.parametrize("protocol", TESTED_PROTOCOLS)
@tests.skip_data
class test_ff(Common, tests.IrisTest):
def setUp(self):
self.path = tests.get_data_path(("FF", "n48_multi_field"))


if __name__ == "__main__":
tests.main()
def test_ff(protocol, tmp_path):
path = tests.get_data_path(("FF", "n48_multi_field"))
tmp_file = tmp_path / "ff.pkl"
pickle_cube(path, protocol, tmp_file)
4 changes: 2 additions & 2 deletions lib/iris/tests/test_pickling.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
# Import iris tests first so that some things can be initialised
# before importing anything else.
import iris.tests as tests # isort:skip

import io
import pickle

Expand All @@ -16,12 +15,13 @@

import iris
from iris._lazy_data import as_concrete_data, as_lazy_data
from iris.tests import MIN_PICKLE_PROTOCOL


class TestPickle(tests.IrisTest):
def pickle_then_unpickle(self, obj):
"""Returns a generator of ("pickle protocol number", object) tuples."""
for protocol in range(1 + pickle.HIGHEST_PROTOCOL):
for protocol in range(MIN_PICKLE_PROTOCOL, pickle.HIGHEST_PROTOCOL + 1):
bio = io.BytesIO()
pickle.dump(obj, bio, protocol)

Expand Down
4 changes: 2 additions & 2 deletions lib/iris/tests/unit/analysis/test_PERCENTILE.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ def test_default_kwargs_passed(self, mocked_mquantiles):
for key in ["alphap", "betap"]:
self.assertEqual(mocked_mquantiles.call_args.kwargs[key], 1)

@mock.patch("scipy.stats.mstats.mquantiles")
@mock.patch("scipy.stats.mstats.mquantiles", return_value=np.array([2, 4]))
def test_chosen_kwargs_passed(self, mocked_mquantiles):
data = np.arange(5)
percent = [42, 75]
Expand Down Expand Up @@ -356,7 +356,7 @@ def test_numpy_percentile_called(self, mocked_percentile):
# Check we have left "method" keyword to numpy's default.
self.assertNotIn("method", mocked_percentile.call_args.kwargs)

@mock.patch("numpy.percentile")
@mock.patch("numpy.percentile", return_value=np.array([2, 4]))
def test_chosen_method_kwarg_passed(self, mocked_percentile):
data = da.arange(5)
percent = [42, 75]
Expand Down
4 changes: 2 additions & 2 deletions lib/iris/tests/unit/fileformats/pp/test__interpret_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,9 @@ def test_landsea_unpacking_uses_dask(self):
# Get the 'main' calculation entry.
mask_toplev_item = lazy_mask_array.dask[mask_toplev_key]
# This should be a task (a simple fetch).
self.assertTrue(callable(mask_toplev_item[0]))
self.assertTrue(callable(mask_toplev_item))
# Get the key (name) of the array that it fetches.
mask_data_name = mask_toplev_item[1]
mask_data_name = mask_toplev_item.args[0].key

# Check that the item this refers to is a PPDataProxy.
self.assertIsInstance(lazy_mask_array.dask[mask_data_name], pp.PPDataProxy)
Expand Down
10 changes: 4 additions & 6 deletions requirements/locks/py311-linux-64.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Generated by conda-lock.
# platform: linux-64
# input_hash: 484c12b1591315f270b3e15b42ed2cba4c973b701897ae7eb79b8b9442d99a96
# input_hash: 0e2b46335d407c1dacba3b0965f0164093e232b456197e26651a7fd261b99f5b
@EXPLICIT
https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81
https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda#19f3a56f68d2fd06c516076bff482c52
Expand Down Expand Up @@ -268,9 +268,9 @@ https://conda.anaconda.org/conda-forge/linux-64/yarl-1.18.3-py311h2dc5d0c_1.cond
https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.11.13-py311h2dc5d0c_0.conda#0b7a6100e053342079b607bbfdaeaa2a
https://conda.anaconda.org/conda-forge/noarch/asv_runner-0.2.1-pyhd8ed1ab_0.conda#fdcbeb072c80c805a2ededaa5f91cd79
https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.3-pyha770c72_0.conda#373374a3ed20141090504031dc7b693e
https://conda.anaconda.org/conda-forge/noarch/dask-core-2025.2.0-pyhd8ed1ab_0.conda#3bc22d25e3ee83d709804a2040b4463c
https://conda.anaconda.org/conda-forge/linux-64/gnutls-3.8.9-h5746830_0.conda#0e776b108cd87ee80618acc5ee64c07f
https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-10.3.0-h76408a6_0.conda#0a06f278e5d9242057673b1358a75e8f
https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.6.1-hd8ed1ab_0.conda#7f46575a91b1307441abc235d01cab66
https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda#d10d9393680734a8febc4b362a4c94f2
https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h5ddbaa4_116.conda#f51573abc223afed7e5374f34135ce05
https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e
Expand All @@ -291,7 +291,6 @@ https://conda.anaconda.org/conda-forge/linux-64/at-spi2-core-2.40.3-h0630a04_0.t
https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.4-py311h9f3472d_1.conda#2c3c4f115d28ed9e001a271d5d8585aa
https://conda.anaconda.org/conda-forge/noarch/colorspacious-1.1.2-pyhecae5ae_1.conda#04151bb8e351c6209caad045e4b1f4bd
https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.1-py311hd18a35c_0.conda#351cb68d2081e249069748b6e60b3cd2
https://conda.anaconda.org/conda-forge/noarch/dask-core-2024.8.2-pyhd8ed1ab_0.conda#8e7524a2fb561506260db789806c7ee9
https://conda.anaconda.org/conda-forge/noarch/identify-2.6.8-pyhd8ed1ab_0.conda#153a6ad50ad9db7bb4e042ee52a56f87
https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_2.conda#bb0230917e2473c77d615104dbe8a49d
https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.3-hba53ac1_1.conda#f5e75fe79d446bf4975b41d375314605
Expand All @@ -303,6 +302,7 @@ https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py311h7db5c69_1.con
https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.1-h861ebed_0.conda#59e660508a4de9401543303d5f576aeb
https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-hb77b528_0.conda#07f45f1be1c25345faddb8db0de8039b
https://conda.anaconda.org/conda-forge/linux-64/pykdtree-1.4.1-py311h9f3472d_0.conda#71a1a3016f6caabac25f77b742460248
https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py311h9f3472d_3.conda#a7c4169b1c920361597ddacb461350fd
https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.8.0-py311h9f3472d_0.conda#17334e5c12abdf2db6b25bd4187cd3e4
https://conda.anaconda.org/conda-forge/linux-64/scipy-1.15.2-py311h8f841c2_0.conda#5ec0a1732a05376241e1e4c6d50e0e91
https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.7-py311h2fdb869_0.conda#75f428f392207807643fa016a7c57ad8
Expand All @@ -311,7 +311,7 @@ https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda#3
https://conda.anaconda.org/conda-forge/noarch/wslink-2.3.2-pyhd8ed1ab_0.conda#b62ba33f73e92b385bdb00088533819a
https://conda.anaconda.org/conda-forge/linux-64/at-spi2-atk-2.38.0-h0630a04_3.tar.bz2#6b889f174df1e0f816276ae69281af4d
https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.3.0-py311h9f3472d_0.conda#555b148cafbd96b658499060d5e11a65
https://conda.anaconda.org/conda-forge/noarch/distributed-2024.8.2-pyhd8ed1ab_0.conda#44d22b5d98a219a4c35cafe9bf3b9ce2
https://conda.anaconda.org/conda-forge/noarch/distributed-2025.2.0-pyhd8ed1ab_0.conda#54562a2b30c8f357097e2be75295601e
https://conda.anaconda.org/conda-forge/linux-64/elfutils-0.192-h7f4e02f_1.conda#369ce48a589a2aac91906c9ed89dd6e8
https://conda.anaconda.org/conda-forge/linux-64/esmf-8.7.0-nompi_h6063b07_1.conda#15e28a0e5e651ba11495c87608652316
https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.2-pyhd8ed1ab_0.conda#efbc812363856906a80344b496389d2e
Expand All @@ -331,7 +331,6 @@ https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.58.4-h49af25d_2.conda#
https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.0-py311h2b939e6_0.conda#79239585ea50c427415ef629534bb3aa
https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.7.2-nompi_py311h7c29e4f_101.conda#d966f11d28c699da7e9de2aa2f323a4f
https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.1.0-pyha770c72_0.conda#5353f5eb201a9415b12385e35ed1148d
https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py311h9f3472d_3.conda#a7c4169b1c920361597ddacb461350fd
https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda#a9b9368f3701a417eac9edbcae7cb737
https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.2.4-h3083f51_0.conda#c0d92f268209e0a0fd27954a5667c11d
https://conda.anaconda.org/conda-forge/noarch/adwaita-icon-theme-47.0-unix_0.conda#49436a5c604f99058473d84580f0e341
Expand Down Expand Up @@ -360,4 +359,3 @@ https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8
https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda#00534ebcc0375929b45c3039b5ba7636
https://conda.anaconda.org/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda#1a3281a0dc355c02b5506d87db2d78ac
https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda#3bc61f7161d28137797e038263c04c54

10 changes: 4 additions & 6 deletions requirements/locks/py312-linux-64.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Generated by conda-lock.
# platform: linux-64
# input_hash: 99c5c493d72abab1088c22d89abdd9b5e70bb415845b13643a962d169660fe74
# input_hash: bafcb30412f96e27e0bcbc91571bf16dce0b108578822ebc707b3d82114d2320
@EXPLICIT
https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81
https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda#19f3a56f68d2fd06c516076bff482c52
Expand Down Expand Up @@ -259,8 +259,8 @@ https://conda.anaconda.org/conda-forge/linux-64/yarl-1.18.3-py312h178313f_1.cond
https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.11.13-py312h178313f_0.conda#0ea623ee1f29a7e1d703bc3b0ef82306
https://conda.anaconda.org/conda-forge/noarch/asv_runner-0.2.1-pyhd8ed1ab_0.conda#fdcbeb072c80c805a2ededaa5f91cd79
https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.13.3-pyha770c72_0.conda#373374a3ed20141090504031dc7b693e
https://conda.anaconda.org/conda-forge/noarch/dask-core-2025.2.0-pyhd8ed1ab_0.conda#3bc22d25e3ee83d709804a2040b4463c
https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-10.3.0-h76408a6_0.conda#0a06f278e5d9242057673b1358a75e8f
https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.6.1-hd8ed1ab_0.conda#7f46575a91b1307441abc235d01cab66
https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda#d10d9393680734a8febc4b362a4c94f2
https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h5ddbaa4_116.conda#f51573abc223afed7e5374f34135ce05
https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e
Expand All @@ -281,7 +281,6 @@ https://conda.anaconda.org/conda-forge/linux-64/at-spi2-core-2.40.3-h0630a04_0.t
https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.4-py312hc0a28a1_1.conda#990033147b0a998e756eaaed6b28f48d
https://conda.anaconda.org/conda-forge/noarch/colorspacious-1.1.2-pyhecae5ae_1.conda#04151bb8e351c6209caad045e4b1f4bd
https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.1-py312h68727a3_0.conda#f5fbba0394ee45e9a64a73c2a994126a
https://conda.anaconda.org/conda-forge/noarch/dask-core-2024.8.2-pyhd8ed1ab_0.conda#8e7524a2fb561506260db789806c7ee9
https://conda.anaconda.org/conda-forge/noarch/identify-2.6.8-pyhd8ed1ab_0.conda#153a6ad50ad9db7bb4e042ee52a56f87
https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_2.conda#bb0230917e2473c77d615104dbe8a49d
https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.3-hba53ac1_1.conda#f5e75fe79d446bf4975b41d375314605
Expand All @@ -292,6 +291,7 @@ https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.con
https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.1-h861ebed_0.conda#59e660508a4de9401543303d5f576aeb
https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-hb77b528_0.conda#07f45f1be1c25345faddb8db0de8039b
https://conda.anaconda.org/conda-forge/linux-64/pykdtree-1.4.1-py312hc0a28a1_0.conda#6a0691f8e533d92b14a6d5eee07b6964
https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py312hc0a28a1_3.conda#81bbcb20ea4a53b05a8cf51f31496038
https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.8.0-py312hc0a28a1_0.conda#3f62987017ad18e9e7dadce9899de9ef
https://conda.anaconda.org/conda-forge/linux-64/scipy-1.15.2-py312ha707e6e_0.conda#00b999c5f9d01fb633db819d79186bd4
https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.7-py312h391bc85_0.conda#3491bd7e78aa7407c965312c4a5a9254
Expand All @@ -300,7 +300,7 @@ https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda#3
https://conda.anaconda.org/conda-forge/noarch/wslink-2.3.2-pyhd8ed1ab_0.conda#b62ba33f73e92b385bdb00088533819a
https://conda.anaconda.org/conda-forge/linux-64/at-spi2-atk-2.38.0-h0630a04_3.tar.bz2#6b889f174df1e0f816276ae69281af4d
https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.3.0-py312hc0a28a1_0.conda#8b5b812d4c18cb37bda7a7c8d3a6acb3
https://conda.anaconda.org/conda-forge/noarch/distributed-2024.8.2-pyhd8ed1ab_0.conda#44d22b5d98a219a4c35cafe9bf3b9ce2
https://conda.anaconda.org/conda-forge/noarch/distributed-2025.2.0-pyhd8ed1ab_0.conda#54562a2b30c8f357097e2be75295601e
https://conda.anaconda.org/conda-forge/linux-64/esmf-8.7.0-nompi_h6063b07_1.conda#15e28a0e5e651ba11495c87608652316
https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.2-pyhd8ed1ab_0.conda#efbc812363856906a80344b496389d2e
https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2025.0.0-h4d9b6c2_0.conda#62d563673a912579d277d27f0067b689
Expand All @@ -319,7 +319,6 @@ https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.58.4-h49af25d_2.conda#
https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.0-py312hd3ec401_0.conda#c27a17a8c54c0d35cf83bbc0de8f7f77
https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.7.2-nompi_py312ha728dd9_101.conda#7e41ca6012a6bf609539aec0dfee93f7
https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.1.0-pyha770c72_0.conda#5353f5eb201a9415b12385e35ed1148d
https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py312hc0a28a1_3.conda#81bbcb20ea4a53b05a8cf51f31496038
https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda#a9b9368f3701a417eac9edbcae7cb737
https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.2.4-h3083f51_0.conda#c0d92f268209e0a0fd27954a5667c11d
https://conda.anaconda.org/conda-forge/linux-64/vtk-base-9.3.1-egl_py312hc001bbe_13.conda#559a8d091b4e8806520f7f2f797c66de
Expand Down Expand Up @@ -347,4 +346,3 @@ https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8
https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda#00534ebcc0375929b45c3039b5ba7636
https://conda.anaconda.org/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda#1a3281a0dc355c02b5506d87db2d78ac
https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda#3bc61f7161d28137797e038263c04c54

Loading
Loading