Science Score: 39.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 2 DOI reference(s) in README -
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (13.0%) to scientific vocabulary
Repository
Standardising hazard maps for ACS
Basic Info
- Host: GitHub
- Owner: AusClimateService
- Language: Jupyter Notebook
- Default Branch: main
- Size: 313 MB
Statistics
- Stars: 5
- Watchers: 2
- Forks: 1
- Open Issues: 8
- Releases: 1
Metadata Files
README.md
plotting_maps
This repo enables standardised statistics and plotting of ACS climate hazard data to support the Australian Climate Service (ACS) Hazard teams and the National Climate Risk Assessment (NCRA). We have developed Python functions and provided examples of mapping and statistically summarising climate hazard metrics for Australia so that data can be consistently and clearly presented.
Examples include maps and stats for Australia with a range of regions including states/territories and NCRA regions. Plotting is also possible for station data and ocean data. The functions are flexible to plot any given lat/lon but are optimised for Australia and default parameters suit Australian data. Examples for mapping Australian states, Antarctica, and Europe are available.
Intended uses include taking netcdf or xarray dataarrays of hazards and indices such as Rx1day, TXx, FFDI and plotting the data on a map of Australia.
This work has enabled consistent mapping and summary analyses of Hazard Metrics for present and future scenarios at Global Warming Levels (GWLs). Subsequent figures and tables have been presented to national departments and ministers. The figures and tables contribute to the timely delivery of presentations and reports on Australias current and future climate hazards.
The code has been developed to be flexible and functional for different hazards; plotting land, ocean and station-based data; creating single- and multi-panel plots; applying different regions (eg states and NCRA regions); and masking areas (eg AGCD mask). The goal was to create code that is easy to apply, well-supported by documentation and notebook tutorials, and effective at producing aesthetic and clear plots. This has enabled collaboration between the ACS team of scientists and science communicators to deliver high-quality products to stakeholders.
Figures have been developed to align with ACS design guidelines and IPCC standards, where possible and applicable.
This work was developed with advice from ACS, CSIRO, BOM scientists, ACS communication teams, and stakeholders.
This repo has been developed by Gen Tolhurst (gentolhurst@gmail.com or Gen.Tolhurst@bom.gov.au) and supervised by Mitch Black (Mitchell.Black@bom.gov.au). Work has been undertaken from May 2024 to Feburary 2025.\ Funded by ACS.
If you use this software please cite it as :
Tolhurst, G., & Black, M. (2025). plotting_maps (Version 1.0.0) [Computer software]. https://doi.org/10.5281/zenodo.1234
For ongoing issues or support please contact Mitchell Black (mitchell.black@bom.gov.au)
What's possible?
Expand
### [acs_plotting_maps.py](https://github.com/AusClimateService/plotting_maps/blob/main/acs_plotting_maps.py) for plots There are many possibilities built into this function. ```plot_acs_hazard``` is the single plot function. Multiple plots can be made in the same figure using ```plot_acs_hazard_2pp```, ```plot_acs_hazard_3pp```, ```plot_acs_hazard_4pp```, and ```plot_acs_hazard_1plus3```; these multi-panel plots have the same functionalities as the single plot function. To access docstrings and learn about input arguments, use ```plot_acs_hazard?```. This will describe each parameter you can give to the function to customise your plot. - Basic usage: Single plot of Australia eg temperature [minimal_plotting_example_tx.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/minimal_plotting_example_tx.ipynb), [story_map_plots.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/reports/story_map_plots.ipynb) and [acs_plotting_maps_examples.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/acs_plotting_maps_examples.ipynb)
- Plot ocean data: Plots of ocean data eg marine heat waves [story_map_plots.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/reports/story_map_plots.ipynb), [acs_plotting_maps_examples.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/acs_plotting_maps_examples.ipynb), and [Climate_and_hazards_report](https://github.com/AusClimateService/plotting_maps/blob/main/reports/Climate_and_hazards_report.ipynb)
- Plot data from anywhere in the world eg Antarctica or Europe [FAQ_example_antarctica.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_antarctica.ipynb)
- Plot stations data: Single plot of station data eg coastal flooding [acs_plotting_maps_examples.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/acs_plotting_maps_examples.ipynb), [multi_plots](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/multi_plots.ipynb) and [Climate_and_hazards_report](https://github.com/AusClimateService/plotting_maps/blob/main/reports/Climate_and_hazards_report.ipynb)
- Plot multiple data types in one figure. Gridded data and station data can be plotted on the same plot: eg ocean data and station data (station and gridded data on the same plot) [minimal_plotting_example_station.ipynb]((https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/minimal_plotting_example_station.ipynb)
### [acs_area_statistics.py](https://github.com/AusClimateService/plotting_maps/blob/main/acs_area_statistics.py) for area statistics
This module enables calculating a range of statistics for areas defined by shapefiles, including area averages. It is best used for reducing 2D maps into a table of summary statistics for each region or state. The function can be used for more dimensions (eg, lat, lon, time, model) but may be slow and memory intensive depending on the size of the data and the number of regions.
- Statistics available include 'mean', 'median', 'min', 'max', 'mode', 'sum', 'std', 'var', 'proportions', 'p10', and 'p90' (any pxx where xx is between 0 and 100).
- Here's a [verbose example](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/area_statistics_example.ipynb) of using the function.

- The function works for continuous and numerical variables eg [rainfall](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/minimal_plotting_example_pr.ipynb), [marine heatwaves](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/minimal_plotting_example_ocean.ipynb), [temperature](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/minimal_plotting_example_tx.ipynb)
- The function also works for calculating stats for [categorical data](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/plotting_and_stats_examples.ipynb), including calculating mode, median (if ordinal), and each category's proportions.

- The function can calculate the area averages for many models individually or across the multi-member ensemble. eg [ensemble-table](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/ensemble-table.ipynb)

- The function can provide data to visualise as [ensemble heatmaps](https://github.com/AusClimateService/hazards-drought/blob/main/percentiles/plot_percentiles.ipynb)

- The function can [work with any custom shapefile](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/area_statistics_example_basin_gpkg.ipynb)
- The function can be used for time series extraction for regions. This can be very memory intensive. For time series extraction for regions, see [FAQ_example_timeseries_stats.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_timeseries_stats.ipynb)

- The function can be used for multiple models to show the ensemble spread of area averages [FAQ_example_timeseries_stats_for_ensemble_region.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_timeseries_stats_for_ensemble_region.ipynb)

**Limitations**
- Be careful when working with NaNs and non-finite values. Previous versions of this code could not cope with non-finite values, now the function will mask non-finite values (inf, NaN etc) before calculating statistics. See https://github.com/AusClimateService/plotting_maps/issues/31
- Calculating area averages with region shapefiles with many regions is very slow (big regions are ok)
### Time Series extraction
For time series extraction for regions, see [FAQ_example_timeseries_stats.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_timeseries_stats.ipynb) and [FAQ_example_timeseries_stats_for_ensemble_region.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_timeseries_stats_for_ensemble_region.ipynb)
For time series extraction of point locations see https://github.com/AusClimateService/TimeSeriesExtraction
### Masks
Shapefiles and masks that define regions can be at /g/data/ia39/shapefiles/data and /g/data/ia39/aus-ref-clim-data-nci/shapefiles/masks/.
These shapefiles and masks can be used to outline some selected regions, calculate area statistics, or any other use you like.
More information on [the Australian Community Reference Climate Data Collection @ NCI shapefile collection](https://github.com/aus-ref-clim-data-nci/shapefiles) is in the readme and example notebooks. These shapefiles are lightly processed from official sources such as the Australian Bureau of Statistics. The shapefiles can be much more precise than we need, so `acs_area_statistics.py` and `acs_plotting_maps.py` automatically simplify the geometries (sometimes from ~1 mm precision) to ~100 m precision. Most climate data is only on the scale of kilometres or tens of kilometres.
You may apply your own shapefiles or masks. You may need to rename some columns so that functions work as intended.
Regions include Australian:
- Local Government Areas (LGAs),
- State and Territories,
- land boundary,
- Natural Resource Management (NRM) regions,
- river regions,
- broadacre regions, and
- National Climate Risk Assessment (NCRA) regions.
```
dict_keys(['aus_local_gov',
'aus_states_territories',
'australia',
'nrm_regions',
'river_regions',
'broadacre_regions',
'ncra_regions'])
```
### other
See the github issues https://github.com/AusClimateService/plotting_maps/issues?q=is%3Aissue for some history of added functionality etc.
Getting started:
Expand
### Python environment This code is designed to work with hh5 analysis3-24.04 virtual environment. It should also work on the xp65 virtual environment however this has not been fully tested. In your terminal, this may look like: ``` $ module use /g/data/hh5/public/modules $ module load conda/analysis3-24.04 ``` When starting a new ARE JupyterLab session (https://are.nci.org.au/pun/sys/dashboard/batch_connect/sys/jupyter/ncigadi/session_contexts/new, requires NCI login), selecting the hh5 analysis3-24.04 virtual environment might look like this:  ### Access shapefiles This code references shapefiles stored in ```/g/data/ia39/```. You will need to be a member of this project to access the data. Request membership https://my.nci.org.au/mancini/project/ia39 See https://github.com/aus-ref-clim-data-nci/shapefiles for more information on the shapefiles. Include the projects you need when you start an ARE session. Eg, storage: "gdata/ia39+gdata/hh5+gdata/mn51"  ### Cloning this repo Before you can ```import acs_plotting_maps``` to use the plotting function ```plot_acs_hazard```, you will need to clone a copy of this repository to your own working directory. If you are working in your home directory, navigate there: ``` $ cd ~/ ``` Else, if you are working elsewhere (eg. scratch or project), specify the path: ``` $ cd /path/to/dir/ $ cd /scratch/PROJECT/USER/ $ cd /g/data/PROJECT/USER/ ``` Then, you can clone this repository to access the Python code and notebooks. \ If you want the new directory to be called anything other than "plotting_maps" please replace the final argument with your choice of directory name: ``` $ git clone https://github.com/AusClimateService/plotting_maps.git plotting_maps ``` You will now be able to access the functions, python scripts, and Jupyter notebooks from your user. ### Update to the lastest version of the repo (pull) Navigate to your existing version of the plotting maps repository (if you don't have an existing version, follow the above directions for cloning). ``` $ cd /path/to/dir/plotting_maps ```` Then pull the latest version using git ``` $ git pull ``` ### Usage in Jupyter Notebook: See small, easy-to-follow examples here: - [https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/minimal_plotting_example_pr.ipynb] - [https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/area_statistics_example.ipynb] Other examples: - [https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/plotting_and_stats_examples.ipynb] - [https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/acs_plotting_maps_examples.ipynb] 1. **Navigate to the directory you cloned to:** ``` cd ~/plotting_maps ``` 2. **Import the ACS plotting maps function and dictionaries and Xarray.** ```python from acs_plotting_maps import plot_acs_hazard, cmap_dict, tick_dict, plot_acs_hazard_3pp import xarray as xr ``` 3. **Load some data.** For example, this will load extratropical storm rx5day rainfall ```python ds = xr.open_dataset("/g/data/ia39/australian-climate-service/test-data/CORDEX-CMIP6/bias-adjustment-input/AGCD-05i/BOM/ACCESS-CM2/historical/r4i1p1f1/BARPA-R/v1-r1/day/pr/pr_AGCD-05i_ACCESS-CM2_historical_r4i1p1f1_BOM_BARPA-R_v1-r1_day_19600101-19601231.nc") ``` This data has three dimensions (time, lon, lat). There is a value for every day from 01-01-1960 to 31-12-1960. We can only plot 2D, so next we will calculate a statistic to summarise the data 4. **Summarise data into a 2D xr.DataArray.** For example, calculate the annual sum: ```python var="pr" da = ds.sum(dim="time")[var] ``` 5. **Finally, use the plotting function**.\ You will need to specify: * the data (and select the variable eg "pr"); * suitable arguments for the colorbar including cmap, ticks, cbar_label, and cbar_extend; * annotations including title, dataset_name, date_range; and * where you want the image outfile saved. ```python regions = regions_dict['ncra_regions'] plot_acs_hazard(data = da, regions = regions, ticks=tick_dict['pr_annual'], cbar_label="annual rainfall [mm]", cbar_extend="max", title = "Rainfall", dataset_name = ds_pr.source_id, date_range=f"{start} to {end}", agcd_mask=True, cmap_bad="lightgrey", watermark="", outfile = "~/figures/out.png"); ```  **Plot a three-panel plot** ```python %%time from plotting_maps.acs_plotting_maps import plot_acs_hazard_3pp var = "HWAtx" ds_gwl12 =xr.open_dataset("/g/data/ia39/ncra/heat/data/HWAtx/bias-corrected/ensemble/GWL-average/HWAtx_AGCD-05i_MME50_ssp370_v1-r1-ACS-QME-AGCD-1960-2022_GWL12.nc") ds_gwl15 = xr.open_dataset("/g/data/ia39/ncra/heat/data/HWAtx/bias-corrected/ensemble/GWL-average/HWAtx_AGCD-05i_MME50_ssp370_v1-r1-ACS-QME-AGCD-1960-2022_GWL15.nc") ds_gwl20 = xr.open_dataset("/g/data/ia39/ncra/heat/data/HWAtx/bias-corrected/ensemble/GWL-average/HWAtx_AGCD-05i_MME50_ssp370_v1-r1-ACS-QME-AGCD-1960-2022_GWL20.nc") ds_gwl30 = xr.open_dataset("/g/data/ia39/ncra/heat/data/HWAtx/bias-corrected/ensemble/GWL-average/HWAtx_AGCD-05i_MME50_ssp370_v1-r1-ACS-QME-AGCD-1960-2022_GWL30.nc") plot_acs_hazard_3pp(ds_gwl15 = ds_gwl15[var], ds_gwl20 = ds_gwl20[var], ds_gwl30 = ds_gwl30[var], regions = regions_dict['ncra_regions'], cbar_label=f"Temperature [degC]", title=f"Maximum Temperature of Hottest Heatwave for future warming scenarios", date_range = "Insert subtitle - should include the date range of the data \nand then the dataset below that", # baseline = "GWL1.2", dataset_name= "MME50_ssp370", issued_date=None, watermark="EXPERIMENTAL IMAGE ONLY", watermark_color="k", cmap = cmap_dict["tasmax"], ticks = np.arange(18,53,2),) ```  6. **Calculate summary statistics for the range of models.** ```python # Import needed packages from acs_area_statistics import acs_regional_stats, get_regions regions = get_regions(["ncra_regions", "australia"]) ``` For Calculating the NCRA region stats, we want to compare the regional averages based on different models, eg what is the regional mean value from the coolest/driest model realisation, what is the mean, what is the regional mean from the hottest/wettest model for this, we want ds to have the 10th, median and 90th percentile values from each model, then we can find the range of the models and the MMM. ```python # calculate the stats using the acs_region_fractional_stats function # Find the min, mean, max value for each region ds = xr.open_dataset(filename) mask_frac = regions.mask_3D_frac_approx(ds) dims = ("lat", "lon",) how = ["min", "mean", "max"] da_summary = acs_regional_stats(ds=ds, infile = filename, mask=mask_frac, dims = dims, how = how,) da_summary.to_DateFrame() ``` The dataframe will be saved to: ```infile.replace(".nc", f"_summary-{'-'.join(how)}_ncra-regions.csv"``` For example only, this would make a dataframe in this format: | region | abbrevs | names | pr_min | pr_mean | pr_max | |---------:|:----------|:------------------------|---------:|----------:|---------:| | 0 | VIC | Victoria | 415.729 | 909.313 | 3005.45 | | 1 | NT | Northern Territory | 397.385 | 941.405 | 3934.81 | | 2 | TAS | Tasmania | 555.644 | 1760.66 | 4631.81 | | 3 | SA | South Australia | 284.455 | 575.952 | 1413.98 | | 4 | NSW | New South Wales & ACT | 294.329 | 768.1 | 3440.04 | | 5 | WAN | Western Australia North | 123.651 | 921.906 | 3470.24 | | 6 | WAS | Western Australia South | 249.566 | 545.317 | 1819.89 | | 7 | SQ | Queensland South | 287.613 | 584.155 | 1654.74 | | 8 | NQ | Queensland North | 264.447 | 766.444 | 7146.55 | | 9 | AUS | Australia | 123.614 | 742.735 | 7146.55 |FAQs
Where can I find some worked examples to get started?
Expand
I have collected [example notebooks](https://github.com/AusClimateService/plotting_maps/tree/main/example_notebooks) which contain examples of creating plots with a variety of hazards and using a range of functionalities available. Notebooks used to make plots for specific requests and reports can be found under [reports](https://github.com/AusClimateService/plotting_maps/tree/main/reports). These are good references for the range of plots we can create using these functions and you are welcome to look through them and copy code you like. For minimal plotting and statistics examples: * Aridity example [minimal_plotting_example_ai.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/minimal_plotting_example_ai.ipynb) * Plotting ocean data [minimal_plotting_example_ocean.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/minimal_plotting_example_ocean.ipynb) * Precipitation example [minimal_plotting_example_pr.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/minimal_plotting_example_pr.ipynb) * Coastal station data example [minimal_plotting_example_station.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/minimal_plotting_example_station.ipynb) * Temperature hazard example [minimal_plotting_example_tx.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/minimal_plotting_example_tx.ipynb) For a large range of examples showcasing a range of functionalities: * [acs_plotting_maps_examples.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/acs_plotting_maps_examples.ipynb) Statistic examples: * Basic example of acs_regional_stats [area_statistics_example.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/area_statistics_example.ipynb) * Region and ensemble member mean table for NCRA regions [ensemble-table.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/ensemble-table.ipynb) * Extracting regionally averaged time series from many years of daily data [FAQ_example_timeseries_stats.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_timeseries_stats.ipynb) * Comparing time series from an ensemble [FAQ_example_timeseries_stats_for_ensemble_region.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_timeseries_stats_for_ensemble_region.ipynb) * Using acs_regional_stats to calculate area averages with custom regions [area_statistics_example_basin_gpkg.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/area_statistics_example_basin_gpkg.ipynb)Something is not working and I don't know why!
Expand
Here are some common suggestions for troubleshooting: * see getting started above and make sure you have followed all the instructions * Check you are using the right venv. This code is designed to work with hh5 analysis3-24.04 virtual environment. * Restart the kernel and rerun all cells from start. Especially if you have made a variety of modifications, you may have renamed a function/variable. * If python can't find the module, check you have the .py module in your working directory. If not cd to the directory with the module. * Make sure you have requested access to all the right gdata projects (eg gdata/ia39)Why is my code so slow? Or why did my kernel die?
Expand
Expected run times are shown in the [example notebooks](https://github.com/AusClimateService/plotting_maps/tree/main/example_notebooks). Importing acs_plotting_maps may take several seconds to load. This is normal. NetCDF data files may take several seconds to load. This is normal. The shapefiles take a while to load and calculate in both plotting and regional averaging scripts. Some of this slowness is unavoidable. If `plot_acs_hazard` is very slow (multiple minutes), please pull recent changes to the plotting code. New code simplifies the shapefile to speed up plotting calculations from minutes to seconds. Plotting a figure (including multiple panels) should not take more than a minute. Make sure you request lots of memory and compute resources. For example, I regularly request "Large (7 cpus, 32G mem)" for these notebooks. When calculating area averages for many regions, you will probably need more than this or your kernel will die. The more regions you are averaging, the more memory you need. Current work is investigating how to reduce memory demands for this function.An argument I have used before using this code no longer works. What's happening?
Expand
During development, priorities and requests have changed what the functions needed to do. As a result, there are a few deprecated features and functionalities. Some things that were needed that are now not required: * show_logo, it was initially requested to have an ACS logo in the figures. The comms team now prefers only the copywrite in the bottom * Contour and contourf are generally not recommended now due to errors in plotting and long computational time. They are left in the function because they can be useful for lower resolution data, eg ocean data. * infile is not used. The idea was to use this for well-organised data with a consistent DRS to enable a good plot to be made without lots of keyword inputs. The data we have is not organised consistently enough for this. * regions_dict in acs_plotting_maps.py made to module very slow to load Shapefiles can take many seconds to load. It is inefficient to load all these regions even when you dont use them all. This was replaced with a class * regions in acs_area_stats had preloaded shapefiles. Shapefiles can take many seconds to load. It is inefficient to load all these regions even when you dont use them all. This was replaced with get_regions ```python from acs_area_statistics import acs_regional_stats, get_regions regions = get_regions(["ncra_regions", "australia"]) ```How can I add stippling (hatching) to plots to indicate model agreement?
Expand
The plotting scripts can add stippling to the plots using the stippling keyword(s). [Here is a notebook showing examples of using stippling](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_stippling.ipynb). You will need to calculate the mask and provide this as a dataarray with "lat" and "lon". The mask must be a True/False boolean mask. It does not have to be the same resolution as the underlying data (you may wish to coarsen the mask if the underlying data is high-resolution and noisy). See [this link](https://github.com/AusClimateService/plotting_maps/issues/2) for a brief example of applying stippling. For the multi-panel plots, you can give a mask for each of the plots eg see [fire_climate_classes_projections.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/reports/fire_climate_classes_projections.ipynb) (you may ignore the "coarsen..." this is needed so smooth out the fuzzy edges of the fire climate classes). In this Your function will look something like this: ```python plot_acs_hazard_4pp(ds_gwl12=ds_gwl12[var], ds_gwl15=ds_gwl15[var], ds_gwl20=ds_gwl20[var], ds_gwl30=ds_gwl30[var], stippling_gwl12=stippling_gwl12, stippling_gwl15=stippling_gwl15, stippling_gwl20=stippling_gwl20, stippling_gwl30=stippling_gwl30, regions = regions, title = "Fire Climate Classes", # figsize=(7,2), # baseline="GWL1.2", cmap = cmap_dict["fire_climate"], ticks = tick_dict["fire_climate_ticks"], tick_labels = ["Tropical\nSavanna","Arid grass \n& woodland","Wet Forest","Dry Forest","Grassland",], cbar_label = "classes", dataset_name = "BARPA MRNBC-ACGD", watermark="", orientation="horizontal", issued_date="", ); ```Why is the stippling weird?
Expand
You may need to check that the stippling is in the areas you expect it to be. A bug in contourf causes the stippling to get confused when plotting noisy high-resolution mask. If that is the case, I recommend coarsening the stippling mask E.g. new_stippling_mask = stippling_mask.coarsen(lat=2, boundary="pad").mean().coarsen(lon=2, boundary="pad").mean()>0.4 (full example here https://github.com/AusClimateService/plotting_maps/blob/main/reports/fire_climate_classes_projections.ipynb)Is there a way to use the 4pp plot with the average conditions for GWL1.2 and the change % for GWL1.5 to GWL3? Or does it only work for plots that use a consistent colourbar?
Expand
`plot_acs_hazard_1plus3` is a specific version of the plotting function to address this situation. While `plot_acs_hazard_4pp` assumes a shared colorbar and scale for all four maps, `plot_acs_hazard_1plus3` provides additional key word arguments to define a separate colorbar and scale for the first plot (as a baseline), while the last three figures share a different colorbar and scale. See example here: [FAQ_example_4pp_1plus3.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_4pp_1plus3.ipynb) ```python from acs_plotting_maps import * import xarray as xr import numpy as np import pandas as pd import matplotlib.pyplot as plt import cartopy.crs as ccrs from matplotlib import colors, cm regions = regions_dict['ncra_regions'] var = "TXm" # "current" with absolute values ds_gwl12 = xr.open_dataset(f"/g/data/ia39/ncra/heat/data/{var}/bias-corrected/ensemble/GWL-average/{var}_AGCD-05i_MME50_ssp370_v1-r1-ACS-QME-AGCD-1960-2022_GWL12.nc") # "future" with anomalies/change values ds_gwl15 = xr.open_dataset(f"/g/data/ia39/ncra/heat/data/{var}/bias-corrected/ensemble/GWL-change/{var}_AGCD-05i_MME50_ssp370_v1-r1-ACS-QME-AGCD-1960-2022_GWL15-GWL12-change.nc") ds_gwl20 = xr.open_dataset(f"/g/data/ia39/ncra/heat/data/{var}/bias-corrected/ensemble/GWL-change/{var}_AGCD-05i_MME50_ssp370_v1-r1-ACS-QME-AGCD-1960-2022_GWL20-GWL12-change.nc") ds_gwl30 = xr.open_dataset(f"/g/data/ia39/ncra/heat/data/{var}/bias-corrected/ensemble/GWL-change/{var}_AGCD-05i_MME50_ssp370_v1-r1-ACS-QME-AGCD-1960-2022_GWL30-GWL12-change.nc") plot_acs_hazard_1plus3(ds_gwl12=ds_gwl12[var], gwl12_cmap=cmap_dict["tasmax"], gwl12_cbar_extend= "both", gwl12_cbar_label= "temperature [\N{DEGREE SIGN}C]", gwl12_ticks= np.arange(8,43,2), ds_gwl15=ds_gwl15[var], ds_gwl20=ds_gwl20[var], ds_gwl30=ds_gwl30[var], regions = regions, title = "Average daily maximum temperature", cmap = cmap_dict["tas_anom"], ticks = np.arange(-0.5, 3.1, 0.5), cbar_label = "change in temperature [\N{DEGREE SIGN}C]", watermark="", orientation="horizontal", issued_date="", vcentre=0, outfile = "figures/FAQ_example_1plus3.png", ) ```How can I change the orientation (eg from vertical to horizontal) of the figures in a multipaneled plot?
Expand
Use `ncols` and `nrows` in the `plot_acs_hazard_multi` function to control a multipanelled figure's number of rows and columns. For 2, 3, and 4 multi-panelled plots , we have provided a keyword `orientation` to easily change `"vertical"` stacked plots to `"horizontal"` aligned subplots. For four panelled plots there is also a `"square"` option for a 2-by-2 arrangement. These options specify the axes grid, figsize, and location of titles etc. See [FAQ_example_orientation.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_orientation.ipynb) for an example.I want to use a divergent colormap, but the neutral color isn't in the middle of my ticks. What can I do to align the centre of the colormap to zero?
Expand
When we plot anomalies, it is best to use divergent colormaps. However, some climate change signals are highly skewed or only in one direction. For example, heat hazards are nearly always increasing. To use divergent colormaps, but not waste space in the color scale on large cool anomalies, we can use the "vcentre" key word to centre the neutral centre of the colormap at zero, but only show relevant ticks on the scale. See this notebook for an example: [FAQ_example_vcentre.ipynb](example_notebooks/FAQ_example_vcentre.ipynb)What does gwl mean?
Expand
GWL describe global warming levels. These are 20 year periods centred on the year when a climate model is projected to reach a specified global surface temperature above the pre-industrial era. Global climate models reach these temperature thresholds at different years. For example, the Paris Agreement (2012) refers to global warming levels in its aims: to strengthen the global response to the threat of climate change by keeping a global temperature rise this century well below 2 degrees Celsius above pre-industrial levels and to pursue efforts to limit the temperature increase even further to 1.5 degrees Celsius. Find more information here https://github.com/AusClimateService/gwls The plotting functions have been designed to accommodate present and future global warming levels. This is indicated by argument names containing "gwl12", "gwl15", "gwl20", "gwl30". If you want to use the function for other time periods or scenarios, you can still use these functions. The functions will work for any data in the right format (eg 2D xarray data array with lat and lon).I am not using GWLs but I want to use these functions. How can I change the subtitles?
Expand
The plotting functions have been designed to accommodate present and future global warming levels. This is indicated by argument names containing "gwl12", "gwl15", "gwl20", "gwl30". If you want to use the function for other time periods or scenarios, you can still use these functions. The functions will work for any data in the right format (eg 2D xarray data array with lat and lon). You can use `subplot_titles` to provide a list of titles for each subplot in your figure. You may also use this to suppress the default subplot titles, or label the plots differently. This example shows the subplot_title being renamed for sea level rise increments instead of GWLs: [FAQ_example_subplot_titles.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_subplot_titles.ipynb)I only want to plot data below 30S latitude, is there a mask for this?
Expand
There is no specific mask for this, but it is easy to adjust your input to achieve this. Here is a notebook to demonstrate [FAQ_example_crop_mask.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_crop_mask.ipynb) If you just want to plot the data below 30S, you can use ```plot_acs_hazard(data= ds.where(ds["lat"]<-30)[var] , ...)```  You may also like to apply a custom mask to the stats function using "clipped" to only select by a lat lon box: ``` import geopandas as gpd from glob import glob from shapely.geometry import box import regionmask import xarray as xr from acs_area_statistics import acs_regional_stats, get_regions # get the shapefile for australia PATH = "/g/data/ia39/aus-ref-clim-data-nci/shapefiles/data" shapefile = "australia" gdf = gpd.read_file(glob(f"{PATH}/{shapefile}/*.shp")[0]).to_crs("EPSG:4326") # set your limits # box(xmin, ymin, xmax, ymax) clipped = gdf.clip( box(100, -45, 160, -30)) regions = regionmask.from_geopandas(clipped, name= "clipped_shapefile", overlap=True) # need some data filename = "/g/data/ia39/ncra/extratropical_storms/5km/GWLs/lows_AGCD-05i_ACCESS-CM2_ssp370_r4i1p1f1_BOM_BARPA-R_v1-r1_GWL12.nc" ds = xr.open_dataset(filename, use_cftime = True,) mask = regions.mask_3D(ds) # then calculate the stats for this clipped region dims = ("lat", "lon",) var="low_freq" df_summary = acs_regional_stats(ds=ds,var=var, mask=mask, dims = dims, how = ["min", "median", "max"]) df_summary ```How may I plot gridded data and station data on the same figure?
Expand
You can plot gridded data and station data on the same plot if they share the same colorscale and ticks. All you need to do is provide valid `data` and `station_df`. Similarly, this is possible for multipanelled plots. ```python from acs_plotting_maps import * import xarray as xr import numpy as np regions = regions_dict['ncra_regions'] var="ALT_TRD" data = xr.open_dataset(f"/g/data/mn51/users/gt3409/sealevel_trend/sealevel_trend_alt_AUS.nc")\ .rename({"LON561_700":"lon","LAT81_160":"lat"}) station_df = xr.open_dataset("/g/data/mn51/users/gt3409/sealevel_trend/sealevel_trend_tg_AUS.nc")\ .rename({"LON":"lon", "LAT":"lat"}).to_dataframe() plot_acs_hazard(data=data[var], station_df=station_df, regions = regions, title = "Sea level trend", cmap = cmap_dict["ipcc_slev_div"], ticks = np.arange(-2,7,1), cbar_label = "sea level trend\n[mm/year]", cbar_extend="both", watermark="", issued_date="", mask_not_australia=False, mask_australia=True, vcentre=0) ```Can I use my own shapefiles to define regions?
Expand
Yes, you can provide any shapefiles you like. Here is an example: [FAQ_example_custom_mask.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_custom_mask.ipynb). We have provided some helpful Australian regions from /g/data/ia39, but the functions are flexible to take custom regions. [See more about the provided shapefiles here](https://github.com/aus-ref-clim-data-nci/shapefiles/). You will need to define [regionmask regions](https://regionmask.readthedocs.io/en/stable/notebooks/mask_3D.html) with unique abbreviations and names You may have region data in other formats. [area_statistics_example_basin_gpkg.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/area_statistics_example_basin_gpkg.ipynb) is an example using custom regions defined by a GeoPackage (GPKG).Can I plot Antarctica or other non-Australian areas of the world?
Expand
Yes, although `acs_plotting_maps` is designed to plot Australian hazard data, the functions are flexible to plot data for any area of the world. For example, to plot Antarctica, you must adjust `xlim`, `ylim` and `projection`. In [FAQ_example_antarctica.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_antarctica.ipynb), we use `projection=ccrs.SouthPolarStereo()` for a polar projection as used by the Bureau of Meteorology for Southern Hemisphere maps. Limit the longitude and latitude with `xlim=(-180, 180)` and `ylim=(-90, -60)`. To plot the outline of the Antarctic continent (and other coastlines), set `coastlines = True`.  In a similar way you can Europe by setting `coastlines=True`, `xlim=(-15, 45)`, `ylim=(30, 70)`, and `projection=ccrs.AlbersEqualArea(15, 50)`. See [FAQ_example_antarctica.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_antarctica.ipynb) for the full code to recreate this plot. Can I use any regions for the acsregionalstats statistics function?
Expand
Yes, provide any mask for your data. Calculation take more memory and time when more regions are provided. For example, 500 local government areas require much more memory than calculating statistics for 10 State areas. [FAQ_example_custom_mask.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_custom_mask.ipynb) describes defining a mask from a shape file then applying the acs_regional_stats function. Depending on the format of the original shapefile, you may need to preprocess the regions to be in the correct format, for example, defining the names of the names and abbrevs columns, and ensuring unique index. ```python # you need to rename the "name" column and "abbrevs" column # have a look at the table and see what makes sense, for example: name_column = "regionname" abbr_column = "short_name" # specify the name of the geopandas dataframe. any str shapefile_name = "custom_regions" # update the crs to lats and lons. Some original shapefiles will use northings etc gdf =gdf.to_crs(crs = "GDA2020") # ensure the index has unique values from zero gdf.index = np.arange(0, len(gdf)) regions= regionmask.from_geopandas(gdf, names=name_column, abbrevs=abbr_column, name=shapefile_name, overlap=True) ``` You may also need to change the CRS to "lat" and "lon". You may also need to create uniqueness by "dissolving" repeated named areas. In [area_statistics_example_basin_gpkg.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/area_statistics_example_basin_gpkg.ipynb), the geometries are read from a *.gpkg, the northings/eastings need to be converted to lat and lons, and dissolve is used to create uniquely named regions. ```python # read in the data for the areas to average across gdf = gpd.read_file("/g/data/mn51/users/ah7841/NCBLevel2DrainageBasinGroup_gda2020_v01.gpkg") #convert geometry to lat lon (from northings) gdf.geometry = gdf.geometry.to_crs(crs = "GDA2020") # There are duplicated of IDs. Merge geometries with the same IDs gdf = gdf.dissolve(by="HydroID").reset_index() # use the geopandas dataframe to make a regionmask object # you will need to change the names, abbrevs and, name for your custom file. regions = regionmask.from_geopandas(gdf, names= "Level2Name", abbrevs= "HydroID", name="NCBLevel2DrainageBasinGroup_gda2020_v01", overlap=True) # in the case where your shapefile is much more precise than necessary, # you may simplify the geometries to 0.001 deg lat/lon (~100m) regions[["geometry"]] =shapely.simplify(regions[["geometry"]], 0.001) ```Can I use acsregionalstats for NaNs and infinite values?
Expand
Be careful when calculating statistics over areas with many missing data. Investigate your own data and make sure that the statistics are still meaningful when the non-finite values are ignored. Depending on your data, consider filling missing data with a value (eg 0) if that results in more representative statistics. New update (19 Nov 2024) allows for statistics on NaNs and infinite values by applying the following. ```python ds[var].values = np.ma.masked_invalid(ds[var].values) ``` Previously, some of the statistics would not work if you had NaNs. eg mean, std, varHow do I calculate statistics for categorical data?
Expand
Different types of data need different tools to summarise the data. For example, some data is not numerical but is defined as a class or category eg ["forest", "grassland", "arid"]. We cannot calculate a `sum` or `mean` of different classes. Categorical statistics include the `mode` (most common category) and `proportion` (proportion of each category relative to the whole). If there is an order to the classes eg ["low", "moderate", "high", "extreme"], we can also calculate `min`, `median`, and `max` values. [plotting_and_stats_examples.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/plotting_and_stats_examples.ipynb) shows examples of plotting and calculating statistics of categorical data.Calculating time series using acsregionalstats
Expand
Although many examples for applying acs_regional_stats use dims=("lat", "lon") to reduce 2D data to regional averages, the function is very flexible. For example, if you have a time dimension, then you can calculate regional averaged (or min/median/max/any stat) time series by excluding the "time" dimension from the dims tuple. This may be very memory intensive depending on your data size, so request lots of memory if you need to. [FAQ_example_timeseries_stats_for_ensemble_region.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/) Future development will look to manage memory more effectively. An example of extracting time series from point locations can be found here: https://github.com/AusClimateService/TimeSeriesExtractionCalculating statistics for multidimensional data
Expand
Use the dims keyword in acs_regional_stats to control which dimensions to calculate statistics. For example, a dataset has model, time, lat, and lon dimensions. a) When you use acs_regional_stats to reduce the data with ```dims = ("lat", "lon",)```, the resulting dimensions are ```model, time, region``` ```python # use acs_regional_stats to calculate the regional mean for each model and timestep da_summary = acs_regional_stats(ds=ds, var=var, mask = mask, dims = ("lat", "lon",), how = ["mean"],) ``` b) When you use acs_regional_stats to reduce the data with ```dims = ("lat", "lon", "model",)```, the resulting dimensions are ```time, region``` ```python # use acs_regional_stats to calculate the ensemble regional mean for each timestep da_summary = acs_regional_stats(ds=ds, var=var, mask = mask, dims = ("lat", "lon", "model",), how = ["mean"],) ``` [FAQ_example_timeseries_stats_for_ensemble_region.ipynb](https://github.com/AusClimateService/plotting_maps/blob/main/example_notebooks/FAQ_example_timeseries_stats_for_ensemble_region.ipynb) shows example of calculating regional means over multidimensional data.Development principles
This code has been developed to make consistent plotting and statistical analysis quick and easy across ACS hazard teams. These teams regularly get information requests with quick turnaround times (~days), so having easy-to-use and flexible code to produce report-ready plots is critical for delivering high-quality figures and data summaries.
We want to enable scientists to focus on producing data and interpreting that information.
These plotting and stats tools should reduce the duplication of work for scientists who spend time adjusting their plots. We want these tools to be easy to use and flexible for all purposes across the hazard teams so that all the plots are presented consistently and all teams are supported.
Using these functions should be the easiest way to produce a nice plot. We want this to be the path of least resistance. The easier the functions are to use, the more people will use them. This means supporting with good documentation, good example notebooks, and adding new functionalities according to user feedback.
These plotting and stats tools are optimised for Australian hazard maps, but flexible so that they can be adjusted for any data, anywhere in the world, with any shape files, colour schemes, projection, etc.
To test updates in acsareastatistics.py or acsplottingmaps.py, we rerun the example notebooks to ensure the functions still perform as expected. (This could be automated to run when changes are pushed to git.)
A range of teams are actively using this code. Take care to maintain backward compatibility while adding features. If that is not practical, communicate the changes with the users. Ideally, I would like to release this code version. Eg see https://github.com/AusClimateService/plotting_maps/releases/new
TODO
Expand
See for current issues: https://github.com/AusClimateService/plotting_maps/issues/ **Figures to make:** - Lightning plot. For the Climate Hazards report, recreate the lightning observations plot using the plot_acs_hazards function so that it is in the consistent format. **Documentation:** - Examples and FAQ for using plot_acs_hazard_multi **Improve plotting function and axillaries:** - If hazard data had consistent file naming practices (DRS) and consistent attribute labels, then the plotting functions could be further automated. At the moment, the data files are named in different patterns, the files might have different names for coordinates (eg time, lat, lon) - Create dictionaries for each hazard to enable the automation of figures. Eg, use one keyword to select titles, colormaps and ticks. - Possibly automate the scaling of the colourbar to the data limits of the plot. (I am personally against this idea. Let's come up with standard colormaps and colourscales so that all figures of that one variable or hazard have a standard and comparable scale.)\ - Possibly automate the arrows of the colourbar. (I dont think the arrows on the colorbar should be determined by the data in the plot, I think they should be only limited by possible physical values of that metric so that all colourbars of that metric are comparable. Determine if you want the arrows to be determined by the plotting data or the metrics possible physical values.) - Use a keyword to make plots appropriate for different uses eg journal, report, powerpoint, poster etc similar to https://seaborn.pydata.org/generated/seaborn.set_context.html - Simplify stored shapefiles or masks. Current masks are 1mm precision, this means that calculations with these regions are more intense than necessary. Most climate data is in the order of ~10 km (rarely ~100 m). Simplifying the geometries of the shapefiles can save lots of resources for no loss in results. - Improve the aesthetics and proportions of plotting, especially with dataset/date_range/baseline annotations for plot_acs_hazard_1plus3, as has been done for plot_acs_hazard_multi. Design aesthetics were focused on vertical orientations for 4-panel plots without these annotations for a particular report. - Improve the aesthetics of plotting select_area. Eg remove boundaries of neighbouring regions (if desired) - Forest mask for forested areas. For example, FFDI is not useful in places where there is not connected vegetation/fuel. This is probably particularly for arid desert areas of central Australia. Changes in climate and land use may cause changes over time. (see https://github.com/AusClimateService/plotting_maps/blob/main/reports/holistic-australian-bushfire-risk-assessment.ipynb for a possible solution) - Improve colormap for fire climate classes. This colour scheme is not completely colourblind-friendly. Perhaps modify the colours to increase the contrast. **Stats functions:** - Optimise workflow to enable area-averaged time series (stats or just area mean). This function can be very memory intensive. Need to apply a strategy or strategies to reduce memory use. A possible option may be to calculate and save area averages for every year. Saving outputs in annual files is a common practice for climate models. - Calculate statistics along streamlines. Similar to area averages, but for a custom transect. Eg for rivers instead of catchments. Eg issue https://github.com/AusClimateService/plotting_maps/issues/23Owner
- Name: Australian Climate Service
- Login: AusClimateService
- Kind: organization
- Repositories: 10
- Profile: https://github.com/AusClimateService
GitHub Events
Total
- Create event: 2
- Commit comment event: 3
- Release event: 1
- Issues event: 12
- Watch event: 3
- Member event: 1
- Issue comment event: 6
- Push event: 75
Last Year
- Create event: 2
- Commit comment event: 3
- Release event: 1
- Issues event: 12
- Watch event: 3
- Member event: 1
- Issue comment event: 6
- Push event: 75
Issues and Pull Requests
Last synced: 10 months ago
All Time
- Total issues: 2
- Total pull requests: 0
- Average time to close issues: 4 months
- Average time to close pull requests: N/A
- Total issue authors: 1
- Total pull request authors: 0
- Average comments per issue: 2.0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 2
- Pull requests: 0
- Average time to close issues: 4 months
- Average time to close pull requests: N/A
- Issue authors: 1
- Pull request authors: 0
- Average comments per issue: 2.0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- xenct (26)
- MitchellBlack (1)
Pull Request Authors
- xenct (9)
- stellema (1)
Top Labels
Issue Labels
Pull Request Labels
Dependencies
- actions/checkout v2 composite
- actions/setup-python v3 composite
- absl-py =2.1.0=pyhd8ed1ab_0
- access =1.1.8=pyhd8ed1ab_1
- access-med-tools =0.1.7=pypy_0
- access-nri-intake =0.1.3=py_0
- accessible-pygments =0.0.4=pyhd8ed1ab_0
- acs_replica_intake =1.2=py_1
- adagio =0.2.4=pyhd8ed1ab_0
- addmeta =0.2.2=py_0
- affine =2.4.0=pyhd8ed1ab_0
- aiobotocore =2.13.0=pyhd8ed1ab_0
- aiohttp =3.9.5=py310h2372a71_0
- aiohttp-cors =0.7.0=py_0
- aioitertools =0.11.0=pyhd8ed1ab_0
- aiosignal =1.3.1=pyhd8ed1ab_0
- alabaster =0.7.16=pyhd8ed1ab_0
- alembic =1.13.1=pyhd8ed1ab_1
- alsa-lib =1.2.11=hd590300_1
- amami =0.0.1=py_0
- amply =0.1.6=pyhd8ed1ab_0
- annotated-types =0.7.0=pyhd8ed1ab_0
- antlr-python-runtime =4.11.1=pyhd8ed1ab_0
- antlr4-python3-runtime =4.11.1=pyh1a96a4e_0
- ants =0.19.0=pyh4f56d60_0
- anyio =4.3.0=pyhd8ed1ab_0
- anytree =2.8.0=pyh9f0ad1d_0
- aom =3.9.1=hac33072_0
- appdirs =1.4.4=pyh9f0ad1d_0
- apptools =5.1.0=pyh44b312d_0
- arch-py =7.0.0=py310h261611a_1
- archspec =0.2.3=pyhd8ed1ab_0
- argon2-cffi =23.1.0=pyhd8ed1ab_0
- argon2-cffi-bindings =21.2.0=py310h2372a71_4
- argopy =0.1.14=pyhd8ed1ab_0
- arm_pyart =1.18.6=py310hc51659f_0
- arrow =1.3.0=pyhd8ed1ab_0
- asciitree =0.3.3=py_2
- asteval =0.9.33=pyhd8ed1ab_0
- astroid =3.2.2=py310hff52083_0
- astropy =6.1.0=py310h261611a_1
- astropy-iers-data =0.2024.6.3.0.31.14=pyhd8ed1ab_0
- asttokens =2.4.1=pyhd8ed1ab_0
- astunparse =1.6.3=pyhd8ed1ab_0
- async-lru =2.0.4=pyhd8ed1ab_0
- async-timeout =4.0.3=pyhd8ed1ab_0
- asyncssh =2.14.1=pyhd8ed1ab_0
- atk-1.0 =2.38.0=hd4edc92_1
- attr =2.5.1=h166bdaf_1
- attrdict =2.0.1=py_0
- attrs =23.2.0=pyh71513ae_0
- autopep8 =2.3.1=pyhd8ed1ab_0
- aws-c-auth =0.7.20=h5f1c8d9_0
- aws-c-cal =0.6.12=h2ba76a8_0
- aws-c-common =0.9.17=h4ab18f5_0
- aws-c-compression =0.2.18=h36a0aea_4
- aws-c-event-stream =0.4.2=h161de36_10
- aws-c-http =0.8.1=h63f54a0_13
- aws-c-io =0.14.8=h96d4d28_0
- aws-c-mqtt =0.10.4=hcc7299c_2
- aws-c-s3 =0.5.9=h10bd90f_0
- aws-c-sdkutils =0.1.16=h36a0aea_0
- aws-checksums =0.1.18=h36a0aea_4
- aws-crt-cpp =0.26.8=h4f3a3cc_11
- aws-sdk-cpp =1.11.267=h51dfee4_8
- azure-core-cpp =1.11.1=h91d86a7_1
- azure-storage-blobs-cpp =12.10.0=h00ab1b0_1
- azure-storage-common-cpp =12.5.0=h94269e2_4
- babel =2.14.0=pyhd8ed1ab_0
- backports =1.0=pyhd8ed1ab_3
- backports.tarfile =1.0.0=pyhd8ed1ab_1
- banal =1.0.6=pyhd8ed1ab_0
- bargeparse =0.9.1=pyhd8ed1ab_0
- beautifulsoup4 =4.12.3=pyha770c72_0
- benchcab =4.0.3=py_0
- bias_correction =0.4=pyhd8ed1ab_0
- binutils_impl_linux-64 =2.40=ha1999f0_2
- binutils_linux-64 =2.40=hb3c18ed_9
- black =24.4.2=py310hff52083_0
- blas =2.122=openblas
- blas-devel =3.9.0=22_linux64_openblas
- bleach =6.1.0=pyhd8ed1ab_0
- blinker =1.8.2=pyhd8ed1ab_0
- blosc =1.21.5=hc2324a3_1
- bokeh =3.4.2=pyhd8ed1ab_0
- boltons =24.0.0=pyhd8ed1ab_0
- boto3 =1.34.106=pyhd8ed1ab_0
- botocore =1.34.106=pyge310_1234567_0
- bottleneck =1.4.0=py310h261611a_1
- branca =0.7.2=pyhd8ed1ab_0
- brotli =1.1.0=hd590300_1
- brotli-bin =1.1.0=hd590300_1
- brotli-python =1.1.0=py310hc6cd4ac_1
- bzip2 =1.0.8=hd590300_5
- c-ares =1.28.1=hd590300_0
- c-blosc2 =2.14.4=hb4ffafa_1
- ca-certificates =2024.6.2=hbcca054_0
- cached-property =1.5.2=hd8ed1ab_1
- cached_property =1.5.2=pyha770c72_1
- cachetools =5.3.3=pyhd8ed1ab_0
- cafaz =0.2.2=py_5
- cairo =1.18.0=h3faef2a_0
- cartopy =0.23.0=py310hf9f9076_1
- cartopy-userconfig =1=pypi_0
- cartopy_userconfig =1.0.gadi=0
- catboost =1.2.5=py310hff52083_0
- cchardet =2.1.7=py310hc6cd4ac_5
- cdat_info =8.2.1=pyhd8ed1ab_2
- cdms2 =3.1.5=py310h366d46e_22
- cdo =2.4.0=hd25000b_0
- cdtime =3.1.4=py310h7a088e3_13
- celluloid =0.2.0=py_0
- cerberus =1.3.5=pyhd8ed1ab_0
- certifi =2024.2.2=pyhd8ed1ab_0
- cf-units =3.2.0=py310h261611a_5
- cf_xarray =0.9.1=pyhd8ed1ab_0
- cffi =1.16.0=py310h2fee648_0
- cfgrib =0.9.13.0=pyhd8ed1ab_0
- cfitsio =4.4.0=hbdc6101_1
- cftime =1.6.4=py310h261611a_0
- cfunits =3.3.7=pyhd8ed1ab_0
- cgen =2020.1=py_0
- chardet =5.2.0=py310hff52083_1
- charset-normalizer =3.3.2=pyhd8ed1ab_0
- clarabel =0.7.1=py310h8c3a010_0
- clef =1.5.1=py_0
- click =8.1.7=unix_pyh707e725_0
- click-plugins =1.1.1=py_0
- click_default_group =1.2=py_1
- cligj =0.7.2=pyhd8ed1ab_1
- climpred =2.4.0=pyhd8ed1ab_0
- climtas =0.3.3=py_0
- cloudpickle =3.0.0=pyhd8ed1ab_0
- cmaps =2.0.1=pyhd8ed1ab_0
- cmarkgfm =0.8.0=py310h2372a71_3
- cmdline_provenance =1.1.0=pyhd8ed1ab_0
- cmdstan =2.33.1=hff4ab46_0
- cmdstanpy =1.2.3=pyhd8ed1ab_0
- cmocean =4.0.3=pyhd8ed1ab_0
- cmor =3.8.0=py310h4d2ae63_1
- cmweather =0.3.2=pyhd8ed1ab_0
- coecms-nci =1.1=0
- coecms-util =0.1.0=py_3
- coin-or-cbc =2.10.11=h56f689f_0
- coin-or-cgl =0.60.7=h516709c_0
- coin-or-clp =1.17.8=h1ee7a9c_0
- coin-or-osi =0.108.10=haf5fa05_0
- coin-or-utils =2.11.11=hee58242_0
- coincbc =2.10.11=0_metapackage
- colorama =0.4.6=pyhd8ed1ab_0
- colorcet =3.1.0=pyhd8ed1ab_0
- colorspacious =1.1.2=pyh24bf2e0_0
- comm =0.2.2=pyhd8ed1ab_0
- compliance-checker =5.1.1=pyhd8ed1ab_0
- conda =24.5.0=py310hff52083_0
- conda-build =24.5.1=py310hff52083_0
- conda-index =0.4.0=pyhd8ed1ab_0
- conda-libmamba-solver =24.1.0=pyhd8ed1ab_0
- conda-package-handling =2.2.0=pyh38be061_0
- conda-package-streaming =0.9.0=pyhd8ed1ab_0
- conda-tree =1.1.0=pyhd8ed1ab_2
- conda-verify =3.1.1=py310hff52083_1006
- configobj =5.0.8=pyhd8ed1ab_0
- contextily =1.6.0=pyhd8ed1ab_0
- contourpy =1.2.1=py310hd41b1e2_0
- convertdate =2.4.0=pyhd8ed1ab_0
- coreforecast =0.0.9=py310h25c7140_0
- cosima-cookbook =0.7.3=py_0
- coverage =7.5.3=py310hc51659f_0
- crick =0.0.5=py310h1f7b6fc_0
- cryptography =42.0.8=py310hb1bd9d3_0
- cuda-cudart =12.5.39=he02047a_0
- cuda-cudart_linux-64 =12.5.39=h85509e4_0
- cuda-nvrtc =12.5.40=he02047a_0
- cuda-version =12.5=hd4f0392_3
- cupy =13.2.0=py310h7421b7d_0
- cupy-core =13.2.0=py310hfb24ac1_0
- curl =8.8.0=he654da7_0
- cvxpy =1.5.2=py310hff52083_1
- cvxpy-base =1.5.2=py310hf9f9076_1
- cycler =0.12.1=pyhd8ed1ab_0
- cython =3.0.10=py310hc6cd4ac_0
- cytoolz =0.12.3=py310h2372a71_0
- dask =2024.6.2=pyhd8ed1ab_0
- dask-core =2024.6.2=pyhd8ed1ab_0
- dask-expr =1.1.6=pyhd8ed1ab_0
- dask-glm =0.3.2=pyhd8ed1ab_0
- dask-jobqueue =0.8.5=pyhd8ed1ab_0
- dask-labextension =7.0.0=pyhd8ed1ab_0
- dask-ml =2024.4.4=pyhd8ed1ab_0
- dask-xgboost =0.1.11=pyh9f0ad1d_0
- dataclasses =0.8=pyhc8e2a94_3
- dataclasses-json =0.6.7=pyhd8ed1ab_0
- dataflows-tabulator =1.54.3=pyhd8ed1ab_0
- datapackage =1.15.2=pyh44b312d_0
- dataset =1.6.2=pyhd8ed1ab_0
- datashader =0.16.2=pyhd8ed1ab_0
- dateparser =1.2.0=pyhd8ed1ab_0
- dav1d =1.2.1=hd590300_0
- dbus =1.13.6=h5008d03_3
- dcw-gmt =2.1.2=ha770c72_0
- debugpy =1.8.1=py310hc6cd4ac_0
- decorator =5.1.1=pyhd8ed1ab_0
- defusedxml =0.7.1=pyhd8ed1ab_0
- deprecation =2.1.0=pyh9f0ad1d_0
- descartes =1.1.0=py_4
- dill =0.3.8=pyhd8ed1ab_0
- distarray =2.12.2=pyh050c7b8_4
- distributed =2024.6.2=pyhd8ed1ab_0
- distro =1.9.0=pyhd8ed1ab_0
- doc8 =1.1.1=pyhd8ed1ab_0
- docopt =0.6.2=py_1
- docrep =0.3.2=pyh44b312d_0
- docutils =0.20.1=py310hff52083_3
- doit =0.36.0=pyhd8ed1ab_0
- donfig =0.8.1.post1=pyhd8ed1ab_0
- double-conversion =3.3.0=h59595ed_0
- dreqpy =1.0.30=py_0
- dusqlpg =0.4=py_88
- earthpy =0.9.4=pyhd8ed1ab_0
- eccodes =2.35.0=he84ddb8_0
- ecgtools =2023.7.13=pyhd8ed1ab_0
- ecmwf-api-client =1.6.3=pyhd8ed1ab_0
- ecos =2.0.13=py310h261611a_1
- eigen =3.4.0=h00ab1b0_0
- emcee =3.1.6=pyhd8ed1ab_0
- entrypoints =0.4=pyhd8ed1ab_0
- envisage =6.0.1=pyhd8ed1ab_0
- eofs =1.4.1=pyhd8ed1ab_1
- ephem =4.1.5=py310h2372a71_1
- era5grib =2.0.0=py_0
- erddapy =2.2.0=pyhd8ed1ab_0
- esda =2.5.1=pyhd8ed1ab_0
- esmf =8.6.1=mpi_openmpi_hc6a4196_2
- esmpy =8.6.1=pyhc1e730c_0
- et_xmlfile =1.1.0=pyhd8ed1ab_0
- exceptiongroup =1.2.0=pyhd8ed1ab_2
- executing =2.0.1=pyhd8ed1ab_0
- expat =2.6.2=h59595ed_0
- f90nml =1.4.4=pyhd8ed1ab_0
- fast-histogram =0.14=py310h261611a_1
- fasteners =0.17.3=pyhd8ed1ab_0
- fastprogress =1.0.3=pyhd8ed1ab_0
- fastrlock =0.8.2=py310hc6cd4ac_2
- ffmpeg =6.1.1=gpl_he44c6f3_112
- fftw =3.3.10=nompi_hf1063bd_109
- filelock =3.15.4=pyhd8ed1ab_0
- findlibs =0.0.5=pyhd8ed1ab_0
- fiona =1.9.6=py310h0a1e91f_0
- flask =3.0.3=pyhd8ed1ab_0
- flatbuffers =24.3.25=h59595ed_0
- flatdict =4.0.1=pyh9f0ad1d_0
- flexcache =0.3=pyhd8ed1ab_0
- flexparser =0.3.1=pyhd8ed1ab_0
- flox =0.9.8=pyhd8ed1ab_0
- fmt =10.2.1=h00ab1b0_0
- folium =0.17.0=pyhd8ed1ab_0
- font-ttf-dejavu-sans-mono =2.37=hab24e00_0
- font-ttf-inconsolata =3.000=h77eed37_0
- font-ttf-source-code-pro =2.038=h77eed37_0
- font-ttf-ubuntu =0.83=h77eed37_2
- fontconfig =2.14.2=h14ed4e7_0
- fonts-conda-ecosystem =1=0
- fonts-conda-forge =1=0
- fonttools =4.53.0=py310hc51659f_0
- fortran-language-server =1.12.0=pyhd8ed1ab_0
- fqdn =1.5.1=pyhd8ed1ab_0
- freeglut =3.2.2=hac7e632_2
- freetype =2.12.1=h267a509_2
- freexl =2.0.0=h743c826_0
- fribidi =1.0.10=h36c2ea0_0
- frozendict =2.4.4=py310hc51659f_0
- frozenlist =1.4.1=py310h2372a71_0
- fs =2.4.16=pyhd8ed1ab_0
- fsspec =2024.6.1=pyhff2d567_0
- fugue =0.9.0=pyhd8ed1ab_0
- future =1.0.0=pyhd8ed1ab_0
- g2clib =1.8.0=ha770c72_6
- gast =0.5.4=pyhd8ed1ab_0
- gcc_impl_linux-64 =12.3.0=h58ffeeb_7
- gcc_linux-64 =12.3.0=h9528a6a_9
- gcm_filters =0.3.0=pyhd8ed1ab_0
- gcsfs =2024.6.1=pyhd8ed1ab_0
- gdal =3.8.4=py310he073c5f_5
- gdk-pixbuf =2.42.10=h829c605_5
- geocat-comp =2024.04.0=pyha770c72_0
- geocat-viz =2024.03.0=pyhd8ed1ab_0
- geographiclib =2.0=pyhd8ed1ab_0
- geopandas =0.14.4=pyhd8ed1ab_0
- geopandas-base =0.14.4=pyha770c72_0
- geoplot =0.5.1=pyhd8ed1ab_0
- geopy =2.4.1=pyhd8ed1ab_1
- geos =3.12.1=h59595ed_0
- geotiff =1.7.1=h6b2125f_15
- geoviews =1.12.0=pyhd8ed1ab_0
- geoviews-core =1.12.0=pyha770c72_0
- gettext =0.22.5=h59595ed_2
- gettext-tools =0.22.5=h59595ed_2
- gflags =2.2.2=he1b5a44_1004
- gh =2.52.0=he0e2781_0
- ghostscript =10.03.1=h59595ed_0
- giddy =2.3.5=pyhd8ed1ab_1
- giflib =5.2.2=hd590300_0
- gifsicle =1.92=0
- git =2.45.1=pl5321hef9f9f3_0
- git-subtree =2.31.1=0
- gitdb =4.0.11=pyhd8ed1ab_0
- gitpython =3.1.43=pyhd8ed1ab_0
- gl2ps =1.4.2=h0708190_0
- glew =2.1.0=h9c3ff4c_2
- glib =2.80.2=hf974151_0
- glib-tools =2.80.2=hb6ce0ca_0
- glog =0.7.1=hbabe93e_0
- gmp =6.3.0=h59595ed_1
- gmpy2 =2.1.5=py310hc7909c9_1
- gmt =6.5.0=h6fe46e5_0
- gnutls =3.7.9=hb077bed_0
- google-api-core =2.19.0=pyhd8ed1ab_0
- google-auth =2.29.0=pyhca7485f_0
- google-auth-oauthlib =1.2.0=pyhd8ed1ab_0
- google-cloud-core =2.4.1=pyhd8ed1ab_0
- google-cloud-storage =2.16.0=pyhca7485f_0
- google-crc32c =1.1.2=py310hc5c09a0_5
- google-pasta =0.2.0=pyh8c360ce_0
- google-resumable-media =2.7.0=pyhd8ed1ab_0
- googleapis-common-protos =1.63.1=pyhd8ed1ab_0
- graphite2 =1.3.13=h59595ed_1003
- graphviz =9.0.0=h78e8752_1
- greenlet =3.0.3=py310hc6cd4ac_0
- gridfill =1.1.1=py310h261611a_2
- grpcio =1.62.2=py310h1b8f574_0
- gshhg-gmt =2.3.7=ha770c72_1003
- gsl =2.7=he838d99_0
- gst-plugins-base =1.24.4=h9ad1361_0
- gstreamer =1.24.4=haf2f30d_0
- gsw =3.6.18=py310h261611a_0
- gtk2 =2.24.33=h280cfa0_4
- gts =0.7.6=h977cf35_4
- gxx_impl_linux-64 =12.3.0=h2a574ab_7
- gxx_linux-64 =12.3.0=ha28b414_9
- h11 =0.14.0=pyhd8ed1ab_0
- h2 =4.1.0=pyhd8ed1ab_0
- h3-py =3.7.7=py310hc6cd4ac_0
- h5netcdf =1.3.0=pyhd8ed1ab_0
- h5py =3.11.0=nompi_py310hf054cd7_102
- harfbuzz =8.5.0=hfac3d4d_0
- hdbscan =0.8.37=py310h5b4e0ec_1
- hdf4 =4.2.15=h2a13503_7
- hdf5 =1.14.3=mpi_openmpi_hf5a2fd3_5
- holidays =0.50=pyhd8ed1ab_0
- holoviews =1.19.0=pyhd8ed1ab_0
- hpack =4.0.0=pyh9f0ad1d_0
- httpcore =1.0.5=pyhd8ed1ab_0
- httpx =0.27.0=pyhd8ed1ab_0
- hupper =1.3=0
- hvplot =0.10.0=pyhd8ed1ab_0
- hyperframe =6.0.1=pyhd8ed1ab_0
- iam-units =2023.9.12=pyhd8ed1ab_0
- icclim =6.5.0=pyhd8ed1ab_0
- icu =73.2=h59595ed_0
- idna =3.7=pyhd8ed1ab_0
- ijson =3.2.3=pyhd8ed1ab_0
- ilamb =2.7=py310hff52083_1
- imagecodecs-lite =2019.12.3=py310h261611a_8
- imageio =2.34.1=pyh4b66e23_0
- imagesize =1.4.1=pyhd8ed1ab_0
- imath =3.1.11=hfc55251_0
- importlib-metadata =7.1.0=pyha770c72_0
- importlib-resources =6.4.0=pyhd8ed1ab_0
- importlib_metadata =7.1.0=hd8ed1ab_0
- importlib_resources =6.4.0=pyhd8ed1ab_0
- inequality =1.0.1=pyhd8ed1ab_0
- iniconfig =2.0.0=pyhd8ed1ab_0
- intake =0.7.0=pyhd8ed1ab_0
- intake-dataframe-catalog =0.2.3=pyhd8ed1ab_0
- intake-esm =2023.11.10=pyhd8ed1ab_0
- intake-thredds =2024.3.1=pyhd8ed1ab_0
- intake-xarray =0.7.0=pyhd8ed1ab_0
- ipdb =0.13.13=pyhd8ed1ab_0
- ipykernel =6.29.3=pyhd33586a_0
- ipympl =0.9.4=pyhd8ed1ab_0
- ipynbname =2023.2.0.0=pyhd8ed1ab_0
- ipython =8.26.0=pyh707e725_0
- ipython_genutils =0.2.0=pyhd8ed1ab_1
- ipywidgets =8.1.3=pyhd8ed1ab_0
- iris =3.9.0=pyha770c72_0
- iris-grib =0.19.0=pyhd8ed1ab_0
- isodate =0.6.1=pyhd8ed1ab_0
- isoduration =20.11.0=pyhd8ed1ab_0
- isort =5.13.2=pyhd8ed1ab_0
- itsdangerous =2.2.0=pyhd8ed1ab_0
- jags =4.3.2=hb1d968a_0
- jaraco.classes =3.4.0=pyhd8ed1ab_1
- jaraco.context =5.3.0=pyhd8ed1ab_1
- jaraco.functools =4.0.0=pyhd8ed1ab_0
- jasper =4.2.4=h536e39c_0
- jedi =0.19.1=pyhd8ed1ab_0
- jeepney =0.8.0=pyhd8ed1ab_0
- jinja2 =3.1.4=pyhd8ed1ab_0
- jmespath =1.0.1=pyhd8ed1ab_0
- joblib =1.4.2=pyhd8ed1ab_0
- jq =1.7.1=hd590300_0
- jsmin =3.0.1=pyhd8ed1ab_0
- json-c =0.17=h7ab15ed_0
- json5 =0.9.25=pyhd8ed1ab_0
- jsoncpp =1.9.5=h4bd325d_1
- jsonlines =4.0.0=pyhd8ed1ab_0
- jsonpatch =1.33=pyhd8ed1ab_0
- jsonpickle =3.0.4=pyhd8ed1ab_0
- jsonpointer =2.4=py310hff52083_3
- jsonschema =4.22.0=pyhd8ed1ab_0
- jsonschema-specifications =2023.12.1=pyhd8ed1ab_0
- jsonschema-with-format-nongpl =4.22.0=pyhd8ed1ab_0
- jupyter =1.0.0=pyhd8ed1ab_10
- jupyter-book =1.0.2=pyhd8ed1ab_0
- jupyter-cache =1.0.0=pyhd8ed1ab_0
- jupyter-lsp =2.2.5=pyhd8ed1ab_0
- jupyter-resource-usage =1.0.2=pyhd8ed1ab_0
- jupyter-server-mathjax =0.2.6=pyh5bfe37b_1
- jupyter-server-proxy =4.3.0=pyhd8ed1ab_0
- jupyter_bokeh =4.0.5=pyhd8ed1ab_0
- jupyter_client =8.6.2=pyhd8ed1ab_0
- jupyter_console =6.6.3=pyhd8ed1ab_0
- jupyter_core =5.7.2=py310hff52083_0
- jupyter_events =0.10.0=pyhd8ed1ab_0
- jupyter_server =2.14.1=pyhd8ed1ab_0
- jupyter_server_terminals =0.5.3=pyhd8ed1ab_0
- jupyterlab =4.2.3=pyhd8ed1ab_0
- jupyterlab_pygments =0.3.0=pyhd8ed1ab_1
- jupyterlab_server =2.27.2=pyhd8ed1ab_0
- jupyterlab_widgets =3.0.11=pyhd8ed1ab_0
- kaleido-core =0.2.1=h3644ca4_0
- kealib =1.5.3=hee9dde6_1
- keras =3.3.3=pyhd8ed1ab_0
- kerchunk =0.2.5=pyhd8ed1ab_0
- kernel-headers_linux-64 =2.6.32=he073ed8_17
- keyring =25.2.1=pyha804496_0
- keyutils =1.6.1=h166bdaf_0
- kiwisolver =1.4.5=py310hd41b1e2_1
- krb5 =1.21.2=h659d440_0
- lame =3.100=h166bdaf_1003
- lat_lon_parser =1.3.0=pyhd8ed1ab_0
- latexcodec =2.0.1=pyh9f0ad1d_0
- lazy-object-proxy =1.10.0=py310h2372a71_0
- lazy_loader =0.4=pyhd8ed1ab_0
- lcms2 =2.16=hb7c19ff_0
- ld_impl_linux-64 =2.40=hf3520f5_2
- lerc =4.0.0=h27087fc_0
- lftp =4.9.2=hedb13fd_1
- libabseil =20240116.2=cxx17_h59595ed_0
- libaec =1.1.3=h59595ed_0
- libarchive =3.7.4=hfca40fe_0
- libarrow =16.1.0=hefa796f_1_cpu
- libarrow-acero =16.1.0=hac33072_1_cpu
- libarrow-dataset =16.1.0=hac33072_1_cpu
- libarrow-flight =16.1.0=hef0f296_1_cpu
- libarrow-flight-sql =16.1.0=h9241762_1_cpu
- libarrow-gandiva =16.1.0=h35c4161_1_cpu
- libarrow-substrait =16.1.0=h7e0c224_1_cpu
- libasprintf =0.22.5=h661eb56_2
- libasprintf-devel =0.22.5=h661eb56_2
- libass =0.17.1=h8fe9dca_1
- libblas =3.9.0=22_linux64_openblas
- libboost =1.85.0=hba137d9_1
- libboost-headers =1.85.0=ha770c72_1
- libbrotlicommon =1.1.0=hd590300_1
- libbrotlidec =1.1.0=hd590300_1
- libbrotlienc =1.1.0=hd590300_1
- libcap =2.69=h0f662aa_0
- libcblas =3.9.0=22_linux64_openblas
- libcbor =0.10.2=hcb278e6_0
- libcdms =3.1.2=h0cec689_129
- libcf =1.0.3=py310h1588dd5_117
- libclang =18.1.7=default_h9bb3924_0
- libclang-cpp15 =15.0.7=default_h127d8a8_5
- libclang-cpp18.1 =18.1.7=default_h9bb3924_0
- libclang13 =18.1.7=default_h087397f_0
- libcrc32c =1.1.2=h9c3ff4c_0
- libcublas =12.5.2.13=he02047a_0
- libcufft =11.2.3.18=he02047a_0
- libcups =2.3.3=h4637d8d_4
- libcurand =10.3.6.39=he02047a_0
- libcurl =8.8.0=hca28451_0
- libcusolver =11.6.2.40=he02047a_0
- libcusparse =12.4.1.24=he02047a_0
- libdeflate =1.20=hd590300_0
- libdrm =2.4.120=hd590300_0
- libedit =3.1.20191231=he28a2e2_2
- libev =4.33=hd590300_2
- libevent =2.1.12=hf998b51_1
- libexpat =2.6.2=h59595ed_0
- libffi =3.4.2=h7f98852_5
- libfido2 =1.14.0=h4446dcb_0
- libflac =1.4.3=h59595ed_0
- libgcc-devel_linux-64 =12.3.0=h0223996_107
- libgcc-ng =13.2.0=h77fa898_7
- libgcrypt =1.10.3=hd590300_0
- libgd =2.3.3=h119a65a_9
- libgdal =3.8.4=h7c88fdf_5
- libgettextpo =0.22.5=h59595ed_2
- libgettextpo-devel =0.22.5=h59595ed_2
- libgfortran-ng =13.2.0=h69a702a_7
- libgfortran5 =13.2.0=hca663fb_7
- libglib =2.80.2=hf974151_0
- libglu =9.0.0=hac7e632_1003
- libgomp =13.2.0=h77fa898_7
- libgoogle-cloud =2.23.0=h9be4e54_1
- libgoogle-cloud-storage =2.23.0=hc7a4891_1
- libgpg-error =1.49=h4f305b6_0
- libgrpc =1.62.2=h15f2491_0
- libhwloc =2.10.0=default_h5622ce7_1001
- libiconv =1.17=hd590300_2
- libidn2 =2.3.7=hd590300_0
- libjpeg-turbo =3.0.0=hd590300_1
- libkml =1.3.0=h01aab08_1018
- liblapack =3.9.0=22_linux64_openblas
- liblapacke =3.9.0=22_linux64_openblas
- liblief =0.14.1=hac33072_1
- libllvm14 =14.0.6=hcd5def8_4
- libllvm15 =15.0.7=hb3ce162_4
- libllvm16 =16.0.6=hb3ce162_3
- libllvm18 =18.1.7=hb77312f_0
- libmagic =5.39=h753d276_1
- libmamba =1.5.8=had39da4_0
- libmambapy =1.5.8=py310h39ff949_0
- libmo_unpack =3.1.2=hf484d3e_1001
- libnetcdf =4.9.2=mpi_openmpi_ha1e512f_14
- libnghttp2 =1.58.0=h47da74e_1
- libnl =3.9.0=hd590300_0
- libnsl =2.0.1=hd590300_0
- libnvjitlink =12.5.40=he02047a_0
- libogg =1.3.4=h7f98852_1
- libopenblas =0.3.27=pthreads_h413a1c8_0
- libopencv =4.10.0=qt6_py310hbbd9133_600
- libopenvino =2024.1.0=h2da1b83_7
- libopenvino-auto-batch-plugin =2024.1.0=hb045406_7
- libopenvino-auto-plugin =2024.1.0=hb045406_7
- libopenvino-hetero-plugin =2024.1.0=h5c03a75_7
- libopenvino-intel-cpu-plugin =2024.1.0=h2da1b83_7
- libopenvino-intel-gpu-plugin =2024.1.0=h2da1b83_7
- libopenvino-intel-npu-plugin =2024.1.0=he02047a_7
- libopenvino-ir-frontend =2024.1.0=h5c03a75_7
- libopenvino-onnx-frontend =2024.1.0=h07e8aee_7
- libopenvino-paddle-frontend =2024.1.0=h07e8aee_7
- libopenvino-pytorch-frontend =2024.1.0=he02047a_7
- libopenvino-tensorflow-frontend =2024.1.0=h39126c6_7
- libopenvino-tensorflow-lite-frontend =2024.1.0=he02047a_7
- libopus =1.3.1=h7f98852_1
- libosqp =0.6.3=h6a678d5_0
- libparquet =16.1.0=h6a7eafb_1_cpu
- libpciaccess =0.18=hd590300_0
- libpnetcdf =1.13.0=mpi_openmpi_h06d7fe7_1
- libpng =1.6.43=h2797004_0
- libpq =16.3=ha72fbe1_0
- libprotobuf =4.25.3=h08a7969_0
- libpysal =4.10=pyhd8ed1ab_0
- libqdldl =0.1.7=hcb278e6_0
- libre2-11 =2023.09.01=h5a48ba9_2
- librsvg =2.56.3=he3f83f7_1
- librttopo =1.1.0=h8917695_15
- libsanitizer =12.3.0=hb8811af_7
- libsndfile =1.2.2=hc60ed4a_1
- libsodium =1.0.18=h36c2ea0_1
- libsolv =0.7.29=ha6fb4c9_0
- libspatialindex =1.9.3=he02047a_5
- libspatialite =5.1.0=h7bd4643_4
- libsqlite =3.46.0=hde9e2c9_0
- libssh2 =1.11.0=h0841786_0
- libstdcxx-devel_linux-64 =12.3.0=h0223996_107
- libstdcxx-ng =13.2.0=hc0a3c3a_7
- libsystemd0 =255=h3516f8a_1
- libtasn1 =4.19.0=h166bdaf_0
- libtheora =1.1.1=h7f98852_1005
- libthrift =0.19.0=hb90f79a_1
- libtiff =4.6.0=h1dd3fc0_3
- libtorch =2.1.2=cpu_mkl_hff68eba_104
- libudev1 =255=h3f72095_1
- libudunits2 =2.2.28=h40f5838_3
- libunistring =0.9.10=h7f98852_0
- libutf8proc =2.8.0=h166bdaf_0
- libuuid =2.38.1=h0b41bf4_0
- libuv =1.48.0=hd590300_0
- libva =2.21.0=hd590300_0
- libvorbis =1.3.7=h9c3ff4c_0
- libvpx =1.14.1=hac33072_0
- libwebp =1.4.0=h2c329e2_0
- libwebp-base =1.4.0=hd590300_0
- libxcb =1.15=h0b41bf4_0
- libxcrypt =4.4.36=hd590300_1
- libxgboost =2.0.3=cpu_h7afb2cf_4
- libxkbcommon =1.7.0=h662e7e4_0
- libxml2 =2.12.7=hc051c1a_1
- libxslt =1.1.39=h76b75d6_0
- libzip =1.10.1=h2629f0a_3
- libzlib =1.2.13=h4ab18f5_6
- lightgbm =4.3.0=py310hc6cd4ac_0
- lightning-utilities =0.11.2=pyhd8ed1ab_0
- line_profiler =4.1.1=py310hd41b1e2_1
- linear-tsv =1.1.0=py_1
- linkify-it-py =2.0.3=pyhd8ed1ab_0
- llvm-openmp =18.1.6=ha31de31_0
- llvmlite =0.42.0=py310h1b8f574_1
- lmfit =1.3.1=pyhd8ed1ab_1
- locket =1.0.0=pyhd8ed1ab_0
- loguru =0.7.2=py310hff52083_1
- lunarcalendar =0.0.9=py_0
- lxml =5.2.2=py310h6a33d3d_0
- lz4 =4.3.3=py310h350c4a5_0
- lz4-c =1.9.4=hcb278e6_0
- lzo =2.10=hd590300_1001
- magics =4.15.3=hd93a360_0
- magics-python =1.5.8=pyhd8ed1ab_1
- make =4.3=hd18ef5c_1
- mako =1.3.5=pyhd8ed1ab_0
- mamba =1.5.8=py310h51d5547_0
- mapclassify =2.6.1=pyhd8ed1ab_0
- marineheatwaves =v0.16=py_22
- markdown =3.6=pyhd8ed1ab_0
- markdown-it-py =3.0.0=pyhd8ed1ab_0
- markupsafe =2.1.5=py310h2372a71_0
- marshmallow =3.21.2=pyhd8ed1ab_0
- matchpy =0.5.5=pyhd8ed1ab_0
- mathjax =2.7.7=ha770c72_3
- matplotlib =3.8.4=py310hff52083_2
- matplotlib-base =3.8.4=py310hef631a5_2
- matplotlib-inline =0.1.7=pyhd8ed1ab_0
- matplotlib-scalebar =0.8.1=pyhd8ed1ab_0
- matplotlib-venn =0.11.10=pyhd8ed1ab_0
- mayavi =4.8.2=py310h002bd87_2
- mccabe =0.7.0=pyhd8ed1ab_0
- mda-xdrlib =0.2.0=pyhd8ed1ab_0
- mdit-py-plugins =0.4.1=pyhd8ed1ab_0
- mdssdiff =0.1.11=py_0
- mdurl =0.1.2=pyhd8ed1ab_0
- memory_profiler =0.61.0=pyhd8ed1ab_0
- menuinst =2.1.0=py310hff52083_0
- mercantile =1.2.1=pyhd8ed1ab_0
- metpy =1.6.2=pyhd8ed1ab_0
- mgwr =2.2.1=pyhd8ed1ab_0
- minizip =4.0.6=h9d307f2_0
- mistune =3.0.2=pyhd8ed1ab_0
- mkl =2023.2.0=h84fe81f_50496
- ml_dtypes =0.3.2=py310hcc13569_0
- mnctools =0.2=pyh39e3cac_0
- mo_pack =0.3.0=py310h2372a71_1
- momepy =0.7.0=pyhd8ed1ab_0
- more-itertools =10.2.0=pyhd8ed1ab_0
- mpc =1.3.1=hfe3b2da_0
- mpfr =4.2.1=h9458935_1
- mpg123 =1.32.6=h59595ed_0
- mpi =1.0=openmpi
- mpi4py =3.1.6=py310hb2ba3f8_1
- mpl-scatter-density =0.7=pyhd8ed1ab_0
- mplleaflet =0.0.5=py_4
- mpmath =1.3.0=pyhd8ed1ab_0
- mscorefonts =0.0.1=3
- msgpack-python =1.0.8=py310h25c7140_0
- mule =2022.07.1=py310h8e62a3a_1
- multidict =6.0.5=py310h2372a71_0
- multipledispatch =0.6.0=py_0
- multiset =2.1.1=py_0
- munkres =1.1.4=pyh9f0ad1d_0
- mypy_extensions =1.0.0=pyha770c72_0
- mysql-common =8.3.0=hf1915f5_4
- mysql-libs =8.3.0=hca2cd23_4
- myst-nb =1.1.0=pyhd8ed1ab_0
- myst-parser =2.0.0=pyhd8ed1ab_0
- namex =0.0.8=pyhd8ed1ab_0
- nb_conda_kernels =2.5.1=pyh707e725_2
- nbclient =0.10.0=pyhd8ed1ab_0
- nbconvert =7.16.4=hd8ed1ab_0
- nbconvert-core =7.16.4=pyhd8ed1ab_0
- nbconvert-pandoc =7.16.4=hd8ed1ab_0
- nbdime =4.0.1=pyhd8ed1ab_0
- nbformat =5.10.4=pyhd8ed1ab_0
- nbstripout =0.7.1=pyhd8ed1ab_0
- nc-time-axis =1.4.1=pyhd8ed1ab_0
- nccmp =1.9.1.0=hd7f915c_6
- nccompress =0.2.1=py_0
- ncdu =1.13=0
- nceplibs-g2c =1.8.0=h4a0a8e2_6
- nchash =0.1.5=py_0
- nci_intake_catalogue =1.3=py_1
- nco =5.2.1=he646072_0
- ncplot =0.3.10=py310h8003fee_0
- nctoolkit =1.1.11=py310hff52083_1
- ncurses =6.5=h59595ed_0
- nest-asyncio =1.6.0=pyhd8ed1ab_0
- netcdf-fortran =4.6.1=mpi_openmpi_h0a0d5bf_4
- netcdf4 =1.6.5=nompi_py310h3aa39b3_102
- nettle =3.9.1=h7ab15ed_0
- networkx =3.3=pyhd8ed1ab_1
- neutralocean =2.1.3=pyhd8ed1ab_0
- nfoursid =1.0.1=pyhd8ed1ab_0
- nh3 =0.2.17=py310hcb5633a_0
- ninja =1.12.1=h297d8ca_0
- nlohmann_json =3.11.3=h59595ed_0
- nodejs =20.12.2=hb753e55_0
- noise =1.2.2=py310h2372a71_1005
- nomkl =3.0=0
- nose =1.3.7=py_1006
- notebook =7.2.1=pyhd8ed1ab_0
- notebook-shim =0.2.4=pyhd8ed1ab_0
- nspr =4.35=h27087fc_0
- nss =3.100=hca3bf56_0
- numba =0.59.1=py310h7dc5dd1_0
- numcodecs =0.12.1=py310h76e45a6_1
- numexpr =2.10.0=py310h3ea09b0_100
- numpy =1.26.4=py310hb13e2d6_0
- numpy_groupies =0.11.1=pyhd8ed1ab_0
- oauthlib =3.2.2=pyhd8ed1ab_0
- objgraph =3.5.0=pyh9f0ad1d_0
- ocl-icd =2.3.2=hd590300_1
- ocl-icd-system =1.0.0=1
- odc-geo =0.4.7=pyhd8ed1ab_0
- oniguruma =6.9.9=hd590300_0
- open-radar-data =0.1.1=pyhd8ed1ab_0
- openblas =0.3.27=pthreads_h7a3da1a_0
- opencv =4.10.0=qt6_py310h681cb09_600
- openexr =3.2.2=haf962dd_1
- openh264 =2.4.1=h59595ed_0
- openjpeg =2.5.2=h488ebb8_0
- openmpi =5.0.3=hfd7b305_106
- openpyxl =3.1.2=py310h2372a71_1
- openssh =9.6p1=h2d3b35a_0
- openssl =3.3.1=h4ab18f5_0
- opt_einsum =3.3.0=pyhc1e730c_2
- optree =0.11.0=py310hd41b1e2_0
- orc =2.0.0=h17fec99_1
- osqp =0.6.3=py310hf9f9076_3
- overrides =7.7.0=pyhd8ed1ab_0
- owslib =0.31.0=pyhd8ed1ab_0
- p11-kit =0.24.1=hc5aa10d_0
- packaging =24.0=pyhd8ed1ab_0
- palettable =3.3.3=pyhd8ed1ab_0
- pandas =2.2.2=py310hf9f9076_1
- pandoc =3.2=ha770c72_0
- pandocfilters =1.5.0=pyhd8ed1ab_0
- panel =1.4.4=pyhd8ed1ab_0
- pango =1.52.1=ha41ecd1_0
- parallelio =2.6.2=mpi_openmpi_hb00b1e1_2
- param =2.1.1=pyhff2d567_0
- parcels =2.3.0=py310_0
- parso =0.8.4=pyhd8ed1ab_0
- partd =1.4.2=pyhd8ed1ab_0
- patch =2.7.6=h7f98852_1002
- patchelf =0.17.2=h58526e2_0
- pathspec =0.12.1=pyhd8ed1ab_0
- patsy =0.5.6=pyhd8ed1ab_0
- payu =1.0.30=py_0
- pbr =6.0.0=pyhd8ed1ab_0
- pcre =8.45=h9c3ff4c_0
- pcre2 =10.43=hcad00b1_0
- pdbufr =0.11.0=pyhd8ed1ab_0
- pendulum =3.0.0=py310h58cd448_0
- perl =5.32.1=7_hd590300_perl5
- pexpect =4.9.0=pyhd8ed1ab_0
- pickleshare =0.7.5=py_1003
- pillow =10.3.0=py310hf73ecf8_0
- pint =0.23=pyhd8ed1ab_1
- pint-xarray =0.3=pyhd8ed1ab_0
- pip =24.0=pyhd8ed1ab_0
- pixman =0.43.2=h59595ed_0
- pkginfo =1.10.0=pyhd8ed1ab_0
- pkgutil-resolve-name =1.3.10=pyhd8ed1ab_1
- platformdirs =4.2.2=pyhd8ed1ab_0
- plotly =5.22.0=pyhd8ed1ab_0
- pluggy =1.5.0=pyhd8ed1ab_0
- ply =3.11=pyhd8ed1ab_2
- pmdarima =2.0.2=py310h5764c6d_1
- pointpats =2.4.0=pyhd8ed1ab_0
- pooch =1.8.1=pyhd8ed1ab_0
- poppler =24.03.0=h590f24d_0
- poppler-data =0.4.12=hd8ed1ab_0
- posix_ipc =1.1.1=py310hc51659f_1
- postgresql =16.3=h8e811e2_0
- progressbar2 =4.4.2=pyhd8ed1ab_0
- proj =9.3.1=h1d62c97_0
- prometheus_client =0.20.0=pyhd8ed1ab_0
- prompt-toolkit =3.0.46=pyha770c72_0
- prompt_toolkit =3.0.46=hd8ed1ab_0
- properscoring =0.1=py_0
- prophet =1.1.5=py310h56eac3b_1
- proto-plus =1.23.0=pyhd8ed1ab_0
- protobuf =4.25.3=py310ha8c1f0e_0
- psutil =5.9.8=py310h2372a71_0
- psycopg2 =2.9.9=py310h275853b_0
- pthread-stubs =0.4=h36c2ea0_1001
- ptyprocess =0.7.0=pyhd3deb0d_0
- pugixml =1.14=h59595ed_0
- pulp =2.8.0=py310hff52083_0
- pulseaudio-client =17.0=hb77b528_0
- pure_eval =0.2.2=pyhd8ed1ab_0
- pvlib =0.11.0=pyha770c72_0
- pvlib-python =0.11.0=hd8ed1ab_0
- py-cordex =0.8.0=pyhd8ed1ab_0
- py-cpuinfo =9.0.0=pyhd8ed1ab_0
- py-lief =0.14.1=py310h76e45a6_1
- py-opencv =4.10.0=qt6_py310h3d6a5e7_600
- py-xgboost =2.0.3=cpu_pyh995e691_4
- pyam =1.6.0=pyhd8ed1ab_0
- pyarrow =16.1.0=py310h17c5347_0
- pyarrow-core =16.1.0=py310h6f79a3a_0_cpu
- pyarrow-hotfix =0.6=pyhd8ed1ab_0
- pyasn1 =0.6.0=pyhd8ed1ab_0
- pyasn1-modules =0.4.0=pyhd8ed1ab_0
- pybind11-abi =4=hd8ed1ab_3
- pybtex =0.24.0=pyhd8ed1ab_2
- pybtex-docutils =1.0.3=py310hff52083_1
- pycodestyle =2.12.0=pyhd8ed1ab_0
- pycosat =0.6.6=py310h2372a71_0
- pycparser =2.22=pyhd8ed1ab_0
- pyct =0.5.0=pyhd8ed1ab_0
- pydantic =2.7.3=pyhd8ed1ab_0
- pydantic-core =2.18.4=py310he421c4c_0
- pydap =3.4.0=pyhd8ed1ab_0
- pydata-sphinx-theme =0.15.3=pyhd8ed1ab_0
- pyerfa =2.0.1.4=py310h261611a_1
- pyextremes =2.3.2=pyhd8ed1ab_0
- pyface =8.0.0=pyhd8ed1ab_0
- pygam =0.9.1=pyhd8ed1ab_0
- pygeoif =1.5.0=pyhd8ed1ab_0
- pygments =2.18.0=pyhd8ed1ab_0
- pygmt =0.12.0=pyhd8ed1ab_0
- pygrib =2.1.5=py310hb2f89d2_2
- pyhdf =0.11.4=py310hff149a3_1
- pyinterp =2024.6.0=openblas_py310ha00ca22_100
- pyjwt =2.8.0=pyhd8ed1ab_1
- pykdtree =1.3.12=py310h261611a_1
- pykrige =1.7.2=py310h261611a_2
- pylint =3.2.5=pyhd8ed1ab_0
- pymannkendall =1.4.3=pyha21a80b_0
- pymbolic =2022.2=pyhd8ed1ab_0
- pymeeus =0.5.12=pyhd8ed1ab_0
- pymunge =0.1.3=py_1
- pyod =2.0.0=pyhd8ed1ab_0
- pyopenssl =24.0.0=pyhd8ed1ab_0
- pyorbital =1.8.2=pyhd8ed1ab_0
- pyparsing =3.1.2=pyhd8ed1ab_0
- pyproj =3.6.1=py310hd5c30f3_5
- pyqt =5.15.9=py310h04931ad_5
- pyqt5-sip =12.12.2=py310hc6cd4ac_5
- pyresample =1.28.3=py310hcc13569_0
- pysal =23.7=pyhd8ed1ab_0
- pyshp =2.3.1=pyhd8ed1ab_0
- pyside2 =5.15.8=py310hffc9498_4
- pysocks =1.7.1=pyha2e5f31_6
- pyspectral =0.13.1=pyhd8ed1ab_1
- pyspharm =1.0.9=py310h19f2f35_1008
- pysteps =1.10.0=py310h5b4e0ec_1
- pytables =3.9.2=py310hd76cd5d_2
- pytest =8.2.2=pyhd8ed1ab_0
- pytest-cov =5.0.0=pyhd8ed1ab_0
- python =3.10.14=hd12c33a_0_cpython
- python-cdo =1.6.0=pyhd8ed1ab_0
- python-dateutil =2.9.0=pyhd8ed1ab_0
- python-eccodes =1.7.1=py310h261611a_0
- python-fastjsonschema =2.19.1=pyhd8ed1ab_0
- python-flatbuffers =24.3.25=pyh59ac667_0
- python-geotiepoints =1.7.3=py310h261611a_0
- python-gist =0.10.6=pyhd8ed1ab_0
- python-gnupg =0.4.9=pyhd8ed1ab_0
- python-graphviz =0.20.3=pyh717bed2_0
- python-gssapi =1.8.3=py310h98feede_0
- python-json-logger =2.0.7=pyhd8ed1ab_0
- python-kaleido =0.2.1=pyhd8ed1ab_0
- python-libarchive-c =5.1=py310hff52083_0
- python-magic =0.4.27=py310hff52083_4
- python-stratify =0.3.0=py310h261611a_2
- python-tzdata =2024.1=pyhd8ed1ab_0
- python-utils =3.8.2=pyhd8ed1ab_0
- python-xxhash =3.4.1=py310h2372a71_0
- python_abi =3.10=4_cp310
- pytools =2024.1.3=pyhd8ed1ab_0
- pytorch =2.1.2=cpu_mkl_py310hcb3bde6_104
- pytorch-lightning =2.2.2=pyhd8ed1ab_0
- pytz =2024.1=pyhd8ed1ab_0
- pyu2f =0.1.5=pyhd8ed1ab_0
- pyviz_comms =3.0.2=pyhd8ed1ab_1
- pywavelets =1.4.1=py310h1f7b6fc_1
- pyyaml =6.0.1=py310h2372a71_1
- pyzmq =26.0.3=py310h6883aea_0
- qdldl-python =0.1.7.post2=py310hf9f9076_1
- qt-main =5.15.8=hc9dc06e_21
- qt6-main =6.7.1=h2471661_2
- qtconsole-base =5.5.2=pyha770c72_0
- qtpy =2.4.1=pyhd8ed1ab_0
- quantecon =0.7.2=pyhd8ed1ab_0
- railroad-diagrams =3.0.1=pypi_0
- rasterio =1.3.9=py310hedc89e0_2
- rasterstats =0.19.0=pyhd8ed1ab_0
- rdma-core =51.0=hd3aeb46_0
- re2 =2023.09.01=h7f4b329_2
- readline =8.2=h8228510_1
- readme_renderer =42.0=pyhd8ed1ab_0
- rechunker =0.5.2=pyhd8ed1ab_1
- referencing =0.35.1=pyhd8ed1ab_0
- regex =2024.5.15=py310hc51659f_0
- regional-mom6 =0.6.0=pyhd8ed1ab_0
- regionmask =0.12.1=pyhd8ed1ab_0
- reproc =14.2.4.post0=hd590300_1
- reproc-cpp =14.2.4.post0=h59595ed_1
- requests =2.32.3=pyhd8ed1ab_0
- requests-oauthlib =2.0.0=pyhd8ed1ab_0
- requests-toolbelt =1.0.0=pyhd8ed1ab_0
- restructuredtext_lint =1.4.0=pyhd8ed1ab_0
- rfc3339-validator =0.1.4=pyhd8ed1ab_0
- rfc3986 =2.0.0=pyhd8ed1ab_0
- rfc3986-validator =0.1.1=pyh9f0ad1d_0
- rich =13.7.1=pyhd8ed1ab_0
- rioxarray =0.15.7=pyhd8ed1ab_0
- ripgrep =14.1.0=he8a937b_0
- rpds-py =0.18.1=py310he421c4c_0
- rsa =4.9=pyhd8ed1ab_0
- rtree =1.2.0=py310hbdcdc62_0
- ruamel.yaml =0.18.6=py310h2372a71_0
- ruamel.yaml.clib =0.2.8=py310h2372a71_0
- s2n =1.4.13=he19d79f_0
- s3fs =2024.6.1=pyhd8ed1ab_0
- s3transfer =0.10.1=pyhd8ed1ab_0
- satpy =0.49.0=pyhd8ed1ab_0
- scikit-image =0.20.0=py310h9b08913_1
- scikit-learn =1.5.1=py310h146d792_0
- scipy =1.14.0=py310h93e2701_0
- scs =3.2.4.post2=default_py310h2b98c70_0
- seaborn =0.13.2=hd8ed1ab_2
- seaborn-base =0.13.2=pyhd8ed1ab_2
- secretstorage =3.3.3=py310hff52083_2
- segregation =2.5=pyhd8ed1ab_1
- send2trash =1.8.3=pyh0d859eb_0
- setuptools =70.0.0=pyhd8ed1ab_0
- setuptools-scm =8.1.0=pyhd8ed1ab_0
- setuptools_scm =8.1.0=hd8ed1ab_0
- sh =2.0.7=pyh707e725_0
- shap =0.45.1=cpu_py310hdd52748_0
- shapely =2.0.4=py310hec8f0c1_1
- sharppy =1.4.0=py310hd8f1fbe_2
- shellcheck =0.10.0=ha770c72_0
- shellingham =1.5.4=pyhd8ed1ab_0
- shumlib =2023.06.1=h3218e01_0
- simpervisor =1.0.0=pyhd8ed1ab_0
- simplejson =3.19.2=py310h2372a71_0
- sip =6.7.12=py310hc6cd4ac_0
- siphon =0.9=pyhd8ed1ab_2
- six =1.16.0=pyh6c4a22f_0
- sleef =3.5.1=h9b69904_2
- slicer =0.0.8=pyhd8ed1ab_0
- smmap =5.0.0=pyhd8ed1ab_0
- snappy =1.2.0=hdb0a2a9_1
- sniffio =1.3.1=pyhd8ed1ab_0
- snowballstemmer =2.2.0=pyhd8ed1ab_0
- snuggs =1.4.7=py_0
- sortedcontainers =2.4.0=pyhd8ed1ab_0
- soupsieve =2.5=pyhd8ed1ab_1
- spaghetti =1.7.5.post1=pyhd8ed1ab_0
- sparse =0.15.4=pyhd8ed1ab_0
- spdlog =1.13.0=hd2e6256_0
- spectrum =0.8.1=py310h2372a71_3
- spglm =1.1.0=pyhd8ed1ab_1
- sphinx =7.3.7=pyhd8ed1ab_0
- sphinx-book-theme =1.1.2=pyhd8ed1ab_0
- sphinx-comments =0.0.3=pyh9f0ad1d_0
- sphinx-copybutton =0.5.2=pyhd8ed1ab_0
- sphinx-design =0.5.0=pyhd8ed1ab_0
- sphinx-external-toc =1.0.1=pyhd8ed1ab_0
- sphinx-jupyterbook-latex =1.0.0=pyhd8ed1ab_0
- sphinx-multitoc-numbering =0.1.3=pyhd8ed1ab_0
- sphinx-thebe =0.3.1=pyhd8ed1ab_0
- sphinx-togglebutton =0.3.2=pyhd8ed1ab_0
- sphinxcontrib-applehelp =1.0.8=pyhd8ed1ab_0
- sphinxcontrib-bibtex =2.6.2=pyhd8ed1ab_0
- sphinxcontrib-devhelp =1.0.6=pyhd8ed1ab_0
- sphinxcontrib-htmlhelp =2.0.5=pyhd8ed1ab_0
- sphinxcontrib-jsmath =1.0.1=pyhd8ed1ab_0
- sphinxcontrib-qthelp =1.0.7=pyhd8ed1ab_0
- sphinxcontrib-serializinghtml =1.1.10=pyhd8ed1ab_0
- spint =1.0.7=pyhd8ed1ab_1
- splitvar =0.3.5=py_0
- splot =1.1.5.post1=pyhd8ed1ab_0
- spopt =0.6.0=pyhd8ed1ab_0
- spreg =1.4.2=pyhd8ed1ab_0
- spvcm =0.3.0=pyhd8ed1ab_1
- spyder-kernels =2.5.2=unix_pyh707e725_0
- sqlalchemy =1.4.49=py310h2372a71_1
- sqlite =3.46.0=h6d4b2fc_0
- stack_data =0.6.2=pyhd8ed1ab_0
- stanio =0.5.0=pyhd8ed1ab_0
- statsforecast =1.7.5=pyhd8ed1ab_0
- statsmodels =0.14.2=py310h261611a_0
- stevedore =5.2.0=pyhd8ed1ab_0
- svt-av1 =2.1.0=hac33072_0
- sympy =1.12.1=pypyh2585a3b_103
- sysroot_linux-64 =2.12=he073ed8_17
- tableschema =1.20.11=pyhd8ed1ab_0
- tabulate =0.9.0=pyhd8ed1ab_1
- tabulator =1.53.5=pyhd8ed1ab_0
- tbats =1.1.3=pyhd8ed1ab_0
- tbb =2021.12.0=h297d8ca_1
- tbb-devel =2021.12.0=h7c56ddd_1
- tblib =3.0.0=pyhd8ed1ab_0
- tempest-remap =2.2.0=h13910d2_3
- tenacity =8.3.0=pyhd8ed1ab_0
- tensorboard =2.16.2=pyhd8ed1ab_0
- tensorboard-data-server =0.7.0=py310h75e40e8_1
- tensorboardx =2.6.2.2=pyhd8ed1ab_0
- tensorflow =2.16.1=cpu_py310h49b650b_0
- tensorflow-base =2.16.1=cpu_py310h224022f_0
- tensorflow-estimator =2.16.1=cpu_py310hc6dcfef_0
- termcolor =2.4.0=pyhd8ed1ab_0
- terminado =0.18.1=pyh0d859eb_0
- threadpoolctl =3.5.0=pyhc1e730c_0
- tifffile =2020.6.3=py_0
- tiledb =2.21.2=h27f064a_4
- time-machine =2.14.1=py310h2372a71_0
- timezonefinder =6.5.2=py310hc51659f_0
- tintx =2022.12.2=pyhd8ed1ab_0
- tinycss2 =1.3.0=pyhd8ed1ab_0
- tk =8.6.13=noxft_h4845f30_101
- tobler =0.11.2=pyhd8ed1ab_2
- toml =0.10.2=pyhd8ed1ab_0
- tomli =2.0.1=pyhd8ed1ab_0
- tomlkit =0.12.5=pyha770c72_0
- toolz =0.12.1=pyhd8ed1ab_0
- torchmetrics =1.4.0.post0=pyhd8ed1ab_0
- tornado =6.4=py310h2372a71_0
- tqdm =4.66.4=pyhd8ed1ab_0
- traitlets =5.14.3=pyhd8ed1ab_0
- traits =6.4.3=py310h2372a71_0
- traitsui =8.0.0=pyhd8ed1ab_0
- triad =0.9.6=pyhd8ed1ab_0
- trollimage =1.23.2=py310hcc13569_0
- trollsift =0.5.1=pyhd8ed1ab_0
- truststore =0.8.0=pyhd8ed1ab_0
- twine =5.1.1=pyhd8ed1ab_0
- typer =0.12.3=pyhd8ed1ab_0
- typer-slim =0.12.3=pyhd8ed1ab_0
- typer-slim-standard =0.12.3=hd8ed1ab_0
- types-python-dateutil =2.9.0.20240316=pyhd8ed1ab_0
- typing-extensions =4.12.1=hd8ed1ab_0
- typing_extensions =4.12.1=pyha770c72_0
- typing_inspect =0.9.0=pyhd8ed1ab_0
- typing_utils =0.1.0=pyhd8ed1ab_0
- tzcode =2024a=h3f72095_0
- tzdata =2024a=h0c530f3_0
- tzlocal =5.2=py310hff52083_0
- u8darts =0.30.0=pyhd8ed1ab_0
- u8darts-all =0.30.0=pyhd8ed1ab_0
- uc-micro-py =1.0.3=pyhd8ed1ab_0
- ucx =1.16.0=h1e563ba_5
- udunits2 =2.2.28=h40f5838_3
- ujson =5.10.0=py310h76e45a6_0
- um-packing =2022.7.1=pypi_0
- um-spiral-search =2022.7.1=pypi_0
- um-utils =2022.7.1=pypi_0
- umtools =0.2.3.2=py_0
- uncertainties =3.2.0=pyhd8ed1ab_0
- unicodecsv =0.14.1=pyhd8ed1ab_2
- unicodedata2 =15.1.0=py310h2372a71_0
- uri-template =1.3.0=pyhd8ed1ab_0
- uriparser =0.9.8=hac33072_0
- urllib3 =2.2.1=pyhd8ed1ab_0
- utfcpp =4.0.5=ha770c72_0
- utilsforecast =0.1.10=pyhd8ed1ab_0
- validators =0.28.3=pyhd8ed1ab_0
- versioneer =0.29=pyhd8ed1ab_0
- vtk =9.3.0=qt_py310h1234567_200
- vtk-base =9.3.0=qt_py310h1234567_200
- vtk-io-ffmpeg =9.3.0=qt_py310h1234567_200
- watchdog =4.0.1=py310hff52083_0
- watermark =2.4.3=pyhd8ed1ab_0
- wavespectra =4.0.3=py310hca5b4a2_0
- wayland =1.23.0=h5291e77_0
- wcwidth =0.2.13=pyhd8ed1ab_0
- webcolors =24.6.0=pyhd8ed1ab_0
- webencodings =0.5.1=pyhd8ed1ab_2
- webob =1.8.7=pyhd8ed1ab_0
- websocket-client =1.8.0=pyhd8ed1ab_0
- werkzeug =3.0.3=pyhd8ed1ab_0
- wheel =0.43.0=pyhd8ed1ab_1
- widgetsnbextension =4.0.11=pyhd8ed1ab_0
- windrose =1.9.1=pyhd8ed1ab_0
- windspharm =1.7.0=py310hff52083_1004
- wquantiles =0.6=pyhd8ed1ab_0
- wradlib =2.0.3=pyhd8ed1ab_0
- wrapt =1.14.1=py310h5764c6d_1
- wrf-python =1.3.4.1=py310hab80e06_4
- wslink =2.0.4=pyhd8ed1ab_0
- wurlitzer =3.1.0=pyhd8ed1ab_0
- x264 =1
- x265 =3.5=h924138e_3
- xarray =2024.6.0=pyhd8ed1ab_1
- xarray-datatree =0.0.14=pyhd8ed1ab_0
- xarray-spatial =0.4.0=pyhd8ed1ab_0
- xarraymannkendall =1.4.5=pyhd8ed1ab_0
- xarrayutils =2.0.1=pyhd8ed1ab_0
- xcb-util =0.4.0=hd590300_1
- xcb-util-cursor =0.1.4=hd590300_1
- xcb-util-image =0.4.0=h8ee46fc_1
- xcb-util-keysyms =0.4.0=h8ee46fc_1
- xcb-util-renderutil =0.3.9=hd590300_1
- xcb-util-wm =0.4.1=h8ee46fc_1
- xcdat =0.7.1=pyhd8ed1ab_0
- xclim =0.50.0=pyhd8ed1ab_0
- xerces-c =3.2.5=hac6953d_0
- xesmf =0.8.6=pyhd8ed1ab_0
- xgboost =2.0.3=cpu_pyhb8f9a19_4
- xgcm =0.8.1=pyhd8ed1ab_0
- xhistogram =0.3.2=pyhd8ed1ab_0
- xkeyboard-config =2.41=hd590300_0
- xlrd =2.0.1=pyhd8ed1ab_3
- xlsxwriter =3.1.9=pyhd8ed1ab_0
- xmhw =0.9.3=py_0
- xmip =0.7.2=pyhd8ed1ab_0
- xmitgcm =0.5.2=pyhd8ed1ab_0
- xmltodict =0.13.0=pyhd8ed1ab_0
- xmovie =0.3.1=pyhd8ed1ab_0
- xorg-fixesproto =5.0=h7f98852_1002
- xorg-inputproto =2.3.2=h7f98852_1002
- xorg-kbproto =1.0.7=h7f98852_1002
- xorg-libice =1.1.1=hd590300_0
- xorg-libsm =1.2.4=h7391055_0
- xorg-libx11 =1.8.9=h8ee46fc_0
- xorg-libxau =1.0.11=hd590300_0
- xorg-libxdmcp =1.1.3=h7f98852_0
- xorg-libxext =1.3.4=h0b41bf4_2
- xorg-libxfixes =5.0.3=h7f98852_1004
- xorg-libxi =1.7.10=h7f98852_0
- xorg-libxrender =0.9.11=hd590300_0
- xorg-libxt =1.3.0=hd590300_1
- xorg-renderproto =0.11.1=h7f98852_1002
- xorg-xextproto =7.3.0=h0b41bf4_1003
- xorg-xf86vidmodeproto =2.3.1=h7f98852_1002
- xorg-xproto =7.0.31=h7f98852_1007
- xradar =0.5.0=pyhd8ed1ab_0
- xrft =1.0.1=pyhd8ed1ab_0
- xskillscore =0.0.26=pyhd8ed1ab_0
- xwrf =0.0.4=pyhd8ed1ab_0
- xxhash =0.8.2=hd590300_0
- xyzservices =2024.4.0=pyhd8ed1ab_0
- xz =5.2.6=h166bdaf_0
- yamale =5.2.1=pyhca7485f_0
- yamanifest =0.3.8=py_0
- yaml =0.2.5=h7f98852_2
- yaml-cpp =0.8.0=h59595ed_0
- yarl =1.9.4=py310h2372a71_0
- zarr =2.18.2=pyhd8ed1ab_0
- zeromq =4.3.5=h75354e8_4
- zict =3.0.0=pyhd8ed1ab_0
- zipp =3.17.0=pyhd8ed1ab_0
- zlib =1.2.13=h4ab18f5_6
- zlib-ng =2.0.7=h0b41bf4_0
- zstandard =0.19.0=py310h5764c6d_0
- zstd =1.5.6=ha6fb4c9_0