diff --git a/.lycheeignore b/.lycheeignore index 1cdb78f91f..6b3103f7c8 100644 --- a/.lycheeignore +++ b/.lycheeignore @@ -4,16 +4,17 @@ file:/// # DEAD : legacy in various old whatsnews https://biggus.readthedocs.io -# unkown problem, works in browser : used in further_topics/ugrid/data_model +# unknown problem, works in browser : used in +# docs/src/user_manual/explanation/mesh_data_model.rst https://doi.org/10.3390/jmse2010194 -# DEAD, todo:remove, used in docs/src/userguide/plotting_a_cube.rst +# DEAD, todo:remove, used in docs/src/user_manual/tutorial/plotting_a_cube.rst https://effbot.org # nonfunctional, found in some code examples https://foo/ -# DEAD, todo:remove, used in docs/src/further_topics/ugrid/data_model.rst +# DEAD, todo:remove, used in docs/src/user_manual/explanation/mesh_data_model.rst https://ibm-design-language.eu-de.mybluemix.net/design/language/resources/color-library # DEAD, legacy in whatsnew/1.4.rst @@ -45,14 +46,14 @@ https://stickler-ci.com # DEAD, todo:remove, used in lib/iris/symbols.py https://www.wmo.int/pages/prog/www/DPFS/documents/485_Vol_I_en_colour.pdf -# DEAD, todo:remove, used in docs/src/userguide/plotting_a_cube.rst +# DEAD, todo:remove, used in docs/src/user_manual/tutorial/plotting_a_cube.rst # unkown problem, works in browser : used in docs/src/index.rst https://www.flaticon.com # nonfunctional example, used in lib/iris/io/__init__.py https://www.thing.com -# DEAD, todo:remove, used in docs/src/userguide/plotting_a_cube.rst +# DEAD, todo:remove, used in docs/src/user_manual/tutorial/plotting_a_cube.rst https://www.personal.psu.edu/cab38/ColorBrewer/ColorBrewer_updates.html # nonfunctional, found in some code examples diff --git a/docs/gallery_code/general/plot_SOI_filtering.py b/docs/gallery_code/general/plot_SOI_filtering.py index 4b256c894c..864d00d214 100644 --- a/docs/gallery_code/general/plot_SOI_filtering.py +++ b/docs/gallery_code/general/plot_SOI_filtering.py @@ -2,6 +2,11 @@ Applying a Filter to a Time-Series ================================== +.. how-to:: Applying a Filter to a Time-Series + :tags: topic_plotting;topic_statistics + + How to use custom NumPy code for filtering an Iris Cube. + This example demonstrates low pass filtering a time-series by applying a weighted running mean over the time dimension. diff --git a/docs/gallery_code/general/plot_anomaly_log_colouring.py b/docs/gallery_code/general/plot_anomaly_log_colouring.py index cd11161041..d08e37d738 100644 --- a/docs/gallery_code/general/plot_anomaly_log_colouring.py +++ b/docs/gallery_code/general/plot_anomaly_log_colouring.py @@ -2,6 +2,11 @@ Colouring Anomaly Data With Logarithmic Scaling =============================================== +.. how-to:: Colouring Anomaly Data With Logarithmic Scaling + :tags: topic_plotting;topic_statistics + + How to visualise logarithmic values. + In this example, we need to plot anomaly data where the values have a "logarithmic" significance -- i.e. we want to give approximately equal ranges of colour between data values of, say, 1 and 10 as between 10 and 100. diff --git a/docs/gallery_code/general/plot_coriolis.py b/docs/gallery_code/general/plot_coriolis.py index 905108abfd..d435023574 100644 --- a/docs/gallery_code/general/plot_coriolis.py +++ b/docs/gallery_code/general/plot_coriolis.py @@ -2,6 +2,11 @@ Deriving the Coriolis Frequency Over the Globe ============================================== +.. how-to:: Deriving the Coriolis Frequency Over the Globe + :tags: topic_plotting;topic_data_model + + How to create your own Cube from computed data and visualise it. + This code computes the Coriolis frequency and stores it in a cube with associated metadata. It then plots the Coriolis frequency on an orthographic projection. diff --git a/docs/gallery_code/general/plot_cross_section.py b/docs/gallery_code/general/plot_cross_section.py index 8e5bee85ed..c3a28c37df 100644 --- a/docs/gallery_code/general/plot_cross_section.py +++ b/docs/gallery_code/general/plot_cross_section.py @@ -2,6 +2,11 @@ Cross Section Plots =================== +.. how-to:: Cross Section Plots + :tags: topic_plotting;topic_data_model + + How to visualise cross-sections of multi-dimensional Cubes. + This example demonstrates contour plots of a cross-sectioned multi-dimensional cube which features a hybrid height vertical coordinate system. diff --git a/docs/gallery_code/general/plot_custom_aggregation.py b/docs/gallery_code/general/plot_custom_aggregation.py index 65fadfb473..ecdb6a5da7 100644 --- a/docs/gallery_code/general/plot_custom_aggregation.py +++ b/docs/gallery_code/general/plot_custom_aggregation.py @@ -2,6 +2,11 @@ Calculating a Custom Statistic ============================== +.. how-to:: Calculating a Custom Statistic + :tags: topic_plotting;topic_statistics + + How to define and use a custom aggregation operation, including visualisation. + This example shows how to define and use a custom :class:`iris.analysis.Aggregator`, that provides a new statistical operator for use with cube aggregation functions such as :meth:`~iris.cube.Cube.collapsed`, diff --git a/docs/gallery_code/general/plot_custom_file_loading.py b/docs/gallery_code/general/plot_custom_file_loading.py index 06de887614..670575d124 100644 --- a/docs/gallery_code/general/plot_custom_file_loading.py +++ b/docs/gallery_code/general/plot_custom_file_loading.py @@ -2,6 +2,11 @@ Loading a Cube From a Custom File Format ======================================== +.. how-to:: Loading a Cube From a Custom File Format + :tags: topic_plotting;topic_load_save + + How to visualise data from a file Iris does not natively support. + This example shows how a custom text file can be loaded using the standard Iris load mechanism. diff --git a/docs/gallery_code/general/plot_global_map.py b/docs/gallery_code/general/plot_global_map.py index 60ac200a43..7d4b0162ba 100644 --- a/docs/gallery_code/general/plot_global_map.py +++ b/docs/gallery_code/general/plot_global_map.py @@ -2,6 +2,11 @@ Quickplot of a 2D Cube on a Map =============================== +.. how-to:: Quickplot of a 2D Cube on a Map + :tags: topic_plotting + + Code demonstrating basic iris.quickplot use. + This example demonstrates a contour plot of global air temperature. The plot title and the labels for the axes are automatically derived from the metadata. diff --git a/docs/gallery_code/general/plot_inset.py b/docs/gallery_code/general/plot_inset.py index 5edd375743..761e1cb662 100644 --- a/docs/gallery_code/general/plot_inset.py +++ b/docs/gallery_code/general/plot_inset.py @@ -2,6 +2,11 @@ Test Data Showing Inset Plots ============================= +.. how-to:: Test Data Showing Inset Plots + :tags: topic_plotting;topic_statistics + + How to create inset plots within a main plot; often used to show statistical collapses. + This example demonstrates the use of a single 3D data cube with time, latitude and longitude dimensions to plot a temperature series for a single latitude coordinate, with an inset plot of the data region. diff --git a/docs/gallery_code/general/plot_lineplot_with_legend.py b/docs/gallery_code/general/plot_lineplot_with_legend.py index d1b3acd912..bfba085ef2 100644 --- a/docs/gallery_code/general/plot_lineplot_with_legend.py +++ b/docs/gallery_code/general/plot_lineplot_with_legend.py @@ -2,6 +2,11 @@ Multi-Line Temperature Profile Plot =================================== +.. how-to:: Multi-Line Temperature Profile Plot + :tags: topic_plotting + + How to plot multiple lines on a single plot with a legend. + """ # noqa: D205, D212, D400 import matplotlib.pyplot as plt diff --git a/docs/gallery_code/general/plot_polar_stereo.py b/docs/gallery_code/general/plot_polar_stereo.py index 99abbd0ae0..c830f22b3f 100644 --- a/docs/gallery_code/general/plot_polar_stereo.py +++ b/docs/gallery_code/general/plot_polar_stereo.py @@ -2,6 +2,11 @@ Example of a Polar Stereographic Plot ===================================== +.. how-to:: Example of a Polar Stereographic Plot + :tags: topic_plotting + + How to visualise data defined on an alternative map projection. + Demonstrates plotting data that are defined on a polar stereographic projection. diff --git a/docs/gallery_code/general/plot_polynomial_fit.py b/docs/gallery_code/general/plot_polynomial_fit.py index 37cc4e283b..8e20d3050d 100644 --- a/docs/gallery_code/general/plot_polynomial_fit.py +++ b/docs/gallery_code/general/plot_polynomial_fit.py @@ -2,6 +2,11 @@ Fitting a Polynomial ==================== +.. how-to:: Fitting a Polynomial + :tags: topic_plotting;topic_statistics;topic_data_model + + How to compute and plot a polynomial fit to 1D data in an Iris cube. + This example demonstrates computing a polynomial fit to 1D data from an Iris cube, adding the fit to the cube's metadata, and plotting both the 1D data and the fit. diff --git a/docs/gallery_code/general/plot_projections_and_annotations.py b/docs/gallery_code/general/plot_projections_and_annotations.py index 6e8ba5a5af..6adffda497 100644 --- a/docs/gallery_code/general/plot_projections_and_annotations.py +++ b/docs/gallery_code/general/plot_projections_and_annotations.py @@ -2,6 +2,11 @@ Plotting in Different Projections ================================= +.. how-to:: Plotting in Different Projections + :tags: topic_plotting;topic_interoperability + + How to overlay data and graphics in different map projections. + This example shows how to overlay data and graphics in different projections, demonstrating various features of Iris, Cartopy and matplotlib. diff --git a/docs/gallery_code/general/plot_rotated_pole_mapping.py b/docs/gallery_code/general/plot_rotated_pole_mapping.py index e9e3656184..a205540bb1 100644 --- a/docs/gallery_code/general/plot_rotated_pole_mapping.py +++ b/docs/gallery_code/general/plot_rotated_pole_mapping.py @@ -2,6 +2,11 @@ Rotated Pole Mapping ==================== +.. how-to:: Rotated Pole Mapping + :tags: topic_plotting + + How to visualise data defined on an alternative coordinate system. + This example uses several visualisation methods to achieve an array of differing images, including: diff --git a/docs/gallery_code/general/plot_zonal_means.py b/docs/gallery_code/general/plot_zonal_means.py index d4ec1eb1fc..e33b861f18 100644 --- a/docs/gallery_code/general/plot_zonal_means.py +++ b/docs/gallery_code/general/plot_zonal_means.py @@ -2,6 +2,11 @@ Zonal Mean Diagram of Air Temperature ===================================== +.. how-to:: Zonal Mean Diagram of Air Temperature + :tags: topic_plotting;topic_statistics + + How to use aligned plots to visualise collapsed dimensional statistics. + This example demonstrates aligning a linear plot and a cartographic plot using Matplotlib. diff --git a/docs/gallery_code/meteorology/plot_COP_1d.py b/docs/gallery_code/meteorology/plot_COP_1d.py index 84addd140a..cb81a14f38 100644 --- a/docs/gallery_code/meteorology/plot_COP_1d.py +++ b/docs/gallery_code/meteorology/plot_COP_1d.py @@ -2,6 +2,11 @@ Global Average Annual Temperature Plot ====================================== +.. how-to:: Global Average Annual Temperature Plot + :tags: topic_plotting;topic_data_model;topic_statistics + + How to spatially constrain data, compute statistics and visualise a comparison. + Produces a time-series plot of North American temperature forecasts for 2 different emission scenarios. Constraining data to a limited spatial area also features in this example. diff --git a/docs/gallery_code/meteorology/plot_COP_maps.py b/docs/gallery_code/meteorology/plot_COP_maps.py index 1c5e865a8f..fca40dc373 100644 --- a/docs/gallery_code/meteorology/plot_COP_maps.py +++ b/docs/gallery_code/meteorology/plot_COP_maps.py @@ -2,6 +2,11 @@ Global Average Annual Temperature Maps ====================================== +.. how-to:: Global Average Annual Temperature Maps + :tags: topic_plotting + + How to produce comparative maps of two files with a shared colour bar. + Produces maps of global temperature forecasts from the A1B and E1 scenarios. The data used comes from the HadGEM2-AO model simulations for the A1B and E1 diff --git a/docs/gallery_code/meteorology/plot_TEC.py b/docs/gallery_code/meteorology/plot_TEC.py index e6269eaf9b..8d5f634203 100644 --- a/docs/gallery_code/meteorology/plot_TEC.py +++ b/docs/gallery_code/meteorology/plot_TEC.py @@ -2,6 +2,11 @@ Ionosphere Space Weather ======================== +.. how-to:: Ionosphere Space Weather + :tags: topic_plotting + + How to use Iris to visualise space weather data. + This space weather example plots a filled contour of rotated pole point data with a shaded relief image underlay. The plot shows aggregated vertical electron content in the ionosphere. diff --git a/docs/gallery_code/meteorology/plot_deriving_phenomena.py b/docs/gallery_code/meteorology/plot_deriving_phenomena.py index 81a05be9b9..670f73e2b1 100644 --- a/docs/gallery_code/meteorology/plot_deriving_phenomena.py +++ b/docs/gallery_code/meteorology/plot_deriving_phenomena.py @@ -2,6 +2,11 @@ Deriving Exner Pressure and Air Temperature =========================================== +.. how-to:: Deriving Exner Pressure and Air Temperature + :tags: topic_plotting;topic_statistics + + How to use Iris arithmetic to derive phenomena from existing cubes and plot them. + This example shows some processing of cubes in order to derive further related cubes; in this case the derived cubes are Exner pressure and air temperature which are calculated by combining air pressure, air potential temperature and diff --git a/docs/gallery_code/meteorology/plot_hovmoller.py b/docs/gallery_code/meteorology/plot_hovmoller.py index 829b370d78..9419326b0f 100644 --- a/docs/gallery_code/meteorology/plot_hovmoller.py +++ b/docs/gallery_code/meteorology/plot_hovmoller.py @@ -2,6 +2,11 @@ Hovmoller Diagram of Monthly Surface Temperature ================================================ +.. how-to:: Hovmoller Diagram of Monthly Surface Temperature + :tags: topic_plotting;topic_statistics + + How to collapse and plot Cubes to create a Hovmoller diagram. + This example demonstrates the creation of a Hovmoller diagram with fine control over plot ticks and labels. The data comes from the Met Office OSTIA project and has been pre-processed to calculate the monthly mean sea surface diff --git a/docs/gallery_code/meteorology/plot_lagged_ensemble.py b/docs/gallery_code/meteorology/plot_lagged_ensemble.py index 7c34572136..7d6217d294 100644 --- a/docs/gallery_code/meteorology/plot_lagged_ensemble.py +++ b/docs/gallery_code/meteorology/plot_lagged_ensemble.py @@ -2,6 +2,11 @@ Seasonal Ensemble Model Plots ============================= +.. how-to:: Seasonal Ensemble Model Plots + :tags: topic_plotting;topic_data_model;topic_statistics + + How to use Iris in a real-world complex analysis scenario. + This example demonstrates the loading of a lagged ensemble dataset from the GloSea4 model, which is then used to produce two types of plot: diff --git a/docs/gallery_code/meteorology/plot_wind_barbs.py b/docs/gallery_code/meteorology/plot_wind_barbs.py index f11c9a7b50..1866a33b95 100644 --- a/docs/gallery_code/meteorology/plot_wind_barbs.py +++ b/docs/gallery_code/meteorology/plot_wind_barbs.py @@ -2,6 +2,11 @@ Plotting Wind Direction Using Barbs =================================== +.. how-to:: Plotting Wind Direction Using Barbs + :tags: topic_plotting;topic_statistics + + How to use Iris to derive and plot wind barbs. + This example demonstrates using barbs to plot wind speed contours and wind direction barbs from wind vector component input data. The vector components are co-located in space in this case. diff --git a/docs/gallery_code/meteorology/plot_wind_speed.py b/docs/gallery_code/meteorology/plot_wind_speed.py index 5310ad937d..beccb217c2 100644 --- a/docs/gallery_code/meteorology/plot_wind_speed.py +++ b/docs/gallery_code/meteorology/plot_wind_speed.py @@ -2,6 +2,11 @@ Plotting Wind Direction Using Quiver ==================================== +.. how-to:: Plotting Wind Direction Using Quiver + :tags: topic_plotting + + How to use Iris to plot wind quivers. + This example demonstrates using quiver to plot wind speed contours and wind direction arrows from wind vector component input data. The vector components are co-located in space in this case. diff --git a/docs/gallery_code/oceanography/plot_atlantic_profiles.py b/docs/gallery_code/oceanography/plot_atlantic_profiles.py index a43fb7f8cb..ad21f81d95 100644 --- a/docs/gallery_code/oceanography/plot_atlantic_profiles.py +++ b/docs/gallery_code/oceanography/plot_atlantic_profiles.py @@ -2,6 +2,11 @@ Oceanographic Profiles and T-S Diagrams ======================================= +.. how-to:: Oceanographic Profiles and T-S Diagrams + :tags: topic_plotting;topic_data_model + + How to use Iris for visualising oceanographic profile data. + This example demonstrates how to plot vertical profiles of different variables in the same axes, and how to make a scatter plot of two variables. There is an oceanographic theme but the same techniques are diff --git a/docs/gallery_code/oceanography/plot_load_nemo.py b/docs/gallery_code/oceanography/plot_load_nemo.py index aac89fec0e..b3918eb587 100644 --- a/docs/gallery_code/oceanography/plot_load_nemo.py +++ b/docs/gallery_code/oceanography/plot_load_nemo.py @@ -2,6 +2,11 @@ Load a Time Series of Data From the NEMO Model ============================================== +.. how-to:: Load a Time Series of Data From the NEMO Model + :tags: topic_plotting;topic_load_save;topic_data_model + + How to combine and visualise multiple files. + This example demonstrates how to load multiple files containing data output by the NEMO model and combine them into a time series in a single cube. The different time dimensions in these files can prevent Iris from concatenating diff --git a/docs/gallery_code/oceanography/plot_orca_projection.py b/docs/gallery_code/oceanography/plot_orca_projection.py index bb68056cb3..065078e5df 100644 --- a/docs/gallery_code/oceanography/plot_orca_projection.py +++ b/docs/gallery_code/oceanography/plot_orca_projection.py @@ -2,6 +2,11 @@ Tri-Polar Grid Projected Plotting ================================= +.. how-to:: Tri-Polar Grid Projected Plotting + :tags: topic_plotting + + How to visualise data defined on a tri-polar grid using different map projections. + This example demonstrates cell plots of data on the semi-structured ORCA2 model grid. diff --git a/docs/src/IEP/IEP001.adoc b/docs/src/IEP/IEP001.adoc deleted file mode 100644 index 2daef2363a..0000000000 --- a/docs/src/IEP/IEP001.adoc +++ /dev/null @@ -1,193 +0,0 @@ -# IEP 1 - Enhanced indexing - -## Background - -Currently, to select a subset of a Cube based on coordinate values we use something like: -[source,python] ----- -cube.extract(iris.Constraint(realization=3, - model_level_number=[1, 5], - latitude=lambda cell: 40 <= cell <= 60)) ----- -On the plus side, this works irrespective of the dimension order of the data, but the drawbacks with this form of indexing include: - -* It uses a completely different syntax to position-based indexing, e.g. `cube[4, 0:6]`. -* It uses a completely different syntax to pandas and xarray value-based indexing, e.g. `df.loc[4, 0:6]`. -* It is long-winded and requires the use of an additional class. -* It requires the use of lambda functions even when just selecting a range. - -Arguably, the situation when subsetting using positional indices but where the dimension order is unknown is even worse - it has no standard syntax _at all_! Instead it requires code akin to: -[source,python] ----- -key = [slice(None)] * cube.ndim -key[cube.coord_dims('model_level_number')[0]] = slice(3, 9, 2) -cube[tuple(key)] ----- - -The only form of indexing that is well supported is indexing by position where the dimension order is known: -[source,python] ----- -cube[4, 0:6, 30:] ----- - -## Proposal - -Provide indexing helpers on the Cube to extend explicit support to all permutations of: - -* implicit dimension vs. named coordinate, -* and positional vs. coordinate-value based selection. - -### Helper syntax options - -Commonly, the names of coordinates are also valid Python identifiers. -For names where this is not true, the names can expressed through either the `helper[...]` or `helper(...)` syntax by constructing an explicit dict. -For example: `cube.loc[{'12': 0}]` or `cube.loc(**{'12': 0})`. - -#### Extended pandas style - -Use a single helper for index by position, and a single helper for index by value. Helper names taken from pandas, but their behaviour is extended by making them callable to support named coordinates. - -|=== -.2+| 2+h|Index by -h|Position h|Value - -h|Implicit dimension - -a|[source,python] ----- -cube[:, 2] # No change -cube.iloc[:, 2] ----- - -a|[source,python] ----- -cube.loc[:, 1.5] ----- - -h|Coordinate name - -a|[source,python] ----- -cube[dict(height=2)] -cube.iloc[dict(height=2)] -cube.iloc(height=2) ----- - -a|[source,python] ----- -cube.loc[dict(height=1.5)] -cube.loc(height=1.5) ----- -|=== - -#### xarray style - -xarray introduces a second set of helpers for accessing named dimensions that provide the callable syntax `(foo=...)`. - -|=== -.2+| 2+h|Index by -h|Position h|Value - -h|Implicit dimension - -a|[source,python] ----- -cube[:, 2] # No change ----- - -a|[source,python] ----- -cube.loc[:, 1.5] ----- - -h|Coordinate name - -a|[source,python] ----- - cube[dict(height=2)] - cube.isel(height=2) ----- - -a|[source,python] ----- -cube.loc[dict(height=1.5)] -cube.sel(height=1.5) ----- -|=== - -### Slices - -The semantics of position-based slices will continue to match that of normal Python slices. The start position is included, the end position is excluded. - -Value-based slices will be strictly inclusive, with both the start and end values included. This behaviour differs from normal Python slices but is in common with pandas. - -Just as for normal Python slices, we do not need to provide the ability to control the include/exclude behaviour for slicing. - -### Value-based indexing - -#### Equality - -Should the behaviour of value-based equality depend on the data type of the coordinate? - -* integer: exact match -* float: tolerance match, tolerance determined by bit-width -* string: exact match - -#### Scalar/category - -If/how to deal with category selection `cube.loc(season='JJA')`? Defer to `groupby()`? - -`cube.loc[12]` - must always match a single value or raise KeyError, corresponding dimension will be removed -`cube.loc[[12]]` - may match any number of values? (incl. zero?), dimension will be retained - -### Out of scope - -* Deliberately enhancing the performance. -This is a very valuable topic and should be addressed by subsequent efforts. - -* Time/date values as strings. -Providing pandas-style string representations for convenient representation of partial date/times should be addressed in a subsequent effort - perhaps in conjunction with an explicit performance test suite. -There is a risk that this topic could bog down when dealing with non-standard calendars and climatological date ranges. - -## Work required - -* Implementations for each of the new helper objects. -* An update to the documentation to demonstrate best practice. Known impacted areas include: -** The "Subsetting a Cube" chapter of the user guide. - -### TODO -* Multi-dimensional coordinates -* Non-orthogonal coordinates -* Bounds -* Boolean array indexing -* Lambdas? -* What to do about constrained loading? -* Relationship to https://scitools.org.uk/iris/docs/v1.9.2/iris/iris/cube.html#iris.cube.Cube.intersection[iris.cube.Cube.intersection]? -* Relationship to interpolation (especially nearest-neighbour)? -** e.g. What to do about values that don't exist? -*** pandas throws a KeyError -*** xarray supports (several) nearest-neighbour schemes via https://xarray.pydata.org/en/stable/indexing.html#nearest-neighbor-lookups[`data.sel()`] -*** Apparently https://holoviews.org/[holoviews] does nearest-neighbour interpolation. -* multi-dimensional coordinate => unroll? -* var_name only selection? `cube.vloc(t0=12)` -* Orthogonal only? Or also independent? `cube.loc_points(lon=[1, 1, 5], lat=[31, 33, 32])` - ** This seems quite closely linked to interpolation. Is the interpolation scheme orthogonal to cross-product vs. independent? -+ -[source,python] ----- -cube.interpolate( - scheme='nearest', - mesh=dict(lon=[5, 10, 15], lat=[40, 50])) -cube.interpolate( - scheme=Nearest(mode='spherical'), - locations=Ortho(lon=[5, 10, 15], lat=[40, 50])) ----- - -## References -. Iris - * https://scitools.org.uk/iris/docs/v1.9.2/iris/iris.html#iris.Constraint[iris.Constraint] - * https://scitools.org.uk/iris/docs/v1.9.2/userguide/subsetting_a_cube.html[Subsetting a cube] -. https://pandas.pydata.org/pandas-docs/stable/indexing.html[pandas indexing] -. https://xarray.pydata.org/en/stable/indexing.html[xarray indexing] -. https://legacy.python.org/dev/peps/pep-0472/[PEP 472 - Support for indexing with keyword arguments] -. https://nbviewer.jupyter.org/gist/rsignell-usgs/13d7ce9d95fddb4983d4cbf98be6c71d[Time slicing NetCDF or OPeNDAP datasets] - Rich Signell's xarray/iris comparison focussing on time handling and performance diff --git a/docs/src/_templates/tags_links.need b/docs/src/_templates/tags_links.need new file mode 100644 index 0000000000..43c3ca39ce --- /dev/null +++ b/docs/src/_templates/tags_links.need @@ -0,0 +1,11 @@ +{# Render plain clickable text links for each tag #} +{% if tags %} +:strong:`Tags:` {{ " " }} {%- for t in tags -%} + {%- if t and t.startswith('topic_') -%} + :ref:`{{ t }} <{{ t }}>` + {%- else -%} + {{ t }} + {%- endif -%} + {%- if not loop.last %} | {% endif -%} +{%- endfor %} +{% endif %} diff --git a/docs/src/conf.py b/docs/src/conf.py index fa896aba69..e548036b9b 100644 --- a/docs/src/conf.py +++ b/docs/src/conf.py @@ -163,6 +163,9 @@ def _dotv(version): "sphinx_gallery.gen_gallery", "matplotlib.sphinxext.mathmpl", "matplotlib.sphinxext.plot_directive", + "sphinx_needs", + "user_manual_directives", + "sphinx_reredirects", ] if skip_api == "1": @@ -441,3 +444,138 @@ def reset_modules(gallery_conf, fname): "section": "Section %s", "table": "Table %s", } + +# -- sphinx-reredirects config ------------------------------------------------ + +redirects = { + # explanation + "further_topics/dataless_cubes": "/user_manual/explanation/dataless_cubes.html", + "userguide/iris_cubes": "/user_manual/explanation/iris_cubes.html", + "userguide/iris_philosophy": "/user_manual/explanation/iris_philosophy.html", + "community/iris_xarray": "/user_manual/explanation/iris_xarray.html", + "further_topics/lenient_maths": "/user_manual/explanation/lenient_maths.html", + "further_topics/lenient_metadata": "/user_manual/explanation/lenient_metadata.html", + "further_topics/ugrid/data_model": "/user_manual/explanation/mesh_data_model.html", + "further_topics/ugrid/partner_packages": "/user_manual/explanation/mesh_partners.html", + "further_topics/metadata": "/user_manual/explanation/metadata.html", + "further_topics/missing_data_handling": "/user_manual/explanation/missing_data_handling.html", + "further_topics/netcdf_io": "/user_manual/explanation/netcdf_io.html", + "userguide/real_and_lazy_data": "/user_manual/explanation/real_and_lazy_data.html", + "further_topics/um_files_loading": "/user_manual/explanation/um_files_loading.html", + "further_topics/ux_guide": "/user_manual/explanation/ux_guide.html", + "further_topics/which_regridder_to_use": "/user_manual/explanation/which_regridder_to_use.html", + "why_iris": "/user_manual/explanation/why_iris.html", + # how_to + "further_topics/filtering_warnings": "/user_manual/how_to/filtering_warnings.html", + "installing": "/user_manual/how_to/installing.html", + "further_topics/ugrid/other_meshes": "/user_manual/how_to/mesh_conversions.html", + "further_topics/ugrid/operations": "/user_manual/how_to/mesh_operations.html", + "userguide/navigating_a_cube": "/user_manual/how_to/navigating_a_cube.html", + "community/plugins": "/user_manual/how_to/plugins.html", + # reference + "userguide/citation": "/user_manual/reference/citation.html", + "userguide/glossary": "/user_manual/reference/glossary.html", + "community/phrasebook": "/user_manual/reference/phrasebook.html", + # section indexes + "community/index": "/user_manual/section_indexes/community.html", + "further_topics/dask_best_practices/index": "/user_manual/section_indexes/dask_best_practices.html", + "further_topics/ugrid/index": "/user_manual/section_indexes/mesh_support.html", + "userguide/index": "/user_manual/section_indexes/userguide.html", + # tutorial + "further_topics/controlling_merge": "/user_manual/tutorial/controlling_merge.html", + "userguide/cube_maths": "/user_manual/tutorial/cube_maths.html", + "userguide/cube_statistics": "/user_manual/tutorial/cube_statistics.html", + "further_topics/dask_best_practices/dask_bags_and_greed": "/user_manual/tutorial/dask_bags_and_greed.html", + "further_topics/dask_best_practices/dask_parallel_loop": "/user_manual/tutorial/dask_parallel_loop.html", + "further_topics/dask_best_practices/dask_pp_to_netcdf": "/user_manual/tutorial/dask_pp_to_netcdf.html", + "userguide/interpolation_and_regridding": "/user_manual/tutorial/interpolation_and_regridding.html", + "userguide/loading_iris_cubes": "/user_manual/tutorial/loading_iris_cubes.html", + "userguide/merge_and_concat": "/user_manual/tutorial/merge_and_concat.html", + "userguide/plotting_a_cube": "/user_manual/tutorial/plotting_a_cube.html", + "userguide/saving_iris_cubes": "/user_manual/tutorial/saving_iris_cubes.html", + "userguide/subsetting_a_cube": "/user_manual/tutorial/subsetting_a_cube.html", +} + +# -- sphinx-needs config ------------------------------------------------------ +# See https://sphinx-needs.readthedocs.io/en/latest/configuration.html + +# TODO: namespace these types as Diataxis for max clarity? +needs_types = [ + { + "directive": "tutorial", + "title": "Tutorial", + "prefix": "", + "color": "", + "style": "node", + }, + { + "directive": "how-to", + "title": "How To", + "prefix": "", + "color": "", + "style": "node", + }, + { + "directive": "explanation", + "title": "Explanation", + "prefix": "", + "color": "", + "style": "node", + }, + { + # z_ prefix to force to the end of sorted lists. + "directive": "z_reference", + "title": "Reference", + "prefix": "", + "color": "", + "style": "node", + }, +] +# The layout whenever a 'need item' directive is used. I.e. at the top of each +# user manual page. +needs_default_layout = "focus" +# The `tags_links` jinja template displays a list of tags where every topic_* +# tag is a link to the relevant section in user_manual/index.rst. +needs_template_folder = "_templates" +needs_global_options = { + "post_template": {"default": "tags_links"}, +} + +from sphinx_needs.data import NeedsCoreFields + +# Known bug in sphinx-needs pre v6.0. +# https://github.com/useblocks/sphinx-needs/issues/1420 +if "allow_default" not in NeedsCoreFields["post_template"]: + NeedsCoreFields["post_template"]["allow_default"] = "str" + + +def setup(app): + # Monkeypatch for https://github.com/useblocks/sphinx-needs/issues/723 + import sphinx_needs.directives.needtable as nt + + orig_row_col_maker = nt.row_col_maker + + def row_col_maker_link_title( + app, + fromdocname, + all_needs, + need_info, + need_key, + make_ref=False, + ref_lookup=False, + prefix="", + ): + if need_key == "title": + make_ref = True + return orig_row_col_maker( + app, + fromdocname, + all_needs, + need_info, + need_key, + make_ref, + ref_lookup, + prefix, + ) + + nt.row_col_maker = row_col_maker_link_title diff --git a/docs/src/further_topics/index.rst b/docs/src/further_topics/index.rst deleted file mode 100644 index 122f1746a9..0000000000 --- a/docs/src/further_topics/index.rst +++ /dev/null @@ -1,24 +0,0 @@ -.. _further_topics_index: - - -Further Topics -=============== - -Extra information on specific technical issues. - -.. toctree:: - :maxdepth: 1 - - filtering_warnings - metadata - lenient_metadata - lenient_maths - um_files_loading - missing_data_handling - dataless_cubes - netcdf_io - dask_best_practices/index - ugrid/index - which_regridder_to_use - controlling_merge - ux_guide \ No newline at end of file diff --git a/docs/src/getting_started.rst b/docs/src/getting_started.rst deleted file mode 100644 index 24299a4060..0000000000 --- a/docs/src/getting_started.rst +++ /dev/null @@ -1,15 +0,0 @@ -.. _getting_started_index: - -Getting Started -=============== - -To get started with Iris we recommend reading :ref:`why_iris` was created and to -explore the examples in the :ref:`gallery_index` after :ref:`installing_iris` -Iris. - -.. toctree:: - :maxdepth: 1 - - why_iris - installing - generated/gallery/index \ No newline at end of file diff --git a/docs/src/index.rst b/docs/src/index.rst index 139e54cee0..5b4bb846d3 100644 --- a/docs/src/index.rst +++ b/docs/src/index.rst @@ -45,13 +45,13 @@ For more information see :ref:`why_iris`. plotting and more. +++ - .. button-ref:: user_guide_index + .. button-ref:: user_manual_index :ref-type: ref :color: primary :outline: :expand: - User Guide + User Manual .. grid-item-card:: :text-align: center @@ -151,20 +151,20 @@ The legacy support resources: .. toctree:: - :caption: Getting Started + :caption: Get Started :maxdepth: 1 :hidden: - getting_started + user_manual/section_indexes/get_started .. toctree:: - :caption: User Guide + :caption: User Manual :maxdepth: 1 - :name: userguide_index + :name: user_manual :hidden: - userguide/index + user_manual/index .. toctree:: @@ -176,15 +176,6 @@ The legacy support resources: developers_guide/contributing_getting_involved -.. toctree:: - :caption: Community - :maxdepth: 1 - :name: community_index - :hidden: - - Community - - .. toctree:: :caption: What's New in Iris :maxdepth: 1 diff --git a/docs/src/sphinxext/user_manual_directives.py b/docs/src/sphinxext/user_manual_directives.py new file mode 100644 index 0000000000..45af9a9a9a --- /dev/null +++ b/docs/src/sphinxext/user_manual_directives.py @@ -0,0 +1,259 @@ +# Copyright Iris contributors +# +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. +"""Sphinx customisations for a Diataxis User Manual (see diataxis.fr).""" + +import enum +from pathlib import Path +import re +import typing + +from docutils import nodes # type: ignore[import-untyped] +from docutils.parsers.rst import Directive # type: ignore[import-untyped] +from docutils.statemachine import StringList # type: ignore[import-untyped] +from sphinx.application import Sphinx +from sphinx.builders import Builder +from sphinx.util import logging as sphinx_logging +from sphinx_needs.api import get_needs_view + +if typing.TYPE_CHECKING: + from sphinx_needs.api.need import NeedsInfoType + +logger = sphinx_logging.getLogger(__name__) + + +class Diataxis(enum.StrEnum): + """The Diataxis-inspired sphinx-needs directives configured in conf.py.""" + + # TODO: should user manual section indexes also get their own Diataxis tab? + # This would allow topic-based filtering, and allow all pages to be found + # through the same route. + ALL = "all" + TUTORIAL = "tutorial" + EXPLANATION = "explanation" + HOW_TO = "how-to" + REFERENCE = "z_reference" + + +DIATAXIS_CAPTIONS = { + Diataxis.TUTORIAL: "Guided lessons for understanding a topic.\n\n(Supports **study**, via **action**)", + Diataxis.EXPLANATION: "In-depth discussion for understanding concepts.\n\n(Supports **study**, via **theory**)", + Diataxis.HOW_TO: "Step by step instructions for achieving a specific goal.\n\n(Supports **work**, via **action**)", + Diataxis.REFERENCE: "Concise information to look up when needed.\n\n(Supports **work**, via **theory**)", +} +"""Text to be displayed at the top of each Diataxis tab.""" + + +class DiataxisDirective(Directive): + """A topic-filtered tab-set block with Diataxis tab-items and topic navigation badges.""" + + has_content = True + """Content = the topic tag to filter by, e.g. `topic_about`.""" + + @staticmethod + def _indent(text: str) -> str: + indented = [" " + line for line in text.splitlines()] + return "\n".join(indented) + + def _needtable(self, types: Diataxis, tags: str) -> str: + """Construct a single sphinx-needs needtable directive string.""" + options = [ + ':columns: title as " ";content as " "', + ":colwidths: 30;60", + ":style: table", + ":sort: type", + ":filter_warning: No pages for this filter.", + ] + # TODO: should the table somehow include what section the page belongs + # to? This isn't standard sphinx-needs metadata so would need + # `needs_extra_options` in conf.py. + if types is not Diataxis.ALL: + options.append(f":types: {types}") + # TODO: is looking for `topic_all` brittle hard-coding? + if tags != "topic_all": + options.append(f":tags: {tags}") + options_str = "\n".join(options) + needtable = "\n".join( + [ + ".. needtable::", + self._indent(options_str), + ] + ) + return needtable + + def _tab_item(self, diataxis: Diataxis, tags: str) -> str: + """Construct a single tab-item string for the given Diataxis type.""" + needtable = self._needtable(types=diataxis, tags=tags) + + # Convert the Diataxis directive name to a pretty title. + tab_item_title = str(diataxis) + tab_item_title = tab_item_title.removeprefix("z_") + tab_item_title = tab_item_title.capitalize() + + # TODO: should there be a caption for ALL as well? Even if that's just + # for visual consistency. + caption = DIATAXIS_CAPTIONS.get(diataxis, "") + content = [ + # sync means all tab-sets on this page switch tabs together. + f":sync: {diataxis}", + "", + caption, + "", + needtable, + ] + content_str = "\n".join(content) + tab_item = "\n".join( + [ + f".. tab-item:: {tab_item_title}", + self._indent(content_str), + ] + ) + return tab_item + + def run(self): + """Construct the navigation badges followed by the Diataxis tab-set.""" + # Enforce the only valid location for this directive. + rst_path = Path(self.state.document["source"]) + if not (rst_path.parent.name == "user_manual" and rst_path.name == "index.rst"): + message = "Expected directive to only be used in user_manual/index.rst" + error = self.state_machine.reporter.error(message, line=self.lineno) + return [error] + + # Find all the topic labels in this file and construct navigation badges + # for them. + label_pattern = re.compile(r"^\.\. _(topic_.+):$", re.MULTILINE) + topic_labels = label_pattern.findall(rst_path.read_text()) + # The 'current' topic is highlighted differently. + badges = { + label: "bdg-ref-primary" + if label == self.content[0] + else "bdg-ref-primary-line" + for label in topic_labels + } + # Parse the badges as RST. + node = nodes.Element() + self.state.nested_parse( + StringList([f":{badge}:`{label}`" for label, badge in badges.items()]), + self.content_offset, + node, + ) + + # Construct the Diataxis tab-set. + tab_items = [ + self._tab_item(diataxis=diataxis, tags=self.content[0]) + for diataxis in Diataxis + ] + tab_items_str = "\n\n".join(tab_items) + tab_set = "\n".join( + [ + ".. tab-set::", + "", + self._indent(tab_items_str), + ] + ) + # Parse the tab set as RST. + self.state.nested_parse( + StringList(tab_set.splitlines()), self.content_offset, node + ) + + return node.children + + +def validate_items(app: Sphinx, builder: Builder) -> None: + """Validate that each user manual page has a single correctly configured item.""" + env = app.env + found_docs: typing.Iterable[str] = env.found_docs + + # Read-only iterable of all sphinx-needs items; only valid in the write phase. + needs_view = get_needs_view(app) + # Group needs by docname + by_doc: dict[Path, list[NeedsInfoType]] = {} + for need_id in needs_view: + need = needs_view[need_id] + doc_name = need.get("docname") + if not doc_name: + # External/imported needs may have no docname; skip page accounting + continue + by_doc.setdefault(Path(doc_name), []).append(need) + + def _get_expected_type(doc_path: Path) -> typing.Optional[Diataxis]: + """Get the expected Diataxis type for the given document path.""" + parents_and_diataxis = [ + (Path("generated/api"), Diataxis.REFERENCE), + (Path("generated/gallery"), Diataxis.HOW_TO), + (Path("user_manual/tutorial"), Diataxis.TUTORIAL), + (Path("user_manual/explanation"), Diataxis.EXPLANATION), + (Path("user_manual/how_to"), Diataxis.HOW_TO), + (Path("user_manual/reference"), Diataxis.REFERENCE), + ] + expected = None + for parent, diataxis in parents_and_diataxis: + if parent in doc_path.parents: + expected = diataxis + break + if Path("generated/gallery") in doc_path.parents and doc_path.name == "index": + expected = None + if doc_path.name == "sg_execution_times": + expected = None + return expected + + for doc_name in found_docs: + doc_path = Path(doc_name) + expected_type = _get_expected_type(doc_path) + if expected_type is not None: + problem_prefix = "Page expected to have exactly 1 sphinx-needs item;" + try: + (page_need,) = by_doc[doc_path] + except KeyError: + problem = f"{problem_prefix} found 0." + logger.error(problem, location=doc_name) + continue + except ValueError: + count = len(by_doc[doc_path]) + problem = f"{problem_prefix} found {count}." + logger.error(problem, location=doc_name) + continue + + if (page_type := page_need["type"]) != expected_type: + problem = ( + "sphinx-needs item expected to have type " + f"'{expected_type}'; found type '{page_type}'." + ) + logger.error(problem, location=doc_name) + + if (line_no := page_need.get("lineno")) > 25: + # Ensures that links to the needs directive take reader to the + # start of the page. + problem = ( + "sphinx-needs item expected to be defined within " + f"first 25 lines; found at line {line_no}." + ) + logger.error(problem, location=doc_name) + + # Title is not validated as it is always populated. + + if page_need["content"] == "": + problem = "sphinx-needs item must have non-empty content section." + logger.error(problem, location=doc_name) + + tags = page_need.get("tags", []) + if [tag for tag in tags if tag.startswith("topic_")] == []: + problem = ( + "sphinx-needs item must have at least one 'topic_xxx' tag " + "in its 'tags' field." + ) + logger.error(problem, location=doc_name) + + +def setup(app: Sphinx): + """Set up the Sphinx extension. + + This function is expected by Sphinx to register the extension. + """ + # Connect at write-started so needs are fully collected & resolved. + app.connect("write-started", validate_items) + + app.add_directive("diataxis-page-list", DiataxisDirective) + + return {"version": "0.1"} diff --git a/docs/src/further_topics/dataless_cubes.rst b/docs/src/user_manual/explanation/dataless_cubes.rst similarity index 96% rename from docs/src/further_topics/dataless_cubes.rst rename to docs/src/user_manual/explanation/dataless_cubes.rst index d0b592dfb6..1c4ec64a2c 100644 --- a/docs/src/further_topics/dataless_cubes.rst +++ b/docs/src/user_manual/explanation/dataless_cubes.rst @@ -1,3 +1,8 @@ +.. explanation:: Dataless Cubes + :tags: topic_data_model + + Read about Iris' support for Cubes with no data payload. + .. _dataless-cubes: ============== diff --git a/docs/src/further_topics/ugrid/images/data_structured_grid.svg b/docs/src/user_manual/explanation/images/data_structured_grid.svg similarity index 100% rename from docs/src/further_topics/ugrid/images/data_structured_grid.svg rename to docs/src/user_manual/explanation/images/data_structured_grid.svg diff --git a/docs/src/further_topics/ugrid/images/data_ugrid_mesh.svg b/docs/src/user_manual/explanation/images/data_ugrid_mesh.svg similarity index 100% rename from docs/src/further_topics/ugrid/images/data_ugrid_mesh.svg rename to docs/src/user_manual/explanation/images/data_ugrid_mesh.svg diff --git a/docs/src/further_topics/ugrid/images/geovistalogo.svg b/docs/src/user_manual/explanation/images/geovistalogo.svg similarity index 100% rename from docs/src/further_topics/ugrid/images/geovistalogo.svg rename to docs/src/user_manual/explanation/images/geovistalogo.svg diff --git a/docs/src/further_topics/ugrid/images/iris-esmf-regrid.svg b/docs/src/user_manual/explanation/images/iris-esmf-regrid.svg similarity index 100% rename from docs/src/further_topics/ugrid/images/iris-esmf-regrid.svg rename to docs/src/user_manual/explanation/images/iris-esmf-regrid.svg diff --git a/docs/src/userguide/multi_array.svg b/docs/src/user_manual/explanation/images/multi_array.svg similarity index 100% rename from docs/src/userguide/multi_array.svg rename to docs/src/user_manual/explanation/images/multi_array.svg diff --git a/docs/src/userguide/multi_array_to_cube.svg b/docs/src/user_manual/explanation/images/multi_array_to_cube.svg similarity index 100% rename from docs/src/userguide/multi_array_to_cube.svg rename to docs/src/user_manual/explanation/images/multi_array_to_cube.svg diff --git a/docs/src/further_topics/ugrid/images/ugrid_edge_data.svg b/docs/src/user_manual/explanation/images/ugrid_edge_data.svg similarity index 100% rename from docs/src/further_topics/ugrid/images/ugrid_edge_data.svg rename to docs/src/user_manual/explanation/images/ugrid_edge_data.svg diff --git a/docs/src/further_topics/ugrid/images/ugrid_element_centres.svg b/docs/src/user_manual/explanation/images/ugrid_element_centres.svg similarity index 100% rename from docs/src/further_topics/ugrid/images/ugrid_element_centres.svg rename to docs/src/user_manual/explanation/images/ugrid_element_centres.svg diff --git a/docs/src/further_topics/ugrid/images/ugrid_node_independence.svg b/docs/src/user_manual/explanation/images/ugrid_node_independence.svg similarity index 100% rename from docs/src/further_topics/ugrid/images/ugrid_node_independence.svg rename to docs/src/user_manual/explanation/images/ugrid_node_independence.svg diff --git a/docs/src/further_topics/ugrid/images/ugrid_variable_faces.svg b/docs/src/user_manual/explanation/images/ugrid_variable_faces.svg similarity index 100% rename from docs/src/further_topics/ugrid/images/ugrid_variable_faces.svg rename to docs/src/user_manual/explanation/images/ugrid_variable_faces.svg diff --git a/docs/src/userguide/iris_cubes.rst b/docs/src/user_manual/explanation/iris_cubes.rst similarity index 98% rename from docs/src/userguide/iris_cubes.rst rename to docs/src/user_manual/explanation/iris_cubes.rst index 03b5093efc..4b615ba21e 100644 --- a/docs/src/userguide/iris_cubes.rst +++ b/docs/src/user_manual/explanation/iris_cubes.rst @@ -1,3 +1,8 @@ +.. explanation:: Iris Data Structures + :tags: topic_data_model + + Read about the core Iris data model. + .. _iris_data_structures: ==================== @@ -105,7 +110,7 @@ Suppose we have some gridded data which has 24 air temperature readings (in Kelvin) which is located at 4 different longitudes, 2 different latitudes and 3 different heights. Our data array can be represented pictorially: -.. image:: multi_array.svg +.. image:: images/multi_array.svg Where dimensions 0, 1, and 2 have lengths 3, 2 and 4 respectively. @@ -135,7 +140,7 @@ The Iris cube to represent this data would consist of: Pictorially the cube has taken on more information than a simple array: -.. image:: multi_array_to_cube.svg +.. image:: images/multi_array_to_cube.svg Additionally further information may be optionally attached to the cube. diff --git a/docs/src/userguide/iris_philosophy.rst b/docs/src/user_manual/explanation/iris_philosophy.rst similarity index 98% rename from docs/src/userguide/iris_philosophy.rst rename to docs/src/user_manual/explanation/iris_philosophy.rst index 4005d915f0..e3f7618f88 100644 --- a/docs/src/userguide/iris_philosophy.rst +++ b/docs/src/user_manual/explanation/iris_philosophy.rst @@ -1,11 +1,14 @@ +.. explanation:: Iris' Philosophy + :tags: topic_about + + Read about how and why Iris is made the way it is. + .. _iris-philosophy: **************** Iris' Philosophy **************** -.. todo:: https://github.com/SciTools/iris/issues/6511; this page belongs in 'Explanation' - .. _code-maintenance: Code Maintenance diff --git a/docs/src/community/iris_xarray.rst b/docs/src/user_manual/explanation/iris_xarray.rst similarity index 97% rename from docs/src/community/iris_xarray.rst rename to docs/src/user_manual/explanation/iris_xarray.rst index f64f64bb32..12d13a08a5 100644 --- a/docs/src/community/iris_xarray.rst +++ b/docs/src/user_manual/explanation/iris_xarray.rst @@ -1,4 +1,9 @@ -.. include:: ../common_links.inc +.. explanation:: Iris ❤️ Xarray + :tags: topic_interoperability + + Read about the similarities and differences between Iris and Xarray. + +.. include:: ../../common_links.inc ====================== Iris ❤️ :term:`Xarray` @@ -7,7 +12,7 @@ Iris ❤️ :term:`Xarray` There is a lot of overlap between Iris and :term:`Xarray`, but some important differences too. Below is a summary of the most important differences, so that you can be prepared, and to help you choose the best package for your use case. -See :doc:`phrasebook` for a broad comparison of terminology. +See :doc:`../reference/phrasebook` for a broad comparison of terminology. Overall Experience ------------------ diff --git a/docs/src/further_topics/lenient_maths.rst b/docs/src/user_manual/explanation/lenient_maths.rst similarity index 98% rename from docs/src/further_topics/lenient_maths.rst rename to docs/src/user_manual/explanation/lenient_maths.rst index 51f77fb956..feca22db20 100644 --- a/docs/src/further_topics/lenient_maths.rst +++ b/docs/src/user_manual/explanation/lenient_maths.rst @@ -1,3 +1,8 @@ +.. explanation:: Lenient Cube Maths + :tags: topic_data_model;topic_statistics + + Read about the options for handling metadata differences during Cube maths. + .. _lenient maths: Lenient Cube Maths diff --git a/docs/src/further_topics/lenient_metadata.rst b/docs/src/user_manual/explanation/lenient_metadata.rst similarity index 99% rename from docs/src/further_topics/lenient_metadata.rst rename to docs/src/user_manual/explanation/lenient_metadata.rst index 5de9ad70c4..7e1b6b26e9 100644 --- a/docs/src/further_topics/lenient_metadata.rst +++ b/docs/src/user_manual/explanation/lenient_metadata.rst @@ -1,3 +1,8 @@ +.. explanation:: Lenient Metadata + :tags: topic_data_model + + Read about the options for handling metadata differences between Cubes. + .. _lenient metadata: Lenient Metadata diff --git a/docs/src/further_topics/ugrid/data_model.rst b/docs/src/user_manual/explanation/mesh_data_model.rst similarity index 99% rename from docs/src/further_topics/ugrid/data_model.rst rename to docs/src/user_manual/explanation/mesh_data_model.rst index 1660f6d08c..bbcfd05f64 100644 --- a/docs/src/further_topics/ugrid/data_model.rst +++ b/docs/src/user_manual/explanation/mesh_data_model.rst @@ -1,3 +1,8 @@ +.. explanation:: The Mesh Data Model + :tags: topic_mesh;topic_data_model + + Read about how Iris represents unstructured mesh data. + .. include:: ../../common_links.inc .. _ugrid model: @@ -269,7 +274,7 @@ using packages such as Dask. Spatial operations on mesh data are more complex ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Detail: :doc:`operations` +Detail: :doc:`../how_to/mesh_operations` Indexing a mesh data array cannot be used for: diff --git a/docs/src/further_topics/ugrid/partner_packages.rst b/docs/src/user_manual/explanation/mesh_partners.rst similarity index 94% rename from docs/src/further_topics/ugrid/partner_packages.rst rename to docs/src/user_manual/explanation/mesh_partners.rst index f69546446c..0e1f3e341d 100644 --- a/docs/src/further_topics/ugrid/partner_packages.rst +++ b/docs/src/user_manual/explanation/mesh_partners.rst @@ -1,3 +1,8 @@ +.. explanation:: Mesh Partner Packages + :tags: topic_mesh;topic_interoperability + + Read about Python packages you can use alongside Iris to work with mesh data. + .. include:: ../../common_links.inc .. _ugrid partners: @@ -34,7 +39,7 @@ reasons: Below you can learn more about the partner packages and how they are useful. Specifics of what operations would require their installation can be found in: -:doc:`operations`. +:doc:`../how_to/mesh_operations`. .. important:: **Experimental** diff --git a/docs/src/further_topics/metadata.rst b/docs/src/user_manual/explanation/metadata.rst similarity index 99% rename from docs/src/further_topics/metadata.rst rename to docs/src/user_manual/explanation/metadata.rst index f66f253a90..589df672b4 100644 --- a/docs/src/further_topics/metadata.rst +++ b/docs/src/user_manual/explanation/metadata.rst @@ -1,4 +1,8 @@ -.. _further topics: +.. explanation:: Metadata + :tags: topic_data_model + + Read about metadata in the Iris data model e.g. names, units. + .. _metadata: Metadata diff --git a/docs/src/further_topics/missing_data_handling.rst b/docs/src/user_manual/explanation/missing_data_handling.rst similarity index 94% rename from docs/src/further_topics/missing_data_handling.rst rename to docs/src/user_manual/explanation/missing_data_handling.rst index a461a44456..be0afcb679 100644 --- a/docs/src/further_topics/missing_data_handling.rst +++ b/docs/src/user_manual/explanation/missing_data_handling.rst @@ -1,3 +1,8 @@ +.. explanation:: Missing Data Handling in Iris + :tags: topic_data_model;topic_statistics;topic_load_save + + Read about how Iris handles missing/masked data during Cube load/save/modification. + ============================= Missing Data Handling in Iris ============================= diff --git a/docs/src/further_topics/netcdf_io.rst b/docs/src/user_manual/explanation/netcdf_io.rst similarity index 99% rename from docs/src/further_topics/netcdf_io.rst rename to docs/src/user_manual/explanation/netcdf_io.rst index 1e94123fdf..d3fbf00b10 100644 --- a/docs/src/further_topics/netcdf_io.rst +++ b/docs/src/user_manual/explanation/netcdf_io.rst @@ -1,3 +1,8 @@ +.. explanation:: NetCDF I/O Handling in Iris + :tags: topic_load_save + + Read about how Iris loads and saves NetCDF files. + .. testsetup:: chunk_control import iris diff --git a/docs/src/userguide/real_and_lazy_data.rst b/docs/src/user_manual/explanation/real_and_lazy_data.rst similarity index 98% rename from docs/src/userguide/real_and_lazy_data.rst rename to docs/src/user_manual/explanation/real_and_lazy_data.rst index 2b3ecf9e64..275c870252 100644 --- a/docs/src/userguide/real_and_lazy_data.rst +++ b/docs/src/user_manual/explanation/real_and_lazy_data.rst @@ -1,3 +1,7 @@ +.. explanation:: Real and Lazy Data + :tags: data-model;topic_lazy_data + + Read about how Iris defers data loading from disk. .. _real_and_lazy_data: @@ -14,7 +18,7 @@ Real and Lazy Data ================== -We have seen in the :doc:`iris_cubes` section of the user guide that +We have seen in the :doc:`../explanation/iris_cubes` section of the user guide that Iris cubes contain data and metadata about a phenomenon. The data element of a cube is always an array, but the array may be either "real" or "lazy". diff --git a/docs/src/further_topics/um_files_loading.rst b/docs/src/user_manual/explanation/um_files_loading.rst similarity index 99% rename from docs/src/further_topics/um_files_loading.rst rename to docs/src/user_manual/explanation/um_files_loading.rst index 2d2eb973e4..8c6718805a 100644 --- a/docs/src/further_topics/um_files_loading.rst +++ b/docs/src/user_manual/explanation/um_files_loading.rst @@ -1,3 +1,8 @@ +.. explanation:: Iris Handling of PP and Fieldsfiles + :tags: topic_load_save + + Read about how Iris represents Met Office UM PP and Fieldsfiles data. + .. testsetup:: import numpy as np diff --git a/docs/src/further_topics/ux_guide.rst b/docs/src/user_manual/explanation/ux_guide.rst similarity index 86% rename from docs/src/further_topics/ux_guide.rst rename to docs/src/user_manual/explanation/ux_guide.rst index 6b0599c757..3b62e036f4 100644 --- a/docs/src/further_topics/ux_guide.rst +++ b/docs/src/user_manual/explanation/ux_guide.rst @@ -1,9 +1,14 @@ +.. explanation:: Reviewing the Iris User Experience + :tags: topic_about + + Read about how we plan to review and improve the user experience of Iris. + .. _ux_guide: Reviewing the Iris User Experience ********************************** -.. todo:: https://github.com/SciTools/iris/issues/6511; this page belongs in 'Explanation' +.. todo:: https://github.com/SciTools/iris/issues/6867; this page belongs in 'Get Involved' Often, improving and updating the existing user experience can fall behind fixing create new features, or quashing pesky bugs. To combat this, we plan to have regular development discussions to ensure diff --git a/docs/src/further_topics/which_regridder_to_use.rst b/docs/src/user_manual/explanation/which_regridder_to_use.rst similarity index 99% rename from docs/src/further_topics/which_regridder_to_use.rst rename to docs/src/user_manual/explanation/which_regridder_to_use.rst index dae273252d..cd1e227872 100644 --- a/docs/src/further_topics/which_regridder_to_use.rst +++ b/docs/src/user_manual/explanation/which_regridder_to_use.rst @@ -1,4 +1,9 @@ -.. include:: ../common_links.inc +.. explanation:: Which Regridder to Use + :tags: topic_regrid + + Read about the different regridders available in Iris. + +.. include:: ../../common_links.inc .. _which_regridder_to_use: @@ -38,7 +43,7 @@ the following form: | System** | ``src``/``tgt`` cube coordinates. | +-----------------+-----------------------------------------------------------+ | **Lazy | If the result is calculated lazily. See | -| Regridding** | :doc:`real and lazy data `.| +| Regridding** | :doc:`real and lazy data `. | +-----------------+-----------------------------------------------------------+ | **Weights | See `regridder performance`_. | | Caching** | | diff --git a/docs/src/why_iris.rst b/docs/src/user_manual/explanation/why_iris.rst similarity index 94% rename from docs/src/why_iris.rst rename to docs/src/user_manual/explanation/why_iris.rst index a5f137b9b8..d7df72d8ad 100644 --- a/docs/src/why_iris.rst +++ b/docs/src/user_manual/explanation/why_iris.rst @@ -1,3 +1,8 @@ +.. explanation:: Why Iris + :tags: topic_about + + Read about the Iris Python package and why you might want to use it. + .. _why_iris: Why Iris diff --git a/docs/src/further_topics/filtering_warnings.rst b/docs/src/user_manual/how_to/filtering_warnings.rst similarity index 93% rename from docs/src/further_topics/filtering_warnings.rst rename to docs/src/user_manual/how_to/filtering_warnings.rst index 204049942b..d2217f326e 100644 --- a/docs/src/further_topics/filtering_warnings.rst +++ b/docs/src/user_manual/how_to/filtering_warnings.rst @@ -1,3 +1,8 @@ +.. how-to:: Filtering Warnings + :tags: topic_troubleshooting + + How to customise Iris' warnings to only see those you need. + .. _filtering-warnings: ================== @@ -49,9 +54,9 @@ Warnings: >>> my_operation() ... - iris/coord_systems.py:445: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. + iris/coord_systems.py:451: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. warnings.warn(wmsg, category=iris.warnings.IrisUserWarning) - iris/coord_systems.py:771: IrisDefaultingWarning: Discarding false_easting and false_northing that are not used by Cartopy. + iris/coord_systems.py:777: IrisDefaultingWarning: Discarding false_easting and false_northing that are not used by Cartopy. warnings.warn( Warnings can be suppressed using the Python warnings filter with the ``ignore`` @@ -112,7 +117,7 @@ You can target specific Warning messages, e.g. ... warnings.filterwarnings("ignore", message="Discarding false_easting") ... my_operation() ... - iris/coord_systems.py:445: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. + iris/coord_systems.py:451: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. warnings.warn(wmsg, category=iris.warnings.IrisUserWarning) :: @@ -127,16 +132,16 @@ Or you can target Warnings raised by specific lines of specific modules, e.g. .. doctest:: filtering_warnings >>> with warnings.catch_warnings(): - ... warnings.filterwarnings("ignore", module="iris.coord_systems", lineno=445) + ... warnings.filterwarnings("ignore", module="iris.coord_systems", lineno=451) ... my_operation() ... - iris/coord_systems.py:771: IrisDefaultingWarning: Discarding false_easting and false_northing that are not used by Cartopy. + iris/coord_systems.py:777: IrisDefaultingWarning: Discarding false_easting and false_northing that are not used by Cartopy. warnings.warn( :: - python -W ignore:::iris.coord_systems:445 - export PYTHONWARNINGS=ignore:::iris.coord_systems:445 + python -W ignore:::iris.coord_systems:451 + export PYTHONWARNINGS=ignore:::iris.coord_systems:451 Warnings from a Common Source ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -190,7 +195,7 @@ module during execution: ... ) ... my_operation() ... - iris/coord_systems.py:445: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. + iris/coord_systems.py:451: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. warnings.warn(wmsg, category=iris.warnings.IrisUserWarning) ---- diff --git a/docs/src/further_topics/ugrid/images/fesom_mesh.png b/docs/src/user_manual/how_to/images/fesom_mesh.png similarity index 100% rename from docs/src/further_topics/ugrid/images/fesom_mesh.png rename to docs/src/user_manual/how_to/images/fesom_mesh.png diff --git a/docs/src/further_topics/ugrid/images/orca_grid.png b/docs/src/user_manual/how_to/images/orca_grid.png similarity index 100% rename from docs/src/further_topics/ugrid/images/orca_grid.png rename to docs/src/user_manual/how_to/images/orca_grid.png diff --git a/docs/src/further_topics/ugrid/images/plotting.png b/docs/src/user_manual/how_to/images/plotting.png similarity index 100% rename from docs/src/further_topics/ugrid/images/plotting.png rename to docs/src/user_manual/how_to/images/plotting.png diff --git a/docs/src/further_topics/ugrid/images/smc_mesh.png b/docs/src/user_manual/how_to/images/smc_mesh.png similarity index 100% rename from docs/src/further_topics/ugrid/images/smc_mesh.png rename to docs/src/user_manual/how_to/images/smc_mesh.png diff --git a/docs/src/installing.rst b/docs/src/user_manual/how_to/installing.rst similarity index 97% rename from docs/src/installing.rst rename to docs/src/user_manual/how_to/installing.rst index a0a3fd2c62..d7832733d4 100644 --- a/docs/src/installing.rst +++ b/docs/src/user_manual/how_to/installing.rst @@ -1,3 +1,8 @@ +.. how-to:: Installing + :tags: topic_about + + How to install the Iris Python package. + .. _installing_iris: Installing diff --git a/docs/src/further_topics/ugrid/other_meshes.rst b/docs/src/user_manual/how_to/mesh_conversions.rst similarity index 98% rename from docs/src/further_topics/ugrid/other_meshes.rst rename to docs/src/user_manual/how_to/mesh_conversions.rst index 19f220be82..c465f9e9da 100644 --- a/docs/src/further_topics/ugrid/other_meshes.rst +++ b/docs/src/user_manual/how_to/mesh_conversions.rst @@ -1,10 +1,15 @@ +.. how-to:: Converting Other Mesh Formats + :tags: topic_mesh;topic_interoperability + + How to convert other mesh formats into Iris' Mesh Data Model. + .. _other_meshes: Converting Other Mesh Formats ***************************** Iris' Mesh Data Model is based primarily on the CF-UGRID conventions (see -:doc:`data_model`), but other mesh formats can be converted to fit into this +:doc:`../../user_manual/explanation/mesh_data_model`), but other mesh formats can be converted to fit into this model, **enabling use of Iris' specialised mesh support**. Below are some examples demonstrating how this works for various mesh formats. diff --git a/docs/src/further_topics/ugrid/operations.rst b/docs/src/user_manual/how_to/mesh_operations.rst similarity index 98% rename from docs/src/further_topics/ugrid/operations.rst rename to docs/src/user_manual/how_to/mesh_operations.rst index 14e746352f..33d1ad0a1e 100644 --- a/docs/src/further_topics/ugrid/operations.rst +++ b/docs/src/user_manual/how_to/mesh_operations.rst @@ -1,10 +1,15 @@ +.. how-to:: Working with Mesh Data + :tags: topic_mesh;topic_load_save;topic_plotting;topic_regrid;topic_statistics + + How to perform common Iris operations on unstructured mesh data. + .. _ugrid operations: Working with Mesh Data ********************** .. note:: Several of the operations below rely on the optional dependencies - mentioned in :doc:`partner_packages`. + mentioned in :doc:`../../user_manual/explanation/mesh_partners`. Operations Summary ------------------ @@ -529,7 +534,7 @@ Region Extraction .. rubric:: |tagline: region extraction| -As described in :doc:`data_model`, indexing for a range along a +As described in :doc:`../../user_manual/explanation/mesh_data_model`, indexing for a range along a :class:`~iris.cube.Cube`\'s :meth:`~iris.cube.Cube.mesh_dim` will not provide a contiguous region, since **position on the unstructured dimension is unrelated to spatial position**. This means that subsetted @@ -818,7 +823,7 @@ user. Keep an eye on memory demand when comparing large :class:`~iris.mesh.MeshXY`\es, but note that :class:`~iris.mesh.MeshXY`\ equality is enabled for lazy - processing (:doc:`/userguide/real_and_lazy_data`), so if the + processing (:doc:`/user_manual/explanation/real_and_lazy_data`), so if the :class:`~iris.mesh.MeshXY`\es being compared are lazy the process will use less memory than their total size. @@ -829,7 +834,7 @@ Combining Cubes .. rubric:: |tagline: combining cubes| Merging or concatenating :class:`~iris.cube.Cube`\s (described in -:doc:`/userguide/merge_and_concat`) with two different +:doc:`../tutorial/merge_and_concat`) with two different :class:`~iris.mesh.MeshXY`\es is not possible - a :class:`~iris.cube.Cube` must be associated with just a single :class:`~iris.mesh.MeshXY`, and merge/concatenate are not yet @@ -855,7 +860,7 @@ Arithmetic .. rubric:: |tagline: arithmetic| -Cube Arithmetic (described in :doc:`/userguide/cube_maths`) +Cube Arithmetic (described in :doc:`../tutorial/cube_maths`) has been extended to handle :class:`~iris.cube.Cube`\s that include :class:`~iris.mesh.MeshCoord`\s, and hence have a ``cube.mesh``. diff --git a/docs/src/userguide/navigating_a_cube.rst b/docs/src/user_manual/how_to/navigating_a_cube.rst similarity index 98% rename from docs/src/userguide/navigating_a_cube.rst rename to docs/src/user_manual/how_to/navigating_a_cube.rst index ec3cd8e0dc..2e4f3c0ca9 100644 --- a/docs/src/userguide/navigating_a_cube.rst +++ b/docs/src/user_manual/how_to/navigating_a_cube.rst @@ -1,3 +1,8 @@ +.. how-to:: Navigating a Cube + :tags: topic_data_model + + How to access the properties of a Cube. + ================= Navigating a Cube ================= @@ -66,7 +71,7 @@ and :attr:`Cube.units ` respectively:: Interrogating these with the standard :func:`type` function will tell you that ``standard_name`` and ``long_name`` are either a string or ``None``, and ``units`` is an instance of :class:`iris.unit.Unit`. A more in depth discussion on -the cube units and their functional effects can be found at the end of :doc:`cube_maths`. +the cube units and their functional effects can be found at the end of :doc:`../tutorial/cube_maths`. You can access a string representing the "name" of a cube with the :meth:`Cube.name() ` method:: @@ -94,7 +99,7 @@ Each cube also has a :mod:`numpy` array which represents the phenomenon of the c print(cube.ndim) For more on the benefits, handling and uses of lazy data, see - :doc:`Real and Lazy Data ` + :doc:`Real and Lazy Data ` You can change the units of a cube using the :meth:`~iris.cube.Cube.convert_units` method. For example:: diff --git a/docs/src/community/plugins.rst b/docs/src/user_manual/how_to/plugins.rst similarity index 93% rename from docs/src/community/plugins.rst rename to docs/src/user_manual/how_to/plugins.rst index 0d79d64623..ba993eceeb 100644 --- a/docs/src/community/plugins.rst +++ b/docs/src/user_manual/how_to/plugins.rst @@ -1,3 +1,8 @@ +.. how-to:: Plugins + :tags: topic_interoperability;topic_about + + How to create and use plugins to extend Iris' functionality. + .. _namespace package: https://packaging.python.org/en/latest/guides/packaging-namespace-packages/ .. _community_plugins: diff --git a/docs/src/user_manual/index.rst b/docs/src/user_manual/index.rst new file mode 100644 index 0000000000..6885c51dec --- /dev/null +++ b/docs/src/user_manual/index.rst @@ -0,0 +1,173 @@ +.. comment: + now that User Manual is the official top-level, and the User Guide is a + sub-section, the original labels have been relocated here. + +.. _user_guide_index: +.. _user_guide_introduction: +.. _user_manual_index: + +User Manual +=========== + +Welcome to the Iris User Manual! + +We encourage exploring our User Manual pages using the tabbed sections below, +which combine the `Diataxis`_ framework and topic-based filters to find content +best suited to your purpose today. Alternatively, you can use the sidebar to +navigate by section. + +.. todo: + Should the sections also be offered as another Diataxis tab? This would allow + topic-based filtering, and allow all pages to be found through the same + route. + +.. comment: + The tree structure for user_manual is specified here. As mentioned in the + text, we prefer readers to use the tabbed sections below, so the toctree is + hidden - not rendered in the text, only in the sidebar. This toctree is + expected to be section_indexes/* pages; with each of those pages + providing the remaining sub-structure. + + +.. toctree:: + :maxdepth: 1 + :hidden: + + section_indexes/get_started + section_indexes/userguide + /generated/gallery/index + Iris API + section_indexes/dask_best_practices + section_indexes/mesh_support + section_indexes/metadata_arithmetic + section_indexes/community + section_indexes/general + +.. _topic_all: + +All +--- + +.. diataxis-page-list:: topic_all + +By Topic +-------- + +.. _topic_data_model: + +topic: ``data_model`` +^^^^^^^^^^^^^^^^^^^^^ + +Pages about the :class:`~iris.cube.Cube` class and its associated components +such as :class:`~iris.coords.Coord` and :class:`~iris.mesh.MeshXY`. + +.. diataxis-page-list:: topic_data_model + +.. _topic_load_save: + +topic: ``load_save`` +^^^^^^^^^^^^^^^^^^^^ + +Pages about reading from files into the data model, and writing from the data +model to files. + +.. diataxis-page-list:: topic_load_save + +.. _topic_lazy_data: + +topic: ``lazy_data`` +^^^^^^^^^^^^^^^^^^^^ + +Pages about Iris' implementation of parallel and out-of-core data handling, via +Dask. See :term:`Lazy Data`. + +.. diataxis-page-list:: topic_lazy_data + +.. _topic_plotting: + +topic: ``plotting`` +^^^^^^^^^^^^^^^^^^^ + +Pages about Iris' use of :term:`Cartopy` to plot :class:`~iris.cube.Cube` data. + +.. diataxis-page-list:: topic_plotting + +.. _topic_statistics: + +topic: ``statistics`` +^^^^^^^^^^^^^^^^^^^^^ + +.. todo: not sure about this topic - very unclear scope. + +Pages about statistical and mathematical operations on :class:`~iris.cube.Cube` +data, e.g. computing means, differences, etc. + +.. diataxis-page-list:: topic_statistics + +.. _topic_regrid: + +topic: ``regrid`` +^^^^^^^^^^^^^^^^^ + +Pages about interpolating (1D) and regridding (2D) data from one set of +coordinates to another. Commonly used to move between different XY grids. + +.. diataxis-page-list:: topic_regrid + +.. _topic_customisation: + +topic: ``customisation`` +^^^^^^^^^^^^^^^^^^^^^^^^ + +Pages about configurable Iris behaviour. + +.. diataxis-page-list:: topic_customisation + +.. _topic_troubleshooting: + +topic: ``troubleshooting`` +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Pages about problems/exceptions you may encounter when using Iris, and how to +best handle them. + +.. diataxis-page-list:: topic_troubleshooting + +.. _topic_experimental: + +topic: ``experimental`` +^^^^^^^^^^^^^^^^^^^^^^^ + +Pages about API that is still subject to change. + +.. diataxis-page-list:: topic_experimental + +.. _topic_interoperability: + +topic: ``interoperability`` +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Pages about using Iris alongside other libraries and tools. + +.. diataxis-page-list:: topic_interoperability + +.. _topic_mesh: + +topic: ``mesh`` +^^^^^^^^^^^^^^^ + +Pages about Iris' support for unstructured mesh data. + +.. diataxis-page-list:: topic_mesh + +.. _topic_about: + +topic: ``about`` +^^^^^^^^^^^^^^^^ + +Pages about the non-code aspects of Iris: philosophy, installation, etc. + +.. diataxis-page-list:: topic_about + + +.. _Diataxis: https://diataxis.fr/ diff --git a/docs/src/userguide/citation.rst b/docs/src/user_manual/reference/citation.rst similarity index 88% rename from docs/src/userguide/citation.rst rename to docs/src/user_manual/reference/citation.rst index d0496f4876..00991e1a70 100644 --- a/docs/src/userguide/citation.rst +++ b/docs/src/user_manual/reference/citation.rst @@ -1,3 +1,8 @@ +.. z_reference:: Citing Iris + :tags: topic_about + + Information on the correct way to cite the Iris Python package. + .. _Citing_Iris: =========== diff --git a/docs/src/userguide/glossary.rst b/docs/src/user_manual/reference/glossary.rst similarity index 86% rename from docs/src/userguide/glossary.rst rename to docs/src/user_manual/reference/glossary.rst index 7de88462e2..bb4d8a3e95 100644 --- a/docs/src/userguide/glossary.rst +++ b/docs/src/user_manual/reference/glossary.rst @@ -1,4 +1,9 @@ -.. include:: ../common_links.inc +.. z_reference:: Glossary + :tags: topic_data_model;topic_about;topic_load_save;topic_lazy_data;topic_plotting;topic_statistics;topic_regrid;topic_customisation;topic_troubleshooting + + Information on common terms used within Iris documentation. + +.. include:: ../../common_links.inc .. _glossary: @@ -40,7 +45,7 @@ Glossary representing the cube as a whole. | **Related:** :term:`Cube` - | **More information:** :doc:`iris_cubes` + | **More information:** :doc:`../explanation/iris_cubes` | Cube @@ -55,7 +60,7 @@ Glossary - :term:`Coordinate Factories ` | **Related:** :term:`NumPy` - | **More information:** :doc:`iris_cubes` + | **More information:** :doc:`../explanation/iris_cubes` | Cell Method @@ -64,7 +69,7 @@ Glossary MEAN or SUM operation. | **Related:** :term:`Cube` - | **More information:** :doc:`iris_cubes` + | **More information:** :doc:`../explanation/iris_cubes` | Coordinate Factory @@ -75,7 +80,7 @@ Glossary "height above ground level" coordinate. | **Related:** :term:`Cube` - | **More information:** :doc:`iris_cubes` + | **More information:** :doc:`../explanation/iris_cubes` | @@ -85,7 +90,7 @@ Glossary so that not all data is in RAM at once. | **Related:** :term:`Lazy Data` **|** :term:`NumPy` - | **More information:** :doc:`real_and_lazy_data` + | **More information:** :doc:`../explanation/real_and_lazy_data` | Fields File (FF) Format @@ -111,7 +116,7 @@ Glossary thanks to parallel processing. | **Related:** :term:`Dask` **|** :term:`Real Data` - | **More information:** :doc:`real_and_lazy_data` + | **More information:** :doc:`../explanation/real_and_lazy_data` | Long Name @@ -119,7 +124,7 @@ Glossary the same restraints as :term:`standard name`. | **Related:** :term:`Standard Name` **|** :term:`Cube` - | **More information:** :doc:`iris_cubes` + | **More information:** :doc:`../explanation/iris_cubes` | Matplotlib @@ -137,7 +142,7 @@ Glossary e.g. :term:`units ` or :term:`Cell Methods ` | **Related:** :term:`Phenomenon` **|** :term:`Cube` - | **More information:** :doc:`../further_topics/metadata` + | **More information:** :doc:`../explanation/metadata` | NetCDF Format @@ -167,7 +172,7 @@ Glossary | **Related:** :term:`Metadata` **|** :term:`Standard Name` **|** :term:`Cube` - | **More information:** :doc:`iris_cubes` + | **More information:** :doc:`../explanation/iris_cubes` | Post Processing (PP) Format @@ -183,7 +188,7 @@ Glossary on the hard drive. | **Related:** :term:`Lazy Data` **|** :term:`NumPy` - | **More information:** :doc:`real_and_lazy_data` + | **More information:** :doc:`../explanation/real_and_lazy_data` | Standard Name @@ -191,14 +196,14 @@ Glossary defined at `CF Standard Names `_. | **Related:** :term:`Long Name` **|** :term:`Cube` - | **More information:** :doc:`iris_cubes` + | **More information:** :doc:`../explanation/iris_cubes` | Unit The unit with which the :term:`phenomenon` is measured e.g. m / sec. | **Related:** :term:`Cube` - | **More information:** :doc:`iris_cubes` + | **More information:** :doc:`../explanation/iris_cubes` | Xarray diff --git a/docs/src/community/phrasebook.rst b/docs/src/user_manual/reference/phrasebook.rst similarity index 92% rename from docs/src/community/phrasebook.rst rename to docs/src/user_manual/reference/phrasebook.rst index bcd91cca83..c952988c82 100644 --- a/docs/src/community/phrasebook.rst +++ b/docs/src/user_manual/reference/phrasebook.rst @@ -1,4 +1,9 @@ -.. include:: ../common_links.inc +.. z_reference:: Phrasebook + :tags: topic_interoperability + + Information on terminology differences between Iris and similar packages. + +.. include:: ../../common_links.inc .. _phrasebook: diff --git a/docs/src/community/index.rst b/docs/src/user_manual/section_indexes/community.rst similarity index 83% rename from docs/src/community/index.rst rename to docs/src/user_manual/section_indexes/community.rst index 1462f881a8..f2bc926b1e 100644 --- a/docs/src/community/index.rst +++ b/docs/src/user_manual/section_indexes/community.rst @@ -1,4 +1,4 @@ -.. include:: ../common_links.inc +.. include:: ../../common_links.inc .. todo: consider scientific-python.org @@ -7,6 +7,8 @@ Iris in the Community ===================== +.. todo:: https://github.com/SciTools/iris/issues/6867 - this section belongs in 'Get Involved' + Iris aims to be a valuable member of the open source scientific Python community. @@ -39,15 +41,15 @@ smoother interoperability: .. not using toctree due to combination of child pages and cross-references. * The :mod:`iris.pandas` module -* :doc:`iris_xarray` -* :doc:`phrasebook` +* :doc:`../explanation/iris_xarray` +* :doc:`../reference/phrasebook` .. toctree:: :maxdepth: 1 :hidden: - iris_xarray - phrasebook + ../explanation/iris_xarray + ../reference/phrasebook Plugins ------- @@ -57,4 +59,4 @@ Iris can be extended with **plugins**! See below for further information: .. toctree:: :maxdepth: 2 - plugins + ../how_to/plugins diff --git a/docs/src/further_topics/dask_best_practices/index.rst b/docs/src/user_manual/section_indexes/dask_best_practices.rst similarity index 95% rename from docs/src/further_topics/dask_best_practices/index.rst rename to docs/src/user_manual/section_indexes/dask_best_practices.rst index 79de2692bd..109d328b82 100644 --- a/docs/src/further_topics/dask_best_practices/index.rst +++ b/docs/src/user_manual/section_indexes/dask_best_practices.rst @@ -102,7 +102,7 @@ this with:: dask.config.set(num_workers=N) -For an example, see :doc:`dask_bags_and_greed`. +For an example, see :doc:`../tutorial/dask_bags_and_greed`. Alternatively, when there is only one CPU allocated, it may actually be more efficient to use a "synchronous" scheduler instead, with:: @@ -194,7 +194,7 @@ If the file(s) being loaded contain multiple fields, this can lead to an excessive amount of chunks which will result in poor performance. When the default chunking is not appropriate, it is possible to rechunk. -:doc:`dask_pp_to_netcdf` provides a detailed demonstration of how Dask can optimise +:doc:`../tutorial/dask_pp_to_netcdf` provides a detailed demonstration of how Dask can optimise that process. @@ -208,14 +208,14 @@ If you feel you have an example of a Dask best practice that you think may be he please share them with us by raising a new `discussion on the Iris repository `_. -* :doc:`dask_pp_to_netcdf` -* :doc:`dask_parallel_loop` -* :doc:`dask_bags_and_greed` +* :doc:`../tutorial/dask_pp_to_netcdf` +* :doc:`../tutorial/dask_parallel_loop` +* :doc:`../tutorial/dask_bags_and_greed` .. toctree:: :hidden: :maxdepth: 1 - dask_pp_to_netcdf - dask_parallel_loop - dask_bags_and_greed + ../tutorial/dask_pp_to_netcdf + ../tutorial/dask_parallel_loop + ../tutorial/dask_bags_and_greed diff --git a/docs/src/user_manual/section_indexes/general.rst b/docs/src/user_manual/section_indexes/general.rst new file mode 100644 index 0000000000..4f7e94cbe4 --- /dev/null +++ b/docs/src/user_manual/section_indexes/general.rst @@ -0,0 +1,23 @@ +General +======= + +The pages below do not belong to any other User Manual section. For the best +experience: we encourage you to explore the User Manual via topic or `Diataxis`_ +filters, as seen in the :doc:`../index` top page. + +.. toctree:: + :maxdepth: 1 + + ../reference/citation + ../tutorial/controlling_merge + ../explanation/dataless_cubes + ../how_to/filtering_warnings + ../reference/glossary + ../explanation/iris_philosophy + ../explanation/missing_data_handling + ../explanation/netcdf_io + ../explanation/um_files_loading + ../explanation/ux_guide + ../explanation/which_regridder_to_use + +.. _Diataxis: https://diataxis.fr/ diff --git a/docs/src/user_manual/section_indexes/get_started.rst b/docs/src/user_manual/section_indexes/get_started.rst new file mode 100644 index 0000000000..f95bbf9635 --- /dev/null +++ b/docs/src/user_manual/section_indexes/get_started.rst @@ -0,0 +1,29 @@ +.. _getting_started_index: + +Get Started +=========== + +Quick Start +----------- + +This will get you up and running with just 5 minutes of reading: + +- :ref:`installing_iris` +- :ref:`iris_data_structures` +- The first part of: :ref:`loading_iris_cubes` + +Base Understanding +------------------ + +If you prefer to begin with a richer understanding, these are the pages to read: + +- :ref:`why_iris` +- Browse for an idea of Iris' capabilities: :doc:`/generated/gallery/index` +- :doc:`userguide` + +.. toctree:: + :maxdepth: 1 + :hidden: + + ../how_to/installing + ../explanation/why_iris diff --git a/docs/src/further_topics/ugrid/index.rst b/docs/src/user_manual/section_indexes/mesh_support.rst similarity index 75% rename from docs/src/further_topics/ugrid/index.rst rename to docs/src/user_manual/section_indexes/mesh_support.rst index c247a9dc6d..eb046e6c8a 100644 --- a/docs/src/further_topics/ugrid/index.rst +++ b/docs/src/user_manual/section_indexes/mesh_support.rst @@ -35,10 +35,10 @@ Iris' mesh support is experimental Read on to find out more... -* :doc:`data_model` - learn why the mesh experience is so different. -* :doc:`partner_packages` - meet some optional dependencies that provide powerful mesh operations. -* :doc:`operations` - experience how your workflows will look when written for mesh data. -* :doc:`other_meshes` - check out some examples of converting various mesh formats into Iris' mesh format. +* :doc:`../explanation/mesh_data_model` - learn why the mesh experience is so different. +* :doc:`../explanation/mesh_partners` - meet some optional dependencies that provide powerful mesh operations. +* :doc:`../how_to/mesh_operations` - experience how your workflows will look when written for mesh data. +* :doc:`../how_to/mesh_conversions` - check out some examples of converting various mesh formats into Iris' mesh format. .. Need an actual TOC to get Sphinx working properly, but have hidden it in @@ -48,9 +48,9 @@ Read on to find out more... :hidden: :maxdepth: 1 - data_model - partner_packages - operations - other_meshes + ../explanation/mesh_data_model + ../explanation/mesh_partners + ../how_to/mesh_operations + ../how_to/mesh_conversions __ CF-UGRID_ diff --git a/docs/src/user_manual/section_indexes/metadata_arithmetic.rst b/docs/src/user_manual/section_indexes/metadata_arithmetic.rst new file mode 100644 index 0000000000..1f5e2c044e --- /dev/null +++ b/docs/src/user_manual/section_indexes/metadata_arithmetic.rst @@ -0,0 +1,12 @@ +Metadata and Arithmetic +======================= + +A small series of detailed pages on how Iris handles metadata, especially when +combining :class:`~iris.cube.Cube` instances via arithmetic operations. + +.. toctree:: + :maxdepth: 1 + + ../explanation/metadata + ../explanation/lenient_metadata + ../explanation/lenient_maths diff --git a/docs/src/userguide/index.rst b/docs/src/user_manual/section_indexes/userguide.rst similarity index 53% rename from docs/src/userguide/index.rst rename to docs/src/user_manual/section_indexes/userguide.rst index 2b77129a4e..8656e87773 100644 --- a/docs/src/userguide/index.rst +++ b/docs/src/user_manual/section_indexes/userguide.rst @@ -1,12 +1,9 @@ -.. _user_guide_index: -.. _user_guide_introduction: - User Guide ========== -If you are reading this user guide for the first time it is strongly -recommended that you read the user guide fully before experimenting with your -own data files. +Below is the original User Guide, written in a linear narrative style. Reading +through this will give you a comprehensive grounding in Iris' data model and +functionality. Much of the content has supplementary links to the reference documentation; you will not need to follow these links in order to understand the guide but @@ -28,18 +25,15 @@ they may serve as a useful reference for future exploration. .. toctree:: :maxdepth: 2 - iris_cubes - loading_iris_cubes - saving_iris_cubes - navigating_a_cube - subsetting_a_cube - real_and_lazy_data - plotting_a_cube - interpolation_and_regridding - merge_and_concat - cube_statistics - cube_maths - citation - iris_philosophy - glossary - ../further_topics/index + ../explanation/iris_cubes + ../tutorial/loading_iris_cubes + ../tutorial/saving_iris_cubes + ../how_to/navigating_a_cube + ../tutorial/subsetting_a_cube + ../explanation/real_and_lazy_data + ../tutorial/plotting_a_cube + ../tutorial/interpolation_and_regridding + ../tutorial/merge_and_concat + ../tutorial/cube_statistics + ../tutorial/cube_maths + diff --git a/docs/src/further_topics/controlling_merge.rst b/docs/src/user_manual/tutorial/controlling_merge.rst similarity index 98% rename from docs/src/further_topics/controlling_merge.rst rename to docs/src/user_manual/tutorial/controlling_merge.rst index 8868306d10..8239ffd7f5 100644 --- a/docs/src/further_topics/controlling_merge.rst +++ b/docs/src/user_manual/tutorial/controlling_merge.rst @@ -1,3 +1,8 @@ +.. tutorial:: Controlling Merge and Concatenate + :tags: topic_data_model;topic_customisation + + A lesson in customising how Iris merges and concatenates Cubes. + .. _controlling_merge: ================================= diff --git a/docs/src/userguide/cube_maths.rst b/docs/src/user_manual/tutorial/cube_maths.rst similarity index 98% rename from docs/src/userguide/cube_maths.rst rename to docs/src/user_manual/tutorial/cube_maths.rst index 79c91ca61b..9ca8f5e51e 100644 --- a/docs/src/userguide/cube_maths.rst +++ b/docs/src/user_manual/tutorial/cube_maths.rst @@ -1,3 +1,8 @@ +.. tutorial:: Cube Maths + :tags: topic_statistics + + A lesson in mathematical operations on Iris Cubes. + .. _cube maths: ========== @@ -5,7 +10,7 @@ Cube Maths ========== -The section :doc:`navigating_a_cube` highlighted that +The section :doc:`../how_to/navigating_a_cube` highlighted that every cube has a data attribute; this attribute can then be manipulated directly:: diff --git a/docs/src/userguide/cube_statistics.rst b/docs/src/user_manual/tutorial/cube_statistics.rst similarity index 99% rename from docs/src/userguide/cube_statistics.rst rename to docs/src/user_manual/tutorial/cube_statistics.rst index efc031aa43..5f0d6b6b23 100644 --- a/docs/src/userguide/cube_statistics.rst +++ b/docs/src/user_manual/tutorial/cube_statistics.rst @@ -1,3 +1,8 @@ +.. tutorial:: Cube Statistics + :tags: topic_statistics + + A lesson in statistical operations on Iris Cubes. + .. _cube-statistics: =============== diff --git a/docs/src/further_topics/dask_best_practices/dask_bags_and_greed.rst b/docs/src/user_manual/tutorial/dask_bags_and_greed.rst similarity index 98% rename from docs/src/further_topics/dask_best_practices/dask_bags_and_greed.rst rename to docs/src/user_manual/tutorial/dask_bags_and_greed.rst index 272ea6fc08..8d6f073e84 100644 --- a/docs/src/further_topics/dask_best_practices/dask_bags_and_greed.rst +++ b/docs/src/user_manual/tutorial/dask_bags_and_greed.rst @@ -1,3 +1,8 @@ +.. tutorial:: Dask Bags and Greedy Parallelism + :tags: topic_lazy_data + + A real-world demonstration of using Dask Bags with Iris, including hazards to watch out for. + .. _examples_bags_greed: 3. Dask Bags and Greedy Parallelism diff --git a/docs/src/further_topics/dask_best_practices/dask_parallel_loop.rst b/docs/src/user_manual/tutorial/dask_parallel_loop.rst similarity index 97% rename from docs/src/further_topics/dask_best_practices/dask_parallel_loop.rst rename to docs/src/user_manual/tutorial/dask_parallel_loop.rst index 2c19196318..977238b52b 100644 --- a/docs/src/further_topics/dask_best_practices/dask_parallel_loop.rst +++ b/docs/src/user_manual/tutorial/dask_parallel_loop.rst @@ -1,3 +1,8 @@ +.. tutorial:: Parallelising a Loop of Multiple Calls to a Third Party Library + :tags: topic_lazy_data + + A real-world demonstration of parallelising function calls with Dask. + .. _examples_parallel_loop: 2. Parallelising a Loop of Multiple Calls to a Third Party Library diff --git a/docs/src/further_topics/dask_best_practices/dask_pp_to_netcdf.rst b/docs/src/user_manual/tutorial/dask_pp_to_netcdf.rst similarity index 94% rename from docs/src/further_topics/dask_best_practices/dask_pp_to_netcdf.rst rename to docs/src/user_manual/tutorial/dask_pp_to_netcdf.rst index 28784154b4..0b8f306026 100644 --- a/docs/src/further_topics/dask_best_practices/dask_pp_to_netcdf.rst +++ b/docs/src/user_manual/tutorial/dask_pp_to_netcdf.rst @@ -1,3 +1,9 @@ +.. tutorial:: Speeding up Converting PP Files to NetCDF + :tags: topic_lazy_data;topic_load_save + + A real-world demonstration of tuning Dask and Iris for better performance + when saving data. + .. _examples_pp_to_ff: 1. Speed up Converting PP Files to NetCDF diff --git a/docs/src/userguide/concat.svg b/docs/src/user_manual/tutorial/images/concat.svg similarity index 100% rename from docs/src/userguide/concat.svg rename to docs/src/user_manual/tutorial/images/concat.svg diff --git a/docs/src/further_topics/dask_best_practices/images/grib-bottleneck.png b/docs/src/user_manual/tutorial/images/grib-bottleneck.png similarity index 100% rename from docs/src/further_topics/dask_best_practices/images/grib-bottleneck.png rename to docs/src/user_manual/tutorial/images/grib-bottleneck.png diff --git a/docs/src/further_topics/dask_best_practices/images/loop_third_party_kapture_results.png b/docs/src/user_manual/tutorial/images/loop_third_party_kapture_results.png similarity index 100% rename from docs/src/further_topics/dask_best_practices/images/loop_third_party_kapture_results.png rename to docs/src/user_manual/tutorial/images/loop_third_party_kapture_results.png diff --git a/docs/src/userguide/merge.svg b/docs/src/user_manual/tutorial/images/merge.svg similarity index 100% rename from docs/src/userguide/merge.svg rename to docs/src/user_manual/tutorial/images/merge.svg diff --git a/docs/src/userguide/merge_and_concat.svg b/docs/src/user_manual/tutorial/images/merge_and_concat.svg similarity index 100% rename from docs/src/userguide/merge_and_concat.svg rename to docs/src/user_manual/tutorial/images/merge_and_concat.svg diff --git a/docs/src/userguide/interpolation_and_regridding.rst b/docs/src/user_manual/tutorial/interpolation_and_regridding.rst similarity index 96% rename from docs/src/userguide/interpolation_and_regridding.rst rename to docs/src/user_manual/tutorial/interpolation_and_regridding.rst index 4a95276ab2..6a888d7549 100644 --- a/docs/src/userguide/interpolation_and_regridding.rst +++ b/docs/src/user_manual/tutorial/interpolation_and_regridding.rst @@ -1,3 +1,8 @@ +.. tutorial:: Cube Interpolation and Regridding + :tags: topic_regrid + + A lesson in Iris' interpolation and regridding functionality. + .. _interpolation_and_regridding: .. testsetup:: * @@ -32,8 +37,8 @@ The following are the regridding schemes that are currently available in Iris: The linear and nearest-neighbour interpolation schemes, and the linear, nearest-neighbour, and area-weighted regridding schemes support lazy regridding, i.e. if the source cube has lazy data, the resulting cube will also have lazy data. -See :doc:`real_and_lazy_data` for an introduction to lazy data. -See :doc:`../further_topics/which_regridder_to_use` for a more in depth overview of the different regridders. +See :doc:`../explanation/real_and_lazy_data` for an introduction to lazy data. +See :doc:`../explanation/which_regridder_to_use` for a more in depth overview of the different regridders. .. _interpolation: @@ -161,7 +166,7 @@ these sample points: Let's look at the original data, the interpolation line and the new data in a plot. This will help us to see what is going on: -.. plot:: userguide/regridding_plots/interpolate_column.py +.. plot:: user_manual/tutorial/regridding_plots/interpolate_column.py The red diamonds on the extremes of the altitude values show that we have extrapolated data beyond the range of the original data. In some cases this is @@ -222,7 +227,7 @@ Let's load two cubes that have different grids and coordinate systems: We can visually confirm that they are on different grids by plotting the two cubes: -.. plot:: userguide/regridding_plots/regridding_plot.py +.. plot:: user_manual/tutorial/regridding_plots/regridding_plot.py Let's regrid the ``global_air_temp`` cube onto a rotated pole grid using a linear regridding scheme. To achieve this we pass the ``rotated_psl`` @@ -231,7 +236,7 @@ cube onto: >>> rotated_air_temp = global_air_temp.regrid(rotated_psl, iris.analysis.Linear()) -.. plot:: userguide/regridding_plots/regridded_to_rotated.py +.. plot:: user_manual/tutorial/regridding_plots/regridded_to_rotated.py We could regrid the pressure values onto the global grid, but this will involve some form of extrapolation. As with interpolation, we can control the extrapolation @@ -260,7 +265,7 @@ pole grid: >>> scheme = iris.analysis.Linear(extrapolation_mode='mask') >>> global_psl = rotated_psl.regrid(global_air_temp, scheme) -.. plot:: userguide/regridding_plots/regridded_to_global.py +.. plot:: user_manual/tutorial/regridding_plots/regridded_to_global.py Notice that although we can still see the approximate shape of the rotated pole grid, the cells have now become rectangular in a plate carrée (equirectangular) projection. @@ -341,7 +346,7 @@ some data will be disregarded if it lies close to masked data. To visualise the above regrid, let's plot the original data, along with 3 distinct ``mdtol`` values to compare the result: -.. plot:: userguide/regridding_plots/regridded_to_global_area_weighted.py +.. plot:: user_manual/tutorial/regridding_plots/regridded_to_global_area_weighted.py .. _caching_a_regridder: diff --git a/docs/src/userguide/loading_iris_cubes.rst b/docs/src/user_manual/tutorial/loading_iris_cubes.rst similarity index 98% rename from docs/src/userguide/loading_iris_cubes.rst rename to docs/src/user_manual/tutorial/loading_iris_cubes.rst index ac6b370466..e54dbc9ebd 100644 --- a/docs/src/userguide/loading_iris_cubes.rst +++ b/docs/src/user_manual/tutorial/loading_iris_cubes.rst @@ -1,3 +1,8 @@ +.. tutorial:: Loading Iris Cubes + :tags: topic_load_save + + A lesson in how Iris loading works. + .. _loading_iris_cubes: =================== @@ -114,7 +119,7 @@ Notice that the result of printing a **cube** is a little more verbose than it was when printing a **list of cubes**. In addition to the very short summary which is provided when printing a list of cubes, information is provided on the coordinates which constitute the cube in question. -This was the output discussed at the end of the :doc:`iris_cubes` section. +This was the output discussed at the end of the :doc:`../explanation/iris_cubes` section. .. note:: @@ -156,7 +161,7 @@ essential descriptive information or metadata : the bulk of the actual data content will only be loaded later, as it is needed. This is referred to as 'lazy' data. It allows loading to be much quicker, and to occupy less memory. -For more on the benefits, handling and uses of lazy data, see :doc:`Real and Lazy Data `. +For more on the benefits, handling and uses of lazy data, see :doc:`Real and Lazy Data `. .. _constrained-loading: @@ -408,3 +413,4 @@ API documentation for:** :class:`iris.loading.LoadProblems`. warnings.filterwarnings("ignore") helpers.get_names = get_names_original std_names.STD_NAMES["air_temperature"] = air_temperature + iris.FUTURE.date_microseconds = False diff --git a/docs/src/userguide/merge_and_concat.rst b/docs/src/user_manual/tutorial/merge_and_concat.rst similarity index 99% rename from docs/src/userguide/merge_and_concat.rst rename to docs/src/user_manual/tutorial/merge_and_concat.rst index d754e08cc1..9ae3e61bcc 100644 --- a/docs/src/userguide/merge_and_concat.rst +++ b/docs/src/user_manual/tutorial/merge_and_concat.rst @@ -1,3 +1,8 @@ +.. tutorial:: Merge and Concatenate + :tags: topic_data_model + + A lesson in the various ways to combine Cubes along different dimensional axes. + .. _merge_and_concat: ===================== @@ -16,7 +21,7 @@ issues from occurring. Both ``merge`` and ``concatenate`` take multiple cubes as input and result in fewer cubes as output. The following diagram illustrates the two processes: -.. image:: merge_and_concat.svg +.. image:: images/merge_and_concat.svg :alt: Pictographic of merge and concatenation. :align: center @@ -128,7 +133,7 @@ make a new ``z`` dimension coordinate: The following diagram illustrates what has taken place in this example: -.. image:: merge.svg +.. image:: images/merge.svg :alt: Pictographic of merge. :align: center @@ -294,7 +299,7 @@ cubes to form a new cube with an extended ``t`` coordinate: The following diagram illustrates what has taken place in this example: -.. image:: concat.svg +.. image:: images/concat.svg :alt: Pictographic of concatenate. :align: center diff --git a/docs/src/userguide/plotting_a_cube.rst b/docs/src/user_manual/tutorial/plotting_a_cube.rst similarity index 94% rename from docs/src/userguide/plotting_a_cube.rst rename to docs/src/user_manual/tutorial/plotting_a_cube.rst index f152690835..a32464443f 100644 --- a/docs/src/userguide/plotting_a_cube.rst +++ b/docs/src/user_manual/tutorial/plotting_a_cube.rst @@ -1,3 +1,8 @@ +.. tutorial:: Plotting a Cube + :tags: topic_plotting + + A lesson on visualising Iris Cubes using Cartopy and Matplotlib. + .. _plotting_a_cube: =============== @@ -160,7 +165,7 @@ The syntax is very similar to that which you would provide to Matplotlib's equivalent :py:func:`matplotlib.pyplot.plot` and indeed all of the keyword arguments are equivalent: -.. plot:: userguide/plotting_examples/1d_simple.py +.. plot:: user_manual/tutorial/plotting_examples/1d_simple.py :include-source: For more information on how this example reduced the 2D cube to 1 dimension see @@ -179,7 +184,7 @@ to a plot. For example, the previous plot can be improved quickly by replacing **iris.plot** with **iris.quickplot**: -.. plot:: userguide/plotting_examples/1d_quickplot_simple.py +.. plot:: user_manual/tutorial/plotting_examples/1d_quickplot_simple.py :include-source: @@ -238,7 +243,7 @@ Cube Contour A simple contour plot of a cube can be created with either the :func:`iris.plot.contour` or :func:`iris.quickplot.contour` functions: -.. plot:: userguide/plotting_examples/cube_contour.py +.. plot:: user_manual/tutorial/plotting_examples/cube_contour.py :include-source: @@ -247,7 +252,7 @@ Cube Filled Contour Similarly a filled contour plot of a cube can be created with the :func:`iris.plot.contourf` or :func:`iris.quickplot.contourf` functions: -.. plot:: userguide/plotting_examples/cube_contourf.py +.. plot:: user_manual/tutorial/plotting_examples/cube_contourf.py :include-source: @@ -265,7 +270,7 @@ or :func:`iris.quickplot.pcolormesh`. and :func:`iris.quickplot.pcolormesh` will attempt to guess suitable values based on their points (see also :func:`iris.coords.Coord.guess_bounds()`). -.. plot:: userguide/plotting_examples/cube_blockplot.py +.. plot:: user_manual/tutorial/plotting_examples/cube_blockplot.py :include-source: .. _brewer-info: @@ -303,7 +308,7 @@ Available Brewer Schemes The following subset of Brewer palettes found at `colorbrewer2.org `_ are available within Iris. -.. plot:: userguide/plotting_examples/brewer.py +.. plot:: user_manual/tutorial/plotting_examples/brewer.py Plotting With Brewer @@ -313,7 +318,7 @@ To plot a cube using a Brewer colour palette, simply select one of the Iris registered Brewer colour palettes and plot the cube as normal. The Brewer palettes become available once :mod:`iris.plot` or :mod:`iris.quickplot` are imported. -.. plot:: userguide/plotting_examples/cube_brewer_contourf.py +.. plot:: user_manual/tutorial/plotting_examples/cube_brewer_contourf.py :include-source: @@ -327,5 +332,5 @@ Citations can be easily added to a plot using the The recommended text for the Cynthia Brewer citation is provided by :data:`iris.plot.BREWER_CITE`. -.. plot:: userguide/plotting_examples/cube_brewer_cite_contourf.py +.. plot:: user_manual/tutorial/plotting_examples/cube_brewer_cite_contourf.py :include-source: diff --git a/docs/src/userguide/plotting_examples/1d_quickplot_simple.py b/docs/src/user_manual/tutorial/plotting_examples/1d_quickplot_simple.py similarity index 100% rename from docs/src/userguide/plotting_examples/1d_quickplot_simple.py rename to docs/src/user_manual/tutorial/plotting_examples/1d_quickplot_simple.py diff --git a/docs/src/userguide/plotting_examples/1d_simple.py b/docs/src/user_manual/tutorial/plotting_examples/1d_simple.py similarity index 100% rename from docs/src/userguide/plotting_examples/1d_simple.py rename to docs/src/user_manual/tutorial/plotting_examples/1d_simple.py diff --git a/docs/src/userguide/plotting_examples/1d_with_legend.py b/docs/src/user_manual/tutorial/plotting_examples/1d_with_legend.py similarity index 100% rename from docs/src/userguide/plotting_examples/1d_with_legend.py rename to docs/src/user_manual/tutorial/plotting_examples/1d_with_legend.py diff --git a/docs/src/userguide/plotting_examples/brewer.py b/docs/src/user_manual/tutorial/plotting_examples/brewer.py similarity index 100% rename from docs/src/userguide/plotting_examples/brewer.py rename to docs/src/user_manual/tutorial/plotting_examples/brewer.py diff --git a/docs/src/userguide/plotting_examples/cube_blockplot.py b/docs/src/user_manual/tutorial/plotting_examples/cube_blockplot.py similarity index 100% rename from docs/src/userguide/plotting_examples/cube_blockplot.py rename to docs/src/user_manual/tutorial/plotting_examples/cube_blockplot.py diff --git a/docs/src/userguide/plotting_examples/cube_brewer_cite_contourf.py b/docs/src/user_manual/tutorial/plotting_examples/cube_brewer_cite_contourf.py similarity index 100% rename from docs/src/userguide/plotting_examples/cube_brewer_cite_contourf.py rename to docs/src/user_manual/tutorial/plotting_examples/cube_brewer_cite_contourf.py diff --git a/docs/src/userguide/plotting_examples/cube_brewer_contourf.py b/docs/src/user_manual/tutorial/plotting_examples/cube_brewer_contourf.py similarity index 100% rename from docs/src/userguide/plotting_examples/cube_brewer_contourf.py rename to docs/src/user_manual/tutorial/plotting_examples/cube_brewer_contourf.py diff --git a/docs/src/userguide/plotting_examples/cube_contour.py b/docs/src/user_manual/tutorial/plotting_examples/cube_contour.py similarity index 100% rename from docs/src/userguide/plotting_examples/cube_contour.py rename to docs/src/user_manual/tutorial/plotting_examples/cube_contour.py diff --git a/docs/src/userguide/plotting_examples/cube_contourf.py b/docs/src/user_manual/tutorial/plotting_examples/cube_contourf.py similarity index 100% rename from docs/src/userguide/plotting_examples/cube_contourf.py rename to docs/src/user_manual/tutorial/plotting_examples/cube_contourf.py diff --git a/docs/src/userguide/plotting_examples/masking_brazil_plot.py b/docs/src/user_manual/tutorial/plotting_examples/masking_brazil_plot.py similarity index 100% rename from docs/src/userguide/plotting_examples/masking_brazil_plot.py rename to docs/src/user_manual/tutorial/plotting_examples/masking_brazil_plot.py diff --git a/docs/src/userguide/plotting_examples/masking_stereographic_plot.py b/docs/src/user_manual/tutorial/plotting_examples/masking_stereographic_plot.py similarity index 100% rename from docs/src/userguide/plotting_examples/masking_stereographic_plot.py rename to docs/src/user_manual/tutorial/plotting_examples/masking_stereographic_plot.py diff --git a/docs/src/userguide/regridding_plots/interpolate_column.py b/docs/src/user_manual/tutorial/regridding_plots/interpolate_column.py similarity index 100% rename from docs/src/userguide/regridding_plots/interpolate_column.py rename to docs/src/user_manual/tutorial/regridding_plots/interpolate_column.py diff --git a/docs/src/userguide/regridding_plots/regridded_to_global.py b/docs/src/user_manual/tutorial/regridding_plots/regridded_to_global.py similarity index 100% rename from docs/src/userguide/regridding_plots/regridded_to_global.py rename to docs/src/user_manual/tutorial/regridding_plots/regridded_to_global.py diff --git a/docs/src/userguide/regridding_plots/regridded_to_global_area_weighted.py b/docs/src/user_manual/tutorial/regridding_plots/regridded_to_global_area_weighted.py similarity index 100% rename from docs/src/userguide/regridding_plots/regridded_to_global_area_weighted.py rename to docs/src/user_manual/tutorial/regridding_plots/regridded_to_global_area_weighted.py diff --git a/docs/src/userguide/regridding_plots/regridded_to_rotated.py b/docs/src/user_manual/tutorial/regridding_plots/regridded_to_rotated.py similarity index 100% rename from docs/src/userguide/regridding_plots/regridded_to_rotated.py rename to docs/src/user_manual/tutorial/regridding_plots/regridded_to_rotated.py diff --git a/docs/src/userguide/regridding_plots/regridding_plot.py b/docs/src/user_manual/tutorial/regridding_plots/regridding_plot.py similarity index 100% rename from docs/src/userguide/regridding_plots/regridding_plot.py rename to docs/src/user_manual/tutorial/regridding_plots/regridding_plot.py diff --git a/docs/src/userguide/saving_iris_cubes.rst b/docs/src/user_manual/tutorial/saving_iris_cubes.rst similarity index 97% rename from docs/src/userguide/saving_iris_cubes.rst rename to docs/src/user_manual/tutorial/saving_iris_cubes.rst index 2ffc8c47d3..50466f8261 100644 --- a/docs/src/userguide/saving_iris_cubes.rst +++ b/docs/src/user_manual/tutorial/saving_iris_cubes.rst @@ -1,3 +1,8 @@ +.. tutorial:: Saving Iris Cubes + :tags: topic_load_save + + A lesson on writing Iris Cubes to file in various formats. + .. _saving_iris_cubes: ================== diff --git a/docs/src/userguide/subsetting_a_cube.rst b/docs/src/user_manual/tutorial/subsetting_a_cube.rst similarity index 98% rename from docs/src/userguide/subsetting_a_cube.rst rename to docs/src/user_manual/tutorial/subsetting_a_cube.rst index cbf3cb4c2e..a56c4ff9fa 100644 --- a/docs/src/userguide/subsetting_a_cube.rst +++ b/docs/src/user_manual/tutorial/subsetting_a_cube.rst @@ -1,4 +1,9 @@ -.. include:: ../common_links.inc +.. tutorial:: Subsetting a Cube + :tags: topic_data_model + + A lesson on subsetting Iris Cubes by extraction, masking, and iteration. + +.. include:: ../../common_links.inc .. _subsetting_a_cube: @@ -437,7 +442,7 @@ function and this returns a copy of the cube with a :py:class:`numpy.masked_arra as the data payload, where the data outside the shape is hidden by the masked array. -.. plot:: userguide/plotting_examples/masking_brazil_plot.py +.. plot:: user_manual/tutorial/plotting_examples/masking_brazil_plot.py :include-source: We can see that the dimensions of the cube haven't changed - the plot still has @@ -460,7 +465,7 @@ data in a stereographic projection (with projected coordinates with units of metres), and mask it to only show data over the United Kingdom, based on a shapefile of the UK boundary defined in WGS84 lat-lon coordinates. -.. plot:: userguide/plotting_examples/masking_stereographic_plot.py +.. plot:: user_manual/tutorial/plotting_examples/masking_stereographic_plot.py :include-source: diff --git a/docs/src/userguide/change_management_goals.txt b/docs/src/userguide/change_management_goals.txt deleted file mode 100644 index afed1ebb98..0000000000 --- a/docs/src/userguide/change_management_goals.txt +++ /dev/null @@ -1,9 +0,0 @@ -To reduce code maintenance problems to an absolute minimum, Iris applies -defined change management procedures to ensure that : - - * you can be confident that your code will still work with a future release - - * you will be aware of future incompatibility problems in advance - - * you can defer making code compatibility changes for some time, until it suits you - diff --git a/docs/src/voted_issues.rst b/docs/src/voted_issues.rst index a550a997ba..26eaa78b07 100644 --- a/docs/src/voted_issues.rst +++ b/docs/src/voted_issues.rst @@ -5,6 +5,8 @@ Voted Issues ============ +.. todo:: https://github.com/SciTools/iris/issues/6867 - this page belongs in 'Get Involved'. + You can help us to prioritise development of new features by leaving a 👍 reaction on the header (not subsequent comments) of any issue. diff --git a/docs/src/whatsnew/1.7.rst b/docs/src/whatsnew/1.7.rst index 4c3f3197dc..ed135caf3c 100644 --- a/docs/src/whatsnew/1.7.rst +++ b/docs/src/whatsnew/1.7.rst @@ -312,8 +312,8 @@ Documentation ============= * New sections on :ref:`cube broadcasting ` and - :doc:`regridding and interpolation ` - have been added to the :doc:`user guide `. + :doc:`regridding and interpolation ` + have been added to the :doc:`User Guide `. * An example demonstrating custom log-scale colouring has been added. See :ref:`sphx_glr_generated_gallery_general_plot_anomaly_log_colouring.py`. diff --git a/docs/src/whatsnew/1.8.rst b/docs/src/whatsnew/1.8.rst index dd2ca5e155..51ab612d8c 100644 --- a/docs/src/whatsnew/1.8.rst +++ b/docs/src/whatsnew/1.8.rst @@ -220,12 +220,12 @@ Deprecations Documentation ============= -* A chapter on :doc:`merge and concatenate ` has - been added to the :doc:`user guide `. +* A chapter on :doc:`merge and concatenate ` has + been added to the :doc:`User Guide `. * A section on installing Iris using `conda `_ has - been added to the :doc:`install guide `. + been added to the :doc:`install guide `. * Updates to the chapter on - :doc:`regridding and interpolation ` - have been added to the :doc:`user guide `. + :doc:`regridding and interpolation ` + have been added to the :doc:`User Guide `. diff --git a/docs/src/whatsnew/1.9.rst b/docs/src/whatsnew/1.9.rst index 9829d8ff3b..7f16011ba0 100644 --- a/docs/src/whatsnew/1.9.rst +++ b/docs/src/whatsnew/1.9.rst @@ -64,7 +64,7 @@ Features a fixed surface type of 107. * Added several new helper functions for file-save customisation, - (see also : :doc:`Saving Iris Cubes `): + (see also : :doc:`Saving Iris Cubes `): * :meth:`iris.fileformats.grib.as_pairs` * :meth:`iris.fileformats.grib.as_messages` @@ -193,8 +193,8 @@ Deprecations Documentation ============= -* A chapter on :doc:`saving iris cubes ` has been - added to the :doc:`user guide `. +* A chapter on :doc:`saving iris cubes ` has been + added to the :doc:`User Guide `. * Added script and documentation for building a what's new page from developer-submitted contributions. See diff --git a/docs/src/whatsnew/2.0.rst b/docs/src/whatsnew/2.0.rst index 1ee159c662..a2d8bde77b 100644 --- a/docs/src/whatsnew/2.0.rst +++ b/docs/src/whatsnew/2.0.rst @@ -26,7 +26,7 @@ Features In particular, Dask's *threaded*, *multiprocessing* or *distributed* `schedulers`_ can be used in order to best utilise available compute and memory resource. For further details, see :doc:`Real and Lazy Data - `. + `. * Changes to the :class:`iris.cube.Cube`: @@ -290,8 +290,8 @@ Documentation ============= * A new UserGuide chapter on :doc:`Real and Lazy Data - ` has been added, and referenced from key - points in the :doc:`User Guide ` . + ` has been added, and referenced from key + points in the :doc:`User Guide ` . .. _Biggus: https://biggus.readthedocs.io/en/latest/ diff --git a/docs/src/whatsnew/3.0.rst b/docs/src/whatsnew/3.0.rst index 13629cd9de..fc81f67ba4 100644 --- a/docs/src/whatsnew/3.0.rst +++ b/docs/src/whatsnew/3.0.rst @@ -479,7 +479,7 @@ v3.0.4 (22 July 2021) links are more visible to users. This uses the sphinx-panels_ extension. (:pull:`3884`) -#. `@bjlittle`_ created the :ref:`Further topics ` section and +#. `@bjlittle`_ created the 'Further Topics' section and included documentation for :ref:`metadata`, :ref:`lenient metadata`, and :ref:`lenient maths`. (:pull:`3890`) diff --git a/docs/src/whatsnew/3.5.rst b/docs/src/whatsnew/3.5.rst index c6699ee842..686cfdb2ae 100644 --- a/docs/src/whatsnew/3.5.rst +++ b/docs/src/whatsnew/3.5.rst @@ -140,12 +140,12 @@ This document explains the changes made to Iris for this release and removed an ECMWF link in the ``v1.0`` What's New that was failing the linkcheck CI. (:pull:`5109`) -#. `@trexfeathers`_ added a new top-level :doc:`/community/index` section, +#. `@trexfeathers`_ added a new top-level :doc:`/user_manual/section_indexes/community` section, as a one-stop place to find out about getting involved, and how we relate to other projects. (:pull:`5025`) #. The **Iris community**, with help from the **Xarray community**, produced - the :doc:`/community/iris_xarray` page, highlighting the similarities and + the :doc:`../user_manual/explanation/iris_xarray` page, highlighting the similarities and differences between the two packages. (:pull:`5025`) #. `@bjlittle`_ added a new section to the `README.md`_ to show our support diff --git a/docs/src/whatsnew/3.7.rst b/docs/src/whatsnew/3.7.rst index fdadb20412..41ca3c4206 100644 --- a/docs/src/whatsnew/3.7.rst +++ b/docs/src/whatsnew/3.7.rst @@ -130,7 +130,7 @@ v3.7.1 (04 Mar 2024) .. _dask_guide: -#. `@HGWright`_ added a :doc:`/further_topics/dask_best_practices/index` +#. `@HGWright`_ added a :doc:`/user_manual/section_indexes/dask_best_practices` section into the user guide, containing advice and use cases to help users get the best out of Dask with Iris. (:pull:`5190`) diff --git a/docs/src/whatsnew/3.8.rst b/docs/src/whatsnew/3.8.rst index 9fa87a9337..9ec2be4722 100644 --- a/docs/src/whatsnew/3.8.rst +++ b/docs/src/whatsnew/3.8.rst @@ -215,9 +215,9 @@ v3.8.1 (04 Mar 2024) #. `@bouweandela`_ updated all hyperlinks to https. (:pull:`5621`) -#. `@ESadek-MO`_ created an index page for :ref:`further_topics_index`, and +#. `@ESadek-MO`_ created an index page for 'Further Topics', and relocated all 'Technical Papers' into - :ref:`further_topics_index`. (:pull:`5602`) + 'Further Topics'. (:pull:`5602`) #. `@trexfeathers`_ made drop-down icons visible to show which pages link to 'sub-pages'. (:pull:`5684`) diff --git a/lib/iris/__init__.py b/lib/iris/__init__.py index fc83615a40..1e943ba578 100644 --- a/lib/iris/__init__.py +++ b/lib/iris/__init__.py @@ -4,10 +4,15 @@ # See LICENSE in the root of the repository for full licensing details. """A package for handling multi-dimensional data and associated metadata. +.. z_reference:: iris + :tags: topic_load_save;topic_data_model;topic_customisation + + API reference + .. note :: The Iris documentation has further usage information, including - a :ref:`user guide ` which should be the first port of + a :ref:`user manual ` which should be the first port of call for new users. The functions in this module provide the main way to load and/or save diff --git a/lib/iris/analysis/__init__.py b/lib/iris/analysis/__init__.py index ca530cf931..cf11dde3eb 100644 --- a/lib/iris/analysis/__init__.py +++ b/lib/iris/analysis/__init__.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """A package providing :class:`iris.cube.Cube` analysis support. +.. z_reference:: iris.analysis + :tags: topic_statistics;topic_regrid + + API reference + This module defines a suite of :class:`~iris.analysis.Aggregator` instances, which are used to specify the statistical measure to calculate over a :class:`~iris.cube.Cube`, using methods such as @@ -2281,7 +2286,7 @@ def interp_order(length): Notes ------ This function does not maintain laziness when called; it realises data. -See more at :doc:`/userguide/real_and_lazy_data`. +See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ @@ -2599,7 +2604,7 @@ def clear_phenomenon_identity(cube): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ cube.rename(None) diff --git a/lib/iris/analysis/_grid_angles.py b/lib/iris/analysis/_grid_angles.py index 3ba406e02a..e54365e248 100644 --- a/lib/iris/analysis/_grid_angles.py +++ b/lib/iris/analysis/_grid_angles.py @@ -430,7 +430,7 @@ def rotate_grid_vectors(u_cube, v_cube, grid_angles_cube=None, grid_angles_kwarg Vector magnitudes will always be the same as the inputs. This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ u_out, v_out = (cube.copy() for cube in (u_cube, v_cube)) diff --git a/lib/iris/analysis/calculus.py b/lib/iris/analysis/calculus.py index 4f485c0680..6483b1c367 100644 --- a/lib/iris/analysis/calculus.py +++ b/lib/iris/analysis/calculus.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Calculus operations on :class:`iris.cube.Cube` instances. +.. z_reference:: iris.analysis.calculus + :tags: topic_statistics + + API reference + See also: :mod:`NumPy `. """ @@ -150,7 +155,7 @@ def cube_delta(cube, coord): .. note:: This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ # handle the case where a user passes a coordinate name @@ -261,7 +266,7 @@ def differentiate(cube, coord_to_differentiate): .. note:: This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ # Get the delta cube in the required differential direction. @@ -549,7 +554,7 @@ def curl(i_cube, j_cube, k_cube=None): .. note:: This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ # Get the vector quantity names. @@ -773,7 +778,7 @@ def spatial_vectors_with_phenom_name(i_cube, j_cube, k_cube=None): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ diff --git a/lib/iris/analysis/cartography.py b/lib/iris/analysis/cartography.py index d055266d98..a576d4067c 100644 --- a/lib/iris/analysis/cartography.py +++ b/lib/iris/analysis/cartography.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Various utilities and numeric transformations relevant to cartography.""" +"""Various utilities and numeric transformations relevant to cartography. + +.. z_reference:: iris.analysis.cartography + :tags: topic_statistics + + API reference +""" from collections import namedtuple import copy @@ -75,7 +81,7 @@ def wrap_lons(lons, base, period): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ # It is important to use 64bit floating precision when changing a floats # numbers range. @@ -279,7 +285,7 @@ def get_xy_grids(cube): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ x_coord, y_coord = cube.coord(axis="X"), cube.coord(axis="Y") @@ -317,7 +323,7 @@ def get_xy_contiguous_bounded_grids(cube): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ x_coord, y_coord = cube.coord(axis="X"), cube.coord(axis="Y") @@ -552,7 +558,7 @@ def cosine_latitude_weights(cube): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ # Find all latitude coordinates, we want one and only one. lat_coords = [coord for coord in cube.coords() if "latitude" in coord.name()] @@ -656,7 +662,7 @@ def project(cube, target_proj, nx=None, ny=None): .. note:: This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. .. warning:: @@ -1149,7 +1155,7 @@ def rotate_winds(u_cube, v_cube, target_cs): .. note:: This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. .. warning:: diff --git a/lib/iris/analysis/geometry.py b/lib/iris/analysis/geometry.py index 120b6dfaa6..cb72741aed 100644 --- a/lib/iris/analysis/geometry.py +++ b/lib/iris/analysis/geometry.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Various utilities related to geometric operations. +.. z_reference:: iris.analysis.geometry + :tags: topic_statistics + + API reference + .. note:: This module requires :mod:`shapely`. @@ -162,7 +167,7 @@ def geometry_area_weights(cube, geometry, normalize=False): .. note:: This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. Parameters ---------- diff --git a/lib/iris/analysis/maths.py b/lib/iris/analysis/maths.py index 24d95153b5..cef3b70d25 100644 --- a/lib/iris/analysis/maths.py +++ b/lib/iris/analysis/maths.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Basic mathematical and statistical operations.""" +"""Basic mathematical and statistical operations. + +.. z_reference:: iris.analysis.maths + :tags: topic_statistics + + API reference +""" from functools import lru_cache import inspect @@ -107,7 +113,7 @@ def abs(cube, in_place=False): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ _assert_is_cube(cube) @@ -156,7 +162,7 @@ def intersection_of_cubes(cube, other_cube): cube1, cube2 = (intersections[0], intersections[1]) This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ wmsg = ( @@ -237,7 +243,7 @@ def add(cube, other, dim=None, in_place=False): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ _assert_is_cube(cube) @@ -289,7 +295,7 @@ def subtract(cube, other, dim=None, in_place=False): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ _assert_is_cube(cube) @@ -396,7 +402,7 @@ def multiply(cube, other, dim=None, in_place=False): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ _assert_is_cube(cube) @@ -480,7 +486,7 @@ def divide(cube, other, dim=None, in_place=False): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ _assert_is_cube(cube) @@ -545,7 +551,7 @@ def exponentiate(cube, exponent, in_place=False): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ _assert_is_cube(cube) @@ -593,7 +599,7 @@ def exp(cube, in_place=False): Taking an exponential will return a cube with dimensionless units. This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ _assert_is_cube(cube) @@ -621,7 +627,7 @@ def log(cube, in_place=False): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ _assert_is_cube(cube) @@ -653,7 +659,7 @@ def log2(cube, in_place=False): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ _assert_is_cube(cube) @@ -681,7 +687,7 @@ def log10(cube, in_place=False): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ _assert_is_cube(cube) @@ -736,7 +742,7 @@ def apply_ufunc(ufunc, cube, other=None, new_unit=None, new_name=None, in_place= This function maintains laziness when called; it does not realise data. This is dependent on `ufunc` argument being a numpy operation that is compatible with lazy operation. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ if not isinstance(ufunc, np.ufunc): diff --git a/lib/iris/analysis/stats.py b/lib/iris/analysis/stats.py index 8df93571f1..283eb6c386 100644 --- a/lib/iris/analysis/stats.py +++ b/lib/iris/analysis/stats.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Statistical operations between cubes.""" +"""Statistical operations between cubes. + +.. z_reference:: iris.analysis.stats + :tags: topic_statistics + + API reference +""" import dask.array as da import numpy as np diff --git a/lib/iris/analysis/trajectory.py b/lib/iris/analysis/trajectory.py index 100c6a5de1..33837079f8 100644 --- a/lib/iris/analysis/trajectory.py +++ b/lib/iris/analysis/trajectory.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Defines a Trajectory class, and a routine to extract a sub-cube along a trajectory.""" +"""Defines a Trajectory class, and a routine to extract a sub-cube along a trajectory. + +.. z_reference:: iris.analysis.trajectory + :tags: topic_statistics + + API reference +""" import math @@ -207,7 +213,7 @@ def interpolate(cube, sample_points, method=None): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ from iris.analysis import Linear diff --git a/lib/iris/aux_factory.py b/lib/iris/aux_factory.py index e322dfeb84..3952c8c924 100644 --- a/lib/iris/aux_factory.py +++ b/lib/iris/aux_factory.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Definitions of derived coordinates.""" +"""Definitions of derived coordinates. + +.. z_reference:: iris.aux_factory + :tags: topic_data_model + + API reference +""" from abc import ABCMeta, abstractmethod import warnings diff --git a/lib/iris/common/__init__.py b/lib/iris/common/__init__.py index f9ad2bf207..fc301fe5c6 100644 --- a/lib/iris/common/__init__.py +++ b/lib/iris/common/__init__.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""A package for provisioning common Iris infrastructure.""" +"""A package for provisioning common Iris infrastructure. + +.. z_reference:: iris.common + :tags: topic_data_model;topic_statistics + + API reference +""" from .lenient import * from .metadata import * diff --git a/lib/iris/common/lenient.py b/lib/iris/common/lenient.py index d6fca461d1..b9122c518a 100644 --- a/lib/iris/common/lenient.py +++ b/lib/iris/common/lenient.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Provides the infrastructure to support lenient client/service behaviour.""" +"""Provides the infrastructure to support lenient client/service behaviour. + +.. z_reference:: iris.common.lenient + :tags: topic_data_model;topic_statistics + + API reference +""" from collections.abc import Iterable from contextlib import contextmanager diff --git a/lib/iris/common/metadata.py b/lib/iris/common/metadata.py index 55ad4e1319..93898a34de 100644 --- a/lib/iris/common/metadata.py +++ b/lib/iris/common/metadata.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Provides the infrastructure to support the common metadata API.""" +"""Provides the infrastructure to support the common metadata API. + +.. z_reference:: iris.common.metadata + :tags: topic_data_model + + API reference +""" from __future__ import annotations diff --git a/lib/iris/common/mixin.py b/lib/iris/common/mixin.py index 4cb176dc2f..aab98eb1f7 100644 --- a/lib/iris/common/mixin.py +++ b/lib/iris/common/mixin.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Provides common metadata mixin behaviour.""" +"""Provides common metadata mixin behaviour. + +.. z_reference:: iris.common.mixin + :tags: topic_data_model + + API reference +""" from __future__ import annotations diff --git a/lib/iris/common/resolve.py b/lib/iris/common/resolve.py index 49df0e66e6..366e3045e0 100644 --- a/lib/iris/common/resolve.py +++ b/lib/iris/common/resolve.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Resolve metadata common between two cubes. +.. z_reference:: iris.common.resolve + :tags: topic_data_model;topic_statistics + + API reference + Provides the infrastructure to support the analysis, identification and combination of metadata common between two :class:`~iris.cube.Cube` operands into a single resultant :class:`~iris.cube.Cube`, which will be diff --git a/lib/iris/config.py b/lib/iris/config.py index 9cec602a95..e99beb351d 100644 --- a/lib/iris/config.py +++ b/lib/iris/config.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Provides access to Iris-specific configuration values. +.. z_reference:: iris.config + :tags: topic_customisation + + API reference + The default configuration values can be overridden by creating the file ``iris/etc/site.cfg``. If it exists, this file must conform to the format defined by :mod:`configparser`. diff --git a/lib/iris/coord_categorisation.py b/lib/iris/coord_categorisation.py index 460a131a18..a497b1cfd8 100644 --- a/lib/iris/coord_categorisation.py +++ b/lib/iris/coord_categorisation.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Cube functions for coordinate categorisation. +.. z_reference:: iris.coord_categorisation + :tags: topic_data_model + + API reference + All the functions provided here add a new coordinate to a cube. * The function :func:`add_categorised_coord` performs a generic diff --git a/lib/iris/coord_systems.py b/lib/iris/coord_systems.py index a8f78b0ebf..3b500f43bb 100644 --- a/lib/iris/coord_systems.py +++ b/lib/iris/coord_systems.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Definitions of coordinate systems.""" +"""Definitions of coordinate systems. + +.. z_reference:: iris.coord_systems + :tags: topic_data_model + + API reference +""" from abc import ABCMeta, abstractmethod from functools import cached_property diff --git a/lib/iris/coords.py b/lib/iris/coords.py index 1013353759..c1cc35dede 100644 --- a/lib/iris/coords.py +++ b/lib/iris/coords.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Definitions of coordinates and other dimensional metadata.""" +"""Definitions of coordinates and other dimensional metadata. + +.. z_reference:: iris.coords + :tags: topic_data_model + + API reference +""" from abc import ABCMeta, abstractmethod from collections import namedtuple diff --git a/lib/iris/cube.py b/lib/iris/cube.py index a68e9d7599..6ae853c2e0 100644 --- a/lib/iris/cube.py +++ b/lib/iris/cube.py @@ -3,7 +3,13 @@ # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Classes for representing multi-dimensional data with metadata.""" +"""Classes for representing multi-dimensional data with metadata. + +.. z_reference:: iris.cube + :tags: topic_data_model + + API reference +""" from __future__ import annotations @@ -1126,7 +1132,7 @@ class Cube(CFVariableMixin): source 'Data from Met Office Unified Model' - See the :doc:`user guide` for more information. + See the :doc:`user manual` for more information. """ diff --git a/lib/iris/exceptions.py b/lib/iris/exceptions.py index 56e220faf9..5589e03337 100644 --- a/lib/iris/exceptions.py +++ b/lib/iris/exceptions.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Exceptions specific to the Iris package.""" +"""Exceptions specific to the Iris package. + +.. z_reference:: iris.exceptions + :tags: topic_troubleshooting + + API reference +""" class IrisError(Exception): diff --git a/lib/iris/experimental/__init__.py b/lib/iris/experimental/__init__.py index eea4259355..aa2ae2aec1 100644 --- a/lib/iris/experimental/__init__.py +++ b/lib/iris/experimental/__init__.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Experimental code can be introduced to Iris through this package. +.. z_reference:: iris.experimental + :tags: topic_experimental + + API reference + Changes to experimental code may be more extensive than in the rest of the codebase. The code is expected to graduate, eventually, to "full status". diff --git a/lib/iris/experimental/animate.py b/lib/iris/experimental/animate.py index 13c1613802..74300dbbdc 100644 --- a/lib/iris/experimental/animate.py +++ b/lib/iris/experimental/animate.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Wrapper for animating iris cubes using iris or matplotlib plotting functions. +.. z_reference:: iris.experimental.animate + :tags: topic_experimental;topic_plotting + + API reference + Notes ----- .. deprecated:: 3.4.0 diff --git a/lib/iris/experimental/geovista.py b/lib/iris/experimental/geovista.py index 57cbded2c2..5519c4660d 100644 --- a/lib/iris/experimental/geovista.py +++ b/lib/iris/experimental/geovista.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Experimental module for using some GeoVista operations with Iris cubes.""" +"""Experimental module for using some GeoVista operations with Iris cubes. + +.. z_reference:: iris.experimental.geovista + :tags: topic_experimental;topic_interoperability + + API reference +""" from geovista import Transform from geovista.common import VTK_CELL_IDS, VTK_POINT_IDS diff --git a/lib/iris/experimental/raster.py b/lib/iris/experimental/raster.py index 7fc9c5153c..0b5057136c 100644 --- a/lib/iris/experimental/raster.py +++ b/lib/iris/experimental/raster.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Experimental module for importing/exporting raster data from Iris cubes using the GDAL library. +.. z_reference:: iris.experimental.raster + :tags: topic_experimental;topic_load_save + + API reference + See also: `GDAL - Geospatial Data Abstraction Library `_. TODO: If this module graduates from experimental the (optional) GDAL diff --git a/lib/iris/experimental/regrid.py b/lib/iris/experimental/regrid.py index 9ad93f83b6..253fa5957e 100644 --- a/lib/iris/experimental/regrid.py +++ b/lib/iris/experimental/regrid.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Regridding functions. +.. z_reference:: iris.experimental.regrid + :tags: topic_experimental;topic_regrid + + API reference + Notes ----- .. deprecated:: 3.2.0 diff --git a/lib/iris/experimental/regrid_conservative.py b/lib/iris/experimental/regrid_conservative.py index 886ba8c97f..ca36612330 100644 --- a/lib/iris/experimental/regrid_conservative.py +++ b/lib/iris/experimental/regrid_conservative.py @@ -11,6 +11,11 @@ `iris-esmf-regrid `_ instead. +.. z_reference:: iris.experimental.regrid_conservative + :tags: topic_experimental;topic_regrid + + API reference + """ import functools diff --git a/lib/iris/experimental/representation.py b/lib/iris/experimental/representation.py index 4beac376ee..12ace6a33e 100644 --- a/lib/iris/experimental/representation.py +++ b/lib/iris/experimental/representation.py @@ -3,7 +3,13 @@ # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Definitions of how Iris objects should be represented.""" +"""Definitions of how Iris objects should be represented. + +.. z_reference:: iris.experimental.representation + :tags: topic_experimental;topic_data_model + + API reference +""" from html import escape diff --git a/lib/iris/experimental/stratify.py b/lib/iris/experimental/stratify.py index 50f8c21dcf..3a5f823fe6 100644 --- a/lib/iris/experimental/stratify.py +++ b/lib/iris/experimental/stratify.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Routines for putting data on new strata (aka. isosurfaces), often in the Z direction.""" +"""Routines for putting data on new strata (aka. isosurfaces), often in the Z direction. + +.. z_reference:: iris.experimental.stratify + :tags: topic_experimental;topic_interoperability + + API reference +""" from functools import partial diff --git a/lib/iris/experimental/ugrid.py b/lib/iris/experimental/ugrid.py index 7db26ca26b..9d82952bd0 100644 --- a/lib/iris/experimental/ugrid.py +++ b/lib/iris/experimental/ugrid.py @@ -5,6 +5,11 @@ """Legacy import location for mesh support. +.. z_reference:: iris.experimental.ugrid + :tags: topic_experimental;topic_mesh + + API reference + See :mod:`iris.mesh` for the new, correct import location. Notes diff --git a/lib/iris/fileformats/__init__.py b/lib/iris/fileformats/__init__.py index 6729141bf6..0af0888b3f 100644 --- a/lib/iris/fileformats/__init__.py +++ b/lib/iris/fileformats/__init__.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""A package for converting cubes to and from specific file formats.""" +"""A package for converting cubes to and from specific file formats. + +.. z_reference:: iris.fileformats + :tags: topic_load_save + + API reference +""" from iris.io.format_picker import ( DataSourceObjectProtocol, diff --git a/lib/iris/fileformats/abf.py b/lib/iris/fileformats/abf.py index 1ac95a42eb..c27da55a0f 100644 --- a/lib/iris/fileformats/abf.py +++ b/lib/iris/fileformats/abf.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Provides ABF (and ABL) file format capabilities. +.. z_reference:: iris.fileformats.abf + :tags: topic_load_save + + API reference + ABF and ABL files are satellite file formats defined by Boston University. Including this module adds ABF and ABL loading to the session's capabilities. diff --git a/lib/iris/fileformats/cf.py b/lib/iris/fileformats/cf.py index 2b6568c315..308ce381ee 100644 --- a/lib/iris/fileformats/cf.py +++ b/lib/iris/fileformats/cf.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Provide capability to load netCDF files and interpret them. +.. z_reference:: iris.fileformats.cf + :tags: topic_load_save + + API reference + Provides the capability to load netCDF files and interpret them according to the 'NetCDF Climate and Forecast (CF) Metadata Conventions'. diff --git a/lib/iris/fileformats/dot.py b/lib/iris/fileformats/dot.py index 3c37395f6c..b1047bcffe 100644 --- a/lib/iris/fileformats/dot.py +++ b/lib/iris/fileformats/dot.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Provides Creation and saving of DOT graphs for a :class:`iris.cube.Cube`.""" +"""Provides Creation and saving of DOT graphs for a :class:`iris.cube.Cube`. + +.. z_reference:: iris.fileformats.dot + :tags: topic_load_save + + API reference +""" import os import subprocess diff --git a/lib/iris/fileformats/name.py b/lib/iris/fileformats/name.py index bc1bb690c2..7b41d909f7 100644 --- a/lib/iris/fileformats/name.py +++ b/lib/iris/fileformats/name.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Provides NAME file format loading capabilities.""" +"""Provides NAME file format loading capabilities. + +.. z_reference:: iris.fileformats.name + :tags: topic_load_save + + API reference +""" def _get_NAME_loader(filename): diff --git a/lib/iris/fileformats/name_loaders.py b/lib/iris/fileformats/name_loaders.py index fe53308cb0..b13b33ccd3 100644 --- a/lib/iris/fileformats/name_loaders.py +++ b/lib/iris/fileformats/name_loaders.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""NAME file format loading functions.""" +"""NAME file format loading functions. + +.. z_reference:: iris.fileformats.name_loaders + :tags: topic_load_save + + API reference +""" import collections import datetime diff --git a/lib/iris/fileformats/netcdf/__init__.py b/lib/iris/fileformats/netcdf/__init__.py index 992392b9a1..f1e37f2545 100644 --- a/lib/iris/fileformats/netcdf/__init__.py +++ b/lib/iris/fileformats/netcdf/__init__.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Support loading and saving NetCDF files using CF conventions for metadata interpretation. +.. z_reference:: iris.fileformats.netcdf + :tags: topic_load_save + + API reference + See : `NetCDF User's Guide `_ and `netCDF4 python module `_. diff --git a/lib/iris/fileformats/netcdf/loader.py b/lib/iris/fileformats/netcdf/loader.py index 219f681e67..6557f4aebc 100644 --- a/lib/iris/fileformats/netcdf/loader.py +++ b/lib/iris/fileformats/netcdf/loader.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Support loading Iris cubes from NetCDF files using the CF conventions for metadata interpretation. +.. z_reference:: iris.fileformats.netcdf.loader + :tags: topic_load_save + + API reference + See : `NetCDF User's Guide `_ and `netCDF4 python module `_. diff --git a/lib/iris/fileformats/netcdf/saver.py b/lib/iris/fileformats/netcdf/saver.py index 5177749c07..31a685f8ee 100644 --- a/lib/iris/fileformats/netcdf/saver.py +++ b/lib/iris/fileformats/netcdf/saver.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Module to support the saving of Iris cubes to a NetCDF file. +.. z_reference:: iris.fileformats.netcdf.saver + :tags: topic_load_save + + API reference + Module to support the saving of Iris cubes to a NetCDF file, also using the CF conventions for metadata interpretation. diff --git a/lib/iris/fileformats/netcdf/ugrid_load.py b/lib/iris/fileformats/netcdf/ugrid_load.py index 0d4766057c..50147f17ef 100644 --- a/lib/iris/fileformats/netcdf/ugrid_load.py +++ b/lib/iris/fileformats/netcdf/ugrid_load.py @@ -5,6 +5,11 @@ r"""Allow the construction of :class:`~iris.mesh.MeshXY`. +.. z_reference:: iris.fileformats.netcdf.ugrid_load + :tags: topic_load_save;topic_mesh + + API reference + Extension functions for Iris NetCDF loading, to construct :class:`~iris.mesh.MeshXY` from UGRID data in files. diff --git a/lib/iris/fileformats/nimrod.py b/lib/iris/fileformats/nimrod.py index d318c94882..5e716b1298 100644 --- a/lib/iris/fileformats/nimrod.py +++ b/lib/iris/fileformats/nimrod.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Provides NIMROD file format capabilities.""" +"""Provides NIMROD file format capabilities. + +.. z_reference:: iris.fileformats.nimrod + :tags: topic_load_save + + API reference +""" import glob import os diff --git a/lib/iris/fileformats/nimrod_load_rules.py b/lib/iris/fileformats/nimrod_load_rules.py index 4b3987003a..c3f975018f 100644 --- a/lib/iris/fileformats/nimrod_load_rules.py +++ b/lib/iris/fileformats/nimrod_load_rules.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Rules for converting NIMROD fields into cubes.""" +"""Rules for converting NIMROD fields into cubes. + +.. z_reference:: iris.fileformats.nimrod_load_rules + :tags: topic_load_save + + API reference +""" import re import string diff --git a/lib/iris/fileformats/pp.py b/lib/iris/fileformats/pp.py index 211ba1621c..971c0ff7ef 100644 --- a/lib/iris/fileformats/pp.py +++ b/lib/iris/fileformats/pp.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Provides UK Met Office Post Process (PP) format specific capabilities.""" +"""Provides UK Met Office Post Process (PP) format specific capabilities. + +.. z_reference:: iris.fileformats.pp + :tags: topic_load_save + + API reference +""" from abc import ABCMeta, abstractmethod import collections diff --git a/lib/iris/fileformats/pp_load_rules.py b/lib/iris/fileformats/pp_load_rules.py index 59e0f31d17..f28e65a878 100644 --- a/lib/iris/fileformats/pp_load_rules.py +++ b/lib/iris/fileformats/pp_load_rules.py @@ -6,7 +6,13 @@ # Historically this was auto-generated from # SciTools/iris-code-generators:tools/gen_rules.py -"""PP Load Rules.""" +"""PP Load Rules. + +.. z_reference:: iris.fileformats.pp_load_rules + :tags: topic_load_save + + API reference +""" import calendar from functools import wraps diff --git a/lib/iris/fileformats/pp_save_rules.py b/lib/iris/fileformats/pp_save_rules.py index a6a72393a7..d2932015c3 100644 --- a/lib/iris/fileformats/pp_save_rules.py +++ b/lib/iris/fileformats/pp_save_rules.py @@ -3,7 +3,13 @@ # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""PP Save Rules.""" +"""PP Save Rules. + +.. z_reference:: iris.fileformats.pp_save_rules + :tags: topic_load_save + + API reference +""" import warnings diff --git a/lib/iris/fileformats/rules.py b/lib/iris/fileformats/rules.py index d61389c663..dce36b2554 100644 --- a/lib/iris/fileformats/rules.py +++ b/lib/iris/fileformats/rules.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Generalised mechanisms for metadata translation and cube construction.""" +"""Generalised mechanisms for metadata translation and cube construction. + +.. z_reference:: iris.fileformats.rules + :tags: topic_load_save + + API reference +""" import collections import threading diff --git a/lib/iris/fileformats/um/__init__.py b/lib/iris/fileformats/um/__init__.py index 3a4bd6c516..863ef6febf 100644 --- a/lib/iris/fileformats/um/__init__.py +++ b/lib/iris/fileformats/um/__init__.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Provides iris loading support for UM Fieldsfile-like file types, and PP. +.. z_reference:: iris.fileformats.um + :tags: topic_load_save + + API reference + At present, the only UM file types supported are true FieldsFiles and LBCs. Other types of UM file may fail to load correctly (or at all). diff --git a/lib/iris/fileformats/um_cf_map.py b/lib/iris/fileformats/um_cf_map.py index d2e51a3257..b230e543c8 100644 --- a/lib/iris/fileformats/um_cf_map.py +++ b/lib/iris/fileformats/um_cf_map.py @@ -5,6 +5,10 @@ """ Provides UM/CF phenomenon translations. +.. z_reference:: iris.fileformats.um_cf_map + :tags: topic_load_save + + API reference """ from collections import namedtuple diff --git a/lib/iris/io/__init__.py b/lib/iris/io/__init__.py index 4e32ebf20a..0a7cdd9abb 100644 --- a/lib/iris/io/__init__.py +++ b/lib/iris/io/__init__.py @@ -3,7 +3,13 @@ # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Provides an interface to manage URI scheme support in iris.""" +"""Provides an interface to manage URI scheme support in iris. + +.. z_reference:: iris.io + :tags: topic_load_save + + API reference +""" import collections from collections import OrderedDict @@ -54,7 +60,7 @@ def run_callback(callback, cube, field, filename): the caller of this function should handle this case. This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ from iris.cube import Cube @@ -452,7 +458,7 @@ def save(source, target, saver=None, **kwargs): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ from iris.cube import Cube, CubeList diff --git a/lib/iris/io/format_picker.py b/lib/iris/io/format_picker.py index c885a55074..3f93b5cfd6 100644 --- a/lib/iris/io/format_picker.py +++ b/lib/iris/io/format_picker.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Provide convenient file format identification. +.. z_reference:: iris.io.format_picker + :tags: topic_load_save + + API reference + A module to provide convenient file format identification through a combination of filename extension and file based *magic* numbers. diff --git a/lib/iris/iterate.py b/lib/iris/iterate.py index fd2d2ed139..5df81e4271 100644 --- a/lib/iris/iterate.py +++ b/lib/iris/iterate.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Cube functions for iteration in step.""" +"""Cube functions for iteration in step. + +.. z_reference:: iris.iterate + :tags: topic_data_model + + API reference +""" from collections.abc import Iterator import itertools @@ -56,7 +62,7 @@ def izip(*cubes, **kwargs): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ if not cubes: diff --git a/lib/iris/loading.py b/lib/iris/loading.py index b188d5ae9d..68042847c1 100644 --- a/lib/iris/loading.py +++ b/lib/iris/loading.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Iris general file loading mechanism.""" +"""Iris general file loading mechanism. + +.. z_reference:: iris.loading + :tags: topic_load_save + + API reference +""" from contextlib import contextmanager from dataclasses import dataclass @@ -537,6 +543,7 @@ class LoadProblems(threading.local): >>> warnings.filterwarnings("ignore") >>> helpers.get_names = get_names_original >>> std_names.STD_NAMES["air_temperature"] = air_temperature + >>> iris.FUTURE.date_microseconds = False """ diff --git a/lib/iris/mesh/__init__.py b/lib/iris/mesh/__init__.py index ff530a4abd..e872f6f864 100644 --- a/lib/iris/mesh/__init__.py +++ b/lib/iris/mesh/__init__.py @@ -5,6 +5,11 @@ """Infra-structure for unstructured mesh support. +.. z_reference:: iris.mesh + :tags: topic_data_model;topic_mesh + + API reference + Based on CF UGRID Conventions (v1.0), https://ugrid-conventions.github.io/ugrid-conventions/. """ diff --git a/lib/iris/mesh/components.py b/lib/iris/mesh/components.py index 2cc10c18c1..3e61d7c0d4 100644 --- a/lib/iris/mesh/components.py +++ b/lib/iris/mesh/components.py @@ -5,6 +5,11 @@ """Iris data model representation of CF UGrid's Mesh and its constituent parts. +.. z_reference:: iris.mesh.components + :tags: topic_data_model;topic_mesh + + API reference + Eventual destination: dedicated module in :mod:`iris` root. """ diff --git a/lib/iris/mesh/utils.py b/lib/iris/mesh/utils.py index 3930fa3f1b..77c7f36e02 100644 --- a/lib/iris/mesh/utils.py +++ b/lib/iris/mesh/utils.py @@ -3,7 +3,13 @@ # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Utility operations specific to unstructured data.""" +"""Utility operations specific to unstructured data. + +.. z_reference:: iris.mesh.utils + :tags: topic_data_model;topic_mesh + + API reference +""" from collections.abc import Sequence from typing import Union diff --git a/lib/iris/palette.py b/lib/iris/palette.py index 500c203a43..7f8046fbf9 100644 --- a/lib/iris/palette.py +++ b/lib/iris/palette.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Color map pallettes management. +.. z_reference:: iris.palette + :tags: topic_plotting + + API reference + Load, configure and register color map palettes and initialise color map meta-data mappings. """ @@ -128,7 +133,7 @@ def cmap_norm(cube): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ args, kwargs = _default_cmap_norm((cube,), {}) diff --git a/lib/iris/pandas.py b/lib/iris/pandas.py index b23b31dff6..929182642b 100644 --- a/lib/iris/pandas.py +++ b/lib/iris/pandas.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Provide conversion to and from Pandas data structures. +.. z_reference:: iris.pandas + :tags: topic_interoperability + + API reference + See also: https://pandas.pydata.org/ """ diff --git a/lib/iris/plot.py b/lib/iris/plot.py index 789d7fbf86..82e45aba3a 100644 --- a/lib/iris/plot.py +++ b/lib/iris/plot.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Iris-specific extensions to matplotlib, mimicking the :mod:`matplotlib.pyplot` interface. +.. z_reference:: iris.plot + :tags: topic_plotting + + API reference + See also: :ref:`matplotlib `. """ @@ -1092,7 +1097,7 @@ def contour(cube, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ result = _draw_2d_from_points("contour", None, cube, *args, **kwargs) @@ -1119,7 +1124,7 @@ def contourf(cube, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ coords = kwargs.get("coords") @@ -1193,7 +1198,7 @@ def default_projection(cube): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ # XXX logic seems flawed, but it is what map_setup did... @@ -1216,7 +1221,7 @@ def default_projection_extent(cube, mode=iris.coords.POINT_MODE): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ extents = cartography._xy_range(cube, mode) @@ -1258,7 +1263,7 @@ def orography_at_bounds(cube, facecolor="#888888", coords=None, axes=None): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ # XXX Needs contiguous orography corners to work. raise NotImplementedError( @@ -1296,7 +1301,7 @@ def orography_at_points(cube, facecolor="#888888", coords=None, axes=None): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ style_args = {"facecolor": facecolor} @@ -1341,7 +1346,7 @@ def outline(cube, coords=None, color="k", linewidth=None, axes=None): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ result = _draw_2d_from_bounds( @@ -1385,7 +1390,7 @@ def pcolor(cube, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ kwargs.setdefault("antialiased", True) @@ -1421,7 +1426,7 @@ def pcolormesh(cube, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ result = _draw_2d_from_bounds("pcolormesh", cube, *args, **kwargs) @@ -1449,7 +1454,7 @@ def points(cube, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ @@ -1539,7 +1544,7 @@ def barbs(u_cube, v_cube, *args, **kwargs): # numpydoc ignore=PR08 :class:`cartopy.crs.CRS`. This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ # @@ -1589,7 +1594,7 @@ def quiver(u_cube, v_cube, *args, **kwargs): # numpydoc ignore=PR08 :class:`cartopy.crs.CRS`. This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ # @@ -1616,7 +1621,7 @@ def plot(*args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. Examples -------- @@ -1673,7 +1678,7 @@ def scatter(x, y, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ # here we are more specific about argument types than generic 1d plotting @@ -1707,7 +1712,7 @@ def fill_between(x, y1, y2, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ # here we are more specific about argument types than generic 1d plotting @@ -1741,7 +1746,7 @@ def hist(x, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ if isinstance(x, iris.cube.Cube): @@ -1783,7 +1788,7 @@ def symbols(x, y, symbols, size, axes=None, units="inches"): Notes ----- This function does maintain laziness when called; it doesn't realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ if axes is None: @@ -1902,7 +1907,7 @@ def animate(cube_iterator, plot_func, fig=None, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ kwargs.setdefault("interval", 100) diff --git a/lib/iris/quickplot.py b/lib/iris/quickplot.py index 107945677f..240ae56f02 100644 --- a/lib/iris/quickplot.py +++ b/lib/iris/quickplot.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """High-level plotting extensions to :mod:`iris.plot`. +.. z_reference:: iris.quickplot + :tags: topic_plotting + + API reference + These routines work much like their :mod:`iris.plot` counterparts, but they automatically add a plot title, axis titles, and a colour bar when appropriate. @@ -190,7 +195,7 @@ def contour(cube, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ coords = kwargs.get("coords") @@ -228,7 +233,7 @@ def contourf(cube, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ coords = kwargs.get("coords") axes = kwargs.get("axes") @@ -260,7 +265,7 @@ def outline(cube, coords=None, color="k", linewidth=None, axes=None, footer=None Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ result = iplt.outline( @@ -285,7 +290,7 @@ def pcolor(cube, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ coords = kwargs.get("coords") axes = kwargs.get("axes") @@ -310,7 +315,7 @@ def pcolormesh(cube, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ coords = kwargs.get("coords") @@ -331,7 +336,7 @@ def points(cube, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ coords = kwargs.get("coords") @@ -352,7 +357,7 @@ def plot(*args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ axes = kwargs.get("axes") @@ -372,7 +377,7 @@ def scatter(x, y, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ axes = kwargs.get("axes") @@ -392,7 +397,7 @@ def fill_between(x, y1, y2, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ axes = kwargs.get("axes") @@ -412,7 +417,7 @@ def hist(x, *args, **kwargs): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ axes = kwargs.get("axes") diff --git a/lib/iris/symbols.py b/lib/iris/symbols.py index e52266b2fe..ad91bdfab5 100644 --- a/lib/iris/symbols.py +++ b/lib/iris/symbols.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Contains symbol definitions for use with :func:`iris.plot.symbols`.""" +"""Contains symbol definitions for use with :func:`iris.plot.symbols`. + +.. z_reference:: iris.symbols + :tags: topic_plotting + + API reference +""" import itertools import math diff --git a/lib/iris/tests/test_coding_standards.py b/lib/iris/tests/test_coding_standards.py index f51a531721..1eac3756e2 100644 --- a/lib/iris/tests/test_coding_standards.py +++ b/lib/iris/tests/test_coding_standards.py @@ -245,8 +245,8 @@ def test_license_headers(self): "dist/*", "docs/gallery_code/*/*.py", "docs/src/developers_guide/documenting/*.py", - "docs/src/userguide/plotting_examples/*.py", - "docs/src/userguide/regridding_plots/*.py", + "docs/src/user_manual/tutorial/plotting_examples/*.py", + "docs/src/user_manual/tutorial/regridding_plots/*.py", "docs/src/_build/*", "lib/iris/analysis/_scipy_interpolate.py", ) diff --git a/lib/iris/time.py b/lib/iris/time.py index f2bc4a08ce..6a9629b9ce 100644 --- a/lib/iris/time.py +++ b/lib/iris/time.py @@ -3,7 +3,13 @@ # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Time handling.""" +"""Time handling. + +.. z_reference:: iris.time + :tags: topic_data_model + + API reference +""" import functools diff --git a/lib/iris/util.py b/lib/iris/util.py index 2c413d2822..f5b183d4d4 100644 --- a/lib/iris/util.py +++ b/lib/iris/util.py @@ -2,7 +2,13 @@ # # This file is part of Iris and is released under the BSD license. # See LICENSE in the root of the repository for full licensing details. -"""Miscellaneous utility functions.""" +"""Miscellaneous utility functions. + +.. z_reference:: iris.util + :tags: topic_data_model + + API reference +""" from __future__ import annotations @@ -92,7 +98,7 @@ def broadcast_to_shape(array, shape, dim_map, chunks=None): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ if isinstance(array, da.Array): @@ -175,7 +181,7 @@ def delta(ndarray, dimension, circular=False): .. note:: This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ if circular is not False: @@ -217,7 +223,7 @@ def describe_diff(cube_a, cube_b, output_file=None): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. .. note:: @@ -294,7 +300,7 @@ def guess_coord_axis(coord) -> Axis | None: Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. The ``guess_coord_axis`` behaviour can be skipped by setting the :attr:`~iris.coords.Coord.ignore_axis` property on `coord` to ``False``. @@ -371,7 +377,7 @@ def rolling_window( Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ if window < 1: @@ -491,7 +497,7 @@ def array_equal(array1, array2, withnans: bool = False) -> bool: additional support for arrays of strings and NaN-tolerant operation. This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ def normalise_array(array): @@ -540,7 +546,7 @@ def approx_equal(a, b, max_absolute_error=1e-10, max_relative_error=1e-10): Notes ----- This function does maintain laziness when called; it doesn't realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. .. deprecated:: 3.2.0 @@ -600,7 +606,7 @@ def between(lh, rh, lh_inclusive=True, rh_inclusive=True): Notes ----- This function does maintain laziness when called; it doesn't realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ if lh_inclusive and rh_inclusive: @@ -660,7 +666,7 @@ def reverse(cube_or_array, coords_or_dims): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ from iris.cube import Cube @@ -732,7 +738,7 @@ def monotonic(array, strict=False, return_direction=False): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ if array.ndim != 1 or len(array) <= 1: @@ -789,7 +795,7 @@ def column_slices_generator(full_slice, ndims): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ list_of_slices = [] @@ -1193,7 +1199,7 @@ def clip_string(the_str, clip_length=70, rider="..."): Notes ----- This function does maintain laziness when called; it doesn't realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ if clip_length >= len(the_str) or clip_length <= 0: @@ -1228,7 +1234,7 @@ def format_array(arr, edgeitems=3): Notes ----- This function does maintain laziness when called; it doesn't realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ max_line_len = 50 @@ -1282,7 +1288,7 @@ def new_axis(src_cube, scalar_coord=None, expand_extras=()): # maybe not lazy Notes ----- This function does maintain laziness when called; it doesn't realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ @@ -1401,7 +1407,7 @@ def squeeze(cube): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ slices = [0 if cube.shape[dim] == 1 else slice(None) for dim in range(cube.ndim)] @@ -1478,7 +1484,7 @@ def is_regular(coord): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ try: regular_step(coord) @@ -1495,7 +1501,7 @@ def regular_step(coord): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ if coord.ndim != 1: @@ -1529,7 +1535,7 @@ def regular_points(zeroth, step, count): Notes ----- This function does maintain laziness when called; it doesn't realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ def make_steps(dtype: np.dtype): @@ -1561,7 +1567,7 @@ def points_step(points): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ # Calculations only make sense with multiple points points = np.asanyarray(points) @@ -1596,7 +1602,7 @@ def unify_time_units(cubes): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ epochs = {} @@ -1738,7 +1744,7 @@ def promote_aux_coord_to_dim_coord(cube, name_or_coord): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ from iris.coords import Coord, DimCoord @@ -1857,7 +1863,7 @@ def demote_dim_coord_to_aux_coord(cube, name_or_coord): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ from iris.coords import Coord @@ -1951,7 +1957,7 @@ def find_discontiguities(cube, rel_tol=1e-5, abs_tol=1e-8): Notes ----- This function does not maintain laziness when called; it realises data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ lats_and_lons = [ @@ -2085,7 +2091,7 @@ def mask_cube(cube, points_to_mask, in_place=False, dim=None): If either ``cube`` or ``points_to_mask`` is lazy, the result will be lazy. This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ @@ -2136,7 +2142,7 @@ def equalise_attributes(cubes): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ # deferred import to avoid circularity problem @@ -2212,7 +2218,7 @@ def is_masked(array): Notes ----- This function maintains laziness when called; it does not realise data. - See more at :doc:`/userguide/real_and_lazy_data`. + See more at :doc:`/user_manual/explanation/real_and_lazy_data`. """ diff --git a/lib/iris/warnings.py b/lib/iris/warnings.py index 1a885f60a3..d59ecf7885 100644 --- a/lib/iris/warnings.py +++ b/lib/iris/warnings.py @@ -4,6 +4,11 @@ # See LICENSE in the root of the repository for full licensing details. """Warnings specific to the :mod:`iris` package. +.. z_reference:: iris.warnings + :tags: topic_troubleshooting + + API reference + PLEASE NAMESPACE ALL WARNING CLASSES (i.e. prefix with Iris...). """ diff --git a/pyproject.toml b/pyproject.toml index e2b87467a5..34e1b77098 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,7 +64,7 @@ Issues = "https://github.com/SciTools/iris/issues" extend-exclude = [ "_ff_cross_references.py", "um_cf_map.py", - "docs/src/sphinxext", + "docs/src/sphinxext/api_rst_formatting.py", "tools", ] line-length = 88 diff --git a/requirements/locks/py311-linux-64.lock b/requirements/locks/py311-linux-64.lock index dd70f1ffad..5689da4730 100644 --- a/requirements/locks/py311-linux-64.lock +++ b/requirements/locks/py311-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 632407f0bbd0fb35605f3edcdf1d2894887c8ccb3926f9b61559f6995ced4e75 +# input_hash: 24b3717d7a3789667ff7d0ecdbd693a07f407eefcf034560037ea739438ab8d3 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45 @@ -10,9 +10,9 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.co https://conda.anaconda.org/conda-forge/linux-64/hicolor-icon-theme-0.17-ha770c72_2.tar.bz2#bbf6f174dcd3254e19a2f5d2295ce808 https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_1.conda#16c2a0e9c4a166e53632cfca4f68d020 https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda#8fcb6b0e2161850556231336dae58358 -https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-h8577fbf_0.conda#338201218b54cadff2e774ac27733990 -https://conda.anaconda.org/conda-forge/linux-64/utfcpp-4.0.8-ha770c72_0.conda#a480ee3eb9c95364a229673a28384899 -https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-hbd8a1cb_0.conda#f0991f0f84902f6b6009b4d2350a83aa +https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda#ad659d0a2b3e47e38d829aa8cad2d610 +https://conda.anaconda.org/conda-forge/linux-64/utfcpp-4.09-ha770c72_0.conda#99884244028fe76046e3914f90d4ad05 +https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda#bddacf101bb4dd0e51811cb69c7790e2 https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda#a7970cd949a077b7cb9696379d338681 https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda#434ca7e50e40f4918ab701e3facd59a0 https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda#26c46f90d0e727e95c6c9498a33a09f3 @@ -21,7 +21,7 @@ https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda#c151d5eb730e9b7480e6d48c0fc44048 https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda#7df50d44d4a14d6c31a2c54f2cd92157 https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda#6d0363467e6ed84f11435eb309f2ff06 -https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.1-hb03c661_0.conda#bba37fb066adb90e1d876dff0fd5d09d +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.2-hb03c661_0.conda#ada39f5726bc5481e9dce293709dfabc https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda#791365c5f65975051e4e017b5da3abf5 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda#51a19bba1b8ebfb60df25cde030b7ebc https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda#920bb03579f15389b9e512095ad995b7 @@ -58,11 +58,11 @@ https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.3-hb47aa4a_0.conda#60 https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda#a77f85f77be52ff59391544bfe73390a https://conda.anaconda.org/conda-forge/linux-64/cli11-2.6.0-h54a6638_0.conda#ddf9fed4661bace13f33f08fe38a5f45 https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda#dbe3ec0f120af456b3477743ffd99b74 -https://conda.anaconda.org/conda-forge/linux-64/fmt-12.0.0-h2b0788b_0.conda#d90bf58b03d9a958cb4f9d3de539af17 +https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-hff5e90c_0.conda#f7d7a4104082b39e3b3473fbd4a38229 https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h480dda7_0.conda#4d4efd0645cd556fab54617c4ad477ef https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda#3bf7b9fd5a7136126e0234db4b87c8b6 https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda#2cd94587f3a401ae05e03a6caf09539d -https://conda.anaconda.org/conda-forge/linux-64/icu-78.1-h33c6efd_0.conda#518e9bbbc3e3486d6a4519192ba690f8 +https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda#186a18e3ba246eccfc7cff00cd19a870 https://conda.anaconda.org/conda-forge/linux-64/jsoncpp-1.9.6-hf42df4d_1.conda#7bdc5e2cc11cb0a0f795bdad9732b0f2 https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda#9344155d33912347b37f0ae6c410a835 https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.4-h3f801dc_0.conda#01ba04e414e47f95c03d6ddd81fd37be @@ -135,7 +135,7 @@ https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda#000e85703f0fd9594c81710dd5066471 https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda#c160954f7418d7b6e87eaf05a8913fa9 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda#d4a250da4737ee127fb1fa6452a9002e -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.17.0-h4e3cde8_1.conda#117499f93e892ea1e57fdca16c2e8351 +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda#0a5563efed19ca4461cf927419b6eb73 https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.1-ha770c72_0.conda#f4084e4e6577797150f9b04a4560ceb0 https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda#c8013e438185f33b13814c5c488acd5c https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-haa4a5bd_1022.conda#00f0f4a9d2eb174015931b1a234d61ca @@ -152,9 +152,9 @@ https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda#8c https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda#18fd895e0e775622906cdabfc3cf0fb4 https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda#1fd9696649f65fd6611fcdb4ffec738a https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda#537296d57ea995666c68c821b00e360b -https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.2.0-py311h6b1f9c4_0.conda#596b9cc36b7af0640825b399e6b11ccc +https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py311h6b1f9c4_0.conda#adda5ef2a74c9bdb338ff8a51192898a https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py311h66f275b_1.conda#86daecb8e4ed1042d5dc6efbe0152590 -https://conda.anaconda.org/conda-forge/noarch/certifi-2025.11.12-pyhd8ed1ab_0.conda#96a02a5c1a65470a7e4eedb644c872fd +https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda#eacc711330cd46939f66cd401ff9c44b https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda#381bd45fb7aa032691f3063aff47e3a1 https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda#a22d1fd9bf98827e280a02875d9a007a https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda#ea8a6c3256897cc31263de9f455e25d9 @@ -162,11 +162,11 @@ https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.con https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda#962b9857ee8e7018c22f2776ffa0b2d7 https://conda.anaconda.org/conda-forge/noarch/colorcet-3.1.0-pyhd8ed1ab_1.conda#91d7152c744dc0f18ef8beb3cbc9980a https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda#4c2a8fef270f6c69591889b93f9f55c1 -https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.3-py311h0daaf2c_1.conda#79cdb883e10bd660c0dd29544ee3f94c +https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.4-py311h0daaf2c_0.conda#e9173db94f5c77b3e854a9c76c0568a5 https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda#003b8ba0a94e2f1e117d0bd46aebc901 https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda#24c1ca34138ee57de72a943237cde4cc https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda#a57b4be42619213a94f31d2c69c5dda7 -https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.1-pyhd8ed1ab_0.conda#81a651287d3000eb12f0860ade0a1b41 +https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.2-pyhd8ed1ab_0.conda#7e7cf4d6c2be6991e6ae2b3f4331701c https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.1-ha770c72_0.conda#4afc585cd97ba8a23809406cd8a9eda8 https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.7.0-py311h52bc045_0.conda#d9be554be03e3f2012655012314167d6 https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.12.0-pyhd8ed1ab_0.conda#a3b9510e2491c20c7fc0f5e730227fbb @@ -178,11 +178,11 @@ https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.b https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda#9614359868482abba1bd15ce465e3c42 https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.5.2-pyhd8ed1ab_0.conda#895f6625dd8a246fece9279fcc12c1de https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py311h724c32c_2.conda#4089f739463c798e10d8644bc34e24de -https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.2-gpl_h7be2006_100.conda#9d0eaa26e3c5d7af747b3ddee928327b +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.5-gpl_hc2c16d8_100.conda#5fdaa8b856683a5598459dead3976578 https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda#6636a2b6f1a87572df2970d3ebc87cc0 https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda#928b8be80851f5d8ffb016f9c81dae7a https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_2.conda#27ac5ae872a21375d980bd4a6f99edf3 -https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.1-default_hafda6a7_1003.conda#4fe840c6d6b3719b4231ed89d389bb17 +https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.2-default_hafda6a7_1000.conda#0ed3aa3e3e6bc85050d38881673a692f https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda#b38076eb5c8e40d0106beda6f95d7609 https://conda.anaconda.org/conda-forge/linux-64/libllvm20-20.1.8-hf7376ad_1.conda#eafa8fd1dfc9a107fe62f7f12cabbc9c https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda#1a2708a460884d6861425b7f9a7bef99 @@ -196,12 +196,12 @@ https://conda.anaconda.org/conda-forge/linux-64/multidict-6.7.0-py311h3778330_0. https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda#37293a85a0f4f77bbd9cf7aaefc62609 https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda#2e5bf4f1da39c0b32778561c3c4e5878 https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda#58335b26c38bf4a20f399384c33cbcf9 -https://conda.anaconda.org/conda-forge/linux-64/pillow-12.0.0-py311hf88fc01_2.conda#79edb22fb652ee142099df18042ca8c0 +https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.0-py311hf88fc01_0.conda#ce51a1258d127e1c72bad676235b9d6c https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda#1bd2e65c8c7ef24f4639ae6e850dacc2 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda#d7585b6550ad04c8c5e21097ada2888e https://conda.anaconda.org/conda-forge/linux-64/proj-9.7.1-h99ae125_0.conda#8bbc19a6e87fbe8b97796e9a42a47a30 https://conda.anaconda.org/conda-forge/linux-64/propcache-0.3.1-py311h2dc5d0c_0.conda#c75eb8c91d69fe0385fce584f3ce193a -https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.0-py311haee01d2_0.conda#17c1d1a7ef29de1cb677a05f636c56ab +https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.1-py311haee01d2_0.conda#8cc656ea4773e02929cc58745669b116 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda#12c566707c80111f9799308d9e265aef https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda#6b6ece66ebcae2d5f326c77ef2c5a066 https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.1-pyhcf101f3_0.conda#d837065e4e0de4962c3462079c23f969 @@ -211,6 +211,7 @@ https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0. https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.6.0-py311h041eb40_1.conda#9dcb9824894fb920414608447ccdf3ce https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda#bc8e3267d44011051f2eb14d22fb0960 https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py311h3778330_0.conda#707c3d23f2476d3bfde8345b4e7d7853 +https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py311h902ca64_0.conda#3893f7b40738f9fe87510cb4468cdda5 https://conda.anaconda.org/conda-forge/noarch/scooby-0.11.0-pyhd8ed1ab_0.conda#2d707ed62f63d72f4a0141b818e9c7b6 https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda#4de79c071274a53dcaf2a8c749d1499e https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda#3339e3b65d58accf4ca4fb8748ab16b3 @@ -242,7 +243,7 @@ https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py311h03d9500_1.conda https://conda.anaconda.org/conda-forge/noarch/click-default-group-1.2.4-pyhd8ed1ab_1.conda#7cd83dd6831b61ad9624a694e4afd7dc https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1.2-pyhd8ed1ab_0.conda#e9b05deb91c013e5224672a4ba9cf8d1 https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_2.conda#55c7804f428719241a90b152016085a1 -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.13.0-py311h3778330_0.conda#95294f5480dae437d7c15d40238c9b1c +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.13.1-py311h3778330_0.conda#9d38ee59f3535da3ee59652dcef8fd96 https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.1.0-py311h49ec1c0_1.conda#907579fcaf43b90c8c198ae8d43320ef https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda#8e662bd460bda79b1ea39194e3c4c9ab https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda#8f5b0b297b59e1ac160ad4beec99dbee @@ -251,8 +252,8 @@ https://conda.anaconda.org/conda-forge/linux-64/glew-2.2.0-h3abd4de_0.conda#6ea9 https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda#164fc43f0b53b6e3a7bc7dce5e4f1dc9 https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda#63ccfdc3a3ce25b027b8767eb722fca8 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda#04558c96691bed63104678757beb4f8d -https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.7-default_h99862b1_2.conda#fd47a1021b2a3a91b0c05f4d7b529b68 -https://conda.anaconda.org/conda-forge/linux-64/libclang13-21.1.7-default_h746c552_2.conda#684375df603a5fcaffc47d04fe66efc0 +https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_1.conda#e933f92cedca212eb2916f24823cf90b +https://conda.anaconda.org/conda-forge/linux-64/libclang13-21.1.8-default_h746c552_1.conda#e00afd65b88a3258212661b32c1469cb https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_2.conda#53e7cbb2beb03d69a478631e23e340e9 https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.3-nompi_h11f7409_103.conda#3ccff1066c05a1e6c221356eecc40581 https://conda.anaconda.org/conda-forge/linux-64/libpq-18.1-hb80d175_3.conda#c39da2ad0e7dd600d1eb3146783b057d @@ -265,20 +266,22 @@ https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda#0ba https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda#c55515ca43c6444d2572e0f0d93cb6b9 https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.2-py311h4e6619b_2.conda#8092837339ae2e3697980df6686f996e https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda#5b8d21249ff20967101ffa321cab24e8 -https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.3.0-h8d10470_1.conda#e3259be3341da4bc06c5b7a78c8bf1bd +https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda#870293df500ca7e18bedefa5838a22ab +https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.3.0-hb700be7_2.conda#8f7278ca5f7456a974992a8b34284737 https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda#edd329d7d3a4ab45dcf905899a7a6115 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.35.4-pyhd8ed1ab_0.conda#cfccfd4e8d9de82ed75c8e2c91cab375 +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.36.0-pyhd8ed1ab_0.conda#c9a9b6e144b880308f5eedc905fe503d https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda#7bbe9a0cc0df0ac5f5a8ad6d6a11af2f https://conda.anaconda.org/conda-forge/linux-64/yarl-1.22.0-py311h3778330_0.conda#c8213cef4057bc5a733d68d36e9b6366 -https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.13.2-py311h0281608_0.conda#730c505b9f2bbe0e88ef62379b6101fc +https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.13.3-py311h55b9665_0.conda#13edfe8c425132c74b038144f603d6d3 https://conda.anaconda.org/conda-forge/noarch/asv_runner-0.2.1-pyhd8ed1ab_0.conda#fdcbeb072c80c805a2ededaa5f91cd79 https://conda.anaconda.org/conda-forge/linux-64/at-spi2-core-2.40.3-h0630a04_0.tar.bz2#8cb2fc4cd6cc63f1369cfa318f581cc3 https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda#5267bef8efea4127aacd1f4e1f149b6e https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda#bb6c4808bfa69d6f7f6b07e5846ced37 -https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.4-py311h0372a8f_2.conda#c85f7b94f099fddb08358e0997dded95 +https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.5-py311h0372a8f_0.conda#017001375871564ed1b9e91b241cd628 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.3-py311hdf67eae_3.conda#c4e2f4d5193e55a70bb67a2aa07006ae https://conda.anaconda.org/conda-forge/noarch/dask-core-2025.12.0-pyhcf101f3_1.conda#cc7b371edd70319942c802c7d828a428 +https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda#439cd0f567d697b20a8f45cb70a1005a https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda#d10d9393680734a8febc4b362a4c94f2 https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_2.conda#b513eb83b3137eca1192c34bf4f013a7 https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h5fbf134_12.conda#88c1c66987cd52a712eea89c27104be6 @@ -295,16 +298,17 @@ https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-9.2.2-pyhd8ed1ab_0. https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.2-py311h8a92878_2.conda#b37c338ff0f69883188c9b3b127be059 https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda#9aa358575bbd4be126eaa5e0039f835c https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311hdf67eae_6.conda#57e703b0057f992687fb9ad154dc48e4 -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.2-pyhd8ed1ab_0.conda#4949ca7b83065cfe94ebe320aece8c72 +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda#9272daa869e03efe68833e3dc7a02130 https://conda.anaconda.org/conda-forge/linux-64/viskores-1.0.0-hca82ae8_3.conda#efbc53222863d0f89c123cc3f9ccdc01 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-py311h0372a8f_1.conda#ef8650a6059a907122d59a740207f50e https://conda.anaconda.org/conda-forge/noarch/distributed-2025.12.0-pyhcf101f3_1.conda#613cea9275c4773d0b53c879838ac0ad https://conda.anaconda.org/conda-forge/linux-64/epoxy-1.5.10-hb03c661_2.conda#057083b06ccf1c2778344b6dabace38b -https://conda.anaconda.org/conda-forge/linux-64/esmf-8.9.0-nompi_h8d4c64c_3.conda#9102d5f5b8d01fcfa81efec370815772 -https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.2.0-h6083320_1.conda#d00fa22f3a38953c92230af483d66378 +https://conda.anaconda.org/conda-forge/linux-64/esmf-8.9.1-nompi_h8d4c64c_0.conda#f9f36d9d61c0c643308f9f6a842e5834 +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.3.0-h6083320_0.conda#1ea5ed29aea252072b975a232b195146 https://conda.anaconda.org/conda-forge/noarch/identify-2.6.15-pyhd8ed1ab_0.conda#25f954b7dae6dd7b0dc004dab74f1ce9 https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.2-pyhd8ed1ab_0.conda#efbc812363856906a80344b496389d2e +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda#ada41c863af263cc4c5fcbaff7c3e4dc https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_2.conda#bb0230917e2473c77d615104dbe8a49d https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py311h0f3be63_0.conda#21a0139015232dc0edbf6c2179b5ec24 https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.7.3-nompi_py311h6623971_100.conda#d625880a4f700264c5aad388856479ee @@ -313,31 +317,38 @@ https://conda.anaconda.org/conda-forge/noarch/pytest-mock-3.15.1-pyhd8ed1ab_0.co https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda#8375cfbda7c57fbceeda18229be10417 https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.4.0-py311h49ec1c0_2.conda#63e8c751c1492fd06a8182b240e53153 https://conda.anaconda.org/conda-forge/linux-64/rasterio-1.4.4-py311hf34719e_2.conda#5263592864a0ac9d059e18bd4cc5dc5c -https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda#db0c6b99149880c8ba515cf4abe93ee4 +https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda#c65df89a0b2e321045a9e01d1337b182 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 https://conda.anaconda.org/conda-forge/noarch/wslink-2.5.0-pyhd8ed1ab_0.conda#8fa415e696acd9af59ce0a4425fd1b38 https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.25.0-py311hed34c8f_1.conda#17c710c32010688086b28c088a8be579 https://conda.anaconda.org/conda-forge/noarch/cmocean-4.0.3-pyhd8ed1ab_1.conda#dd71e4ec2fbffe38c0359976505f816e -https://conda.anaconda.org/conda-forge/noarch/esmpy-8.9.0-pyhc455866_0.conda#37e9756efac1b155daface77417f0463 +https://conda.anaconda.org/conda-forge/noarch/esmpy-8.9.1-pyhdfbf58e_0.conda#0155d4a55415cda7f7f09bc0b7760f51 https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_1.conda#9a2be7d0089f5934b550933ca0d9fe85 https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hadf4263_0.conda#79f71230c069a287efe3a8614069ddf1 https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_3.conda#d2bbbd293097e664ffb01fc4cdaf5729 https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda#7f3ac694319c7eaf81a0325d6405e974 https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.1-hb82b983_4.conda#f4dfd61ec958d420bebdcefeb805d658 +https://conda.anaconda.org/conda-forge/noarch/requests-file-2.1.0-pyhd8ed1ab_1.conda#69be0472744969b97324d5d3b21845a9 https://conda.anaconda.org/conda-forge/linux-64/gtk3-3.24.43-h993cebd_6.conda#f9f33c65b20e6a61f21714785e3613ec https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.60.0-h61e6d4b_0.conda#91e6d4d684e237fba31b9815c4b40edf -https://conda.anaconda.org/conda-forge/linux-64/vtk-base-9.5.2-py311h6680114_5.conda#be6d8928867141205a755a622bf300d9 +https://conda.anaconda.org/conda-forge/linux-64/vtk-base-9.5.2-py311he409b82_6.conda#1e79f71b065f1fec60a5ab420ecac6cd https://conda.anaconda.org/conda-forge/noarch/adwaita-icon-theme-49.0-unix_0.conda#b3f0179590f3c0637b7eb5309898f79e https://conda.anaconda.org/conda-forge/noarch/pyvista-0.46.4-pyhd8ed1ab_0.conda#89f80194003ce06e6bdf25fba539d9b1 https://conda.anaconda.org/conda-forge/noarch/geovista-0.5.3-pyhd8ed1ab_1.conda#64348d05eedb1b1b5676f63101d004f2 https://conda.anaconda.org/conda-forge/linux-64/graphviz-14.1.0-h8b86629_0.conda#39dcf8bb370df27fd81dbe41d4cb605e https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.16.1-pyhd8ed1ab_0.conda#837aaf71ddf3b27acae0e7e9015eebc6 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda#bf22cb9c439572760316ce0748af3713 +https://conda.anaconda.org/conda-forge/noarch/sphinx-data-viewer-0.1.5-pyhd8ed1ab_1.conda#fbe6437c6899c54e52f9258518035aca https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.6.1-pyhd8ed1ab_2.conda#3e6c15d914b03f83fc96344f917e0838 https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.20.0-pyhd8ed1ab_0.conda#4cae490c8d142824fb80d9aed672fddd +https://conda.anaconda.org/conda-forge/noarch/sphinx-reredirects-1.1.0-pyhd8ed1ab_0.conda#8392493ce6fbb8ab72a101af8e8a5d03 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda#16e3f039c0aa6446513e94ab18a8784b https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda#910f28a05c178feba832f842155cbfff https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda#e9fb3fe8a5b758b4aff187d434f94f03 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jquery-4.1-pyhd8ed1ab_1.conda#403185829255321ea427333f7773dd1f +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-plantuml-0.30-pyhd8ed1ab_0.conda#adee2f3d02d464fc1af45adfe2748b44 +https://conda.anaconda.org/conda-forge/noarch/sphinx-needs-5.1.0-pyh29332c3_0.conda#0e9b4f42b0de80821f586ce83e2b230e 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 + diff --git a/requirements/locks/py312-linux-64.lock b/requirements/locks/py312-linux-64.lock index a49f4cce87..863f9b0344 100644 --- a/requirements/locks/py312-linux-64.lock +++ b/requirements/locks/py312-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: c1404b61114d4a2769a5146aba7f4917724cd621278e6d44175768c07bf5a6b7 +# input_hash: 649946f0037143eb66cc058624a933713c075b2d3318369c64e48b98dbbbf98a @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45 @@ -10,9 +10,9 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.co https://conda.anaconda.org/conda-forge/linux-64/hicolor-icon-theme-0.17-ha770c72_2.tar.bz2#bbf6f174dcd3254e19a2f5d2295ce808 https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_1.conda#16c2a0e9c4a166e53632cfca4f68d020 https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda#c3efd25ac4d74b1584d2f7a57195ddf1 -https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-h8577fbf_0.conda#338201218b54cadff2e774ac27733990 -https://conda.anaconda.org/conda-forge/linux-64/utfcpp-4.0.8-ha770c72_0.conda#a480ee3eb9c95364a229673a28384899 -https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-hbd8a1cb_0.conda#f0991f0f84902f6b6009b4d2350a83aa +https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda#ad659d0a2b3e47e38d829aa8cad2d610 +https://conda.anaconda.org/conda-forge/linux-64/utfcpp-4.09-ha770c72_0.conda#99884244028fe76046e3914f90d4ad05 +https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda#bddacf101bb4dd0e51811cb69c7790e2 https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda#a7970cd949a077b7cb9696379d338681 https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda#434ca7e50e40f4918ab701e3facd59a0 https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda#26c46f90d0e727e95c6c9498a33a09f3 @@ -21,7 +21,7 @@ https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda#c151d5eb730e9b7480e6d48c0fc44048 https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda#7df50d44d4a14d6c31a2c54f2cd92157 https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda#6d0363467e6ed84f11435eb309f2ff06 -https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.1-hb03c661_0.conda#bba37fb066adb90e1d876dff0fd5d09d +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.2-hb03c661_0.conda#ada39f5726bc5481e9dce293709dfabc https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda#791365c5f65975051e4e017b5da3abf5 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda#51a19bba1b8ebfb60df25cde030b7ebc https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda#920bb03579f15389b9e512095ad995b7 @@ -58,11 +58,11 @@ https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.3-hb47aa4a_0.conda#60 https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda#a77f85f77be52ff59391544bfe73390a https://conda.anaconda.org/conda-forge/linux-64/cli11-2.6.0-h54a6638_0.conda#ddf9fed4661bace13f33f08fe38a5f45 https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda#dbe3ec0f120af456b3477743ffd99b74 -https://conda.anaconda.org/conda-forge/linux-64/fmt-12.0.0-h2b0788b_0.conda#d90bf58b03d9a958cb4f9d3de539af17 +https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-hff5e90c_0.conda#f7d7a4104082b39e3b3473fbd4a38229 https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h480dda7_0.conda#4d4efd0645cd556fab54617c4ad477ef https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda#3bf7b9fd5a7136126e0234db4b87c8b6 https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda#2cd94587f3a401ae05e03a6caf09539d -https://conda.anaconda.org/conda-forge/linux-64/icu-78.1-h33c6efd_0.conda#518e9bbbc3e3486d6a4519192ba690f8 +https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda#186a18e3ba246eccfc7cff00cd19a870 https://conda.anaconda.org/conda-forge/linux-64/jsoncpp-1.9.6-hf42df4d_1.conda#7bdc5e2cc11cb0a0f795bdad9732b0f2 https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda#9344155d33912347b37f0ae6c410a835 https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.4-h3f801dc_0.conda#01ba04e414e47f95c03d6ddd81fd37be @@ -135,7 +135,7 @@ https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda#000e85703f0fd9594c81710dd5066471 https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda#c160954f7418d7b6e87eaf05a8913fa9 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda#d4a250da4737ee127fb1fa6452a9002e -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.17.0-h4e3cde8_1.conda#117499f93e892ea1e57fdca16c2e8351 +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda#0a5563efed19ca4461cf927419b6eb73 https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.1-ha770c72_0.conda#f4084e4e6577797150f9b04a4560ceb0 https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda#c8013e438185f33b13814c5c488acd5c https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-haa4a5bd_1022.conda#00f0f4a9d2eb174015931b1a234d61ca @@ -152,9 +152,9 @@ https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda#8c https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda#18fd895e0e775622906cdabfc3cf0fb4 https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda#1fd9696649f65fd6611fcdb4ffec738a https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda#537296d57ea995666c68c821b00e360b -https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.2.0-py312h90b7ffd_0.conda#9fc7e65938c0e4b2658631b8bfd380e8 +https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py312h90b7ffd_0.conda#5b8c55fed2e576dde4b0b33693a4fdb1 https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py312hdb49522_1.conda#64088dffd7413a2dd557ce837b4cbbdb -https://conda.anaconda.org/conda-forge/noarch/certifi-2025.11.12-pyhd8ed1ab_0.conda#96a02a5c1a65470a7e4eedb644c872fd +https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda#eacc711330cd46939f66cd401ff9c44b https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda#381bd45fb7aa032691f3063aff47e3a1 https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda#a22d1fd9bf98827e280a02875d9a007a https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda#ea8a6c3256897cc31263de9f455e25d9 @@ -162,11 +162,11 @@ https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.con https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda#962b9857ee8e7018c22f2776ffa0b2d7 https://conda.anaconda.org/conda-forge/noarch/colorcet-3.1.0-pyhd8ed1ab_1.conda#91d7152c744dc0f18ef8beb3cbc9980a https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda#4c2a8fef270f6c69591889b93f9f55c1 -https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.3-py312h68e6be4_1.conda#1e283c9dd15610ad8e44303d7096a886 +https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.4-py312h68e6be4_0.conda#14f638dad5953c83443a2c4f011f1c9e https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda#003b8ba0a94e2f1e117d0bd46aebc901 https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda#24c1ca34138ee57de72a943237cde4cc https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda#a57b4be42619213a94f31d2c69c5dda7 -https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.1-pyhd8ed1ab_0.conda#81a651287d3000eb12f0860ade0a1b41 +https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.2-pyhd8ed1ab_0.conda#7e7cf4d6c2be6991e6ae2b3f4331701c https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.1-ha770c72_0.conda#4afc585cd97ba8a23809406cd8a9eda8 https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.7.0-py312h447239a_0.conda#63e20cf7b7460019b423fc06abb96c60 https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.12.0-pyhd8ed1ab_0.conda#a3b9510e2491c20c7fc0f5e730227fbb @@ -178,11 +178,11 @@ https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.b https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda#9614359868482abba1bd15ce465e3c42 https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.5.2-pyhd8ed1ab_0.conda#895f6625dd8a246fece9279fcc12c1de https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py312h0a2e395_2.conda#3a3004fddd39e3bb1a631b08d7045156 -https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.2-gpl_h7be2006_100.conda#9d0eaa26e3c5d7af747b3ddee928327b +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.5-gpl_hc2c16d8_100.conda#5fdaa8b856683a5598459dead3976578 https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda#6636a2b6f1a87572df2970d3ebc87cc0 https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda#928b8be80851f5d8ffb016f9c81dae7a https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_2.conda#27ac5ae872a21375d980bd4a6f99edf3 -https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.1-default_hafda6a7_1003.conda#4fe840c6d6b3719b4231ed89d389bb17 +https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.2-default_hafda6a7_1000.conda#0ed3aa3e3e6bc85050d38881673a692f https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda#b38076eb5c8e40d0106beda6f95d7609 https://conda.anaconda.org/conda-forge/linux-64/libllvm20-20.1.8-hf7376ad_1.conda#eafa8fd1dfc9a107fe62f7f12cabbc9c https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda#1a2708a460884d6861425b7f9a7bef99 @@ -196,12 +196,12 @@ https://conda.anaconda.org/conda-forge/linux-64/multidict-6.7.0-py312h8a5da7c_0. https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda#37293a85a0f4f77bbd9cf7aaefc62609 https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda#2e5bf4f1da39c0b32778561c3c4e5878 https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda#58335b26c38bf4a20f399384c33cbcf9 -https://conda.anaconda.org/conda-forge/linux-64/pillow-12.0.0-py312h50c33e8_2.conda#f2aef8ecea68f4d35330f0c48949bff2 +https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.0-py312h50c33e8_0.conda#923b06ad75b7acc888fa20a22dc397cd https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda#1bd2e65c8c7ef24f4639ae6e850dacc2 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda#d7585b6550ad04c8c5e21097ada2888e https://conda.anaconda.org/conda-forge/linux-64/proj-9.7.1-h99ae125_0.conda#8bbc19a6e87fbe8b97796e9a42a47a30 https://conda.anaconda.org/conda-forge/linux-64/propcache-0.3.1-py312h178313f_0.conda#0cf580c1b73146bb9ff1bbdb4d4c8cf9 -https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.0-py312h5253ce2_0.conda#24682a1d69340eecf208fcc13585d343 +https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.1-py312h5253ce2_0.conda#ff09ba570ce66446db523ea21c12b765 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda#12c566707c80111f9799308d9e265aef https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda#6b6ece66ebcae2d5f326c77ef2c5a066 https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.1-pyhcf101f3_0.conda#d837065e4e0de4962c3462079c23f969 @@ -211,6 +211,7 @@ https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0. https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.6.0-py312h0d868a3_1.conda#1cfb9b04c827219597def32c22fb9ca2 https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda#bc8e3267d44011051f2eb14d22fb0960 https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_0.conda#fba10c2007c8b06f77c5a23ce3a635ad +https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py312h868fb18_0.conda#3ffc5a3572db8751c2f15bacf6a0e937 https://conda.anaconda.org/conda-forge/noarch/scooby-0.11.0-pyhd8ed1ab_0.conda#2d707ed62f63d72f4a0141b818e9c7b6 https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda#4de79c071274a53dcaf2a8c749d1499e https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda#3339e3b65d58accf4ca4fb8748ab16b3 @@ -242,7 +243,7 @@ https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py312h460c074_1.conda https://conda.anaconda.org/conda-forge/noarch/click-default-group-1.2.4-pyhd8ed1ab_1.conda#7cd83dd6831b61ad9624a694e4afd7dc https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1.2-pyhd8ed1ab_0.conda#e9b05deb91c013e5224672a4ba9cf8d1 https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_2.conda#55c7804f428719241a90b152016085a1 -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.13.0-py312h8a5da7c_0.conda#da396284d1f498e20b4377478dbb830c +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.13.1-py312h8a5da7c_0.conda#eafe0b486a7910e4a6973029c80d437f https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.1.0-py312h4c3975b_1.conda#693cda60b9223f55d0836c885621611b https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda#8e662bd460bda79b1ea39194e3c4c9ab https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda#8f5b0b297b59e1ac160ad4beec99dbee @@ -251,8 +252,8 @@ https://conda.anaconda.org/conda-forge/linux-64/glew-2.2.0-h3abd4de_0.conda#6ea9 https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda#164fc43f0b53b6e3a7bc7dce5e4f1dc9 https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda#63ccfdc3a3ce25b027b8767eb722fca8 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda#04558c96691bed63104678757beb4f8d -https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.7-default_h99862b1_2.conda#fd47a1021b2a3a91b0c05f4d7b529b68 -https://conda.anaconda.org/conda-forge/linux-64/libclang13-21.1.7-default_h746c552_2.conda#684375df603a5fcaffc47d04fe66efc0 +https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_1.conda#e933f92cedca212eb2916f24823cf90b +https://conda.anaconda.org/conda-forge/linux-64/libclang13-21.1.8-default_h746c552_1.conda#e00afd65b88a3258212661b32c1469cb https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_2.conda#53e7cbb2beb03d69a478631e23e340e9 https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.3-nompi_h11f7409_103.conda#3ccff1066c05a1e6c221356eecc40581 https://conda.anaconda.org/conda-forge/linux-64/libpq-18.1-hb80d175_3.conda#c39da2ad0e7dd600d1eb3146783b057d @@ -265,20 +266,22 @@ https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda#0ba https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh8b19718_0.conda#c55515ca43c6444d2572e0f0d93cb6b9 https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.2-py312h9b6a7d9_2.conda#573b9a879a3a42990f9c51d7376dce6b https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda#5b8d21249ff20967101ffa321cab24e8 -https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.3.0-h8d10470_1.conda#e3259be3341da4bc06c5b7a78c8bf1bd +https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda#870293df500ca7e18bedefa5838a22ab +https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.3.0-hb700be7_2.conda#8f7278ca5f7456a974992a8b34284737 https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda#edd329d7d3a4ab45dcf905899a7a6115 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.35.4-pyhd8ed1ab_0.conda#cfccfd4e8d9de82ed75c8e2c91cab375 +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.36.0-pyhd8ed1ab_0.conda#c9a9b6e144b880308f5eedc905fe503d https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda#7bbe9a0cc0df0ac5f5a8ad6d6a11af2f https://conda.anaconda.org/conda-forge/linux-64/yarl-1.22.0-py312h8a5da7c_0.conda#6a3fd177315aaafd4366930d440e4430 -https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.13.2-py312h27b7581_0.conda#ad84ca57d502eead2df0233090261dfb +https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.13.3-py312h5d8c7f2_0.conda#7ee12bbdb2e989618c080c7c611048db https://conda.anaconda.org/conda-forge/noarch/asv_runner-0.2.1-pyhd8ed1ab_0.conda#fdcbeb072c80c805a2ededaa5f91cd79 https://conda.anaconda.org/conda-forge/linux-64/at-spi2-core-2.40.3-h0630a04_0.tar.bz2#8cb2fc4cd6cc63f1369cfa318f581cc3 https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda#5267bef8efea4127aacd1f4e1f149b6e https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda#bb6c4808bfa69d6f7f6b07e5846ced37 -https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.4-py312h4f23490_2.conda#ff4b5976814bc00861f962276c8fb87f +https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.5-py312h4f23490_0.conda#acb46785d4866cec0a88b4d6e991c33f 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.3-py312hd9148b4_3.conda#86cf7a7d861b79d38e3f0e5097e4965b https://conda.anaconda.org/conda-forge/noarch/dask-core-2025.12.0-pyhcf101f3_1.conda#cc7b371edd70319942c802c7d828a428 +https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda#439cd0f567d697b20a8f45cb70a1005a https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda#d10d9393680734a8febc4b362a4c94f2 https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_2.conda#b513eb83b3137eca1192c34bf4f013a7 https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h5fbf134_12.conda#88c1c66987cd52a712eea89c27104be6 @@ -295,16 +298,17 @@ https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-9.2.2-pyhd8ed1ab_0. https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.2-py312h383787d_2.conda#69e400d3deca12ee7afd4b73a5596905 https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda#9aa358575bbd4be126eaa5e0039f835c https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312hd9148b4_6.conda#f30ece80e76f9cc96e30cc5c71d2818e -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.2-pyhd8ed1ab_0.conda#4949ca7b83065cfe94ebe320aece8c72 +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda#9272daa869e03efe68833e3dc7a02130 https://conda.anaconda.org/conda-forge/linux-64/viskores-1.0.0-hca82ae8_3.conda#efbc53222863d0f89c123cc3f9ccdc01 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-py312h4f23490_1.conda#ac0a1a874ce9e3f8940a3a908ff74da9 https://conda.anaconda.org/conda-forge/noarch/distributed-2025.12.0-pyhcf101f3_1.conda#613cea9275c4773d0b53c879838ac0ad https://conda.anaconda.org/conda-forge/linux-64/epoxy-1.5.10-hb03c661_2.conda#057083b06ccf1c2778344b6dabace38b -https://conda.anaconda.org/conda-forge/linux-64/esmf-8.9.0-nompi_h8d4c64c_3.conda#9102d5f5b8d01fcfa81efec370815772 -https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.2.0-h6083320_1.conda#d00fa22f3a38953c92230af483d66378 +https://conda.anaconda.org/conda-forge/linux-64/esmf-8.9.1-nompi_h8d4c64c_0.conda#f9f36d9d61c0c643308f9f6a842e5834 +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.3.0-h6083320_0.conda#1ea5ed29aea252072b975a232b195146 https://conda.anaconda.org/conda-forge/noarch/identify-2.6.15-pyhd8ed1ab_0.conda#25f954b7dae6dd7b0dc004dab74f1ce9 https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.2-pyhd8ed1ab_0.conda#efbc812363856906a80344b496389d2e +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda#ada41c863af263cc4c5fcbaff7c3e4dc https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_2.conda#bb0230917e2473c77d615104dbe8a49d https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py312he3d6523_0.conda#b8dc157bbbb69c1407478feede8b7b42 https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.7.3-nompi_py312hf6400b3_100.conda#ed7ab4073fe4c48d0f9d3a80b6a17f74 @@ -312,32 +316,39 @@ https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.cond https://conda.anaconda.org/conda-forge/noarch/pytest-mock-3.15.1-pyhd8ed1ab_0.conda#0511afbe860b1a653125d77c719ece53 https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda#8375cfbda7c57fbceeda18229be10417 https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.4.0-py312h4c3975b_2.conda#1d14b28fa4825ee30fd08e46bbcb5d63 -https://conda.anaconda.org/conda-forge/linux-64/rasterio-1.4.4-py312hcedc861_2.conda#828abf500d10f12d267e94d4d6b60bc4 -https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda#db0c6b99149880c8ba515cf4abe93ee4 +https://conda.anaconda.org/conda-forge/linux-64/rasterio-1.5.0-py312hcedc861_0.conda#f0d110978a87b200a06412b56b26407c +https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda#c65df89a0b2e321045a9e01d1337b182 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 https://conda.anaconda.org/conda-forge/noarch/wslink-2.5.0-pyhd8ed1ab_0.conda#8fa415e696acd9af59ce0a4425fd1b38 https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.25.0-py312hf79963d_1.conda#6c913a686cb4060cbd7639a36fa144f0 https://conda.anaconda.org/conda-forge/noarch/cmocean-4.0.3-pyhd8ed1ab_1.conda#dd71e4ec2fbffe38c0359976505f816e -https://conda.anaconda.org/conda-forge/noarch/esmpy-8.9.0-pyhc455866_0.conda#37e9756efac1b155daface77417f0463 +https://conda.anaconda.org/conda-forge/noarch/esmpy-8.9.1-pyhdfbf58e_0.conda#0155d4a55415cda7f7f09bc0b7760f51 https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_1.conda#9a2be7d0089f5934b550933ca0d9fe85 https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hadf4263_0.conda#79f71230c069a287efe3a8614069ddf1 https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_3.conda#d2bbbd293097e664ffb01fc4cdaf5729 https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda#7f3ac694319c7eaf81a0325d6405e974 https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.1-hb82b983_4.conda#f4dfd61ec958d420bebdcefeb805d658 +https://conda.anaconda.org/conda-forge/noarch/requests-file-2.1.0-pyhd8ed1ab_1.conda#69be0472744969b97324d5d3b21845a9 https://conda.anaconda.org/conda-forge/linux-64/gtk3-3.24.43-h993cebd_6.conda#f9f33c65b20e6a61f21714785e3613ec https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.60.0-h61e6d4b_0.conda#91e6d4d684e237fba31b9815c4b40edf -https://conda.anaconda.org/conda-forge/linux-64/vtk-base-9.5.2-py312hd2ae51d_5.conda#961c177fcf135ea4053652850a90b084 +https://conda.anaconda.org/conda-forge/linux-64/vtk-base-9.5.2-py312h6fba518_6.conda#24f269a608a9032faf6a1bcaea8d9e21 https://conda.anaconda.org/conda-forge/noarch/adwaita-icon-theme-49.0-unix_0.conda#b3f0179590f3c0637b7eb5309898f79e https://conda.anaconda.org/conda-forge/noarch/pyvista-0.46.4-pyhd8ed1ab_0.conda#89f80194003ce06e6bdf25fba539d9b1 https://conda.anaconda.org/conda-forge/noarch/geovista-0.5.3-pyhd8ed1ab_1.conda#64348d05eedb1b1b5676f63101d004f2 https://conda.anaconda.org/conda-forge/linux-64/graphviz-14.1.0-h8b86629_0.conda#39dcf8bb370df27fd81dbe41d4cb605e https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.16.1-pyhd8ed1ab_0.conda#837aaf71ddf3b27acae0e7e9015eebc6 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda#bf22cb9c439572760316ce0748af3713 +https://conda.anaconda.org/conda-forge/noarch/sphinx-data-viewer-0.1.5-pyhd8ed1ab_1.conda#fbe6437c6899c54e52f9258518035aca https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.6.1-pyhd8ed1ab_2.conda#3e6c15d914b03f83fc96344f917e0838 https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.20.0-pyhd8ed1ab_0.conda#4cae490c8d142824fb80d9aed672fddd +https://conda.anaconda.org/conda-forge/noarch/sphinx-reredirects-1.1.0-pyhd8ed1ab_0.conda#8392493ce6fbb8ab72a101af8e8a5d03 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda#16e3f039c0aa6446513e94ab18a8784b https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda#910f28a05c178feba832f842155cbfff https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda#e9fb3fe8a5b758b4aff187d434f94f03 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jquery-4.1-pyhd8ed1ab_1.conda#403185829255321ea427333f7773dd1f +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-plantuml-0.30-pyhd8ed1ab_0.conda#adee2f3d02d464fc1af45adfe2748b44 +https://conda.anaconda.org/conda-forge/noarch/sphinx-needs-5.1.0-pyh29332c3_0.conda#0e9b4f42b0de80821f586ce83e2b230e 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 + diff --git a/requirements/locks/py313-linux-64.lock b/requirements/locks/py313-linux-64.lock index 57a14566c3..99dd659f64 100644 --- a/requirements/locks/py313-linux-64.lock +++ b/requirements/locks/py313-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: aa998005b5dacd37fb319f00d41becfc0c4eee198d70c2eaba80542b72968540 +# input_hash: 92604018a4a0a211f70dee8a8867b8a00f30d91c44d49bbd02ad242fde4fdcb2 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45 @@ -10,9 +10,9 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.co https://conda.anaconda.org/conda-forge/linux-64/hicolor-icon-theme-0.17-ha770c72_2.tar.bz2#bbf6f174dcd3254e19a2f5d2295ce808 https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_1.conda#16c2a0e9c4a166e53632cfca4f68d020 https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda#94305520c52a4aa3f6c2b1ff6008d9f8 -https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-h8577fbf_0.conda#338201218b54cadff2e774ac27733990 -https://conda.anaconda.org/conda-forge/linux-64/utfcpp-4.0.8-ha770c72_0.conda#a480ee3eb9c95364a229673a28384899 -https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-hbd8a1cb_0.conda#f0991f0f84902f6b6009b4d2350a83aa +https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda#ad659d0a2b3e47e38d829aa8cad2d610 +https://conda.anaconda.org/conda-forge/linux-64/utfcpp-4.09-ha770c72_0.conda#99884244028fe76046e3914f90d4ad05 +https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda#bddacf101bb4dd0e51811cb69c7790e2 https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda#a7970cd949a077b7cb9696379d338681 https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda#434ca7e50e40f4918ab701e3facd59a0 https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda#26c46f90d0e727e95c6c9498a33a09f3 @@ -21,7 +21,7 @@ https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda#c151d5eb730e9b7480e6d48c0fc44048 https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda#7df50d44d4a14d6c31a2c54f2cd92157 https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda#6d0363467e6ed84f11435eb309f2ff06 -https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.1-hb03c661_0.conda#bba37fb066adb90e1d876dff0fd5d09d +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.2-hb03c661_0.conda#ada39f5726bc5481e9dce293709dfabc https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda#791365c5f65975051e4e017b5da3abf5 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda#51a19bba1b8ebfb60df25cde030b7ebc https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda#920bb03579f15389b9e512095ad995b7 @@ -59,11 +59,11 @@ https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.3-hb47aa4a_0.conda#60 https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda#a77f85f77be52ff59391544bfe73390a https://conda.anaconda.org/conda-forge/linux-64/cli11-2.6.0-h54a6638_0.conda#ddf9fed4661bace13f33f08fe38a5f45 https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda#dbe3ec0f120af456b3477743ffd99b74 -https://conda.anaconda.org/conda-forge/linux-64/fmt-12.0.0-h2b0788b_0.conda#d90bf58b03d9a958cb4f9d3de539af17 +https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-hff5e90c_0.conda#f7d7a4104082b39e3b3473fbd4a38229 https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h480dda7_0.conda#4d4efd0645cd556fab54617c4ad477ef https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda#3bf7b9fd5a7136126e0234db4b87c8b6 https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda#2cd94587f3a401ae05e03a6caf09539d -https://conda.anaconda.org/conda-forge/linux-64/icu-78.1-h33c6efd_0.conda#518e9bbbc3e3486d6a4519192ba690f8 +https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda#186a18e3ba246eccfc7cff00cd19a870 https://conda.anaconda.org/conda-forge/linux-64/jsoncpp-1.9.6-hf42df4d_1.conda#7bdc5e2cc11cb0a0f795bdad9732b0f2 https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda#9344155d33912347b37f0ae6c410a835 https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.4-h3f801dc_0.conda#01ba04e414e47f95c03d6ddd81fd37be @@ -136,7 +136,7 @@ https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda#000e85703f0fd9594c81710dd5066471 https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda#c160954f7418d7b6e87eaf05a8913fa9 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda#d4a250da4737ee127fb1fa6452a9002e -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.17.0-h4e3cde8_1.conda#117499f93e892ea1e57fdca16c2e8351 +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda#0a5563efed19ca4461cf927419b6eb73 https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.1-ha770c72_0.conda#f4084e4e6577797150f9b04a4560ceb0 https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda#c8013e438185f33b13814c5c488acd5c https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-haa4a5bd_1022.conda#00f0f4a9d2eb174015931b1a234d61ca @@ -153,9 +153,9 @@ https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda#8c https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.1-pyhd8ed1ab_0.conda#18fd895e0e775622906cdabfc3cf0fb4 https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda#1fd9696649f65fd6611fcdb4ffec738a https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda#537296d57ea995666c68c821b00e360b -https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.2.0-py313h18e8e13_0.conda#ab79cf30dea6ef4d1ab2623c5ac5601b +https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py313h18e8e13_0.conda#d9e90792551a527200637e23a915dd79 https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py313hf159716_1.conda#6c4d3597cf43f3439a51b2b13e29a4ba -https://conda.anaconda.org/conda-forge/noarch/certifi-2025.11.12-pyhd8ed1ab_0.conda#96a02a5c1a65470a7e4eedb644c872fd +https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda#eacc711330cd46939f66cd401ff9c44b https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda#381bd45fb7aa032691f3063aff47e3a1 https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda#a22d1fd9bf98827e280a02875d9a007a https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda#ea8a6c3256897cc31263de9f455e25d9 @@ -163,11 +163,11 @@ https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.con https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda#962b9857ee8e7018c22f2776ffa0b2d7 https://conda.anaconda.org/conda-forge/noarch/colorcet-3.1.0-pyhd8ed1ab_1.conda#91d7152c744dc0f18ef8beb3cbc9980a https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda#4c2a8fef270f6c69591889b93f9f55c1 -https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.3-py313hc80a56d_1.conda#5e6c9f05c2825daad3d8006d3e2474ac +https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.4-py313hc80a56d_0.conda#4a08e7dd57fdc0a13dc699c4c6d76c3a https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda#003b8ba0a94e2f1e117d0bd46aebc901 https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda#24c1ca34138ee57de72a943237cde4cc https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.2-pyhd8ed1ab_0.conda#a57b4be42619213a94f31d2c69c5dda7 -https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.1-pyhd8ed1ab_0.conda#81a651287d3000eb12f0860ade0a1b41 +https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.2-pyhd8ed1ab_0.conda#7e7cf4d6c2be6991e6ae2b3f4331701c https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.1-ha770c72_0.conda#4afc585cd97ba8a23809406cd8a9eda8 https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.7.0-py313h6b9daa2_0.conda#3a0be7abedcbc2aee92ea228efea8eba https://conda.anaconda.org/conda-forge/noarch/fsspec-2025.12.0-pyhd8ed1ab_0.conda#a3b9510e2491c20c7fc0f5e730227fbb @@ -179,11 +179,11 @@ https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.b https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda#9614359868482abba1bd15ce465e3c42 https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.5.2-pyhd8ed1ab_0.conda#895f6625dd8a246fece9279fcc12c1de https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py313hc8edb43_2.conda#3e0e65595330e26515e31b7fc6d933c7 -https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.2-gpl_h7be2006_100.conda#9d0eaa26e3c5d7af747b3ddee928327b +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.8.5-gpl_hc2c16d8_100.conda#5fdaa8b856683a5598459dead3976578 https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda#6636a2b6f1a87572df2970d3ebc87cc0 https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda#928b8be80851f5d8ffb016f9c81dae7a https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_2.conda#27ac5ae872a21375d980bd4a6f99edf3 -https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.1-default_hafda6a7_1003.conda#4fe840c6d6b3719b4231ed89d389bb17 +https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.2-default_hafda6a7_1000.conda#0ed3aa3e3e6bc85050d38881673a692f https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda#b38076eb5c8e40d0106beda6f95d7609 https://conda.anaconda.org/conda-forge/linux-64/libllvm20-20.1.8-hf7376ad_1.conda#eafa8fd1dfc9a107fe62f7f12cabbc9c https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda#1a2708a460884d6861425b7f9a7bef99 @@ -197,13 +197,13 @@ https://conda.anaconda.org/conda-forge/linux-64/multidict-6.7.0-py313h3dea7bd_0. https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda#37293a85a0f4f77bbd9cf7aaefc62609 https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda#2e5bf4f1da39c0b32778561c3c4e5878 https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda#58335b26c38bf4a20f399384c33cbcf9 -https://conda.anaconda.org/conda-forge/linux-64/pillow-12.0.0-py313h80991f8_2.conda#37ca27d2f726f29a068230d8f6917ce4 +https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.0-py313h80991f8_0.conda#183fe6b9e99e5c2b464c1573ec78eac8 https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh145f28c_0.conda#bf47878473e5ab9fdb4115735230e191 https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda#1bd2e65c8c7ef24f4639ae6e850dacc2 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda#d7585b6550ad04c8c5e21097ada2888e https://conda.anaconda.org/conda-forge/linux-64/proj-9.7.1-h99ae125_0.conda#8bbc19a6e87fbe8b97796e9a42a47a30 https://conda.anaconda.org/conda-forge/linux-64/propcache-0.3.1-py313h8060acc_0.conda#b62867739241368f43f164889b45701b -https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.0-py313h54dd161_0.conda#7eace103460ce68b57957ac92f1b0e05 +https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.1-py313h54dd161_0.conda#d362949a1ed1ad4693b3928ad1d32c93 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda#12c566707c80111f9799308d9e265aef https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda#6b6ece66ebcae2d5f326c77ef2c5a066 https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.1-pyhcf101f3_0.conda#d837065e4e0de4962c3462079c23f969 @@ -213,6 +213,7 @@ https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0. https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.6.0-py313heab5758_1.conda#82df5d372f2796c389fcbe5104664f5a https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda#bc8e3267d44011051f2eb14d22fb0960 https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_0.conda#4794ea0adaebd9f844414e594b142cb2 +https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py313h843e2db_0.conda#779e3307a0299518713765b83a36f4b1 https://conda.anaconda.org/conda-forge/noarch/scooby-0.11.0-pyhd8ed1ab_0.conda#2d707ed62f63d72f4a0141b818e9c7b6 https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda#4de79c071274a53dcaf2a8c749d1499e https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda#3339e3b65d58accf4ca4fb8748ab16b3 @@ -242,7 +243,7 @@ https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py313hf46b229_1.conda https://conda.anaconda.org/conda-forge/noarch/click-default-group-1.2.4-pyhd8ed1ab_1.conda#7cd83dd6831b61ad9624a694e4afd7dc https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1.2-pyhd8ed1ab_0.conda#e9b05deb91c013e5224672a4ba9cf8d1 https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_2.conda#55c7804f428719241a90b152016085a1 -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.13.0-py313h3dea7bd_0.conda#dbf9a488eb9568f9f25c3af44cbbb03e +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.13.1-py313h3dea7bd_0.conda#82315acb438e857f809f556e2dcdb822 https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.1.0-py313h07c4f96_1.conda#bcca9afd203fe05d9582249ac12762da https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda#8e662bd460bda79b1ea39194e3c4c9ab https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda#8f5b0b297b59e1ac160ad4beec99dbee @@ -251,8 +252,8 @@ https://conda.anaconda.org/conda-forge/linux-64/glew-2.2.0-h3abd4de_0.conda#6ea9 https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda#164fc43f0b53b6e3a7bc7dce5e4f1dc9 https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda#63ccfdc3a3ce25b027b8767eb722fca8 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda#04558c96691bed63104678757beb4f8d -https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.7-default_h99862b1_2.conda#fd47a1021b2a3a91b0c05f4d7b529b68 -https://conda.anaconda.org/conda-forge/linux-64/libclang13-21.1.7-default_h746c552_2.conda#684375df603a5fcaffc47d04fe66efc0 +https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_1.conda#e933f92cedca212eb2916f24823cf90b +https://conda.anaconda.org/conda-forge/linux-64/libclang13-21.1.8-default_h746c552_1.conda#e00afd65b88a3258212661b32c1469cb https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_2.conda#53e7cbb2beb03d69a478631e23e340e9 https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.3-nompi_h11f7409_103.conda#3ccff1066c05a1e6c221356eecc40581 https://conda.anaconda.org/conda-forge/linux-64/libpq-18.1-hb80d175_3.conda#c39da2ad0e7dd600d1eb3146783b057d @@ -265,20 +266,22 @@ https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda#0ba https://conda.anaconda.org/conda-forge/noarch/pbr-7.0.3-pyhd8ed1ab_0.conda#d312c4472944752588d76e119e6dd8f9 https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.2-py313h77f6078_2.conda#42d11c7d1ac21ae2085f58353641e71c https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda#5b8d21249ff20967101ffa321cab24e8 -https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.3.0-h8d10470_1.conda#e3259be3341da4bc06c5b7a78c8bf1bd +https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda#870293df500ca7e18bedefa5838a22ab +https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.3.0-hb700be7_2.conda#8f7278ca5f7456a974992a8b34284737 https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda#edd329d7d3a4ab45dcf905899a7a6115 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.35.4-pyhd8ed1ab_0.conda#cfccfd4e8d9de82ed75c8e2c91cab375 +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.36.0-pyhd8ed1ab_0.conda#c9a9b6e144b880308f5eedc905fe503d https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda#7bbe9a0cc0df0ac5f5a8ad6d6a11af2f https://conda.anaconda.org/conda-forge/linux-64/yarl-1.22.0-py313h3dea7bd_0.conda#e9415b0f7b43d2e32a3f24fd889c9e70 -https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.13.2-py313h321d83c_0.conda#df74ac8948c67a2c29c6f0c884fbc6f4 +https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.13.3-py313hd6074c6_0.conda#684fb9c78db5024b939a1ed0a107f464 https://conda.anaconda.org/conda-forge/noarch/asv_runner-0.2.1-pyhd8ed1ab_0.conda#fdcbeb072c80c805a2ededaa5f91cd79 https://conda.anaconda.org/conda-forge/linux-64/at-spi2-core-2.40.3-h0630a04_0.tar.bz2#8cb2fc4cd6cc63f1369cfa318f581cc3 https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda#5267bef8efea4127aacd1f4e1f149b6e https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda#bb6c4808bfa69d6f7f6b07e5846ced37 -https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.4-py313h29aa505_2.conda#1363e8db910e403edc8fd486f8470ec6 +https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.5-py313h29aa505_0.conda#14dc0f64f2e83f7bc2be5153e2ef730b 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.3-py313h7037e92_3.conda#6186382cb34a9953bf2a18fc763dc346 https://conda.anaconda.org/conda-forge/noarch/dask-core-2025.12.0-pyhcf101f3_1.conda#cc7b371edd70319942c802c7d828a428 +https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda#439cd0f567d697b20a8f45cb70a1005a https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_2.conda#d10d9393680734a8febc4b362a4c94f2 https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_2.conda#b513eb83b3137eca1192c34bf4f013a7 https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h5fbf134_12.conda#88c1c66987cd52a712eea89c27104be6 @@ -295,16 +298,17 @@ https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.2-py313had47c43_2.co https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda#9aa358575bbd4be126eaa5e0039f835c https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py313h7037e92_6.conda#1fa8d662361896873a165b051322073e -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.2-pyhd8ed1ab_0.conda#4949ca7b83065cfe94ebe320aece8c72 +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda#9272daa869e03efe68833e3dc7a02130 https://conda.anaconda.org/conda-forge/linux-64/viskores-1.0.0-hca82ae8_3.conda#efbc53222863d0f89c123cc3f9ccdc01 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-py313h29aa505_1.conda#36a704169c6a0b4ce8335d160103e218 https://conda.anaconda.org/conda-forge/noarch/distributed-2025.12.0-pyhcf101f3_1.conda#613cea9275c4773d0b53c879838ac0ad https://conda.anaconda.org/conda-forge/linux-64/epoxy-1.5.10-hb03c661_2.conda#057083b06ccf1c2778344b6dabace38b -https://conda.anaconda.org/conda-forge/linux-64/esmf-8.9.0-nompi_h8d4c64c_3.conda#9102d5f5b8d01fcfa81efec370815772 -https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.2.0-h6083320_1.conda#d00fa22f3a38953c92230af483d66378 +https://conda.anaconda.org/conda-forge/linux-64/esmf-8.9.1-nompi_h8d4c64c_0.conda#f9f36d9d61c0c643308f9f6a842e5834 +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.3.0-h6083320_0.conda#1ea5ed29aea252072b975a232b195146 https://conda.anaconda.org/conda-forge/noarch/identify-2.6.15-pyhd8ed1ab_0.conda#25f954b7dae6dd7b0dc004dab74f1ce9 https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.2-pyhd8ed1ab_0.conda#efbc812363856906a80344b496389d2e +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda#ada41c863af263cc4c5fcbaff7c3e4dc https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_2.conda#bb0230917e2473c77d615104dbe8a49d https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py313h683a580_0.conda#ffe67570e1a9192d2f4c189b27f75f89 https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.7.3-nompi_py313hfae5b86_100.conda#d5247c4087289475a8c324bbe03a71ce @@ -312,31 +316,38 @@ https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.cond https://conda.anaconda.org/conda-forge/noarch/pytest-mock-3.15.1-pyhd8ed1ab_0.conda#0511afbe860b1a653125d77c719ece53 https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda#8375cfbda7c57fbceeda18229be10417 https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.4.0-py313h07c4f96_2.conda#424535b78f522124143393ec02f6318c -https://conda.anaconda.org/conda-forge/linux-64/rasterio-1.4.4-py313h2005660_2.conda#8bdc258552a182de89bb08965f8912d0 -https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhd8ed1ab_0.conda#db0c6b99149880c8ba515cf4abe93ee4 +https://conda.anaconda.org/conda-forge/linux-64/rasterio-1.5.0-py313h2005660_0.conda#d551bd1d2fcfac36674dbe2be4b0a410 +https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda#c65df89a0b2e321045a9e01d1337b182 https://conda.anaconda.org/conda-forge/noarch/wslink-2.5.0-pyhd8ed1ab_0.conda#8fa415e696acd9af59ce0a4425fd1b38 https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.25.0-py313h08cd8bf_1.conda#a0d8dc5c90850d9f1a79f69c98aef0ff https://conda.anaconda.org/conda-forge/noarch/cmocean-4.0.3-pyhd8ed1ab_1.conda#dd71e4ec2fbffe38c0359976505f816e -https://conda.anaconda.org/conda-forge/noarch/esmpy-8.9.0-pyhc455866_0.conda#37e9756efac1b155daface77417f0463 +https://conda.anaconda.org/conda-forge/noarch/esmpy-8.9.1-pyhdfbf58e_0.conda#0155d4a55415cda7f7f09bc0b7760f51 https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_1.conda#9a2be7d0089f5934b550933ca0d9fe85 https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hadf4263_0.conda#79f71230c069a287efe3a8614069ddf1 https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.2-pyhd8ed1ab_3.conda#d2bbbd293097e664ffb01fc4cdaf5729 https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.5.1-pyha770c72_0.conda#7f3ac694319c7eaf81a0325d6405e974 https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.10.1-hb82b983_4.conda#f4dfd61ec958d420bebdcefeb805d658 +https://conda.anaconda.org/conda-forge/noarch/requests-file-2.1.0-pyhd8ed1ab_1.conda#69be0472744969b97324d5d3b21845a9 https://conda.anaconda.org/conda-forge/linux-64/gtk3-3.24.43-h993cebd_6.conda#f9f33c65b20e6a61f21714785e3613ec https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.60.0-h61e6d4b_0.conda#91e6d4d684e237fba31b9815c4b40edf -https://conda.anaconda.org/conda-forge/linux-64/vtk-base-9.5.2-py313h8edd7fe_5.conda#8eb8bea2557e83dc7b8bd123258523a6 +https://conda.anaconda.org/conda-forge/linux-64/vtk-base-9.5.2-py313hbb97348_6.conda#9f13c027bf4668c4f8a76a7bf10bd63e https://conda.anaconda.org/conda-forge/noarch/adwaita-icon-theme-49.0-unix_0.conda#b3f0179590f3c0637b7eb5309898f79e https://conda.anaconda.org/conda-forge/noarch/pyvista-0.46.4-pyhd8ed1ab_0.conda#89f80194003ce06e6bdf25fba539d9b1 https://conda.anaconda.org/conda-forge/noarch/geovista-0.5.3-pyhd8ed1ab_1.conda#64348d05eedb1b1b5676f63101d004f2 https://conda.anaconda.org/conda-forge/linux-64/graphviz-14.1.0-h8b86629_0.conda#39dcf8bb370df27fd81dbe41d4cb605e https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.16.1-pyhd8ed1ab_0.conda#837aaf71ddf3b27acae0e7e9015eebc6 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda#bf22cb9c439572760316ce0748af3713 +https://conda.anaconda.org/conda-forge/noarch/sphinx-data-viewer-0.1.5-pyhd8ed1ab_1.conda#fbe6437c6899c54e52f9258518035aca https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.6.1-pyhd8ed1ab_2.conda#3e6c15d914b03f83fc96344f917e0838 https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.20.0-pyhd8ed1ab_0.conda#4cae490c8d142824fb80d9aed672fddd +https://conda.anaconda.org/conda-forge/noarch/sphinx-reredirects-1.1.0-pyhd8ed1ab_0.conda#8392493ce6fbb8ab72a101af8e8a5d03 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda#16e3f039c0aa6446513e94ab18a8784b https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda#910f28a05c178feba832f842155cbfff https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda#e9fb3fe8a5b758b4aff187d434f94f03 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jquery-4.1-pyhd8ed1ab_1.conda#403185829255321ea427333f7773dd1f +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-plantuml-0.30-pyhd8ed1ab_0.conda#adee2f3d02d464fc1af45adfe2748b44 +https://conda.anaconda.org/conda-forge/noarch/sphinx-needs-5.1.0-pyh29332c3_0.conda#0e9b4f42b0de80821f586ce83e2b230e 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 + diff --git a/requirements/py311.yml b/requirements/py311.yml index a128b77eee..66682ab808 100644 --- a/requirements/py311.yml +++ b/requirements/py311.yml @@ -57,6 +57,8 @@ dependencies: - sphinx-gallery >=0.11.0 - sphinx-design - pydata-sphinx-theme >=0.13.0 + - sphinx-needs + - sphinx-reredirects # Temporary minimum pins. # See https://github.com/SciTools/iris/pull/5051 diff --git a/requirements/py312.yml b/requirements/py312.yml index fbb1e8aea5..1572ad2498 100644 --- a/requirements/py312.yml +++ b/requirements/py312.yml @@ -57,6 +57,8 @@ dependencies: - sphinx-gallery >=0.11.0 - sphinx-design - pydata-sphinx-theme >=0.13.0 + - sphinx-needs + - sphinx-reredirects # Temporary minimum pins. # See https://github.com/SciTools/iris/pull/5051 diff --git a/requirements/py313.yml b/requirements/py313.yml index a76d819e75..3533075cf5 100644 --- a/requirements/py313.yml +++ b/requirements/py313.yml @@ -57,6 +57,8 @@ dependencies: - sphinx-gallery >=0.11.0 - sphinx-design - pydata-sphinx-theme >=0.13.0 + - sphinx-needs + - sphinx-reredirects # Temporary minimum pins. # See https://github.com/SciTools/iris/pull/5051 diff --git a/tools/generate_std_names.py b/tools/generate_std_names.py index 85372b7cc7..1e491ad5f7 100644 --- a/tools/generate_std_names.py +++ b/tools/generate_std_names.py @@ -33,6 +33,11 @@ to another dictionary of other standard name attributes. Currently only the `canonical_unit` exists in these attribute dictionaries. +.. z_reference:: iris.std_names + :tags: topic_load_save;topic_data_model + + API reference + This file is automatically generated. Do not edit this file by hand. Generated from CF standard-name table version : {table_version}