Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Several fixes for new Jupyter env #281

Merged
merged 26 commits into from Jun 1, 2023
Merged

Several fixes for new Jupyter env #281

merged 26 commits into from Jun 1, 2023

Conversation

tlogan2000
Copy link
Contributor

@tlogan2000 tlogan2000 commented Feb 21, 2023

Several fixes for new Jupyter env in Ouranosinc/PAVICS-e2e-workflow-tests#115

Fixes #290, fixes #289

@tlogan2000 tlogan2000 requested a review from tlvu February 21, 2023 20:31
@review-notebook-app
Copy link

Check out this pull request on  ReviewNB

See visual diffs & provide feedback on Jupyter Notebooks.


Powered by ReviewNB

@tlogan2000
Copy link
Contributor Author

@tlvu PR that hopefully fixes jenkins tests

pre-commit-ci bot and others added 4 commits February 21, 2023 20:32
Fix the following Jenkins failure:
```
  ______ pavics-sdi-master/docs/source/notebooks/WFS_example.ipynb::Cell 4 _______
  Notebook cell execution failed
  Cell 4: Cell outputs differ

  Input:
  layers = gpd.read_file(fn)
  layers.plot()

  Traceback:
   mismatch 'text/plain'

   assert reference_output == test_output failed:

    '<AxesSubplot:>' == '<Axes: >'
    - <Axes: >
    + <AxesSubplot:>

```
To fix the following Jenkins failure:
```
  _ pavics-sdi-fix_climex/docs/source/notebooks/eccc-geoapi-xclim.ipynb::Cell 0 __
  Notebook cell execution failed
  Cell 0: Cell outputs differ

  Input:
  import cf_xarray as cfxr
  import geopandas as gpd
  from urlpath import URL

  # Compose the request
  host = URL("https://api.weather.gc.ca/")
  api = host / "collections" / "climate-daily" / "items"
  url = api.with_query(
      {
          "datetime": "1840-03-01 00:00:00/2021-06-02 00:00:00",
          "STN_ID": "10761",
          "sortby": "LOCAL_DATE",
      }
  )

  # Use geopandas to convert the json output to a GeoDataFrame.
  gdf = gpd.read_file(str(url))
  gdf.head()

  Traceback:
   mismatch 'text/plain'

   assert reference_output == test_output failed:

    '            ...x 36 columns]' == '            ...x 36 columns]'
    Skipping 917 identical leading characters in diff, use -v to show
    -            NaN                  4.0
    ? -           ^^
    +           None                  4.0
    ?            ^^^
    - 1              19.6  ...                 NaN                  1.6
    ?                                         - ^^
    + 1              19.6  ...                None                  1.6
    ?                                          ^^^
    - 2              19.1  ...                 NaN                  1.1
    ?                                         - ^^
    + 2              19.1  ...                None                  1.1
    ?                                          ^^^
    - 3              21.7  ...                 NaN                  3.7
    ?                                         - ^^
    + 3              21.7  ...                None                  3.7
    ?                                          ^^^
    - 4              20.9  ...                 NaN                  2.9
    ?                                         - ^^
    + 4              20.9  ...                None                  2.9
    ?                                          ^^^

        COOLING_DEGREE_DAYS_FLAG  HEATING_DEGREE_DAYS HEATING_DEGREE_DAYS_FLAG  \
    - 0                      NaN                  0.0                      NaN
    ?                       - ^^                                          - ^^
    + 0                     None                  0.0                     None
    ?                        ^^^                                           ^^^
    - 1                      NaN                  0.0                      NaN
    ?                       - ^^                                          - ^^
    + 1                     None                  0.0                     None
    ?                        ^^^                                           ^^^
    - 2                      NaN                  0.0                      NaN
    ?                       - ^^                                          - ^^
    + 2                     None                  0.0                     None
    ?                        ^^^                                           ^^^
    - 3                      NaN                  0.0                      NaN
    ?                       - ^^                                          - ^^
    + 3                     None                  0.0                     None
    ?                        ^^^                                           ^^^
    - 4                      NaN                  0.0                      NaN
    ?                       - ^^                                          - ^^
    + 4                     None                  0.0                     None
    ?                        ^^^                                           ^^^

    -    MIN_REL_HUMIDITY MIN_REL_HUMIDITY_FLAG  MAX_REL_HUMIDITY  \
    ?                                           -
    +    MIN_REL_HUMIDITY MIN_REL_HUMIDITY_FLAG MAX_REL_HUMIDITY  \
    - 0               NaN                   NaN               NaN
    - 1               NaN                   NaN               NaN
    - 2               NaN                   NaN               NaN
    - 3               NaN                   NaN               NaN
    - 4               NaN                   NaN               NaN
    + 0               NaN                  None              NaN
    + 1               NaN                  None              NaN
    + 2               NaN                  None              NaN
    + 3               NaN                  None              NaN
    + 4               NaN                  None              NaN

        MAX_REL_HUMIDITY_FLAG                    geometry
    - 0                   NaN  POINT (-73.57917 45.50474)
    ?                    - ^^
    + 0                  None  POINT (-73.57917 45.50474)
    ?                     ^^^
    - 1                   NaN  POINT (-73.57917 45.50474)
    ?                    - ^^
    + 1                  None  POINT (-73.57917 45.50474)
    ?                     ^^^
    - 2                   NaN  POINT (-73.57917 45.50474)
    ?                    - ^^
    + 2                  None  POINT (-73.57917 45.50474)
    ?                     ^^^
    - 3                   NaN  POINT (-73.57917 45.50474)
    ?                    - ^^
    + 3                  None  POINT (-73.57917 45.50474)
    ?                     ^^^
    - 4                   NaN  POINT (-73.57917 45.50474)
    ?                    - ^^
    + 4                  None  POINT (-73.57917 45.50474)
    ?                     ^^^

      [5 rows x 36 columns]

  _ pavics-sdi-fix_climex/docs/source/notebooks/eccc-geoapi-xclim.ipynb::Cell 2 __
  Notebook cell execution failed
  Cell 2: Cell outputs differ

  Input:
  # Conver the GeoDataFrame to an xarray.Dataset
  # Different stations are aligned along the `station` dimension
  ds = preprocessing(gdf)
  ds

  Traceback:
  Missing output fields from running code: {'stderr'}
```
@tlvu tlvu changed the title climex update using clear_output() Several fixes for new Jupyter env Feb 22, 2023
tlvu and others added 19 commits February 27, 2023 11:55
clear_output() was used in other notebooks also and did not recall
having to ignore output, this is a bit weird.

Possible hypothesis are change of behavior of Jupyter, Dask logging, or
clear_output().

Fix the following Jenkins failure:
```
  _______ pavics-sdi-fix_climex/docs/source/notebooks/climex.ipynb::Cell 6 _______
  Notebook cell execution failed
  Cell 6: Cell outputs differ

  Input:
  # Create a local client with 6 workers processes.
  dask_kwargs = dict(
      n_workers=6,
      threads_per_worker=6,
      memory_limit="4GB",
      local_directory="/notebook_dir/writable-workspace/tmp",
      silence_logs=logging.ERROR,
  )

  with Client(**dask_kwargs) as client:
      clear_output()
      display(
          HTML(
              f'<div class="alert alert-info"> Consult the client <a href="{client.dashboard_link}" target="_blank"><strong><em><u>Dashboard</u></em></strong></a> or the <strong><em>Dask jupyter sidebar</em></strong> to follow progress ... </div>'
          )
      )
      out = xens.ensemble_mean_std_max_min(sdii.to_dataset())
      out = out.load()

  clear_output()

  Traceback:
  Unexpected output fields from running code: {'stderr', 'text/plain'}

  ----------------------------- Captured stdout call -----------------------------
  unhandled iopub msg: clear_output
  unhandled iopub msg: clear_output
  _______ pavics-sdi-fix_climex/docs/source/notebooks/climex.ipynb::Cell 9 _______
  Notebook cell execution failed
  Cell 9: Cell outputs differ

  Input:
  # Compute the annual max 1-day precipitation
  dask_kwargs = dict(
      n_workers=6,
      threads_per_worker=6,
      memory_limit="4GB",
      local_directory="/notebook_dir/writable-workspace/tmp",
      silence_logs=logging.ERROR,
  )
  with Client(**dask_kwargs) as client:
      # dashboard available at client.dashboard_link
      clear_output()
      display(
          HTML(
              f'<div class="alert alert-info"> Consult the client <a href="{client.dashboard_link}" target="_blank"><strong><em><u>Dashboard</u></em></strong></a> or the <strong><em>Dask jupyter sidebar</em></strong> to follow progress ... </div>'
          )
      )
      out = out.load()

  clear_output()

  Traceback:
  Unexpected output fields from running code: {'stderr', 'text/plain'}

  ----------------------------- Captured stdout call -----------------------------
  unhandled iopub msg: clear_output
  unhandled iopub msg: clear_output
```
```
DeprecationWarning: Shapely 2.0 is installed, but because PyGEOS is also installed, GeoPandas still uses PyGEOS by default. However, starting with version 0.14, the default will switch to Shapely. To force to use Shapely 2.0 now, you can either uninstall PyGEOS or set the environment variable USE_PYGEOS=0. You can do this before starting the Python process, or in your code before importing geopandas:

import os
os.environ['USE_PYGEOS'] = '0'
import geopandas

In the next release, GeoPandas will switch to using Shapely by default, even if PyGEOS is installed. If you only have PyGEOS installed to get speed-ups, this switch should be smooth. However, if you are using PyGEOS directly (calling PyGEOS functions on geometries from GeoPandas), this will then stop working and you are encouraged to migrate from PyGEOS to Shapely 2.0 (https://shapely.readthedocs.io/en/latest/migration_pygeos.html).
  import geopandas as gpd
```
…precationWarning

```
DeprecationWarning: Shapely 2.0 is installed, but because PyGEOS is also installed, GeoPandas still uses PyGEOS by default. However, starting with version 0.14, the default will switch to Shapely. To force to use Shapely 2.0 now, you can either uninstall PyGEOS or set the environment variable USE_PYGEOS=0. You can do this before starting the Python process, or in your code before importing geopandas:

import os
os.environ['USE_PYGEOS'] = '0'
import geopandas

In the next release, GeoPandas will switch to using Shapely by default, even if PyGEOS is installed. If you only have PyGEOS installed to get speed-ups, this switch should be smooth. However, if you are using PyGEOS directly (calling PyGEOS functions on geometries from GeoPandas), this will then stop working and you are encouraged to migrate from PyGEOS to Shapely 2.0 (https://shapely.readthedocs.io/en/latest/migration_pygeos.html).
  import geopandas as gpd
```
```
/opt/conda/envs/birdy/lib/python3.10/site-packages/xclim/indices/fire/_cffwis.py:207: NumbaDeprecationWarning: The 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.
  def _day_length(lat: int | float, mth: int):  # pragma: no cover
/opt/conda/envs/birdy/lib/python3.10/site-packages/xclim/indices/fire/_cffwis.py:227: NumbaDeprecationWarning: The 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.
  def _day_length_factor(lat: float, mth: int):  # pragma: no cover
```
```
/opt/conda/envs/birdy/lib/python3.10/site-packages/xclim/indices/fire/_cffwis.py:207: NumbaDeprecationWarning: The 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.
  def _day_length(lat: int | float, mth: int):  # pragma: no cover
/opt/conda/envs/birdy/lib/python3.10/site-packages/xclim/indices/fire/_cffwis.py:227: NumbaDeprecationWarning: The 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.
  def _day_length_factor(lat: float, mth: int):  # pragma: no cover
```
…tribute 'exterior' with upcoming Jupyter env

Fix proposed by @huard.

See #290

Fix for this error:
```
15:43:32  ____ pavics-sdi-fix_climex/docs/source/notebooks/regridding.ipynb::Cell 23 _____
15:43:32  Notebook cell execution failed
15:43:32  Cell 23: Cell execution caused an exception
15:43:32
15:43:32  Input:
15:43:32  # This is only to show the decrease in size
15:43:32  def count_points(elem):
15:43:32      def _count(poly):
15:43:32          return len(poly.exterior.coords) + sum(
15:43:32              len(hole.coords) for hole in poly.interiors
15:43:32          )
15:43:32
15:43:32      if hasattr(elem, "__len__"):  # then it is a MultiPolygon
15:43:32          return sum(_count(poly) for poly in elem)
15:43:32      return _count(elem)
15:43:32
15:43:32
15:43:32  # Count the total number of nodes in the shapes:
15:43:32  print(
15:43:32      "Total number of nodes in the raw shapes : ",
15:43:32      shapes.geometry.apply(count_points).sum(),
15:43:32  )
15:43:32
15:43:32  min_grid_size = float(
15:43:32      min(abs(ds_in.lat.diff("lat")).min(), abs(ds_in.lon.diff("lon")).min())
15:43:32  )
15:43:32  print(
15:43:32      f"Minimal grid size [��] of input ds: {min_grid_size:0.3f}, we will simplify to a tolerance of {min_grid_size / 100:0.5f}"
15:43:32  )
15:43:32
15:43:32  # Simplify geometries
15:43:32  shapes_simp = shapes.copy()
15:43:32  shapes_simp["geometry"] = shapes.simplify(min_grid_size / 100).buffer(0)
15:43:32
15:43:32  print(
15:43:32      "Total number of nodes in the simplified shapes : ",
15:43:32      shapes_simp.geometry.apply(count_points).sum(),
15:43:32  )
15:43:32  assert shapes_simp.buffer(0).is_valid.all()
15:43:32
15:43:32  Traceback:
15:43:32
15:43:32  ---------------------------------------------------------------------------
15:43:32  AttributeError                            Traceback (most recent call last)
15:43:32  Cell In[24], line 16
15:43:32       10     return _count(elem)
15:43:32       13 # Count the total number of nodes in the shapes:
15:43:32       14 print(
15:43:32       15     "Total number of nodes in the raw shapes : ",
15:43:32  ---> 16     shapes.geometry.apply(count_points).sum(),
15:43:32       17 )
15:43:32       19 min_grid_size = float(
15:43:32       20     min(abs(ds_in.lat.diff("lat")).min(), abs(ds_in.lon.diff("lon")).min())
15:43:32       21 )
15:43:32       22 print(
15:43:32       23     f"Minimal grid size [��] of input ds: {min_grid_size:0.3f}, we will simplify to a tolerance of {min_grid_size / 100:0.5f}"
15:43:32       24 )
15:43:32
15:43:32  File /opt/conda/envs/birdy/lib/python3.10/site-packages/geopandas/geoseries.py:645, in GeoSeries.apply(self, func, convert_dtype, args, **kwargs)
15:43:32      643 @doc(pd.Series)
15:43:32      644 def apply(self, func, convert_dtype=True, args=(), **kwargs):
15:43:32  --> 645     result = super().apply(func, convert_dtype=convert_dtype, args=args, **kwargs)
15:43:32      646     if isinstance(result, GeoSeries):
15:43:32      647         if self.crs is not None:
15:43:32
15:43:32  File /opt/conda/envs/birdy/lib/python3.10/site-packages/pandas/core/series.py:4357, in Series.apply(self, func, convert_dtype, args, **kwargs)
15:43:32     4247 def apply(
15:43:32     4248     self,
15:43:32     4249     func: AggFuncType,
15:43:32     (...)
15:43:32     4252     **kwargs,
15:43:32     4253 ) -> FrameOrSeriesUnion:
15:43:32     4254     """
15:43:32     4255     Invoke function on values of Series.
15:43:32     4256
15:43:32     (...)
15:43:32     4355     dtype: float64
15:43:32     4356     """
15:43:32  -> 4357     return SeriesApply(self, func, convert_dtype, args, kwargs).apply()
15:43:32
15:43:32  File /opt/conda/envs/birdy/lib/python3.10/site-packages/pandas/core/apply.py:1043, in SeriesApply.apply(self)
15:43:32     1039 if isinstance(self.f, str):
15:43:32     1040     # if we are a string, try to dispatch
15:43:32     1041     return self.apply_str()
15:43:32  -> 1043 return self.apply_standard()
15:43:32
15:43:32  File /opt/conda/envs/birdy/lib/python3.10/site-packages/pandas/core/apply.py:1098, in SeriesApply.apply_standard(self)
15:43:32     1092         values = obj.astype(object)._values
15:43:32     1093         # error: Argument 2 to "map_infer" has incompatible type
15:43:32     1094         # "Union[Callable[..., Any], str, List[Union[Callable[..., Any], str]],
15:43:32     1095         # Dict[Hashable, Union[Union[Callable[..., Any], str],
15:43:32     1096         # List[Union[Callable[..., Any], str]]]]]"; expected
15:43:32     1097         # "Callable[[Any], Any]"
15:43:32  -> 1098         mapped = lib.map_infer(
15:43:32     1099             values,
15:43:32     1100             f,  # type: ignore[arg-type]
15:43:32     1101             convert=self.convert_dtype,
15:43:32     1102         )
15:43:32     1104 if len(mapped) and isinstance(mapped[0], ABCSeries):
15:43:32     1105     # GH 25959 use pd.array instead of tolist
15:43:32     1106     # so extension arrays can be used
15:43:32     1107     return obj._constructor_expanddim(pd_array(mapped), index=obj.index)
15:43:32
15:43:32  File /opt/conda/envs/birdy/lib/python3.10/site-packages/pandas/_libs/lib.pyx:2859, in pandas._libs.lib.map_infer()
15:43:32
15:43:32  Cell In[24], line 10, in count_points(elem)
15:43:32        8 if hasattr(elem, "__len__"):  # then it is a MultiPolygon
15:43:32        9     return sum(_count(poly) for poly in elem)
15:43:32  ---> 10 return _count(elem)
15:43:32
15:43:32  Cell In[24], line 4, in count_points.<locals>._count(poly)
15:43:32        3 def _count(poly):
15:43:32  ----> 4     return len(poly.exterior.coords) + sum(
15:43:32        5         len(hole.coords) for hole in poly.interiors
15:43:32        6     )
15:43:32
15:43:32  AttributeError: 'MultiPolygon' object has no attribute 'exterior'
```
…response code: 500 with upcoming Jupyter env

Fix suggested by @Zeitsperre, see
#289 (comment)

To fix the follow error:
```
15:43:32  Traceback:
15:43:32
15:43:32  ---------------------------------------------------------------------------
15:43:32  CPLE_HttpResponseError                    Traceback (most recent call last)
15:43:32  File fiona/ogrext.pyx:136, in fiona.ogrext.gdal_open_vector()
15:43:32
15:43:32  File fiona/_err.pyx:291, in fiona._err.exc_wrap_pointer()
15:43:32
15:43:32  CPLE_HttpResponseError: HTTP response code: 500
15:43:32
15:43:32  During handling of the above exception, another exception occurred:
15:43:32
15:43:32  DriverError                               Traceback (most recent call last)
15:43:32  Cell In[1], line 17
15:43:32        8 url = api.with_query(
15:43:32        9     {
15:43:32       10         "datetime": "1840-03-01 00:00:00/2021-06-02 00:00:00",
15:43:32     (...)
15:43:32       13     }
15:43:32       14 )
15:43:32       16 # Use geopandas to convert the json output to a GeoDataFrame.
15:43:32  ---> 17 gdf = gpd.read_file(str(url))
15:43:32       18 gdf.head()
15:43:32
15:43:32  File /opt/conda/envs/birdy/lib/python3.10/site-packages/geopandas/io/file.py:248, in _read_file(filename, bbox, mask, rows, engine, **kwargs)
15:43:32      245     else:
15:43:32      246         path_or_bytes = filename
15:43:32  --> 248     return _read_file_fiona(
15:43:32      249         path_or_bytes, from_bytes, bbox=bbox, mask=mask, rows=rows, **kwargs
15:43:32      250     )
15:43:32      252 else:
15:43:32      253     raise ValueError(f"unknown engine '{engine}'")
15:43:32
15:43:32  File /opt/conda/envs/birdy/lib/python3.10/site-packages/geopandas/io/file.py:289, in _read_file_fiona(path_or_bytes, from_bytes, bbox, mask, rows, where, **kwargs)
15:43:32      286     reader = fiona.open
15:43:32      288 with fiona_env():
15:43:32  --> 289     with reader(path_or_bytes, **kwargs) as features:
15:43:32      290         crs = features.crs_wkt
15:43:32      291         # attempt to get EPSG code
15:43:32
15:43:32  File /opt/conda/envs/birdy/lib/python3.10/site-packages/fiona/env.py:457, in ensure_env_with_credentials.<locals>.wrapper(*args, **kwds)
15:43:32      454     session = DummySession()
15:43:32      456 with env_ctor(session=session):
15:43:32  --> 457     return f(*args, **kwds)
15:43:32
15:43:32  File /opt/conda/envs/birdy/lib/python3.10/site-packages/fiona/__init__.py:335, in open(fp, mode, driver, schema, crs, encoding, layer, vfs, enabled_drivers, crs_wkt, allow_unsupported_drivers, **kwargs)
15:43:32      332     path = parse_path(fp)
15:43:32      334 if mode in ("a", "r"):
15:43:32  --> 335     colxn = Collection(
15:43:32      336         path,
15:43:32      337         mode,
15:43:32      338         driver=driver,
15:43:32      339         encoding=encoding,
15:43:32      340         layer=layer,
15:43:32      341         enabled_drivers=enabled_drivers,
15:43:32      342         allow_unsupported_drivers=allow_unsupported_drivers,
15:43:32      343         **kwargs
15:43:32      344     )
15:43:32      345 elif mode == "w":
15:43:32      346     colxn = Collection(
15:43:32      347         path,
15:43:32      348         mode,
15:43:32     (...)
15:43:32      357         **kwargs
15:43:32      358     )
15:43:32
15:43:32  File /opt/conda/envs/birdy/lib/python3.10/site-packages/fiona/collection.py:234, in Collection.__init__(self, path, mode, driver, schema, crs, encoding, layer, vsi, archive, enabled_drivers, crs_wkt, ignore_fields, ignore_geometry, include_fields, wkt_version, allow_unsupported_drivers, **kwargs)
15:43:32      232 if self.mode == "r":
15:43:32      233     self.session = Session()
15:43:32  --> 234     self.session.start(self, **kwargs)
15:43:32      235 elif self.mode in ("a", "w"):
15:43:32      236     self.session = WritingSession()
15:43:32
15:43:32  File fiona/ogrext.pyx:587, in fiona.ogrext.Session.start()
15:43:32
15:43:32  File fiona/ogrext.pyx:143, in fiona.ogrext.gdal_open_vector()
15:43:32
15:43:32  DriverError: HTTP response code: 500
```
For this diff:
```
13:41:51  _______ pavics-sdi-fix_climex/docs/source/notebooks/climex.ipynb::Cell 5 _______
13:41:51  Notebook cell execution failed
13:41:51  Cell 5: Cell outputs differ
13:41:51
13:41:51  Input:
13:41:51  ds = xr.open_dataset(
13:41:51      url, chunks=dict(realization=1, time=365, rlat=50 * 3, rlon=50 * 3)
13:41:51  )
13:41:51  xclim.set_options(check_missing="pct", missing_options={"pct": {"tolerance": 0.05}})
13:41:51  sdii = xclim.atmos.daily_pr_intensity(pr=ds.pr.sel(time="2000"))
13:41:51  sdii
13:41:51
13:41:51  Traceback:
13:41:51   mismatch 'text/plain'
13:41:51
13:41:51   assert reference_output == test_output failed:
13:41:51
13:41:51    '<xarray.Data...nnual aver...' == '<xarray.Data...nnual aver...'
13:41:51    Skipping 428 identical leading characters in diff, use -v to show
13:41:51    Skipping 477 identical trailing characters in diff, use -v to show
13:41:51      l...
13:41:51    -     lat          (rlat, rlon) float32 dask.array<chunksize=(150, 150), meta=np.ndarray>
13:41:51    ?      ^^
13:41:51    +     lon          (rlat, rlon) float32 dask.array<chunksize=(150, 150), meta=np.ndarray>
13:41:51    ?      ^^
13:41:51    -     lon
13:41:51    +     lat
13:41:51
13:41:51
13:41:51  _______ pavics-sdi-fix_climex/docs/source/notebooks/climex.ipynb::Cell 8 _______
13:41:51  Notebook cell execution failed
13:41:51  Cell 8: Cell outputs differ
13:41:51
13:41:51  Input:
13:41:51  # Subset over the Montreal gridpoint
13:41:51  ds = xr.open_dataset(url, chunks=dict(realization=1, time=365 * 50, rlon=25, rlat=25))
13:41:51  pt = subset_gridpoint(ds, lon=-73.69, lat=45.50)
13:41:51  print("Input dataset for Montreal :")
13:41:51  display(pt)
13:41:51  out = xclim.atmos.max_1day_precipitation_amount(pr=pt.pr, freq="YS")
13:41:51  print("Maximim 1-day precipitation `lazy` output ..")
13:41:51  out
13:41:51
13:41:51  Traceback:
13:41:51   mismatch 'text/plain'
13:41:51
13:41:51   assert reference_output == test_output failed:
13:41:51
13:41:51    '<xarray.Data...precipitation' == '<xarray.Data...precipitation'
13:41:51    Skipping 160 identical leading characters in diff, use -v to show
13:41:51    Skipping 388 identical trailing characters in diff, use -v to show
13:41:51      es:
13:41:51    -     rlat         float64 0.365
13:41:51          rlon         float64 16.12
13:41:51    -   * realization  (realization) |S64 b'historical-r1-r10i1p1' ... b'historical...
13:41:51          lat          float32 45.45
13:41:51          lon          float32 -73.7
13:41:51    +     rlat         float64 0.365
13:41:51    +   * realization  (realization) |S64 b'historical-r1-r10i1p1' ... b'historical...
13:41:51        * time
```
…de: 500 with upcoming Jupyter env

Fix proposed by @Zeitsperre, see
#289 (comment).

To fix this error:
```
13:41:51  _ pavics-sdi-fix_climex/docs/source/notebooks/eccc-geoapi-xclim.ipynb::Cell 0 __
13:41:51  Notebook cell execution failed
13:41:51  Cell 0: Cell execution caused an exception
13:41:51
13:41:51  Input:
13:41:51  import cf_xarray as cfxr
13:41:51  import geopandas as gpd
13:41:51  from urlpath import URL
13:41:51
13:41:51  # Compose the request
13:41:51  host = URL("https://api.weather.gc.ca/")
13:41:51  api = host / "collections" / "climate-daily" / "items"
13:41:51  url = api.with_query(
13:41:51      {
13:41:51          "datetime": "1840-03-01 00:00:00/2021-06-02 00:00:00",
13:41:51          "STN_ID": "10761",
13:41:51          "sortby": "LOCAL_DATE",
13:41:51      }
13:41:51  )
13:41:51
13:41:51  # Use geopandas to convert the json output to a GeoDataFrame.
13:41:51  gdf = gpd.read_file(str(url))
13:41:51  gdf.head()
13:41:51
13:41:51  Traceback:
13:41:51
13:41:51  ---------------------------------------------------------------------------
13:41:51  CPLE_HttpResponseError                    Traceback (most recent call last)
13:41:51  File fiona/ogrext.pyx:136, in fiona.ogrext.gdal_open_vector()
13:41:51
13:41:51  File fiona/_err.pyx:291, in fiona._err.exc_wrap_pointer()
13:41:51
13:41:51  CPLE_HttpResponseError: HTTP response code: 500
13:41:51
13:41:51  During handling of the above exception, another exception occurred:
13:41:51
13:41:51  DriverError                               Traceback (most recent call last)
13:41:51  Cell In[1], line 17
13:41:51        8 url = api.with_query(
13:41:51        9     {
13:41:51       10         "datetime": "1840-03-01 00:00:00/2021-06-02 00:00:00",
13:41:51     (...)
13:41:51       13     }
13:41:51       14 )
13:41:51       16 # Use geopandas to convert the json output to a GeoDataFrame.
13:41:51  ---> 17 gdf = gpd.read_file(str(url))
13:41:51       18 gdf.head()
13:41:51
13:41:51  File /opt/conda/envs/birdy/lib/python3.10/site-packages/geopandas/io/file.py:248, in _read_file(filename, bbox, mask, rows, engine, **kwargs)
13:41:51      245     else:
13:41:51      246         path_or_bytes = filename
13:41:51  --> 248     return _read_file_fiona(
13:41:51      249         path_or_bytes, from_bytes, bbox=bbox, mask=mask, rows=rows, **kwargs
13:41:51      250     )
13:41:51      252 else:
13:41:51      253     raise ValueError(f"unknown engine '{engine}'")
13:41:51
13:41:51  File /opt/conda/envs/birdy/lib/python3.10/site-packages/geopandas/io/file.py:289, in _read_file_fiona(path_or_bytes, from_bytes, bbox, mask, rows, where, **kwargs)
13:41:51      286     reader = fiona.open
13:41:51      288 with fiona_env():
13:41:51  --> 289     with reader(path_or_bytes, **kwargs) as features:
13:41:51      290         crs = features.crs_wkt
13:41:51      291         # attempt to get EPSG code
13:41:51
13:41:51  File /opt/conda/envs/birdy/lib/python3.10/site-packages/fiona/env.py:457, in ensure_env_with_credentials.<locals>.wrapper(*args, **kwds)
13:41:51      454     session = DummySession()
13:41:51      456 with env_ctor(session=session):
13:41:51  --> 457     return f(*args, **kwds)
13:41:51
13:41:51  File /opt/conda/envs/birdy/lib/python3.10/site-packages/fiona/__init__.py:335, in open(fp, mode, driver, schema, crs, encoding, layer, vfs, enabled_drivers, crs_wkt, allow_unsupported_drivers, **kwargs)
13:41:51      332     path = parse_path(fp)
13:41:51      334 if mode in ("a", "r"):
13:41:51  --> 335     colxn = Collection(
13:41:51      336         path,
13:41:51      337         mode,
13:41:51      338         driver=driver,
13:41:51      339         encoding=encoding,
13:41:51      340         layer=layer,
13:41:51      341         enabled_drivers=enabled_drivers,
13:41:51      342         allow_unsupported_drivers=allow_unsupported_drivers,
13:41:51      343         **kwargs
13:41:51      344     )
13:41:51      345 elif mode == "w":
13:41:51      346     colxn = Collection(
13:41:51      347         path,
13:41:51      348         mode,
13:41:51     (...)
13:41:51      357         **kwargs
13:41:51      358     )
13:41:51
13:41:51  File /opt/conda/envs/birdy/lib/python3.10/site-packages/fiona/collection.py:234, in Collection.__init__(self, path, mode, driver, schema, crs, encoding, layer, vsi, archive, enabled_drivers, crs_wkt, ignore_fields, ignore_geometry, include_fields, wkt_version, allow_unsupported_drivers, **kwargs)
13:41:51      232 if self.mode == "r":
13:41:51      233     self.session = Session()
13:41:51  --> 234     self.session.start(self, **kwargs)
13:41:51      235 elif self.mode in ("a", "w"):
13:41:51      236     self.session = WritingSession()
13:41:51
13:41:51  File fiona/ogrext.pyx:587, in fiona.ogrext.Session.start()
13:41:51
13:41:51  File fiona/ogrext.pyx:143, in fiona.ogrext.gdal_open_vector()
13:41:51
13:41:51  DriverError: HTTP response code: 500
```
To avoid this DeprecationWarning:
```
/tmp/ipykernel_688/875513140.py:4: DeprecationWarning: Shapely 2.0 is installed, but because PyGEOS is also installed, GeoPandas still uses PyGEOS by default. However, starting with version 0.14, the default will switch to Shapely. To force to use Shapely 2.0 now, you can either uninstall PyGEOS or set the environment variable USE_PYGEOS=0. You can do this before starting the Python process, or in your code before importing geopandas:

import os
os.environ['USE_PYGEOS'] = '0'
import geopandas

In the next release, GeoPandas will switch to using Shapely by default, even if PyGEOS is installed. If you only have PyGEOS installed to get speed-ups, this switch should be smooth. However, if you are using PyGEOS directly (calling PyGEOS functions on geometries from GeoPandas), this will then stop working and you are encouraged to migrate from PyGEOS to Shapely 2.0 (https://shapely.readthedocs.io/en/latest/migration_pygeos.html).
  import geopandas as gpd
```
…utput

NumbaDeprecationWarning:
```
/opt/conda/envs/birdy/lib/python3.10/site-packages/xclim/indices/fire/_cffwis.py:207: NumbaDeprecationWarning: The 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.
  def _day_length(lat: int | float, mth: int):  # pragma: no cover
/opt/conda/envs/birdy/lib/python3.10/site-packages/xclim/indices/fire/_cffwis.py:227: NumbaDeprecationWarning: The 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.
  def _day_length_factor(lat: float, mth: int):  # pragma: no cover
```

Output change:
```
09:50:12  _ pavics-sdi-fix_climex/docs/source/notebooks/eccc-geoapi-xclim.ipynb::Cell 0 __
09:50:12  Notebook cell execution failed
09:50:12  Cell 0: Cell outputs differ
09:50:12
09:50:12  Input:
09:50:12  import os
09:50:12
09:50:12  os.environ["USE_PYGEOS"] = "0"  # force use Shapely with GeoPandas
09:50:12
09:50:12  import urllib
09:50:12
09:50:12  import cf_xarray as cfxr
09:50:12  import geopandas as gpd
09:50:12  from urlpath import URL
09:50:12
09:50:12  # Compose the request
09:50:12  host = URL("https://api.weather.gc.ca/")
09:50:12  api = host / "collections" / "climate-daily" / "items"
09:50:12  url = api.with_query(
09:50:12      {
09:50:12          "datetime": "1840-03-01 00:00:00/2021-06-02 00:00:00",
09:50:12          "STN_ID": "10761",
09:50:12          "sortby": "LOCAL_DATE",
09:50:12      }
09:50:12  )
09:50:12
09:50:12  # Use geopandas to convert the json output to a GeoDataFrame.
09:50:12  with urllib.request.urlopen(url=str(url)) as req:
09:50:12      gdf = gpd.read_file(filename=req, engine="pyogrio")
09:50:12  gdf.head()
09:50:12
09:50:12  Traceback:
09:50:12   mismatch 'text/plain'
09:50:12
09:50:12   assert reference_output == test_output failed:
09:50:12
09:50:12    '            ...x 36 columns]' == '            ...x 36 columns]'
09:50:12    Skipping 917 identical leading characters in diff, use -v to show
09:50:12    -           None                  4.0
09:50:12    ?            ^^^
09:50:12    +            NaN                  4.0
09:50:12    ? +           ^^
09:50:12    - 1              19.6  ...                None                  1.6
09:50:12    ?                                          ^^^
09:50:12    + 1              19.6  ...                 NaN                  1.6
09:50:12    ?                                         + ^^
09:50:12    - 2              19.1  ...                None                  1.1
09:50:12    ?                                          ^^^
09:50:12    + 2              19.1  ...                 NaN                  1.1
09:50:12    ?                                         + ^^
09:50:12    - 3              21.7  ...                None                  3.7
09:50:12    ?                                          ^^^
09:50:12    + 3              21.7  ...                 NaN                  3.7
09:50:12    ?                                         + ^^
09:50:12    - 4              20.9  ...                None                  2.9
09:50:12    ?                                          ^^^
09:50:12    + 4              20.9  ...                 NaN                  2.9
09:50:12    ?                                         + ^^
09:50:12
09:50:12        COOLING_DEGREE_DAYS_FLAG  HEATING_DEGREE_DAYS HEATING_DEGREE_DAYS_FLAG  \
09:50:12    - 0                     None                  0.0                     None
09:50:12    ?                        ^^^                                           ^^^
09:50:12    + 0                      NaN                  0.0                      NaN
09:50:12    ?                       + ^^                                          + ^^
09:50:12    - 1                     None                  0.0                     None
09:50:12    ?                        ^^^                                           ^^^
09:50:12    + 1                      NaN                  0.0                      NaN
09:50:12    ?                       + ^^                                          + ^^
09:50:12    - 2                     None                  0.0                     None
09:50:12    ?                        ^^^                                           ^^^
09:50:12    + 2                      NaN                  0.0                      NaN
09:50:12    ?                       + ^^                                          + ^^
09:50:12    - 3                     None                  0.0                     None
09:50:12    ?                        ^^^                                           ^^^
09:50:12    + 3                      NaN                  0.0                      NaN
09:50:12    ?                       + ^^                                          + ^^
09:50:12    - 4                     None                  0.0                     None
09:50:12    ?                        ^^^                                           ^^^
09:50:12    + 4                      NaN                  0.0                      NaN
09:50:12    ?                       + ^^                                          + ^^
09:50:12
09:50:12    -    MIN_REL_HUMIDITY MIN_REL_HUMIDITY_FLAG MAX_REL_HUMIDITY  \
09:50:12    +    MIN_REL_HUMIDITY MIN_REL_HUMIDITY_FLAG  MAX_REL_HUMIDITY  \
09:50:12    ?                                           +
09:50:12    - 0               NaN                  None              NaN
09:50:12    - 1               NaN                  None              NaN
09:50:12    - 2               NaN                  None              NaN
09:50:12    - 3               NaN                  None              NaN
09:50:12    - 4               NaN                  None              NaN
09:50:12    + 0               NaN                   NaN               NaN
09:50:12    + 1               NaN                   NaN               NaN
09:50:12    + 2               NaN                   NaN               NaN
09:50:12    + 3               NaN                   NaN               NaN
09:50:12    + 4               NaN                   NaN               NaN
09:50:12
09:50:12        MAX_REL_HUMIDITY_FLAG                    geometry
09:50:12    - 0                  None  POINT (-73.57917 45.50474)
09:50:12    ?                     ^^^
09:50:12    + 0                   NaN  POINT (-73.57917 45.50474)
09:50:12    ?                    + ^^
09:50:12    - 1                  None  POINT (-73.57917 45.50474)
09:50:12    ?                     ^^^
09:50:12    + 1                   NaN  POINT (-73.57917 45.50474)
09:50:12    ?                    + ^^
09:50:12    - 2                  None  POINT (-73.57917 45.50474)
09:50:12    ?                     ^^^
09:50:12    + 2                   NaN  POINT (-73.57917 45.50474)
09:50:12    ?                    + ^^
09:50:12    - 3                  None  POINT (-73.57917 45.50474)
09:50:12    ?                     ^^^
09:50:12    + 3                   NaN  POINT (-73.57917 45.50474)
09:50:12    ?                    + ^^
09:50:12    - 4                  None  POINT (-73.57917 45.50474)
09:50:12    ?                     ^^^
09:50:12    + 4                   NaN  POINT (-73.57917 45.50474)
09:50:12    ?                    + ^^
09:50:12
09:50:12      [5 rows x 36 columns]
```
@@ -43,6 +43,12 @@
}
Copy link
Contributor

@huard huard May 29, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Line #11.    host = URL("https://api.weather.gc.ca/")

Extra / at the end


Reply via ReviewNB

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed in b9c7d24

@@ -43,6 +43,12 @@
}
Copy link
Contributor

@huard huard May 29, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Line #7.    with urllib.request.urlopen(url=str(url)) as req:

Probably need to adjust the text above. Do we know why the original method stopped working?

Seems to be related to https://github.com/geopandas/geopandas/pull/2796

This seems like a regression.


Reply via ReviewNB

@tlvu
Copy link
Contributor

tlvu commented Jun 1, 2023

This one OK to merge?

@tlogan2000
Copy link
Contributor Author

I think it should be ok @huard any remaining issues here?

@huard
Copy link
Contributor

huard commented Jun 1, 2023

Unclear, but let's merge and fix remaining issues later.

```
14:17:33  _ pavics-sdi-fix_climex/docs/source/notebooks/eccc-geoapi-climate-stations.ipynb::Cell 9 _
14:17:33  Notebook cell execution failed
14:17:33  Cell 9: Cell outputs differ
14:17:33
14:17:33  Input:
14:17:33  url = str(
14:17:33      coll.with_query(
14:17:33          {
14:17:33              "CLIMATE_IDENTIFIER": station_id,
14:17:33              "datetime": "1990-01-01 00:00:00/1991-01-01 00:00:00",
14:17:33          }
14:17:33      )
14:17:33  )
14:17:33  print(url)
14:17:33  with urllib.request.urlopen(url=str(url)) as req:
14:17:33      gdf = gpd.read_file(filename=req, engine="pyogrio")
14:17:33
14:17:33  Traceback:
14:17:33   mismatch 'stdout'
14:17:33
14:17:33   assert reference_output == test_output failed:
14:17:33
14:17:33    'https://api....0%3A00%3A00\n' == 'https://api....0%3A00%3A00\n'
14:17:33    - https://api.weather.gc.ca/collections/climate-daily/items?CLIMATE_IDENTIFIER=8201410&datetime=1990-01-01+00%3A00%3A00%2F1991-01-01+00%3A00%3A00
14:17:33    + https://api.weather.gc.ca//collections/climate-daily/items?CLIMATE_IDENTIFIER=8201410&datetime=1990-01-01+00%3A00%3A00%2F1991-01-01+00%3A00%3A00
14:17:33    ?                          +
```
@huard huard merged commit 8d40d07 into master Jun 1, 2023
2 checks passed
@huard huard deleted the fix_climex branch June 1, 2023 15:19
tlvu added a commit to Ouranosinc/PAVICS-e2e-workflow-tests that referenced this pull request Jun 1, 2023
… and latest of everything else (#115)

## Changes
- Jenkins: add RavenPy repo
- Re-organize tutorial notebooks on PAVICS: dropped `esgf-compute-api`
examples and group all Raven notebooks (RavenWPS and RavenPy) into one
folder `raven`.
- Jupyter env changes:
  - Update to python `3.9`, from `3.8`
- Adds `esgf-pyclient` for esgf-dap.ipynb
(https://github.com/Ouranosinc/pavics-sdi/pull/269)
- Adds `xncml` for gen_catalog refactoring
(https://github.com/Ouranosinc/pavics-vdb/pull/46)
- Adds Globus Personnal Connect to be able to transfer big files in and
out of the Jupyter env
- Fixes annoying harmless error `ERROR 1: PROJ:
proj_create_from_database: Open of /opt/conda/envs/birdy/share/proj
failed`
- Existing `intake-esm` pin:
https://github.com/Ouranosinc/PAVICS-e2e-workflow-tests/issues/109
  - Shrink image by almost 2G
  - Relevant changes (alphabetical order):
```diff
<   - birdy=0.8.1=pyh6c4a22f_1
>   - birdy=0.8.4=pyh1a96a4e_0

<   - cf_xarray=0.7.5=pyhd8ed1ab_0
>   - cf_xarray=0.8.0=pyhd8ed1ab_0

<   - clisops=0.9.3=pyh1a96a4e_0
>   - clisops=0.9.6=pyh1a96a4e_0

<   - dask=2022.11.1=pyhd8ed1ab_0
>   - dask=2023.5.1=pyhd8ed1ab_0

<   - esmf=8.2.0=mpi_mpich_h5a1934d_102
<   - esmpy=8.2.0=mpi_mpich_py38h9147699_101
>   - esmf=8.4.0=mpi_mpich_hc592774_104
>   - esmpy=8.4.0=mpi_mpich_py39h3088dd8_102

<   - fiona=1.8.22=py38h85a5e0f_5
>   - fiona=1.9.1=py39hbc5ff6d_0

<   - flox=0.6.4=pyhd8ed1ab_0
>   - flox=0.7.2=pyhd8ed1ab_0

<   - gdal=3.6.0=py38h58634bd_13
>   - gdal=3.6.2=py39hc6cd174_6

<   - owslib=0.27.2=pyhd8ed1ab_1
>   - owslib=0.28.1=pyhd8ed1ab_0

# new
>   - pyogrio=0.5.1=py39hbc5ff6d_0

<   - python=3.8.16=he550d4f_1_cpython
>   - python=3.9.16=h2782a2a_0_cpython

<   - raven-hydro=3.0.4.322=ha46ed4c_2
<   - ravenpy=0.9.0=pyha21a80b_0
>   - raven-hydro=0.2.1=py39h8e2dbb5_1
>   - ravenpy=0.12.0=py39hf3d152e_2

<   - rioxarray=0.13.1=pyhd8ed1ab_0
>   - rioxarray=0.14.1=pyhd8ed1ab_0

<   - roocs-utils=0.6.3=pyh1a96a4e_0
>   - roocs-utils=0.6.4=pyh1a96a4e_0

# new
>   - seaborn=0.12.2=hd8ed1ab_0

<   - xarray=2022.10.0=pyhd8ed1ab_0
>   - xarray=2023.1.0=pyhd8ed1ab_0

<   - xclim=0.39.0=pyhd8ed1ab_0
>   - xclim=0.43.0=py39hf3d152e_1

<   - xesmf=0.6.3=pyhd8ed1ab_1
>   - xesmf=0.7.1=pyhd8ed1ab_0

# new 
>  - hsclient==0.3.3

```

## Test

- Deployed as "beta" image in production for bokeh visualization
performance regression testing.
- Manual test notebook
https://github.com/Ouranosinc/PAVICS-landing/blob/master/content/notebooks/climate_indicators/PAVICStutorial_ClimateDataAnalysis-5Visualization.ipynb
for bokeh visualization performance and it looks fine.
- Jenkins build, all passed:

[job-PAVICS-e2e-workflow-tests-new-docker-build-198-consoleText.txt](https://github.com/Ouranosinc/PAVICS-e2e-workflow-tests/files/11621190/job-PAVICS-e2e-workflow-tests-new-docker-build-198-consoleText.txt)

[ravenpy-job-PAVICS-e2e-workflow-tests-new-docker-build-200-consoleText.txt](https://github.com/Ouranosinc/PAVICS-e2e-workflow-tests/files/11621191/ravenpy-job-PAVICS-e2e-workflow-tests-new-docker-build-200-consoleText.txt)




## Related Issue / Discussion

- Matching notebook fixes:
  - Pavics-sdi: https://github.com/Ouranosinc/pavics-sdi/pull/281
  - Finch: https://github.com/bird-house/finch/pull/275
  - PAVICS-landing: https://github.com/Ouranosinc/PAVICS-landing/pull/64
  - RavenPy: https://github.com/CSHS-CWRA/RavenPy/pull/287

- Deployment to PAVICS:
https://github.com/bird-house/birdhouse-deploy/pull/332

- Jenkins-config changes for new RavenPy notebooks:
https://github.com/Ouranosinc/jenkins-config/pull/15

- Other issues found while working on this one
  - https://github.com/Ouranosinc/PAVICS-landing/issues/66
  - https://github.com/Ouranosinc/PAVICS-landing/issues/65

## Additional Information

Full diff conda env export:

[221130-update230403-230530-1-conda-env-export.diff.txt](https://github.com/Ouranosinc/PAVICS-e2e-workflow-tests/files/11621128/221130-update230403-230530-1-conda-env-export.diff.txt)
```diff
9,11c9,12
<   - affine=2.3.1=pyhd8ed1ab_0
<   - aiobotocore=2.4.0=pyhd8ed1ab_0
<   - aiohttp=3.8.3=py38h0a891b7_1
---
>   - affine=2.4.0=pyhd8ed1ab_0
>   - aiobotocore=2.5.0=pyhd8ed1ab_0
>   - aiofiles=22.1.0=pyhd8ed1ab_0
>   - aiohttp=3.8.4=py39h72bdee0_0
14c15,16
<   - alembic=1.8.1=pyhd8ed1ab_0
---
>   - aiosqlite=0.19.0=pyhd8ed1ab_0
>   - alembic=1.11.1=pyhd8ed1ab_0
16,18c18,20
<   - altair=4.2.0=pyhd8ed1ab_1
<   - ansi2html=1.8.0=py38h578d9bd_1
<   - anyio=3.6.2=pyhd8ed1ab_0
---
>   - altair=5.0.1=pyhd8ed1ab_0
>   - ansi2html=1.8.0=py39hf3d152e_1
>   - anyio=3.6.1=pyhd8ed1ab_1
22,23c24
<   - argon2-cffi-bindings=21.2.0=py38h0a891b7_3
<   - arrow-cpp=11.0.0=ha770c72_9_cpu
---
>   - argon2-cffi-bindings=21.2.0=py39hb9d737c_3
26c27
<   - asttokens=2.2.0=pyhd8ed1ab_0
---
>   - asttokens=2.2.1=pyhd8ed1ab_0
30,44c31,45
<   - attrs=22.1.0=pyh71513ae_1
<   - aws-c-auth=0.6.26=hf365957_1
<   - aws-c-cal=0.5.21=h48707d8_2
<   - aws-c-common=0.8.14=h0b41bf4_0
<   - aws-c-compression=0.2.16=h03acc5a_5
<   - aws-c-event-stream=0.2.20=h00877a2_4
<   - aws-c-http=0.7.6=hf342b9f_0
<   - aws-c-io=0.13.19=h5b20300_3
<   - aws-c-mqtt=0.8.6=hc4349f7_12
<   - aws-c-s3=0.2.7=h909e904_1
<   - aws-c-sdkutils=0.1.8=h03acc5a_0
<   - aws-checksums=0.1.14=h03acc5a_5
<   - aws-crt-cpp=0.19.8=hf7fbfca_12
<   - aws-sdk-cpp=1.10.57=h17c43bd_8
<   - babel=2.11.0=pyhd8ed1ab_0
---
>   - attrs=23.1.0=pyh71513ae_1
>   - aws-c-auth=0.6.27=he072965_1
>   - aws-c-cal=0.5.26=hf677bf3_1
>   - aws-c-common=0.8.19=hd590300_0
>   - aws-c-compression=0.2.16=hbad4bc6_7
>   - aws-c-event-stream=0.2.20=hb4b372c_7
>   - aws-c-http=0.7.7=h2632f9a_4
>   - aws-c-io=0.13.21=h9fef7b8_5
>   - aws-c-mqtt=0.8.11=h2282364_1
>   - aws-c-s3=0.3.0=hcb5a9b2_2
>   - aws-c-sdkutils=0.1.9=hbad4bc6_2
>   - aws-checksums=0.1.14=hbad4bc6_7
>   - aws-crt-cpp=0.20.2=he0fdcb3_0
>   - aws-sdk-cpp=1.10.57=h059227d_13
>   - babel=2.12.1=pyhd8ed1ab_1
48d48
<   - backports.zoneinfo=0.2.1=py38h0a891b7_7
50,51c50,51
<   - bcrypt=3.2.2=py38h0a891b7_1
<   - beautifulsoup4=4.11.1=pyha770c72_0
---
>   - bcrypt=3.2.2=py39hb9d737c_1
>   - beautifulsoup4=4.12.2=pyha770c72_0
53,56c53,56
<   - birdy=0.8.1=pyh6c4a22f_1
<   - bleach=5.0.1=pyhd8ed1ab_0
<   - blinker=1.5=pyhd8ed1ab_0
<   - blosc=1.21.3=hafa529b_0
---
>   - birdy=0.8.4=pyh1a96a4e_0
>   - bleach=6.0.0=pyhd8ed1ab_0
>   - blinker=1.6.2=pyhd8ed1ab_0
>   - blosc=1.21.4=h0f2a231_0
58,62c58,62
<   - boltons=21.0.0=pyhd8ed1ab_0
<   - boost-cpp=1.78.0=h75c5d50_1
<   - boto3=1.24.59=pyhd8ed1ab_0
<   - botocore=1.27.59=pyhd8ed1ab_0
<   - bottleneck=1.3.5=py38h26c90d9_1
---
>   - boltons=23.0.0=pyhd8ed1ab_0
>   - boost-cpp=1.78.0=h5adbc97_2
>   - boto3=1.26.76=pyhd8ed1ab_0
>   - botocore=1.29.76=pyhd8ed1ab_0
>   - bottleneck=1.3.7=py39h389d5f1_0
66,67c66
<   - brotli-python=1.0.9=py38hfa26641_8
<   - brotlipy=0.7.0=py38h0a891b7_1005
---
>   - brotlipy=0.7.0=py39hb9d737c_1005
70,72c69,71
<   - c-ares=1.18.1=h7f98852_0
<   - c-blosc2=2.5.0=h7a311fb_0
<   - ca-certificates=2022.12.7=ha878542_0
---
>   - c-ares=1.19.1=hd590300_0
>   - c-blosc2=2.9.2=hb4ffafa_0
>   - ca-certificates=2023.5.7=hbcca054_0
75c74
<   - cachetools=5.2.0=pyhd8ed1ab_0
---
>   - cachetools=5.3.0=pyhd8ed1ab_0
77c76
<   - cartopy=0.21.0=py38hf6c3373_3
---
>   - cartopy=0.21.1=py39h6e7ad6e_0
80,82c79,81
<   - cdms2=3.1.5=py38hc1ef740_14
<   - cdtime=3.1.4=py38hc54c017_7
<   - certifi=2022.12.7=pyhd8ed1ab_0
---
>   - cdms2=3.1.5=py39h36de48d_15
>   - cdtime=3.1.4=py39he83c29a_7
>   - certifi=2023.5.7=pyhd8ed1ab_0
84,86c83,85
<   - cf_xarray=0.7.5=pyhd8ed1ab_0
<   - cffi=1.15.1=py38h4a40e3a_2
<   - cfgrib=0.9.10.3=pyhd8ed1ab_0
---
>   - cf_xarray=0.8.0=pyhd8ed1ab_0
>   - cffi=1.15.1=py39he91dace_3
>   - cfgrib=0.9.10.4=pyhd8ed1ab_0
89,90c88,89
<   - cftime=1.6.2=py38h26c90d9_1
<   - charls=2.3.4=h9c3ff4c_0
---
>   - cftime=1.6.2=py39h2ae25f5_1
>   - charls=2.4.2=h59595ed_0
96,97c95,96
<   - clisops=0.9.3=pyh1a96a4e_0
<   - cloudpickle=2.2.0=pyhd8ed1ab_0
---
>   - clisops=0.9.6=pyh1a96a4e_0
>   - cloudpickle=2.2.1=pyhd8ed1ab_0
100,105c99,104
<   - commonmark=0.9.1=py_0
<   - configurable-http-proxy=4.5.3=he2f69ee_3
<   - contourpy=1.0.6=py38h43d8883_0
<   - coverage=6.5.0=py38h0a891b7_1
<   - cryptography=40.0.1=py38h3d167d9_0
<   - curl=7.88.1=hdc1c0ab_1
---
>   - comm=0.1.3=pyhd8ed1ab_0
>   - configurable-http-proxy=4.5.4=he2f69ee_2
>   - contourpy=1.0.7=py39h4b4f3f3_0
>   - coverage=7.2.7=py39hd1e30aa_0
>   - cryptography=40.0.2=py39h079d5ae_0
>   - curl=8.1.2=h409715c_0
107,111c106,110
<   - cytoolz=0.12.0=py38h0a891b7_1
<   - dash=2.7.0=pyhd8ed1ab_0
<   - dask=2022.11.1=pyhd8ed1ab_0
<   - dask-core=2022.11.1=pyhd8ed1ab_0
<   - dask-labextension=6.0.0=pyhd8ed1ab_0
---
>   - cytoolz=0.12.0=py39hb9d737c_1
>   - dash=2.9.3=pyhd8ed1ab_2
>   - dask=2023.5.1=pyhd8ed1ab_0
>   - dask-core=2023.5.1=pyhd8ed1ab_0
>   - dask-labextension=6.1.0=pyhd8ed1ab_0
113c112
<   - datashader=0.14.3=pyh1a96a4e_0
---
>   - datashader=0.14.4=pyh1a96a4e_0
115c114
<   - dav1d=1.0.0=h166bdaf_1
---
>   - dav1d=1.2.0=hd590300_0
117c116
<   - debugpy=1.6.4=py38hfa26641_0
---
>   - debugpy=1.6.7=py39h227be39_0
122c121
<   - distarray=2.12.2=pyhd8ed1ab_2
---
>   - distarray=2.12.2=pyh050c7b8_4
124c123
<   - distributed=2022.11.1=pyhd8ed1ab_0
---
>   - distributed=2023.5.1=pyhd8ed1ab_0
127,128c126,127
<   - eccodes=2.27.0=h164a9dd_0
<   - elfutils=0.186=he364ef2_0
---
>   - eccodes=2.28.0=h7513371_1
>   - elfutils=0.189=hde5d1a3_0
133,135c132,135
<   - esmf=8.2.0=mpi_mpich_h5a1934d_102
<   - esmpy=8.2.0=mpi_mpich_py38h9147699_101
<   - exceptiongroup=1.0.4=pyhd8ed1ab_0
---
>   - esmf=8.4.0=mpi_mpich_hc592774_104
>   - esmpy=8.4.0=mpi_mpich_py39h3088dd8_102
>   - exceptiongroup=1.1.1=pyhd8ed1ab_0
>   - execnet=1.9.0=pyhd8ed1ab_0
137c137
<   - expat=2.5.0=h27087fc_0
---
>   - expat=2.5.0=hcb278e6_1
140,148c140,147
<   - fftw=3.3.10=nompi_hf0379b8_105
<   - filelock=3.8.0=pyhd8ed1ab_0
<   - findlibs=0.0.2=pyhd8ed1ab_0
<   - fiona=1.8.22=py38h85a5e0f_5
<   - flask=2.2.2=pyhd8ed1ab_0
<   - flask-compress=1.13=pyhd8ed1ab_0
<   - flit-core=3.8.0=pyhd8ed1ab_0
<   - flox=0.6.4=pyhd8ed1ab_0
<   - folium=0.13.0=pyhd8ed1ab_0
---
>   - fftw=3.3.10=nompi_hc118613_107
>   - filelock=3.12.0=pyhd8ed1ab_0
>   - findlibs=0.0.5=pyhd8ed1ab_0
>   - fiona=1.9.1=py39hbc5ff6d_0
>   - flask=2.3.2=pyhd8ed1ab_0
>   - flit-core=3.9.0=pyhd8ed1ab_0
>   - flox=0.7.2=pyhd8ed1ab_0
>   - folium=0.14.0=pyhd8ed1ab_0
153c152
<   - fontconfig=2.14.1=hc2a2eb6_0
---
>   - fontconfig=2.14.2=h14ed4e7_0
156c155
<   - fonttools=4.38.0=py38h0a891b7_1
---
>   - fonttools=4.39.4=py39hd1e30aa_0
160,161c159,160
<   - frozenlist=1.3.3=py38h0a891b7_0
<   - fsspec=2022.11.0=pyhd8ed1ab_0
---
>   - frozenlist=1.3.3=py39hb9d737c_0
>   - fsspec=2023.5.0=pyh1a96a4e_0
163c162
<   - future=0.18.2=pyhd8ed1ab_6
---
>   - future=0.18.3=pyhd8ed1ab_0
165,167c164,166
<   - gcsfs=2022.11.0=pyhd8ed1ab_0
<   - gdal=3.6.0=py38h58634bd_13
<   - geckodriver=0.32.0=h4b87306_0
---
>   - gcsfs=2023.5.0=pyhd8ed1ab_0
>   - gdal=3.6.2=py39hc6cd174_6
>   - geckodriver=0.33.0=hd2f7af9_0
169,170c168,169
<   - geopandas=0.12.1=pyhd8ed1ab_1
<   - geopandas-base=0.12.1=pyha770c72_1
---
>   - geopandas=0.13.0=pyhd8ed1ab_0
>   - geopandas-base=0.13.0=pyha770c72_0
173,175c172,174
<   - geotiff=1.7.1=ha76d385_4
<   - geoviews=1.9.5=pyhd8ed1ab_0
<   - geoviews-core=1.9.5=pyha770c72_0
---
>   - geotiff=1.7.1=h7a142b4_6
>   - geoviews=1.9.6=pyhd8ed1ab_0
>   - geoviews-core=1.9.6=pyha770c72_0
178c177
<   - giflib=5.2.1=h36c2ea0_2
---
>   - giflib=5.2.1=h0b41bf4_3
180,182c179,181
<   - gitpython=3.1.29=pyhd8ed1ab_0
<   - glib=2.74.1=h6239696_1
<   - glib-tools=2.74.1=h6239696_1
---
>   - gitpython=3.1.31=pyhd8ed1ab_0
>   - glib=2.76.3=hfc55251_0
>   - glib-tools=2.76.3=hfc55251_0
185,187c184,186
<   - google-api-core=2.10.2=pyhd8ed1ab_0
<   - google-auth=2.14.1=pyh1a96a4e_0
<   - google-auth-oauthlib=0.7.1=pyhd8ed1ab_0
---
>   - google-api-core=2.11.0=pyhd8ed1ab_0
>   - google-auth=2.19.0=pyh1a96a4e_0
>   - google-auth-oauthlib=1.0.0=pyhd8ed1ab_0
189,198c188,197
<   - google-cloud-storage=2.6.0=pyh1a96a4e_0
<   - google-crc32c=1.1.2=py38h57c428a_4
<   - google-resumable-media=2.4.0=pyhd8ed1ab_0
<   - googleapis-common-protos=1.57.0=pyhd8ed1ab_3
<   - greenlet=2.0.1=py38hfa26641_0
<   - grpc-cpp=1.51.1=h27aab58_3
<   - grpcio=1.51.1=py38h8dc9893_3
<   - gst-plugins-base=1.21.2=h3e40eee_0
<   - gstreamer=1.21.2=hd4edc92_0
<   - gstreamer-orc=0.4.33=h166bdaf_0
---
>   - google-cloud-storage=2.9.0=pyh1a96a4e_0
>   - google-crc32c=1.1.2=py39h8db88ab_4
>   - google-resumable-media=2.5.0=pyhd8ed1ab_0
>   - googleapis-common-protos=1.57.1=pyhd8ed1ab_0
>   - graphite2=1.3.13=h58526e2_1001
>   - greenlet=2.0.2=py39h3d6467e_1
>   - grpcio=1.54.2=py39h227be39_2
>   - gst-plugins-base=1.22.0=h4243ec0_2
>   - gstreamer=1.22.0=h25f0c4b_2
>   - gstreamer-orc=0.4.34=hd590300_0
200,202c199,202
<   - h5netcdf=1.1.0=pyhd8ed1ab_0
<   - h5py=3.7.0=nompi_py38h7927eab_102
<   - haversine=2.7.0=pyhd8ed1ab_0
---
>   - h5netcdf=1.1.0=pyhd8ed1ab_1
>   - h5py=3.8.0=mpi_mpich_py39hadaddcd_0
>   - harfbuzz=6.0.0=h8e241bc_0
>   - haversine=2.8.0=pyhd8ed1ab_0
205,207c205,206
<   - heapdict=1.0.1=py_0
<   - holoviews=1.15.2=pyhd8ed1ab_0
<   - hvplot=0.8.2=pyhd8ed1ab_0
---
>   - holoviews=1.16.0=pyhd8ed1ab_0
>   - hvplot=0.8.3=pyhd8ed1ab_0
209c208
<   - identify=2.5.9=pyhd8ed1ab_0
---
>   - identify=2.5.24=pyhd8ed1ab_0
211,217c210,217
<   - imagecodecs=2022.9.26=py38hf74bd01_4
<   - imageio=2.22.4=pyhfa7a67d_1
<   - importlib-metadata=5.1.0=pyha770c72_0
<   - importlib_metadata=5.1.0=hd8ed1ab_0
<   - importlib_resources=5.10.0=pyhd8ed1ab_0
<   - iniconfig=1.1.1=pyh9f0ad1d_0
<   - intake=0.6.6=pyhd8ed1ab_0
---
>   - imagecodecs=2023.1.23=py39hd061359_0
>   - imageio=2.28.1=pyh24c5eb1_0
>   - importlib-metadata=6.6.0=pyha770c72_0
>   - importlib-resources=5.12.0=pyhd8ed1ab_0
>   - importlib_metadata=6.6.0=hd8ed1ab_0
>   - importlib_resources=5.12.0=pyhd8ed1ab_0
>   - iniconfig=2.0.0=pyhd8ed1ab_0
>   - intake=0.7.0=pyhd8ed1ab_0
221,222c221,222
<   - intake-xarray=0.6.1=pyhd8ed1ab_0
<   - ipykernel=6.17.1=pyh210e3f2_0
---
>   - intake-xarray=0.7.0=pyhd8ed1ab_0
>   - ipykernel=6.23.1=pyh210e3f2_0
224c224
<   - ipython=8.6.0=pyh41d4057_1
---
>   - ipython=8.13.2=pyh41d4057_0
226c226
<   - ipywidgets=8.0.2=pyhd8ed1ab_1
---
>   - ipywidgets=8.0.6=pyhd8ed1ab_0
228,229c228,229
<   - jack=1.9.21=he978b8e_1
<   - jasper=2.0.33=ha77e612_0
---
>   - jack=1.9.22=h11f4161_0
>   - jasper=2.0.33=h0ff4b12_1
234c234
<   - jpeg=9e=h166bdaf_2
---
>   - jpeg=9e=h0b41bf4_3
239,240c239,240
<   - jupyter=1.0.0=py38h578d9bd_7
<   - jupyter-archive=3.3.3=pyhd8ed1ab_0
---
>   - jupyter=1.0.0=py39hf3d152e_8
>   - jupyter-archive=3.3.4=pyhd8ed1ab_1
242,244c242,244
<   - jupyter-resource-usage=0.6.4=pyhd8ed1ab_0
<   - jupyter-server-mathjax=0.2.6=pyhc268e32_0
<   - jupyter-server-proxy=3.2.2=pyhd8ed1ab_0
---
>   - jupyter-resource-usage=0.7.1=pyhd8ed1ab_0
>   - jupyter-server-mathjax=0.2.6=pyh5bfe37b_1
>   - jupyter-server-proxy=4.0.0=pyhd8ed1ab_0
246,249c246,252
<   - jupyter_client=7.3.4=pyhd8ed1ab_0
<   - jupyter_console=6.4.4=pyhd8ed1ab_0
<   - jupyter_core=5.1.0=py38h578d9bd_0
<   - jupyter_server=1.23.3=pyhd8ed1ab_0
---
>   - jupyter_client=7.4.1=pyhd8ed1ab_0
>   - jupyter_console=6.6.3=pyhd8ed1ab_0
>   - jupyter_core=5.3.0=py39hf3d152e_0
>   - jupyter_events=0.6.3=pyhd8ed1ab_0
>   - jupyter_server=1.23.6=pyhd8ed1ab_0
>   - jupyter_server_fileid=0.9.0=pyhd8ed1ab_0
>   - jupyter_server_ydoc=0.8.0=pyhd8ed1ab_0
251,254c254,258
<   - jupyterhub=3.0.0=pyh2a2186d_1
<   - jupyterhub-base=3.0.0=pyh2a2186d_1
<   - jupyterlab=3.5.0=pyhd8ed1ab_0
<   - jupyterlab-git=0.40.1=pyhd8ed1ab_0
---
>   - jupyter_ydoc=0.2.3=pyhd8ed1ab_0
>   - jupyterhub=4.0.0=pyh2a2186d_0
>   - jupyterhub-base=4.0.0=pyh2a2186d_0
>   - jupyterlab=3.6.3=pyhd8ed1ab_0
>   - jupyterlab-git=0.41.0=pyhd8ed1ab_1
258,260c262,264
<   - jupyterlab_server=2.16.3=pyhd8ed1ab_0
<   - jupyterlab_widgets=3.0.3=pyhd8ed1ab_0
<   - jupytext=1.14.1=pyhd0ecf6b_0
---
>   - jupyterlab_server=2.22.1=pyhd8ed1ab_0
>   - jupyterlab_widgets=3.0.7=pyhd8ed1ab_1
>   - jupytext=1.14.5=pyhcff175f_0
264c268
<   - kiwisolver=1.4.4=py38h43d8883_1
---
>   - kiwisolver=1.4.4=py39hf939315_1
267,269c271,274
<   - lazy-object-proxy=1.8.0=py38h0a891b7_0
<   - lcms2=2.14=h6ed2654_0
<   - ld_impl_linux-64=2.39=hcc3a1bd_1
---
>   - lazy-object-proxy=1.9.0=py39h72bdee0_0
>   - lazy_loader=0.2=pyhd8ed1ab_0
>   - lcms2=2.15=hfd0df8a_0
>   - ld_impl_linux-64=2.40=h41732ed_0
271,275c276,280
<   - libabseil=20230125.0=cxx17_hcb278e6_1
<   - libaec=1.0.6=h9c3ff4c_0
<   - libarchive=3.5.2=hada088e_3
<   - libarrow=11.0.0=h33598ff_9_cpu
<   - libavif=0.11.1=h5cdd6b5_0
---
>   - libabseil=20230125.2=cxx17_h59595ed_2
>   - libaec=1.0.6=hcb278e6_1
>   - libarchive=3.6.2=h3d51595_0
>   - libarrow=10.0.1=hf815326_25_cpu
>   - libavif=0.11.1=hff004cb_1
280c285
<   - libcap=2.66=ha37c62d_0
---
>   - libcap=2.67=he9d0100_0
282,285c287,290
<   - libcdms=3.1.2=h2973bc7_118
<   - libcf=1.0.3=py38h0c3d773_115
<   - libclang=15.0.6=default_h2e3cab8_0
<   - libclang13=15.0.6=default_h3a83d3e_0
---
>   - libcdms=3.1.2=hf94f14b_119
>   - libcf=1.0.3=py39h6c807ef_115
>   - libclang=15.0.7=default_h7634d5b_2
>   - libclang13=15.0.7=default_h9986a30_2
288,289c293
<   - libcurl=7.88.1=hdc1c0ab_1
<   - libdap4=3.20.6=hd7c4107_2
---
>   - libcurl=8.1.2=h409715c_0
291c295
<   - libdeflate=1.14=h166bdaf_0
---
>   - libdeflate=1.17=h0b41bf4_0
297a302
>   - libexpat=2.5.0=hcb278e6_1
302c307
<   - libgdal=3.6.0=h2f87c3e_13
---
>   - libgdal=3.6.2=h8c90c07_6
305c310
<   - libglib=2.74.1=h606061b_1
---
>   - libglib=2.76.3=hebfc3b9_0
308,310c313,315
<   - libgoogle-cloud=2.8.0=h3c06191_0
<   - libgpg-error=1.45=hc0c96e0_0
<   - libgrpc=1.51.1=hcf146ea_3
---
>   - libgoogle-cloud=2.10.1=hac9eb74_1
>   - libgpg-error=1.46=h620e276_0
>   - libgrpc=1.54.2=hb20ce57_2
315,317c320,323
<   - libllvm11=11.1.0=he0ac6c6_5
<   - libllvm15=15.0.6=h63197d8_0
<   - libmicrohttpd=0.9.75=h2603550_1
---
>   - libllvm14=14.0.6=hcd5def8_2
>   - libllvm15=15.0.7=hadd5161_1
>   - libllvm16=16.0.1=hadd5161_0
>   - libmicrohttpd=0.9.76=h87ba234_0
320a327
>   - libnuma=2.0.16=h0b41bf4_1
329c336
<   - libsndfile=1.1.0=h27087fc_0
---
>   - libsndfile=1.2.0=hb75c966_0
332,333c339,340
<   - libspatialite=5.0.1=h7c8129e_22
<   - libsqlite=3.40.0=h753d276_0
---
>   - libspatialite=5.0.1=h221c8f1_23
>   - libsqlite=3.42.0=h2797004_0
336c343
<   - libsystemd0=252=h2a991cd_0
---
>   - libsystemd0=253=h8c4010b_1
338,341c345,348
<   - libthrift=0.18.0=h5e4af38_0
<   - libtiff=4.4.0=h55922b4_4
<   - libtool=2.4.6=h9c3ff4c_1008
<   - libudev1=252=h166bdaf_0
---
>   - libthrift=0.18.1=h5e4af38_0
>   - libtiff=4.5.0=h6adf6a1_2
>   - libtool=2.4.7=h27087fc_0
>   - libudev1=253=h0b41bf4_1
344c351
<   - libuuid=2.32.1=h7f98852_1000
---
>   - libuuid=2.38.1=h0b41bf4_0
347c354
<   - libwebp-base=1.2.4=h166bdaf_0
---
>   - libwebp-base=1.3.0=h0b41bf4_0
349,350c356,357
<   - libxkbcommon=1.0.3=he3ba5ed_0
<   - libxml2=2.10.3=h7463322_0
---
>   - libxkbcommon=1.5.0=h79f4944_1
>   - libxml2=2.10.3=hca2bb57_4
355c362,363
<   - llvmlite=0.39.1=py38h38d86a4_1
---
>   - llvmlite=0.40.0=py39h174d805_0
>   - lmoments3=1.0.5=pyhd8ed1ab_0
357,360c365,368
<   - loguru=0.6.0=py38h578d9bd_2
<   - lxml=4.9.1=py38ha9ef780_1
<   - lz4=4.0.2=py38h1bf946c_0
<   - lz4-c=1.9.3=h9c3ff4c_1
---
>   - loguru=0.7.0=py39hf3d152e_0
>   - lxml=4.9.2=py39h14694de_0
>   - lz4=4.3.2=py39h724f13c_0
>   - lz4-c=1.9.4=hcb278e6_0
363,369c371,377
<   - mamba_gator=5.2.0=pyhd8ed1ab_0
<   - mapclassify=2.4.3=pyhd8ed1ab_0
<   - markdown=3.4.1=pyhd8ed1ab_0
<   - markdown-it-py=2.1.0=pyhd8ed1ab_0
<   - markupsafe=2.1.1=py38h0a891b7_2
<   - matplotlib=3.6.2=py38h578d9bd_0
<   - matplotlib-base=3.6.2=py38hb021067_0
---
>   - mamba_gator=5.2.1=pyhd8ed1ab_0
>   - mapclassify=2.5.0=pyhd8ed1ab_1
>   - markdown=3.4.3=pyhd8ed1ab_0
>   - markdown-it-py=2.2.0=pyhd8ed1ab_0
>   - markupsafe=2.1.2=py39h72bdee0_0
>   - matplotlib=3.7.1=py39hf3d152e_0
>   - matplotlib-base=3.7.1=py39he190548_0
371c379
<   - mdit-py-plugins=0.3.1=pyhd8ed1ab_0
---
>   - mdit-py-plugins=0.3.5=pyhd8ed1ab_0
374,376c382,384
<   - mesalib=21.2.5=h0e4506f_3
<   - mistune=2.0.4=pyhd8ed1ab_0
<   - mpg123=1.30.2=h27087fc_1
---
>   - mesalib=23.0.2=h3855f93_0
>   - mistune=2.0.5=pyhd8ed1ab_0
>   - mpg123=1.31.3=hcb278e6_0
378c386
<   - mpi4py=3.1.4=py38h97ac3a3_0
---
>   - mpi4py=3.1.4=py39h32b9844_0
380,381c388,389
<   - msgpack-python=1.0.4=py38h43d8883_1
<   - multidict=6.0.2=py38h0a891b7_2
---
>   - msgpack-python=1.0.5=py39h4b4f3f3_0
>   - multidict=6.0.4=py39h72bdee0_0
383,384c391,392
<   - multiprocess=0.70.14=py38h0a891b7_3
<   - munch=2.5.0=py_0
---
>   - multiprocess=0.70.14=py39hb9d737c_3
>   - munch=3.0.0=pyhd8ed1ab_0
387,395c395,403
<   - mysql-common=8.0.32=ha901b37_1
<   - mysql-libs=8.0.32=hd7da12d_1
<   - nbclassic=0.4.8=pyhd8ed1ab_0
<   - nbclient=0.7.2=pyhd8ed1ab_0
<   - nbconvert=7.2.5=pyhd8ed1ab_0
<   - nbconvert-core=7.2.5=pyhd8ed1ab_0
<   - nbconvert-pandoc=7.2.5=pyhd8ed1ab_0
<   - nbdime=3.1.1=pyhd8ed1ab_0
<   - nbformat=5.7.0=pyhd8ed1ab_0
---
>   - mysql-common=8.0.32=hf1915f5_2
>   - mysql-libs=8.0.32=hca2cd23_2
>   - nbclassic=1.0.0=pyhb4ecaf3_1
>   - nbclient=0.7.4=pyhd8ed1ab_0
>   - nbconvert=7.4.0=pyhd8ed1ab_0
>   - nbconvert-core=7.4.0=pyhd8ed1ab_0
>   - nbconvert-pandoc=7.4.0=pyhd8ed1ab_0
>   - nbdime=3.2.1=pyhd8ed1ab_0
>   - nbformat=5.8.0=pyhd8ed1ab_0
402,403c410,411
<   - netcdf-fortran=4.6.0=mpi_mpich_hd09bd1e_1
<   - netcdf4=1.6.2=nompi_py38h2250339_100
---
>   - netcdf-fortran=4.6.0=mpi_mpich_h1e13492_2
>   - netcdf4=1.6.2=nompi_py39hfaa66c4_100
405,406c413,414
<   - networkx=2.8.8=pyhd8ed1ab_0
<   - nodeenv=1.7.0=pyhd8ed1ab_0
---
>   - networkx=3.1=pyhd8ed1ab_0
>   - nodeenv=1.8.0=pyhd8ed1ab_0
408,409c416,417
<   - notebook=6.5.2=pyha770c72_1
<   - notebook-shim=0.2.2=pyhd8ed1ab_0
---
>   - notebook=6.5.4=pyha770c72_0
>   - notebook-shim=0.2.3=pyhd8ed1ab_0
411,415c419,423
<   - nss=3.82=he02c5a1_0
<   - numba=0.56.4=py38h9a4aae9_0
<   - numcodecs=0.10.2=py38hfa26641_0
<   - numpy=1.23.5=py38h7042d01_0
<   - numpy_groupies=0.9.20=pyhd8ed1ab_0
---
>   - nss=3.89=he45b914_0
>   - numba=0.57.0=py39hb75a051_0
>   - numcodecs=0.11.0=py39h227be39_1
>   - numpy=1.23.5=py39h3d75532_0
>   - numpy_groupies=0.9.22=pyhd8ed1ab_0
418,421c426,428
<   - openjpeg=2.5.0=h7d73246_1
<   - openssl=3.1.0=h0b41bf4_0
<   - orc=1.8.2=hfdbbad2_2
<   - ostrich=21.03.16=h4bd325d_1
---
>   - openjpeg=2.5.0=hfec8fc6_2
>   - openssl=3.1.1=hd590300_0
>   - orc=1.8.3=hfdbbad2_0
423c430
<   - owslib=0.27.2=pyhd8ed1ab_1
---
>   - owslib=0.28.1=pyhd8ed1ab_0
425c432
<   - packaging=21.3=pyhd8ed1ab_0
---
>   - packaging=23.1=pyhd8ed1ab_0
427,428c434,435
<   - pandas=1.3.5=py38h43a58ef_0
<   - pandoc=2.19.2=h32600fe_1
---
>   - pandas=1.3.5=py39hde0f152_0
>   - pandoc=2.19.2=h32600fe_2
430,433c437,440
<   - panel=0.14.1=pyhd8ed1ab_0
<   - param=1.12.2=pyh6c4a22f_0
<   - paramiko=2.12.0=pyhd8ed1ab_0
<   - parquet-cpp=1.5.1=2
---
>   - panel=0.14.4=pyhd8ed1ab_0
>   - parallelio=2.5.10=mpi_mpich_h862c5c2_100
>   - param=1.13.0=pyh1a96a4e_0
>   - paramiko=3.2.0=pyhd8ed1ab_0
435c442
<   - partd=1.3.0=pyhd8ed1ab_0
---
>   - partd=1.4.0=pyhd8ed1ab_0
438d444
<   - pcre=8.45=h9c3ff4c_0
442,444c448,450
<   - pillow=9.2.0=py38h9eb91d8_3
<   - pint=0.20.1=pyhd8ed1ab_0
<   - pip=22.3.1=pyhd8ed1ab_0
---
>   - pillow=9.4.0=py39h2320bf1_1
>   - pint=0.21=pyhd8ed1ab_0
>   - pip=23.1.2=pyhd8ed1ab_0
447,448c453,454
<   - platformdirs=2.5.2=pyhd8ed1ab_1
<   - plotly=5.11.0=pyhd8ed1ab_0
---
>   - platformdirs=3.5.1=pyhd8ed1ab_0
>   - plotly=5.14.1=pyhd8ed1ab_0
451,453c457,459
<   - pooch=1.6.0=pyhd8ed1ab_0
<   - poppler=22.11.0=h92391eb_0
<   - poppler-data=0.4.11=hd8ed1ab_0
---
>   - pooch=1.7.0=pyha770c72_3
>   - poppler=23.01.0=h091648b_0
>   - poppler-data=0.4.12=hd8ed1ab_0
457,461c463,467
<   - pre-commit=2.20.0=py38h578d9bd_1
<   - proj=9.1.0=h93bde94_0
<   - prometheus_client=0.15.0=pyhd8ed1ab_0
<   - prompt-toolkit=3.0.33=pyha770c72_0
<   - prompt_toolkit=3.0.33=hd8ed1ab_0
---
>   - pre-commit=3.3.2=pyha770c72_0
>   - proj=9.1.1=h8ffa02c_2
>   - prometheus_client=0.17.0=pyhd8ed1ab_0
>   - prompt-toolkit=3.0.38=pyha770c72_0
>   - prompt_toolkit=3.0.38=hd8ed1ab_0
463c469
<   - protobuf=4.21.12=py38h8dc9893_0
---
>   - protobuf=4.21.12=py39h227be39_0
465c471
<   - psutil=5.9.4=py38h0a891b7_0
---
>   - psutil=5.9.5=py39h72bdee0_0
468c474,476
<   - pulseaudio=16.1=h126f2b6_0
---
>   - pulseaudio=16.1=hcb278e6_3
>   - pulseaudio-client=16.1=h5195f5e_3
>   - pulseaudio-daemon=16.1=ha8d29e2_3
470c478
<   - pyarrow=11.0.0=py38hf05218d_9_cpu
---
>   - pyarrow=10.0.1=py39he4327e9_25_cpu
476,478c484,486
<   - pycurl=7.45.1=py38he9e1d38_3
<   - pydantic=1.10.2=py38h0a891b7_1
<   - pydap=3.3.0=pyhd8ed1ab_0
---
>   - pycurl=7.45.1=py39h9297c8b_3
>   - pydantic=1.10.8=py39hd1e30aa_0
>   - pydap=3.4.0=pyhd8ed1ab_0
480,482c488,491
<   - pygeos=0.13=py38hafd38ec_2
<   - pygments=2.13.0=pyhd8ed1ab_0
<   - pyjwt=2.6.0=pyhd8ed1ab_0
---
>   - pygeos=0.14=py39hc9151fd_0
>   - pygments=2.15.1=pyhd8ed1ab_0
>   - pyjwt=2.7.0=pyhd8ed1ab_0
>   - pymbolic=2022.2=pyhd8ed1ab_0
485c494,495
<   - pynacl=1.5.0=py38h0a891b7_2
---
>   - pynacl=1.5.0=py39hb9d737c_2
>   - pyogrio=0.5.1=py39hbc5ff6d_0
488,491c498,501
<   - pyproj=3.4.0=py38hce0a2d1_2
<   - pyqt=5.15.7=py38h7492b6b_2
<   - pyqt5-sip=12.11.0=py38hfa26641_2
<   - pyrsistent=0.19.2=py38h0a891b7_0
---
>   - pyproj=3.5.0=py39hf8a5840_0
>   - pyqt=5.15.7=py39h5c7b992_3
>   - pyqt5-sip=12.11.0=py39h227be39_3
>   - pyrsistent=0.19.3=py39h72bdee0_0
494,497c504,506
<   - pyston_lite=2.3.4=py38h0a891b7_1
<   - pyston_lite_autoload=2.3.4=pyh44b312d_1
<   - pytest=7.2.0=pyhd8ed1ab_2
<   - python=3.8.16=he550d4f_1_cpython
---
>   - pytest=7.3.1=pyhd8ed1ab_0
>   - pytest-xdist=3.3.1=pyhd8ed1ab_0
>   - python=3.9.16=h2782a2a_0_cpython
499,501c508,510
<   - python-eccodes=1.4.2=py38h26c90d9_1
<   - python-fastjsonschema=2.16.2=pyhd8ed1ab_0
<   - python-json-logger=2.0.1=pyh9f0ad1d_0
---
>   - python-eccodes=1.5.1=py39h389d5f1_0
>   - python-fastjsonschema=2.17.1=pyhd8ed1ab_0
>   - python-json-logger=2.0.7=pyhd8ed1ab_0
503,506c512,515
<   - python-tzdata=2022.7=pyhd8ed1ab_0
<   - python_abi=3.8=3_cp38
<   - pytz=2022.6=pyhd8ed1ab_0
<   - pytz-deprecation-shim=0.1.0.post0=py38h578d9bd_3
---
>   - python-tzdata=2023.3=pyhd8ed1ab_0
>   - python_abi=3.9=3_cp39
>   - pytools=2022.1.14=pyhd8ed1ab_0
>   - pytz=2023.3=pyhd8ed1ab_0
508,521c517,530
<   - pyviz_comms=2.2.1=pyhd8ed1ab_1
<   - pywavelets=1.3.0=py38h26c90d9_2
<   - pyyaml=6.0=py38h0a891b7_5
<   - pyzmq=24.0.1=py38hfc09fa9_1
<   - qhull=2020.2=h4bd325d_2
<   - qt-main=5.15.6=hf6cd601_5
<   - qtconsole=5.4.0=pyhd8ed1ab_0
<   - qtconsole-base=5.4.0=pyha770c72_0
<   - qtpy=2.3.0=pyhd8ed1ab_0
<   - rasterio=1.3.4=py38h485b76c_0
<   - raven-hydro=3.0.4.322=ha46ed4c_2
<   - ravenpy=0.9.0=pyha21a80b_0
<   - re2=2023.02.02=hcb278e6_0
<   - readline=8.1.2=h0f457ee_0
---
>   - pyviz_comms=2.3.0=pyhd8ed1ab_0
>   - pywavelets=1.4.1=py39h389d5f1_0
>   - pyyaml=6.0=py39hb9d737c_5
>   - pyzmq=25.0.2=py39h0be026e_0
>   - qt-main=5.15.8=h5d23da1_6
>   - qtconsole=5.4.3=pyhd8ed1ab_0
>   - qtconsole-base=5.4.3=pyha770c72_0
>   - qtpy=2.3.1=pyhd8ed1ab_0
>   - rasterio=1.3.6=py39h09b1985_0
>   - raven-hydro=0.2.1=py39h8e2dbb5_1
>   - ravenpy=0.12.0=py39hf3d152e_2
>   - rdma-core=28.9=h59595ed_1
>   - re2=2023.03.02=h8c504da_0
>   - readline=8.2=h8228510_1
523c532
<   - requests=2.28.1=pyhd8ed1ab_1
---
>   - requests=2.31.0=pyhd8ed1ab_0
528,530c537,540
<   - rich=12.6.0=pyhd8ed1ab_0
<   - rioxarray=0.13.1=pyhd8ed1ab_0
<   - roocs-utils=0.6.3=pyh1a96a4e_0
---
>   - rfc3339-validator=0.1.4=pyhd8ed1ab_0
>   - rfc3986-validator=0.1.1=pyh9f0ad1d_0
>   - rioxarray=0.14.1=pyhd8ed1ab_0
>   - roocs-utils=0.6.4=pyh1a96a4e_0
532,548c542,560
<   - rtree=1.0.1=py38h02d302b_1
<   - ruamel.yaml=0.17.21=py38h0a891b7_2
<   - ruamel.yaml.clib=0.2.7=py38h0a891b7_0
<   - s2n=1.3.41=h3358134_0
<   - s3fs=2022.11.0=pyhd8ed1ab_0
<   - s3transfer=0.6.0=pyhd8ed1ab_0
<   - scikit-image=0.19.3=py38h8f669ce_2
<   - scikit-learn=1.1.3=py38h4c4ba11_1
<   - scipy=1.8.1=py38h8ce737c_3
<   - scp=0.14.4=pyhd8ed1ab_0
<   - selenium=4.6.0=pyhd8ed1ab_0
<   - semver=2.13.0=pyh9f0ad1d_0
<   - send2trash=1.8.0=pyhd8ed1ab_0
<   - setuptools=59.8.0=py38h578d9bd_1
<   - shapely=1.8.5=py38hafd38ec_2
<   - simpervisor=0.4=pyhd8ed1ab_0
<   - sip=6.7.5=py38hfa26641_0
---
>   - rtree=1.0.1=py39hb102c33_1
>   - ruamel.yaml=0.17.30=py39hd1e30aa_0
>   - ruamel.yaml.clib=0.2.7=py39h72bdee0_1
>   - s2n=1.3.44=h06160fa_0
>   - s3fs=2023.5.0=pyhd8ed1ab_0
>   - s3transfer=0.6.1=pyhd8ed1ab_0
>   - scikit-image=0.20.0=py39h7c7b5a8_1
>   - scikit-learn=1.2.2=py39hc236052_2
>   - scipy=1.9.1=py39h8ba3f38_0
>   - scp=0.14.5=pyhd8ed1ab_0
>   - seaborn=0.12.2=hd8ed1ab_0
>   - seaborn-base=0.12.2=pyhd8ed1ab_0
>   - selenium=4.9.1=pyhd8ed1ab_0
>   - semver=3.0.0=pyhd8ed1ab_0
>   - send2trash=1.8.2=pyh41d4057_0
>   - setuptools=59.8.0=py39hf3d152e_1
>   - shapely=2.0.1=py39hc9151fd_0
>   - simpervisor=1.0.0=pyhd8ed1ab_0
>   - sip=6.7.9=py39h3d6467e_0
552c564
<   - snappy=1.1.9=hbd366e4_2
---
>   - snappy=1.1.10=h9fff704_0
557,560c569,572
<   - sparse=0.13.0=pyhd8ed1ab_0
<   - spotpy=1.6.1=pyhd8ed1ab_0
<   - sqlalchemy=1.4.44=py38h0a891b7_0
<   - sqlite=3.40.0=h4ff8645_0
---
>   - sparse=0.14.0=pyhd8ed1ab_0
>   - spotpy=1.6.2=pyhd8ed1ab_0
>   - sqlalchemy=2.0.15=py39hd1e30aa_0
>   - sqlite=3.42.0=h2c6b66d_0
562c574
<   - statsmodels=0.13.5=py38h26c90d9_2
---
>   - statsmodels=0.14.0=py39h0f8d45d_1
565,566c577,578
<   - tenacity=8.1.0=pyhd8ed1ab_0
<   - terminado=0.17.0=pyh41d4057_0
---
>   - tenacity=8.2.2=pyhd8ed1ab_0
>   - terminado=0.17.1=pyh41d4057_0
569c581
<   - tifffile=2022.10.10=pyhd8ed1ab_0
---
>   - tifffile=2023.4.12=pyhd8ed1ab_0
576,578c588,590
<   - tornado=6.1=py38h0a891b7_3
<   - tqdm=4.64.1=pyhd8ed1ab_0
<   - traitlets=5.6.0=pyhd8ed1ab_0
---
>   - tornado=6.3.2=py39hd1e30aa_0
>   - tqdm=4.65.0=pyhd8ed1ab_1
>   - traitlets=5.9.0=pyhd8ed1ab_0
580,589c592,602
<   - trio=0.21.0=py38h578d9bd_0
<   - trio-websocket=0.9.2=pyhd8ed1ab_0
<   - typing-extensions=4.4.0=hd8ed1ab_0
<   - typing_extensions=4.4.0=pyha770c72_0
<   - tzcode=2022g=h166bdaf_0
<   - tzdata=2022g=h191b570_0
<   - tzlocal=4.2=py38h578d9bd_2
<   - ujson=5.7.0=py38h8dc9893_0
<   - ukkonen=1.0.1=py38h43d8883_3
<   - unicodedata2=15.0.0=py38h0a891b7_0
---
>   - trio=0.22.0=py39hf3d152e_1
>   - trio-websocket=0.10.2=pyhd8ed1ab_0
>   - typing-extensions=4.6.2=hd8ed1ab_0
>   - typing_extensions=4.6.2=pyha770c72_0
>   - tzcode=2023c=h0b41bf4_0
>   - tzdata=2023c=h71feb2d_0
>   - tzlocal=5.0.1=py39hf3d152e_0
>   - ucx=1.14.1=hf587318_1
>   - ujson=5.7.0=py39h227be39_0
>   - ukkonen=1.0.1=py39hf939315_3
>   - unicodedata2=15.0.0=py39hb9d737c_0
591c604
<   - urllib3=1.26.13=pyhd8ed1ab_0
---
>   - urllib3=1.26.15=pyhd8ed1ab_0
593,594c606,607
<   - validators=0.18.2=pyhd3deb0d_0
<   - virtualenv=20.17.0=py38h578d9bd_0
---
>   - validators=0.20.0=pyhd8ed1ab_0
>   - virtualenv=20.23.0=pyhd8ed1ab_0
596,597c609,610
<   - watchdog=2.1.9=py38h578d9bd_1
<   - wcwidth=0.2.5=pyh9f0ad1d_2
---
>   - watchdog=3.0.0=py39hf3d152e_0
>   - wcwidth=0.2.6=pyhd8ed1ab_0
600,602c613,615
<   - websocket-client=1.4.2=pyhd8ed1ab_0
<   - websockets=10.4=py38h0a891b7_1
<   - werkzeug=2.2.2=pyhd8ed1ab_0
---
>   - websocket-client=1.5.2=pyhd8ed1ab_0
>   - websockets=11.0.3=py39hd1e30aa_0
>   - werkzeug=2.3.4=pyhd8ed1ab_0
604,606c617,619
<   - wheel=0.38.4=pyhd8ed1ab_0
<   - widgetsnbextension=4.0.3=pyhd8ed1ab_0
<   - wrapt=1.14.1=py38h0a891b7_1
---
>   - wheel=0.40.0=pyhd8ed1ab_0
>   - widgetsnbextension=4.0.7=pyhd8ed1ab_0
>   - wrapt=1.15.0=py39h72bdee0_0
608c621
<   - xarray=2022.10.0=pyhd8ed1ab_0
---
>   - xarray=2023.1.0=pyhd8ed1ab_0
614c627
<   - xclim=0.39.0=pyhd8ed1ab_0
---
>   - xclim=0.43.0=py39hf3d152e_1
616c629
<   - xesmf=0.6.3=pyhd8ed1ab_1
---
>   - xesmf=0.7.1=pyhd8ed1ab_0
618c631
<   - xeus-python=0.15.8=py38hfbd4bf9_1
---
>   - xeus-python=0.15.9=py39h7633fee_0
621c634
<   - xeus-zmq=1.0.2=h0541b36_2
---
>   - xeus-zmq=1.0.3=h0541b36_0
622a636
>   - xkeyboard-config=2.38=h0b41bf4_0
624c638
<   - xlsxwriter=3.0.3=pyhd8ed1ab_0
---
>   - xlsxwriter=3.1.2=pyhd8ed1ab_0
630,633c644,647
<   - xorg-libice=1.0.10=h7f98852_0
<   - xorg-libsm=1.2.3=hd9c2040_1000
<   - xorg-libx11=1.7.2=h7f98852_0
<   - xorg-libxau=1.0.9=h7f98852_0
---
>   - xorg-libice=1.1.1=hd590300_0
>   - xorg-libsm=1.2.4=h7391055_0
>   - xorg-libx11=1.8.4=h0b41bf4_0
>   - xorg-libxau=1.0.11=hd590300_0
636c650
<   - xorg-libxext=1.3.4=h7f98852_1
---
>   - xorg-libxext=1.3.4=h0b41bf4_2
644c658
<   - xorg-xextproto=7.3.0=h7f98852_1002
---
>   - xorg-xextproto=7.3.0=h0b41bf4_1003
647c661
<   - xrft=1.0.0=pyhd8ed1ab_0
---
>   - xrft=1.0.1=pyhd8ed1ab_0
649c663
<   - xyzservices=2022.9.0=pyhd8ed1ab_0
---
>   - xyzservices=2023.5.0=pyhd8ed1ab_1
650a665
>   - y-py=0.5.9=py39h50f1755_0
652,653c667,669
<   - yarl=1.8.1=py38h0a891b7_0
<   - zarr=2.13.3=pyhd8ed1ab_0
---
>   - yarl=1.9.2=py39hd1e30aa_0
>   - ypy-websocket=0.8.2=pyhd8ed1ab_0
>   - zarr=2.14.2=pyhd8ed1ab_0
656,657c672,673
<   - zict=2.2.0=pyhd8ed1ab_0
<   - zipp=3.11.0=pyhd8ed1ab_0
---
>   - zict=3.0.0=pyhd8ed1ab_0
>   - zipp=3.15.0=pyhd8ed1ab_0
659,660c675,676
<   - zlib-ng=2.0.6=h166bdaf_0
<   - zstd=1.5.2=h6239696_4
---
>   - zlib-ng=2.0.7=h0b41bf4_0
>   - zstd=1.5.2=h3eb15da_6
662,673c678,701
<     - astunparse==1.6.3
<     - colour==0.1.5
<     - geojson==2.5.0
<     - ipython-blocking==0.3.1
<     - jupyterlab-logout==0.5.0
<     - jupyterlab-tabular-data-editor==1.0.0
<     - jupyternotify==0.1.15
<     - pixiedust==1.1.19
<     - pytest-tornasync==0.6.0.post2
<     - xmltodict==0.13.0
<     - xncml==0.2
<     - xsdata==22.12
---
>       - arrow==1.2.3
>       - astunparse==1.6.3
>       - colour==0.1.5
>       - dnspython==2.3.0
>       - email-validator==2.0.0.post2
>       - fqdn==1.5.1
>       - geojson==3.0.1
>       - hsclient==0.3.3
>       - hsmodels==0.5.5
>       - ipython-blocking==0.3.1
>       - isodate==0.6.1
>       - isoduration==20.11.0
>       - jsonpointer==2.3
>       - jupyterlab-logout==0.5.0
>       - jupyterlab-tabular-data-editor==1.0.0
>       - jupyternotify==0.1.15
>       - pixiedust==1.1.19
>       - pytest-tornasync==0.6.0.post2
>       - rdflib==5.0.0
>       - uri-template==1.2.0
>       - webcolors==1.13
>       - xmltodict==0.13.0
>       - xncml==0.2
>       - xsdata==23.5
```


Full new conda env export:

[230530-1-conda-env-export.yml.txt](https://github.com/Ouranosinc/PAVICS-e2e-workflow-tests/files/11621130/230530-1-conda-env-export.yml.txt)
```
name: birdy
channels:
  - cdat
  - conda-forge
  - defaults
dependencies:
  - _libgcc_mutex=0.1=conda_forge
  - _openmp_mutex=4.5=2_gnu
  - affine=2.4.0=pyhd8ed1ab_0
  - aiobotocore=2.5.0=pyhd8ed1ab_0
  - aiofiles=22.1.0=pyhd8ed1ab_0
  - aiohttp=3.8.4=py39h72bdee0_0
  - aioitertools=0.11.0=pyhd8ed1ab_0
  - aiosignal=1.3.1=pyhd8ed1ab_0
  - aiosqlite=0.19.0=pyhd8ed1ab_0
  - alembic=1.11.1=pyhd8ed1ab_0
  - alsa-lib=1.2.8=h166bdaf_0
  - altair=5.0.1=pyhd8ed1ab_0
  - ansi2html=1.8.0=py39hf3d152e_1
  - anyio=3.6.1=pyhd8ed1ab_1
  - aom=3.5.0=h27087fc_0
  - appdirs=1.4.4=pyh9f0ad1d_0
  - argon2-cffi=21.3.0=pyhd8ed1ab_0
  - argon2-cffi-bindings=21.2.0=py39hb9d737c_3
  - asciitree=0.3.3=py_2
  - astor=0.8.1=pyh9f0ad1d_0
  - asttokens=2.2.1=pyhd8ed1ab_0
  - async-timeout=4.0.2=pyhd8ed1ab_0
  - async_generator=1.10=py_0
  - attr=2.5.1=h166bdaf_1
  - attrs=23.1.0=pyh71513ae_1
  - aws-c-auth=0.6.27=he072965_1
  - aws-c-cal=0.5.26=hf677bf3_1
  - aws-c-common=0.8.19=hd590300_0
  - aws-c-compression=0.2.16=hbad4bc6_7
  - aws-c-event-stream=0.2.20=hb4b372c_7
  - aws-c-http=0.7.7=h2632f9a_4
  - aws-c-io=0.13.21=h9fef7b8_5
  - aws-c-mqtt=0.8.11=h2282364_1
  - aws-c-s3=0.3.0=hcb5a9b2_2
  - aws-c-sdkutils=0.1.9=hbad4bc6_2
  - aws-checksums=0.1.14=hbad4bc6_7
  - aws-crt-cpp=0.20.2=he0fdcb3_0
  - aws-sdk-cpp=1.10.57=h059227d_13
  - babel=2.12.1=pyhd8ed1ab_1
  - backcall=0.2.0=pyh9f0ad1d_0
  - backports=1.0=pyhd8ed1ab_3
  - backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0
  - base58=2.1.1=pyhd8ed1ab_0
  - bcrypt=3.2.2=py39hb9d737c_1
  - beautifulsoup4=4.12.2=pyha770c72_0
  - bias_correction=0.4=pyhd8ed1ab_0
  - birdy=0.8.4=pyh1a96a4e_0
  - bleach=6.0.0=pyhd8ed1ab_0
  - blinker=1.6.2=pyhd8ed1ab_0
  - blosc=1.21.4=h0f2a231_0
  - bokeh=2.4.3=pyhd8ed1ab_3
  - boltons=23.0.0=pyhd8ed1ab_0
  - boost-cpp=1.78.0=h5adbc97_2
  - boto3=1.26.76=pyhd8ed1ab_0
  - botocore=1.29.76=pyhd8ed1ab_0
  - bottleneck=1.3.7=py39h389d5f1_0
  - branca=0.6.0=pyhd8ed1ab_0
  - brotli=1.0.9=h166bdaf_8
  - brotli-bin=1.0.9=h166bdaf_8
  - brotlipy=0.7.0=py39hb9d737c_1005
  - brunsli=0.1=h9c3ff4c_0
  - bzip2=1.0.8=h7f98852_4
  - c-ares=1.19.1=hd590300_0
  - c-blosc2=2.9.2=hb4ffafa_0
  - ca-certificates=2023.5.7=hbcca054_0
  - cached-property=1.5.2=hd8ed1ab_1
  - cached_property=1.5.2=pyha770c72_1
  - cachetools=5.3.0=pyhd8ed1ab_0
  - cairo=1.16.0=ha61ee94_1014
  - cartopy=0.21.1=py39h6e7ad6e_0
  - cattrs=22.2.0=pyhd8ed1ab_0
  - cdat_info=8.2.1=pyhd8ed1ab_2
  - cdms2=3.1.5=py39h36de48d_15
  - cdtime=3.1.4=py39he83c29a_7
  - certifi=2023.5.7=pyhd8ed1ab_0
  - certipy=0.1.3=py_0
  - cf_xarray=0.8.0=pyhd8ed1ab_0
  - cffi=1.15.1=py39he91dace_3
  - cfgrib=0.9.10.4=pyhd8ed1ab_0
  - cfgv=3.3.1=pyhd8ed1ab_0
  - cfitsio=4.2.0=hd9d235c_0
  - cftime=1.6.2=py39h2ae25f5_1
  - charls=2.4.2=h59595ed_0
  - charset-normalizer=2.1.1=pyhd8ed1ab_0
  - click=8.1.3=unix_pyhd8ed1ab_2
  - click-plugins=1.1.1=py_0
  - cligj=0.7.2=pyhd8ed1ab_1
  - climpred=2.3.0=pyhd8ed1ab_0
  - clisops=0.9.6=pyh1a96a4e_0
  - cloudpickle=2.2.1=pyhd8ed1ab_0
  - colorama=0.4.6=pyhd8ed1ab_0
  - colorcet=3.0.1=pyhd8ed1ab_0
  - comm=0.1.3=pyhd8ed1ab_0
  - configurable-http-proxy=4.5.4=he2f69ee_2
  - contourpy=1.0.7=py39h4b4f3f3_0
  - coverage=7.2.7=py39hd1e30aa_0
  - cryptography=40.0.2=py39h079d5ae_0
  - curl=8.1.2=h409715c_0
  - cycler=0.11.0=pyhd8ed1ab_0
  - cytoolz=0.12.0=py39hb9d737c_1
  - dash=2.9.3=pyhd8ed1ab_2
  - dask=2023.5.1=pyhd8ed1ab_0
  - dask-core=2023.5.1=pyhd8ed1ab_0
  - dask-labextension=6.1.0=pyhd8ed1ab_0
  - dataclasses=0.8=pyhc8e2a94_3
  - datashader=0.14.4=pyh1a96a4e_0
  - datashape=0.5.4=py_1
  - dav1d=1.2.0=hd590300_0
  - dbus=1.13.6=h5008d03_3
  - debugpy=1.6.7=py39h227be39_0
  - decorator=5.1.1=pyhd8ed1ab_0
  - defusedxml=0.7.1=pyhd8ed1ab_0
  - descartes=1.1.0=py_4
  - dill=0.3.6=pyhd8ed1ab_1
  - distarray=2.12.2=pyh050c7b8_4
  - distlib=0.3.6=pyhd8ed1ab_0
  - distributed=2023.5.1=pyhd8ed1ab_0
  - docopt=0.6.2=py_1
  - docrep=0.3.2=pyh44b312d_0
  - eccodes=2.28.0=h7513371_1
  - elfutils=0.189=hde5d1a3_0
  - entrypoints=0.4=pyhd8ed1ab_0
  - eofs=1.4.0=py_0
  - esgf-compute-api=2.3.9=0_h1234567_
  - esgf-pyclient=0.3.1=pyh1a96a4e_2
  - esmf=8.4.0=mpi_mpich_hc592774_104
  - esmpy=8.4.0=mpi_mpich_py39h3088dd8_102
  - exceptiongroup=1.1.1=pyhd8ed1ab_0
  - execnet=1.9.0=pyhd8ed1ab_0
  - executing=1.2.0=pyhd8ed1ab_0
  - expat=2.5.0=hcb278e6_1
  - fasteners=0.17.3=pyhd8ed1ab_0
  - fastprogress=1.0.3=pyhd8ed1ab_0
  - fftw=3.3.10=nompi_hc118613_107
  - filelock=3.12.0=pyhd8ed1ab_0
  - findlibs=0.0.5=pyhd8ed1ab_0
  - fiona=1.9.1=py39hbc5ff6d_0
  - flask=2.3.2=pyhd8ed1ab_0
  - flit-core=3.9.0=pyhd8ed1ab_0
  - flox=0.7.2=pyhd8ed1ab_0
  - folium=0.14.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=hab24e00_0
  - fontconfig=2.14.2=h14ed4e7_0
  - fonts-conda-ecosystem=1=0
  - fonts-conda-forge=1=0
  - fonttools=4.39.4=py39hd1e30aa_0
  - freeglut=3.2.2=h9c3ff4c_1
  - freetype=2.12.1=hca18f0e_1
  - freexl=1.0.6=h166bdaf_1
  - frozenlist=1.3.3=py39hb9d737c_0
  - fsspec=2023.5.0=pyh1a96a4e_0
  - funcsigs=1.0.2=py_3
  - future=0.18.3=pyhd8ed1ab_0
  - g2clib=1.6.3=hbecde78_1
  - gcsfs=2023.5.0=pyhd8ed1ab_0
  - gdal=3.6.2=py39hc6cd174_6
  - geckodriver=0.33.0=hd2f7af9_0
  - geographiclib=1.52=pyhd8ed1ab_0
  - geopandas=0.13.0=pyhd8ed1ab_0
  - geopandas-base=0.13.0=pyha770c72_0
  - geopy=2.3.0=pyhd8ed1ab_0
  - geos=3.11.1=h27087fc_0
  - geotiff=1.7.1=h7a142b4_6
  - geoviews=1.9.6=pyhd8ed1ab_0
  - geoviews-core=1.9.6=pyha770c72_0
  - gettext=0.21.1=h27087fc_0
  - gflags=2.2.2=he1b5a44_1004
  - giflib=5.2.1=h0b41bf4_3
  - gitdb=4.0.10=pyhd8ed1ab_0
  - gitpython=3.1.31=pyhd8ed1ab_0
  - glib=2.76.3=hfc55251_0
  - glib-tools=2.76.3=hfc55251_0
  - glog=0.6.0=h6f12383_0
  - gnutls=3.7.8=hf3e180e_0
  - google-api-core=2.11.0=pyhd8ed1ab_0
  - google-auth=2.19.0=pyh1a96a4e_0
  - google-auth-oauthlib=1.0.0=pyhd8ed1ab_0
  - google-cloud-core=2.3.2=pyhd8ed1ab_0
  - google-cloud-storage=2.9.0=pyh1a96a4e_0
  - google-crc32c=1.1.2=py39h8db88ab_4
  - google-resumable-media=2.5.0=pyhd8ed1ab_0
  - googleapis-common-protos=1.57.1=pyhd8ed1ab_0
  - graphite2=1.3.13=h58526e2_1001
  - greenlet=2.0.2=py39h3d6467e_1
  - grpcio=1.54.2=py39h227be39_2
  - gst-plugins-base=1.22.0=h4243ec0_2
  - gstreamer=1.22.0=h25f0c4b_2
  - gstreamer-orc=0.4.34=hd590300_0
  - h11=0.14.0=pyhd8ed1ab_0
  - h5netcdf=1.1.0=pyhd8ed1ab_1
  - h5py=3.8.0=mpi_mpich_py39hadaddcd_0
  - harfbuzz=6.0.0=h8e241bc_0
  - haversine=2.8.0=pyhd8ed1ab_0
  - hdf4=4.2.15=h9772cbc_5
  - hdf5=1.12.2=mpi_mpich_h5d83325_1
  - holoviews=1.16.0=pyhd8ed1ab_0
  - hvplot=0.8.3=pyhd8ed1ab_0
  - icu=70.1=h27087fc_0
  - identify=2.5.24=pyhd8ed1ab_0
  - idna=3.4=pyhd8ed1ab_0
  - imagecodecs=2023.1.23=py39hd061359_0
  - imageio=2.28.1=pyh24c5eb1_0
  - importlib-metadata=6.6.0=pyha770c72_0
  - importlib-resources=5.12.0=pyhd8ed1ab_0
  - importlib_metadata=6.6.0=hd8ed1ab_0
  - importlib_resources=5.12.0=pyhd8ed1ab_0
  - iniconfig=2.0.0=pyhd8ed1ab_0
  - intake=0.7.0=pyhd8ed1ab_0
  - intake-esm=2021.8.17=pyhd8ed1ab_0
  - intake-geopandas=0.4.0=pyhd8ed1ab_0
  - intake-thredds=2022.8.19=pyhd8ed1ab_0
  - intake-xarray=0.7.0=pyhd8ed1ab_0
  - ipykernel=6.23.1=pyh210e3f2_0
  - ipyleaflet=0.17.2=pyhd8ed1ab_0
  - ipython=8.13.2=pyh41d4057_0
  - ipython_genutils=0.2.0=py_1
  - ipywidgets=8.0.6=pyhd8ed1ab_0
  - itsdangerous=2.1.2=pyhd8ed1ab_0
  - jack=1.9.22=h11f4161_0
  - jasper=2.0.33=h0ff4b12_1
  - jedi=0.18.2=pyhd8ed1ab_0
  - jinja2=3.1.2=pyhd8ed1ab_1
  - jmespath=1.0.1=pyhd8ed1ab_0
  - joblib=1.2.0=pyhd8ed1ab_0
  - jpeg=9e=h0b41bf4_3
  - json-c=0.16=hc379101_0
  - json5=0.9.5=pyh9f0ad1d_0
  - jsonpickle=2.2.0=pyhd8ed1ab_0
  - jsonschema=4.17.3=pyhd8ed1ab_0
  - jupyter=1.0.0=py39hf3d152e_8
  - jupyter-archive=3.3.4=pyhd8ed1ab_1
  - jupyter-dash=0.4.2=pyhd8ed1ab_1
  - jupyter-resource-usage=0.7.1=pyhd8ed1ab_0
  - jupyter-server-mathjax=0.2.6=pyh5bfe37b_1
  - jupyter-server-proxy=4.0.0=pyhd8ed1ab_0
  - jupyter_bokeh=3.0.5=pyhd8ed1ab_0
  - jupyter_client=7.4.1=pyhd8ed1ab_0
  - jupyter_console=6.6.3=pyhd8ed1ab_0
  - jupyter_core=5.3.0=py39hf3d152e_0
  - jupyter_events=0.6.3=pyhd8ed1ab_0
  - jupyter_server=1.23.6=pyhd8ed1ab_0
  - jupyter_server_fileid=0.9.0=pyhd8ed1ab_0
  - jupyter_server_ydoc=0.8.0=pyhd8ed1ab_0
  - jupyter_telemetry=0.1.0=pyhd8ed1ab_1
  - jupyter_ydoc=0.2.3=pyhd8ed1ab_0
  - jupyterhub=4.0.0=pyh2a2186d_0
  - jupyterhub-base=4.0.0=pyh2a2186d_0
  - jupyterlab=3.6.3=pyhd8ed1ab_0
  - jupyterlab-git=0.41.0=pyhd8ed1ab_1
  - jupyterlab-system-monitor=0.8.0=pyhd8ed1ab_2
  - jupyterlab-topbar=0.6.1=pyhd8ed1ab_2
  - jupyterlab_pygments=0.2.2=pyhd8ed1ab_0
  - jupyterlab_server=2.22.1=pyhd8ed1ab_0
  - jupyterlab_widgets=3.0.7=pyhd8ed1ab_1
  - jupytext=1.14.5=pyhcff175f_0
  - jxrlib=1.1=h7f98852_2
  - kealib=1.5.0=ha7026e8_0
  - keyutils=1.6.1=h166bdaf_0
  - kiwisolver=1.4.4=py39hf939315_1
  - krb5=1.20.1=h81ceb04_0
  - lame=3.100=h166bdaf_1003
  - lazy-object-proxy=1.9.0=py39h72bdee0_0
  - lazy_loader=0.2=pyhd8ed1ab_0
  - lcms2=2.15=hfd0df8a_0
  - ld_impl_linux-64=2.40=h41732ed_0
  - lerc=4.0.0=h27087fc_0
  - libabseil=20230125.2=cxx17_h59595ed_2
  - libaec=1.0.6=hcb278e6_1
  - libarchive=3.6.2=h3d51595_0
  - libarrow=10.0.1=hf815326_25_cpu
  - libavif=0.11.1=hff004cb_1
  - libblas=3.9.0=16_linux64_openblas
  - libbrotlicommon=1.0.9=h166bdaf_8
  - libbrotlidec=1.0.9=h166bdaf_8
  - libbrotlienc=1.0.9=h166bdaf_8
  - libcap=2.67=he9d0100_0
  - libcblas=3.9.0=16_linux64_openblas
  - libcdms=3.1.2=hf94f14b_119
  - libcf=1.0.3=py39h6c807ef_115
  - libclang=15.0.7=default_h7634d5b_2
  - libclang13=15.0.7=default_h9986a30_2
  - libcrc32c=1.1.2=h9c3ff4c_0
  - libcups=2.3.3=h36d4200_3
  - libcurl=8.1.2=h409715c_0
  - libdb=6.2.32=h9c3ff4c_0
  - libdeflate=1.17=h0b41bf4_0
  - libdrm=2.4.114=h166bdaf_0
  - libdrs=3.1.2=hf593df3_118
  - libdrs_f=3.1.2=h7e76ec7_114
  - libedit=3.1.20191231=he28a2e2_2
  - libev=4.33=h516909a_1
  - libevent=2.1.10=h28343ad_4
  - libexpat=2.5.0=hcb278e6_1
  - libffi=3.4.2=h7f98852_5
  - libflac=1.4.2=h27087fc_0
  - libgcc-ng=12.2.0=h65d4601_19
  - libgcrypt=1.10.1=h166bdaf_0
  - libgdal=3.6.2=h8c90c07_6
  - libgfortran-ng=12.2.0=h69a702a_19
  - libgfortran5=12.2.0=h337968e_19
  - libglib=2.76.3=hebfc3b9_0
  - libglu=9.0.0=he1b5a44_1001
  - libgomp=12.2.0=h65d4601_19
  - libgoogle-cloud=2.10.1=hac9eb74_1
  - libgpg-error=1.46=h620e276_0
  - libgrpc=1.54.2=hb20ce57_2
  - libiconv=1.17=h166bdaf_0
  - libidn2=2.3.4=h166bdaf_0
  - libkml=1.3.0=h37653c0_1015
  - liblapack=3.9.0=16_linux64_openblas
  - libllvm14=14.0.6=hcd5def8_2
  - libllvm15=15.0.7=hadd5161_1
  - libllvm16=16.0.1=hadd5161_0
  - libmicrohttpd=0.9.76=h87ba234_0
  - libnetcdf=4.8.1=mpi_mpich_hcd871d9_6
  - libnghttp2=1.52.0=h61bc06f_0
  - libnsl=2.0.0=h7f98852_0
  - libnuma=2.0.16=h0b41bf4_1
  - libogg=1.3.4=h7f98852_1
  - libopenblas=0.3.21=pthreads_h78a6416_3
  - libopus=1.3.1=h7f98852_1
  - libpciaccess=0.17=h166bdaf_0
  - libpng=1.6.39=h753d276_0
  - libpq=15.2=hb675445_0
  - libprotobuf=3.21.12=h3eb15da_0
  - librttopo=1.1.0=ha49c73b_12
  - libsndfile=1.2.0=hb75c966_0
  - libsodium=1.0.18=h36c2ea0_1
  - libspatialindex=1.9.3=h9c3ff4c_4
  - libspatialite=5.0.1=h221c8f1_23
  - libsqlite=3.42.0=h2797004_0
  - libssh2=1.10.0=hf14f497_3
  - libstdcxx-ng=12.2.0=h46fd767_19
  - libsystemd0=253=h8c4010b_1
  - libtasn1=4.19.0=h166bdaf_0
  - libthrift=0.18.1=h5e4af38_0
  - libtiff=4.5.0=h6adf6a1_2
  - libtool=2.4.7=h27087fc_0
  - libudev1=253=h0b41bf4_1
  - libunistring=0.9.10=h7f98852_0
  - libutf8proc=2.8.0=h166bdaf_0
  - libuuid=2.38.1=h0b41bf4_0
  - libuv=1.44.2=h166bdaf_0
  - libvorbis=1.3.7=h9c3ff4c_0
  - libwebp-base=1.3.0=h0b41bf4_0
  - libxcb=1.13=h7f98852_1004
  - libxkbcommon=1.5.0=h79f4944_1
  - libxml2=2.10.3=hca2bb57_4
  - libxslt=1.1.37=h873f0b0_0
  - libzip=1.9.2=hc929e4a_1
  - libzlib=1.2.13=h166bdaf_4
  - libzopfli=1.0.3=h9c3ff4c_0
  - llvmlite=0.40.0=py39h174d805_0
  - lmoments3=1.0.5=pyhd8ed1ab_0
  - locket=1.0.0=pyhd8ed1ab_0
  - loguru=0.7.0=py39hf3d152e_0
  - lxml=4.9.2=py39h14694de_0
  - lz4=4.3.2=py39h724f13c_0
  - lz4-c=1.9.4=hcb278e6_0
  - lzo=2.10=h516909a_1000
  - mako=1.2.4=pyhd8ed1ab_0
  - mamba_gator=5.2.1=pyhd8ed1ab_0
  - mapclassify=2.5.0=pyhd8ed1ab_1
  - markdown=3.4.3=pyhd8ed1ab_0
  - markdown-it-py=2.2.0=pyhd8ed1ab_0
  - markupsafe=2.1.2=py39h72bdee0_0
  - matplotlib=3.7.1=py39hf3d152e_0
  - matplotlib-base=3.7.1=py39he190548_0
  - matplotlib-inline=0.1.6=pyhd8ed1ab_0
  - mdit-py-plugins=0.3.5=pyhd8ed1ab_0
  - mdurl=0.1.0=pyhd8ed1ab_0
  - memory_profiler=0.61.0=pyhd8ed1ab_0
  - mesalib=23.0.2=h3855f93_0
  - mistune=2.0.5=pyhd8ed1ab_0
  - mpg123=1.31.3=hcb278e6_0
  - mpi=1.0=mpich
  - mpi4py=3.1.4=py39h32b9844_0
  - mpich=4.0.3=h846660c_100
  - msgpack-python=1.0.5=py39h4b4f3f3_0
  - multidict=6.0.4=py39h72bdee0_0
  - multipledispatch=0.6.0=py_0
  - multiprocess=0.70.14=py39hb9d737c_3
  - munch=3.0.0=pyhd8ed1ab_0
  - munkres=1.1.4=pyh9f0ad1d_0
  - myproxyclient=2.1.0=pyhd8ed1ab_2
  - mysql-common=8.0.32=hf1915f5_2
  - mysql-libs=8.0.32=hca2cd23_2
  - nbclassic=1.0.0=pyhb4ecaf3_1
  - nbclient=0.7.4=pyhd8ed1ab_0
  - nbconvert=7.4.0=pyhd8ed1ab_0
  - nbconvert-core=7.4.0=pyhd8ed1ab_0
  - nbconvert-pandoc=7.4.0=pyhd8ed1ab_0
  - nbdime=3.2.1=pyhd8ed1ab_0
  - nbformat=5.8.0=pyhd8ed1ab_0
  - nbresuse=0.4.0=pyhd8ed1ab_0
  - nbval=0.9.6=pyh9f0ad1d_0
  - nc-time-axis=1.4.1=pyhd8ed1ab_0
  - ncurses=6.3=h27087fc_1
  - nest-asyncio=1.5.6=pyhd8ed1ab_0
  - nested_dict=1.61=pyhd3deb0d_0
  - netcdf-fortran=4.6.0=mpi_mpich_h1e13492_2
  - netcdf4=1.6.2=nompi_py39hfaa66c4_100
  - nettle=3.8.1=hc379101_1
  - networkx=3.1=pyhd8ed1ab_0
  - nodeenv=1.8.0=pyhd8ed1ab_0
  - nodejs=18.15.0=h8d033a5_0
  - notebook=6.5.4=pyha770c72_0
  - notebook-shim=0.2.3=pyhd8ed1ab_0
  - nspr=4.35=h27087fc_0
  - nss=3.89=he45b914_0
  - numba=0.57.0=py39hb75a051_0
  - numcodecs=0.11.0=py39h227be39_1
  - numpy=1.23.5=py39h3d75532_0
  - numpy_groupies=0.9.22=pyhd8ed1ab_0
  - oauthlib=3.2.2=pyhd8ed1ab_0
  - openblas=0.3.21=pthreads_h320a7e8_3
  - openjpeg=2.5.0=hfec8fc6_2
  - openssl=3.1.1=hd590300_0
  - orc=1.8.3=hfdbbad2_0
  - outcome=1.2.0=pyhd8ed1ab_0
  - owslib=0.28.1=pyhd8ed1ab_0
  - p11-kit=0.24.1=hc5aa10d_0
  - packaging=23.1=pyhd8ed1ab_0
  - pamela=1.0.0=py_0
  - pandas=1.3.5=py39hde0f152_0
  - pandoc=2.19.2=h32600fe_2
  - pandocfilters=1.5.0=pyhd8ed1ab_0
  - panel=0.14.4=pyhd8ed1ab_0
  - parallelio=2.5.10=mpi_mpich_h862c5c2_100
  - param=1.13.0=pyh1a96a4e_0
  - paramiko=3.2.0=pyhd8ed1ab_0
  - parso=0.8.3=pyhd8ed1ab_0
  - partd=1.4.0=pyhd8ed1ab_0
  - pathos=0.3.0=pyhd8ed1ab_0
  - patsy=0.5.3=pyhd8ed1ab_0
  - pcre2=10.40=hc3806b6_0
  - pexpect=4.8.0=pyh1a96a4e_2
  - pickleshare=0.7.5=py_1003
  - pillow=9.4.0=py39h2320bf1_1
  - pint=0.21=pyhd8ed1ab_0
  - pip=23.1.2=pyhd8ed1ab_0
  - pixman=0.40.0=h36c2ea0_0
  - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_0
  - platformdirs=3.5.1=pyhd8ed1ab_0
  - plotly=5.14.1=pyhd8ed1ab_0
  - pluggy=1.0.0=pyhd8ed1ab_5
  - ply=3.11=py_1
  - pooch=1.7.0=pyha770c72_3
  - poppler=23.01.0=h091648b_0
  - poppler-data=0.4.12=hd8ed1ab_0
  - postgresql=15.2=h3248436_0
  - pox=0.3.2=pyhd8ed1ab_0
  - ppft=1.7.6.6=pyhd8ed1ab_0
  - pre-commit=3.3.2=pyha770c72_0
  - proj=9.1.1=h8ffa02c_2
  - prometheus_client=0.17.0=pyhd8ed1ab_0
  - prompt-toolkit=3.0.38=pyha770c72_0
  - prompt_toolkit=3.0.38=hd8ed1ab_0
  - properscoring=0.1=py_0
  - protobuf=4.21.12=py39h227be39_0
  - pscript=0.7.7=pyhd8ed1ab_0
  - psutil=5.9.5=py39h72bdee0_0
  - pthread-stubs=0.4=h36c2ea0_1001
  - ptyprocess=0.7.0=pyhd3deb0d_0
  - pulseaudio=16.1=hcb278e6_3
  - pulseaudio-client=16.1=h5195f5e_3
  - pulseaudio-daemon=16.1=ha8d29e2_3
  - pure_eval=0.2.2=pyhd8ed1ab_0
  - pyarrow=10.0.1=py39he4327e9_25_cpu
  - pyasn1=0.4.8=py_0
  - pyasn1-modules=0.2.7=py_0
  - pycparser=2.21=pyhd8ed1ab_0
  - pyct=0.4.6=py_0
  - pyct-core=0.4.6=py_0
  - pycurl=7.45.1=py39h9297c8b_3
  - pydantic=1.10.8=py39hd1e30aa_0
  - pydap=3.4.0=pyhd8ed1ab_0
  - pydeck=0.8.0=pyhd8ed1ab_0
  - pygeos=0.14=py39hc9151fd_0
  - pygments=2.15.1=pyhd8ed1ab_0
  - pyjwt=2.7.0=pyhd8ed1ab_0
  - pymbolic=2022.2=pyhd8ed1ab_0
  - pymetalink=6.4=pyhd8ed1ab_0
  - pympler=1.0.1=pyhd8ed1ab_0
  - pynacl=1.5.0=py39hb9d737c_2
  - pyogrio=0.5.1=py39hbc5ff6d_0
  - pyopenssl=23.1.1=pyhd8ed1ab_0
  - pyparsing=3.0.9=pyhd8ed1ab_0
  - pyproj=3.5.0=py39hf8a5840_0
  - pyqt=5.15.7=py39h5c7b992_3
  - pyqt5-sip=12.11.0=py39h227be39_3
  - pyrsistent=0.19.3=py39h72bdee0_0
  - pyshp=2.3.1=pyhd8ed1ab_0
  - pysocks=1.7.1=pyha2e5f31_6
  - pytest=7.3.1=pyhd8ed1ab_0
  - pytest-xdist=3.3.1=pyhd8ed1ab_0
  - python=3.9.16=h2782a2a_0_cpython
  - python-dateutil=2.8.2=pyhd8ed1ab_0
  - python-eccodes=1.5.1=py39h389d5f1_0
  - python-fastjsonschema=2.17.1=pyhd8ed1ab_0
  - python-json-logger=2.0.7=pyhd8ed1ab_0
  - python-pptx=0.6.21=pyhd8ed1ab_0
  - python-tzdata=2023.3=pyhd8ed1ab_0
  - python_abi=3.9=3_cp39
  - pytools=2022.1.14=pyhd8ed1ab_0
  - pytz=2023.3=pyhd8ed1ab_0
  - pyu2f=0.1.5=pyhd8ed1ab_0
  - pyviz_comms=2.3.0=pyhd8ed1ab_0
  - pywavelets=1.4.1=py39h389d5f1_0
  - pyyaml=6.0=py39hb9d737c_5
  - pyzmq=25.0.2=py39h0be026e_0
  - qt-main=5.15.8=h5d23da1_6
  - qtconsole=5.4.3=pyhd8ed1ab_0
  - qtconsole-base=5.4.3=pyha770c72_0
  - qtpy=2.3.1=pyhd8ed1ab_0
  - rasterio=1.3.6=py39h09b1985_0
  - raven-hydro=0.2.1=py39h8e2dbb5_1
  - ravenpy=0.12.0=py39hf3d152e_2
  - rdma-core=28.9=h59595ed_1
  - re2=2023.03.02=h8c504da_0
  - readline=8.2=h8228510_1
  - regionmask=0.9.0=pyhd8ed1ab_0
  - requests=2.31.0=pyhd8ed1ab_0
  - requests-cache=1.0.1=pyhd8ed1ab_0
  - requests-magpie=0.2.0=pyhd8ed1ab_0
  - requests-oauthlib=1.3.1=pyhd8ed1ab_0
  - retrying=1.3.3=py_2
  - rfc3339-validator=0.1.4=pyhd8ed1ab_0
  - rfc3986-validator=0.1.1=pyh9f0ad1d_0
  - rioxarray=0.14.1=pyhd8ed1ab_0
  - roocs-utils=0.6.4=pyh1a96a4e_0
  - rsa=4.9=pyhd8ed1ab_0
  - rtree=1.0.1=py39hb102c33_1
  - ruamel.yaml=0.17.30=py39hd1e30aa_0
  - ruamel.yaml.clib=0.2.7=py39h72bdee0_1
  - s2n=1.3.44=h06160fa_0
  - s3fs=2023.5.0=pyhd8ed1ab_0
  - s3transfer=0.6.1=pyhd8ed1ab_0
  - scikit-image=0.20.0=py39h7c7b5a8_1
  - scikit-learn=1.2.2=py39hc236052_2
  - scipy=1.9.1=py39h8ba3f38_0
  - scp=0.14.5=pyhd8ed1ab_0
  - seaborn=0.12.2=hd8ed1ab_0
  - seaborn-base=0.12.2=pyhd8ed1ab_0
  - selenium=4.9.1=pyhd8ed1ab_0
  - semver=3.0.0=pyhd8ed1ab_0
  - send2trash=1.8.2=pyh41d4057_0
  - setuptools=59.8.0=py39hf3d152e_1
  - shapely=2.0.1=py39hc9151fd_0
  - simpervisor=1.0.0=pyhd8ed1ab_0
  - sip=6.7.9=py39h3d6467e_0
  - siphon=0.9=pyhd8ed1ab_2
  - six=1.16.0=pyh6c4a22f_0
  - smmap=3.0.5=pyh44b312d_0
  - snappy=1.1.10=h9fff704_0
  - sniffio=1.3.0=pyhd8ed1ab_0
  - snuggs=1.4.7=py_0
  - sortedcontainers=2.4.0=pyhd8ed1ab_0
  - soupsieve=2.3.2.post1=pyhd8ed1ab_0
  - sparse=0.14.0=pyhd8ed1ab_0
  - spotpy=1.6.2=pyhd8ed1ab_0
  - sqlalchemy=2.0.15=py39hd1e30aa_0
  - sqlite=3.42.0=h2c6b66d_0
  - stack_data=0.6.2=pyhd8ed1ab_0
  - statsmodels=0.14.0=py39h0f8d45d_1
  - streamlit=1.8.0=pyhd8ed1ab_0
  - tblib=1.7.0=pyhd8ed1ab_0
  - tenacity=8.2.2=pyhd8ed1ab_0
  - terminado=0.17.1=pyh41d4057_0
  - threadpoolctl=3.1.0=pyh8a188c0_0
  - threddsclient=0.4.2=py_0
  - tifffile=2023.4.12=pyhd8ed1ab_0
  - tiledb=2.13.2=hd532e3d_0
  - tinycss2=1.2.1=pyhd8ed1ab_0
  - tk=8.6.12=h27826a3_0
  - toml=0.10.2=pyhd8ed1ab_0
  - tomli=2.0.1=pyhd8ed1ab_0
  - toolz=0.12.0=pyhd8ed1ab_0
  - tornado=6.3.2=py39hd1e30aa_0
  - tqdm=4.65.0=pyhd8ed1ab_1
  - traitlets=5.9.0=pyhd8ed1ab_0
  - traittypes=0.2.1=pyh9f0ad1d_2
  - trio=0.22.0=py39hf3d152e_1
  - trio-websocket=0.10.2=pyhd8ed1ab_0
  - typing-extensions=4.6.2=hd8ed1ab_0
  - typing_extensions=4.6.2=pyha770c72_0
  - tzcode=2023c=h0b41bf4_0
  - tzdata=2023c=h71feb2d_0
  - tzlocal=5.0.1=py39hf3d152e_0
  - ucx=1.14.1=hf587318_1
  - ujson=5.7.0=py39h227be39_0
  - ukkonen=1.0.1=py39hf939315_3
  - unicodedata2=15.0.0=py39hb9d737c_0
  - url-normalize=1.4.3=pyhd8ed1ab_0
  - urllib3=1.26.15=pyhd8ed1ab_0
  - urlpath=1.2.0=pyhd8ed1ab_0
  - validators=0.20.0=pyhd8ed1ab_0
  - virtualenv=20.23.0=pyhd8ed1ab_0
  - voila=0.4.0=pyhd8ed1ab_0
  - watchdog=3.0.0=py39hf3d152e_0
  - wcwidth=0.2.6=pyhd8ed1ab_0
  - webencodings=0.5.1=py_1
  - webob=1.8.7=pyhd8ed1ab_0
  - websocket-client=1.5.2=pyhd8ed1ab_0
  - websockets=11.0.3=py39hd1e30aa_0
  - werkzeug=2.3.4=pyhd8ed1ab_0
  - wget=1.20.3=ha35d2d1_1
  - wheel=0.40.0=pyhd8ed1ab_0
  - widgetsnbextension=4.0.7=pyhd8ed1ab_0
  - wrapt=1.15.0=py39h72bdee0_0
  - wsproto=1.2.0=pyhd8ed1ab_0
  - xarray=2023.1.0=pyhd8ed1ab_0
  - xcb-util=0.4.0=h516909a_0
  - xcb-util-image=0.4.0=h166bdaf_0
  - xcb-util-keysyms=0.4.0=h516909a_0
  - xcb-util-renderutil=0.3.9=h166bdaf_0
  - xcb-util-wm=0.4.1=h516909a_0
  - xclim=0.43.0=py39hf3d152e_1
  - xerces-c=3.2.4=h55805fa_1
  - xesmf=0.7.1=pyhd8ed1ab_0
  - xeus=3.0.5=hac2b420_1
  - xeus-python=0.15.9=py39h7633fee_0
  - xeus-python-shell=0.5.0=pyhd8ed1ab_0
  - xeus-python-shell-raw=0.5.0=pyhd8ed1ab_0
  - xeus-zmq=1.0.3=h0541b36_0
  - xhistogram=0.3.2=pyhd8ed1ab_0
  - xkeyboard-config=2.38=h0b41bf4_0
  - xlrd=2.0.1=pyhd8ed1ab_3
  - xlsxwriter=3.1.2=pyhd8ed1ab_0
  - xorg-damageproto=1.2.1=h7f98852_1002
  - xorg-fixesproto=5.0=h7f98852_1002
  - xorg-glproto=1.4.17=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.4=h0b41bf4_0
  - xorg-libxau=1.0.11=hd590300_0
  - xorg-libxdamage=1.1.5=h7f98852_1
  - 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-libxrandr=1.5.2=h7f98852_1
  - xorg-libxrender=0.9.10=h7f98852_1003
  - xorg-randrproto=1.5.0=h7f98852_1001
  - xorg-renderproto=0.11.1=h7f98852_1002
  - xorg-util-macros=1.19.3=h7f98852_0
  - xorg-xextproto=7.3.0=h0b41bf4_1003
  - xorg-xf86vidmodeproto=2.3.1=h7f98852_1002
  - xorg-xproto=7.0.31=h7f98852_1007
  - xrft=1.0.1=pyhd8ed1ab_0
  - xskillscore=0.0.24=pyhd8ed1ab_0
  - xyzservices=2023.5.0=pyhd8ed1ab_1
  - xz=5.2.6=h166bdaf_0
  - y-py=0.5.9=py39h50f1755_0
  - yaml=0.2.5=h7f98852_2
  - yarl=1.9.2=py39hd1e30aa_0
  - ypy-websocket=0.8.2=pyhd8ed1ab_0
  - zarr=2.14.2=pyhd8ed1ab_0
  - zeromq=4.3.4=h9c3ff4c_1
  - zfp=1.0.0=h27087fc_3
  - zict=3.0.0=pyhd8ed1ab_0
  - zipp=3.15.0=pyhd8ed1ab_0
  - zlib=1.2.13=h166bdaf_4
  - zlib-ng=2.0.7=h0b41bf4_0
  - zstd=1.5.2=h3eb15da_6
  - pip:
      - arrow==1.2.3
      - astunparse==1.6.3
      - colour==0.1.5
      - dnspython==2.3.0
      - email-validator==2.0.0.post2
      - fqdn==1.5.1
      - geojson==3.0.1
      - hsclient==0.3.3
      - hsmodels==0.5.5
      - ipython-blocking==0.3.1
      - isodate==0.6.1
      - isoduration==20.11.0
      - jsonpointer==2.3
      - jupyterlab-logout==0.5.0
      - jupyterlab-tabular-data-editor==1.0.0
      - jupyternotify==0.1.15
      - pixiedust==1.1.19
      - pytest-tornasync==0.6.0.post2
      - rdflib==5.0.0
      - uri-template==1.2.0
      - webcolors==1.13
      - xmltodict==0.13.0
      - xncml==0.2
      - xsdata==23.5
prefix: /opt/conda/envs/birdy
```



Docker build log

[230530-1-buildlogs.txt](https://github.com/Ouranosinc/PAVICS-e2e-workflow-tests/files/11621136/230530-1-buildlogs.txt)
```
Sending build context to Docker daemon  22.02kB


Step 1/18 : FROM continuumio/miniconda3
 ---> fbedfde8d058
Step 2/18 : RUN conda update conda -n base &&     conda install mamba -n base -c conda-forge -c defaults &&     conda clean --all --yes &&     conda config --set channel_priority strict &&     wget -qO- https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -C /usr/local -xvj bin/micromamba
 ---> Using cache
 ---> 418cc0c03798
Step 3/18 : ENV MAMBA_ROOT_PREFIX="/opt/conda"
 ---> Using cache
 ---> cf727f7e31d9
Step 4/18 : RUN apt-get update &&     DEBIAN_FRONTEND=noninteractive apt-get install -y     git mercurial gcc unzip patch fonts-humor-sans     firefox-esr x11-utils &&     apt-get clean
 ---> Using cache
 ---> c1929f372dc2
Step 5/18 : RUN groupadd --gid 1000 jenkins     && useradd --uid 1000 --gid jenkins --create-home jenkins &&     chmod -R a+rwX /opt/conda
 ---> Using cache
 ---> 85378190e665
Step 6/18 : COPY environment.yml /environment.yml
 ---> c06bfdb4ac56
Step 7/18 : RUN umask 0000 &&     mamba create --name birdy --channel conda-forge --channel defaults xclim ravenpy python=3.9 --yes &&     mamba env update --name birdy --file /environment.yml &&     mamba clean --all --yes
 ---> Running in 95270a0111d6
Transaction

  Prefix: /opt/conda/envs/birdy

  Updating specs:

   - xclim
   - ravenpy
   - python=3.9


  Package                               Version  Build                       Channel                    Size
──────────────────────────────────────────────────────────────────────────────────────────────────────────────
  Install:
──────────────────────────────────────────────────────────────────────────────────────────────────────────────

  + _libgcc_mutex                           0.1  conda_forge                 conda-forge/linux-64        3kB
  + _openmp_mutex                           4.5  2_gnu                       conda-forge/linux-64       24kB
  + affine                                2.4.0  pyhd8ed1ab_0                conda-forge/noarch         19kB
  + appdirs                               1.4.4  pyh9f0ad1d_0                conda-forge/noarch         13kB
  + asttokens                             2.2.1  pyhd8ed1ab_0                conda-forge/noarch         28kB
  + attrs                                23.1.0  pyh71513ae_1                conda-forge/noarch         55kB
  + aws-c-auth                           0.6.27  he072965_1                  conda-forge/linux-64      102kB
  + aws-c-cal                            0.5.26  hf677bf3_1                  conda-forge/linux-64       50kB
  + aws-c-common                         0.8.19  hd590300_0                  conda-forge/linux-64      196kB
  + aws-c-compression                    0.2.16  hbad4bc6_7                  conda-forge/linux-64       19kB
  + aws-c-event-stream                   0.2.20  hb4b372c_7                  conda-forge/linux-64       54kB
  + aws-c-http                            0.7.7  h2632f9a_4                  conda-forge/linux-64      192kB
  + aws-c-io                            0.13.21  h9fef7b8_5                  conda-forge/linux-64      140kB
  + aws-c-mqtt                           0.8.11  h2282364_1                  conda-forge/linux-64      148kB
  + aws-c-s3                              0.3.0  hcb5a9b2_2                  conda-forge/linux-64       76kB
  + aws-c-sdkutils                        0.1.9  hbad4bc6_2                  conda-forge/linux-64       54kB
  + aws-checksums                        0.1.14  hbad4bc6_7                  conda-forge/linux-64       50kB
  + aws-crt-cpp                          0.20.2  he0fdcb3_0                  conda-forge/linux-64      319kB
  + aws-sdk-cpp                         1.10.57  h059227d_13                 conda-forge/linux-64        4MB
  + backcall                              0.2.0  pyh9f0ad1d_0                conda-forge/noarch         14kB
  + backports                               1.0  pyhd8ed1ab_3                conda-forge/noarch          6kB
  + backports.functools_lru_cache         1.6.4  pyhd8ed1ab_0                conda-forge/noarch          9kB
  + bias_correction                         0.4  pyhd8ed1ab_0                conda-forge/noarch          8kB
  + blosc                                1.21.4  h0f2a231_0                  conda-forge/linux-64       49kB
  + bokeh                                 3.1.1  pyhd8ed1ab_0                conda-forge/noarch          6MB
  + boltons                              23.0.0  pyhd8ed1ab_0                conda-forge/noarch        303kB
  + boost-cpp                            1.78.0  h5adbc97_2                  conda-forge/linux-64       16MB
  + bottleneck                            1.3.7  py39h389d5f1_0              conda-forge/linux-64      122kB
  + branca                                0.6.0  pyhd8ed1ab_0                conda-forge/noarch         28kB
  + brotli                                1.0.9  h166bdaf_8                  conda-forge/linux-64       19kB
  + brotli-bin                            1.0.9  h166bdaf_8                  conda-forge/linux-64       20kB
  + bzip2                                 1.0.8  h7f98852_4                  conda-forge/linux-64      496kB
  + c-ares                               1.19.1  hd590300_0                  conda-forge/linux-64      113kB
  + ca-certificates                    2023.5.7  hbcca054_0                  conda-forge/linux-64     Cached
  + cairo                                1.16.0  ha61ee94_1014               conda-forge/linux-64        2MB
  + certifi                            2023.5.7  pyhd8ed1ab_0                conda-forge/noarch       Cached
  + cf_xarray                             0.8.1  pyhd8ed1ab_0                conda-forge/noarch         52kB
  + cfitsio                               4.2.0  hd9d235c_0            …
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
4 participants