diff --git a/docs/notebooks/example.ipynb b/docs/notebooks/example.ipynb
index 344812d6..6bc3484a 100644
--- a/docs/notebooks/example.ipynb
+++ b/docs/notebooks/example.ipynb
@@ -51,40 +51,27 @@
    "source": [
     "## Setting up the Dask client: parallel processing\n",
     "\n",
-    "This step is not mandatory as dask will fall back to its \"single machine scheduler\" if a `Client` is not created (the case is this notebook). However, this default scheduler doesn't allow you to set the number of threads or a memory limit and doesn't start the dashboard, which can be quite useful to understand your task's progress.\n",
+    "First we create a pool of workers that will wait for jobs. The `xarray` library will automatically connect to these workers and and dispatch them jobs that can be run in parallel.  \n",
     "\n",
-    "The `xarray` library will automatically connect to the dask scheduler when needed.\n",
+    "The dashboard link lets you see in real time how busy those workers are.\n",
     "\n",
-    "The dashboard link lets you see in real time how busy those workers are. More info : [dask distributed documentation](https://distributed.dask.org/en/latest/).\n",
+    "* [dask distributed documentation](https://distributed.dask.org/en/latest/)\n",
     "\n",
-    "```python\n",
+    "This step is not mandatory as dask will fall back to its \"single machine scheduler\" if a `Client` is not created. However, this default scheduler doesn't allow you to set the number of threads or a memory limit and doesn't start the dashboard, which can be quite useful to understand your task's progress.\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
     "from distributed import Client\n",
     "\n",
     "# Depending on your workstation specifications, you may need to adjust these values.\n",
     "# On a single machine, n_workers=1 is usually better.\n",
     "client=Client(n_workers=1, threads_per_worker=4, memory_limit=\"4GB\") \n",
-    "client\n",
-    "```\n",
-    "\n",
-    "<table style=\"border: 2px solid white;\">\n",
-    "<tr>\n",
-    "<td style=\"vertical-align: top; border: 0px solid white\">\n",
-    "<h3 style=\"text-align: left;\">Client</h3>\n",
-    "<ul style=\"text-align: left; list-style: none; margin: 0; padding: 0;\">\n",
-    "  <li><b>Scheduler: </b>tcp://127.0.0.1:36783</li>\n",
-    "  <li><b>Dashboard: </b><a href='http://127.0.0.1:35847/status' target='_blank'>http://127.0.0.1:35847/status</a>\n",
-    "</ul>\n",
-    "</td>\n",
-    "<td style=\"vertical-align: top; border: 0px solid white\">\n",
-    "<h3 style=\"text-align: left;\">Cluster</h3>\n",
-    "<ul style=\"text-align: left; list-style:none; margin: 0; padding: 0;\">\n",
-    "  <li><b>Workers: </b>1</li>\n",
-    "  <li><b>Cores: </b>4</li>\n",
-    "  <li><b>Memory: </b>4.00 GB</li>\n",
-    "</ul>\n",
-    "</td>\n",
-    "</tr>\n",
-    "</table>"
+    "client"
    ]
   },
   {
@@ -120,8 +107,8 @@
    "outputs": [],
    "source": [
     "# Chunking in memory along the time dimension.\n",
-    "# Note that the data type is a 'dask.array'. xarray will automatically use the dask scheduler.\n",
-    "ds = xr.open_dataset(data_url, chunks={'time': 365, 'lat': 84, 'lon': 75}, drop_variables=['ts', 'time_vectors'])\n",
+    "# Note that the data type is a 'dask.array'. xarray will automatically use client workers.\n",
+    "ds = xr.open_dataset(data_url, chunks={'time': 365, 'lat': 168, 'lon': 150}, drop_variables=['ts', 'time_vectors'])\n",
     "ds"
    ]
   },
@@ -301,7 +288,7 @@
    "outputs": [],
    "source": [
     "%%time\n",
-    "output_file = output_folder / 'test_tx_days_above.nc'\n",
+    "output_file = output_folder / 'test_tx_max.nc'\n",
     "dsOut.to_netcdf(output_file)"
    ]
   },
@@ -333,7 +320,7 @@
    "outputs": [],
    "source": [
     "# rechunk data in memory for the entire grid  \n",
-    "ds2c = ds2.chunk(chunks={'time': 365})\n",
+    "ds2c = ds2.chunk(chunks={'time':4 * 365})\n",
     "print(ds2c.chunks['time'])"
    ]
   },
@@ -344,7 +331,7 @@
    "outputs": [],
    "source": [
     "%%time\n",
-    "out = xc.atmos.tx_days_above(ds2c.tasmax, thresh='30 C', freq='YS')\n",
+    "out = xc.atmos.tx_max(ds2c.tasmax, freq='YS')\n",
     "dsOut = xr.Dataset(data_vars=None, coords=out.coords, attrs=ds.attrs)\n",
     "dsOut[out.name] = out\n",
     "\n",
@@ -366,7 +353,93 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# ds4 = ds3.load()"
+    "ds4 = ds3.load()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Unit handling in `xclim`\n",
+    "\n",
+    "A lot of effort has been placed into automatic handling of input data units. `xclim` will automatically detect the input variable(s) units (e.g. °C versus °K or mm/s versus mm/day etc.) and adjust on-the-fly in order to calculate indices in the consistent manner. This comes with the obvious caveat that input data requires metadata attribute for units\n",
+    "\n",
+    "In the example below, we compute weekly total precipitation in mm using inputs of mm/s and mm/d. As you see, the output is identical."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Compute with the original mm s-1 data\n",
+    "out1 = xc.atmos.precip_accumulation(ds4.pr, freq='MS')\n",
+    "# Create a copy of the data converted to mm d-1\n",
+    "pr_mmd = ds4.pr * 3600 * 24\n",
+    "pr_mmd.attrs[\"units\"] = \"mm d-1\"\n",
+    "out2 = xc.atmos.precip_accumulation(pr_mmd, freq='MS')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# import plotting stuff\n",
+    "import matplotlib.pyplot as plt\n",
+    "%matplotlib inline\n",
+    "plt.style.use('seaborn')\n",
+    "plt.rcParams['figure.figsize'] = (11, 5)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "plt.figure()\n",
+    "out1.plot(label='From mm s-1', linestyle='-')\n",
+    "out2.plot(label='From mm d-1', linestyle='none', marker='o')\n",
+    "plt.legend()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Threshold indices\n",
+    "\n",
+    "`xclim` unit handling also applies to threshold indicators. Users can provide threshold in units of choice and `xclim` will adjust automatically. For example determining the number of days with tasmax > 20°C users can define a threshold input of '20 C' or '20 degC' even if input data is in Kelvin. Alernatively users can even provide a threshold in Kelvin '293.15 K' (if they really wanted to)."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Create a copy of the data converted to C\n",
+    "tasmax_C = ds4.tasmax - 273.15\n",
+    "tasmax_C.attrs['units'] = 'C'\n",
+    "\n",
+    "# Using Kelvin data, threshold in Celsius\n",
+    "out1 = xc.atmos.tx_days_above(ds4.tasmax, thresh='20 C', freq='MS')\n",
+    "\n",
+    "# Using Celsius data\n",
+    "out2 = xc.atmos.tx_days_above(tasmax_C, thresh='20 C', freq='MS')\n",
+    "\n",
+    "# Using Celsius but with threshold in Kelvin\n",
+    "out3 = xc.atmos.tx_days_above(tasmax_C, thresh='293.15 K', freq='MS')\n",
+    "\n",
+    "# Plot and see that it's all identical:\n",
+    "plt.figure()\n",
+    "out1.plot(label='K and degC', linestyle='-')\n",
+    "out2.plot(label='degC and degC', marker='s', markersize=10, linestyle='none')\n",
+    "out3.plot(label='degC and K', marker='o', linestyle='none')\n",
+    "plt.legend()"
    ]
   },
   {
@@ -378,7 +451,6 @@
   }
  ],
  "metadata": {
-  "celltoolbar": "Raw Cell Format",
   "kernelspec": {
    "display_name": "Python 3",
    "language": "python",
@@ -394,7 +466,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.1"
+   "version": "3.8.0"
   }
  },
  "nbformat": 4,
diff --git a/xclim/indicators/atmos/_conversion.py b/xclim/indicators/atmos/_conversion.py
index 771b04de..b61ef4fc 100644
--- a/xclim/indicators/atmos/_conversion.py
+++ b/xclim/indicators/atmos/_conversion.py
@@ -50,7 +50,7 @@ saturation_vapor_pressure = Converter(
     units="Pa",
     long_name="Saturation vapor pressure",
     description=lambda **kws: (
-        "The saturation vapor pressure was calculated from the temperature "
+        "The saturation vapor pressure was calculated from a temperature "
         "according to the {method} method."
     )
     + (
@@ -68,13 +68,18 @@ relative_humidity_from_dewpoint = Converter(
     units="%",
     long_name="Relative Humidity",
     standard_name="relative_humidity",
-    description="Computed from temperature and dew point temperature.",
+    description=lambda **kws: (
+        "Computed from temperature, and dew point temperature through the "
+        "saturation vapor pressures, which were calculated "
+        "according to the {method} method."
+    )
+    + (
+        " The computation was done in reference to ice for temperatures below {ice_thresh}."
+        if kws["ice_thresh"] is not None
+        else ""
+    ),
     compute=wrapped_partial(
-        indices.relative_humidity,
-        huss=None,
-        ps=None,
-        method="dewpoint",
-        invalid_values="mask",
+        indices.relative_humidity, huss=None, ps=None, invalid_values="mask",
     ),
 )
 
diff --git a/xclim/indices/_conversion.py b/xclim/indices/_conversion.py
index 8c70b548..e023d789 100644
--- a/xclim/indices/_conversion.py
+++ b/xclim/indices/_conversion.py
@@ -181,7 +181,7 @@ def saturation_vapor_pressure(
 
     - "goffgratch46" or "GG46", based on [goffgratch46]_, values and equation taken from [voemel]_.
     - "sonntag90" or "SO90", taken from [sonntag90]_.
-    - "tetens30" or "TE30", based on [tetens30], values and equation taken from [voemel]_.
+    - "tetens30" or "TE30", based on [tetens30]_, values and equation taken from [voemel]_.
     - "wmo08" or "WMO08", taken from [wmo08]_.
 
 
@@ -191,7 +191,7 @@ def saturation_vapor_pressure(
     .. [sonntag90] Sonntag, D. (1990). Important new values of the physical constants of 1986, vapour pressure formulations based on the ITS-90, and psychrometer formulae. Zeitschrift für Meteorologie, 40(5), 340-344.
     .. [tetens30] Tetens, O. 1930. Über einige meteorologische Begriffe. Z. Geophys 6: 207-309.
     .. [voemel] http://cires1.colorado.edu/~voemel/vp.html
-    .. [wmo2008] World Meteorological Organization. (2008). Guide to meteorological instruments and methods of observation. Geneva, Switzerland: World Meteorological Organization. https://www.weather.gov/media/epz/mesonet/CWOP-WMO8.pdf
+    .. [wmo08] World Meteorological Organization. (2008). Guide to meteorological instruments and methods of observation. Geneva, Switzerland: World Meteorological Organization. https://www.weather.gov/media/epz/mesonet/CWOP-WMO8.pdf
     """
     if ice_thresh is not None:
         thresh = convert_units_to(ice_thresh, "degK")
@@ -279,71 +279,84 @@ def relative_humidity(
     method: str = "sonntag90",
     invalid_values: str = "clip",
 ) -> xr.DataArray:
-    """Compute relative humidity from temperature and either dewpoint temperature
-    or from specific humidity and pressure (through the saturation vapor pressure)
+    r"""
+    Compute relative humidity from temperature and either dewpoint temperature or specific humidity and pressure through the saturation vapor pressure.
 
     Parameters
     ----------
     tas : xr.DataArray
         Temperature array
     dtas : xr.DataArray
-        Dewpoint temperature, if specified, "method" must be set to "dewpoint".
+        Dewpoint temperature, if specified, overrides huss and ps.
     huss : xr.DataArray
         Specific Humidity
     ps : xr.DataArray
         Air Pressure
     ice_thresh : str
         Threshold temperature under which to switch to equations in reference to ice instead of water.
-        If None (default) everything is computed with reference to water. Does nothing if 'method' is "dewpoint,"
-    method : {"dewpoint", "goffgratch46", "sonntag90", "tetens30", "wmo08"}
+        If None (default) everything is computed with reference to water. Does nothing if 'method' is "bohren98".
+    method : {"bohren98", "goffgratch46", "sonntag90", "tetens30", "wmo08"}
         Which method to use, see notes of this function and of `saturation_vapor_pressure`.
     invalid_values : {"clip", "mask", None}
-        What to do with values outside the 0-100 range.
-        If "clip" (default), clips everything to 0 - 100,
-        if "mask", replaces values outside the range by np.nan,
-        if None, does nothing.
+        What to do with values outside the 0-100 range. If "clip" (default), clips everything to 0 - 100,
+        if "mask", replaces values outside the range by np.nan, and if `None` , does nothing.
 
     Notes
     -----
-
     In the following, let :math:`T`, :math:`T_d`, :math:`q` and :math:`p` be the temperature,
     the dew point temperature, the specific humidity and the air pressure.
 
-    **For the "dewpoint" method** : With :math:`L` the Enthalpy of vaporization of water
-    and :math:`R_w` the gas constant for water vapor, the relative humidity is computed as:
+    **For the "bohren98" method** : This method does not use the saturation vapor pressure directly,
+    but rather uses an approximation of the ratio of :math:`\frac{e_{sat}(T_d)}{e_{sat}(T)}`.
+    With :math:`L` the enthalpy of vaporization of water and :math:`R_w` the gas constant for water vapor,
+    the relative humidity is computed as:
 
     .. math::
 
-        RH = e^{\\frac{-L (T - T_d)}{R_wTT_d}}
+        RH = e^{\frac{-L (T - T_d)}{R_wTT_d}}
 
-    Formula taken from [Lawrence_2005]_.
+    From [BohrenAlbrecht1998]_, formula taken from [Lawrence2005]_. :math:`L = 2.5\times 10^{-6}` J kg-1, exact for :math:`T = 273.15` K, is used.
 
     **Other methods**: With :math:`w`, :math:`w_{sat}`, :math:`e_{sat}` the mixing ratio,
-    the saturation mixing ratio and the saturation vapor pressure, relative humidity is computed as:
+    the saturation mixing ratio and the saturation vapor pressure.
+    If the dewpoint temperature is given, relative humidity is computed as:
 
-        ... math::
+    .. math::
 
-            RH = 100\\frac{w}{w_{sat}}
-            w = \\frac{q}{1-q}
-            w_{sat} = 0.622\\frac{e_{sat}}{P - e_{sat}}
+        RH = 100\frac{e_{sat}(T_d)}{e_{sat}(T)}
 
-    The methods differ by how :math:`e_{sat}` is computed. See the doc of `xclim.core.utils.saturation_vapor_pressure`.
+    Otherwise, the specific humidity and the air pressure must be given so relative humidity can be computed as:
+
+    .. math::
+
+        RH = 100\frac{w}{w_{sat}}
+        w = \frac{q}{1-q}
+        w_{sat} = 0.622\frac{e_{sat}}{P - e_{sat}}
+
+    The methods differ by how :math:`e_{sat}` is computed. See the doc of :py:meth:`xclim.core.utils.saturation_vapor_pressure`.
 
     References
     ----------
-    .. [Lawrence_2005] Lawrence, M.G. (2005). The Relationship between Relative Humidity and the Dewpoint Temperature in Moist Air: A Simple Conversion and Applications. Bull. Amer. Meteor. Soc., 86, 225–234, https://doi.org/10.1175/BAMS-86-2-225
+    .. [Lawrence2005] Lawrence, M.G. (2005). The Relationship between Relative Humidity and the Dewpoint Temperature in Moist Air: A Simple Conversion and Applications. Bull. Amer. Meteor. Soc., 86, 225–234, https://doi.org/10.1175/BAMS-86-2-225
+    .. [BohrenAlbrecht1998] Craig F. Bohren, Bruce A. Albrecht. Atmospheric Thermodynamics. Oxford University Press, 1998.
     """
-    if dtas is not None and method != "dewpoint":
-        raise ValueError(
-            "If the dewpoint temperature (dtas) is passed, method must be set to 'dewpoint'"
-        )
 
-    if method == "dewpoint":
+    if method in ("bohren98", "BA90"):
+        if dtas is None:
+            raise ValueError("To use method 'bohren98' (BA98), dewpoint must be given.")
         dtas = convert_units_to(dtas, "degK")
         tas = convert_units_to(tas, "degK")
         L = 2.501e6
         Rw = (461.5,)
         rh = 100 * np.exp(-L * (tas - dtas) / (Rw * tas * dtas))
+    elif dtas is not None:
+        e_sat_dt = saturation_vapor_pressure(
+            tas=dtas, ice_thresh=ice_thresh, method=method
+        )
+        e_sat_t = saturation_vapor_pressure(
+            tas=tas, ice_thresh=ice_thresh, method=method
+        )
+        rh = 100 * e_sat_dt / e_sat_t
     else:
         ps = convert_units_to(ps, "Pa")
         huss = convert_units_to(huss, "")
@@ -386,7 +399,7 @@ def specific_humidity(
     ice_thresh : str
         Threshold temperature under which to switch to equations in reference to ice instead of water.
         If None (default) everything is computed with reference to water.
-    method : {"dewpoint", "goffgratch46", "sonntag90", "tetens30", "wmo08"}
+    method : {"goffgratch46", "sonntag90", "tetens30", "wmo08"}
         Which method to use, see notes of this function and of `saturation_vapor_pressure`.
     invalid_values : {"clip", "mask", None}
         What to do with values larger than the saturation specific humidity and lower than 0.
diff --git a/xclim/subset.py b/xclim/subset.py
index 281e6977..cb764868 100644
--- a/xclim/subset.py
+++ b/xclim/subset.py
@@ -555,9 +555,9 @@ def subset_shape(
         poly.geometry = poly.buffer(buffer)
 
     # Get the shape's bounding box.
-    bounds = poly.bounds
-    lon_bnds = (float(bounds.minx.values), float(bounds.maxx.values))
-    lat_bnds = (float(bounds.miny.values), float(bounds.maxy.values))
+    minx, miny, maxx, maxy = poly.total_bounds
+    lon_bnds = (minx, maxx)
+    lat_bnds = (miny, maxy)
 
     # If polygon doesn't cross prime meridian, subset bbox first to reduce processing time
     # Only case not implemented is when lon_bnds cross the 0 deg meridian but dataset grid has all positive lons

Error converting array to scalars in subset.subset_shape
* xclim version: 0.16.0
* Python version: PAVICS
* Operating System: PAVICS

### Description
I was subsetting a shapefile to be used to calculate ensemble percentiles. The shapefile has multiple watershed sub-boundaries.


### What I Did
```python 
import geopandas as gpd
shp = 'GIS-Data/Beaver.shp'
gdf = gpd.GeoDataFrame.from_file(shp)

# use more percentiles in this example
perc_val = [5, 10, 25, 50, 75, 90, 95]

fig = gdf.plot(facecolor='white')
with ProgressBar():
    dsEnsPoly = subset.subset_shape(dsEns, shape=shp)
    dsPercPoly = ensembles.ensemble_percentiles(dsEnsPoly, values=perc_val)
```
### What I Received
```python
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-30-5aaec4dd7e8c> in <module>
     10 fig = gdf.plot(facecolor='white')
     11 with ProgressBar():
---> 12     dsEnsPoly = subset.subset_shape(dsEns, shape=shp)
     13     dsPercPoly = ensembles.ensemble_percentiles(dsEnsPoly, values=perc_val)
     14     dsPercPoly.sel(time='2041').tg_mean_p50.plot()

/usr/local/envs/birdy/lib/python3.7/site-packages/xclim/subset.py in func_checker(*args, **kwargs)
    206             formatted_args.append(argument)
    207 
--> 208         final = func(*formatted_args, **kwargs)
    209 
    210         for k, v in conv.items():

/usr/local/envs/birdy/lib/python3.7/site-packages/xclim/subset.py in subset_shape(ds, shape, raster_crs, shape_crs, buffer, wrap_lons, start_date, end_date)
    477     # Get the shape's bounding box
    478     bounds = poly.bounds
--> 479     lon_bnds = (float(bounds.minx.values), float(bounds.maxx.values))
    480     lat_bnds = (float(bounds.miny.values), float(bounds.maxy.values))
    481 

TypeError: only size-1 arrays can be converted to Python scalars
```

### Further Investigation
```python
poly = gpd.GeoDataFrame.from_file('GIS-Data/Aguasabon_Project.shp')
poly
bounds = poly.bounds
bounds
#float(min(bounds.minx.values))
#float(max(bounds.maxx.values))
```
minx	miny	maxx	maxy
0	-87.464326	49.216421	-86.632188	49.816493
1	-87.441197	49.067714	-86.342397	50.158592
2	-87.347309	48.771573	-86.930992	49.280212

The last two comments could fix the issue if they meet the intent of the rest of the code.

diff --git a/tests/test_atmos.py b/tests/test_atmos.py
index 5d0f57a1..670e16ed 100644
--- a/tests/test_atmos.py
+++ b/tests/test_atmos.py
@@ -28,7 +28,7 @@ def test_relative_humidity_dewpoint(tas_series, rh_series):
             dtas=tas_series(np.array([-15, -10, -2, 5, 10, 20, 29, 20, 30]) + K2C),
         ),
         rh_series([np.nan, 100, 93, 71, 52, 73, 94, 31, 20]),
-        rtol=0.01,
+        rtol=0.02,
         atol=1,
     )
 
diff --git a/tests/test_indices.py b/tests/test_indices.py
index 21e7a7ce..10e7afbb 100644
--- a/tests/test_indices.py
+++ b/tests/test_indices.py
@@ -1150,20 +1150,25 @@ class TestWindConversion:
         )
 
 
+@pytest.mark.parametrize(
+    "method", ["bohren98", "tetens30", "sonntag90", "goffgratch46", "wmo08"]
+)
 @pytest.mark.parametrize(
     "invalid_values,exp0", [("clip", 100), ("mask", np.nan), (None, 151)]
 )
-def test_relative_humidity_dewpoint(tas_series, rh_series, invalid_values, exp0):
+def test_relative_humidity_dewpoint(
+    tas_series, rh_series, method, invalid_values, exp0
+):
     np.testing.assert_allclose(
         xci.relative_humidity(
             tas=tas_series(np.array([-20, -10, -1, 10, 20, 25, 30, 40, 60]) + K2C),
             dtas=tas_series(np.array([-15, -10, -2, 5, 10, 20, 29, 20, 30]) + K2C),
-            method="dewpoint",
+            method=method,
             invalid_values=invalid_values,
         ),
         # Expected values obtained by hand calculation
         rh_series([exp0, 100, 93, 71, 52, 73, 94, 31, 20]),
-        rtol=0.01,
+        rtol=0.02,
         atol=1,
     )
 
diff --git a/tests/test_subset.py b/tests/test_subset.py
index 25c73870..4f0e2c95 100644
--- a/tests/test_subset.py
+++ b/tests/test_subset.py
@@ -769,6 +769,13 @@ class TestSubsetShape:
         assert all(vals == [0, 1, 2])
         assert all(counts == [58, 250, 22])
 
+    def test_subset_multiregions(self):
+        ds = xr.open_dataset(self.nc_file)
+        regions = gpd.read_file(self.multi_regions_geojson)
+        regions.set_index("id")
+        ds_sub = subset.subset_shape(ds, shape=regions)
+        assert ds_sub.notnull().sum() == 58 + 250 + 22
+
 
 class TestDistance:
     def test_values(self):

environment.yml
pip install -e .[dev]
parse_log_pytest
environment.yml
pytest pytest-cov coveralls
apt-get update apt-get install -y gcc
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///home/conda/feedstock_root/build_artifacts/attrs_1671632566681/work
bleach==4.1.0
bokeh @ file:///home/conda/feedstock_root/build_artifacts/bokeh_1625756939897/work
boltons @ file:///home/conda/feedstock_root/build_artifacts/boltons_1622121478442/work
Bottleneck @ file:///home/conda/feedstock_root/build_artifacts/bottleneck_1629826550175/work
bump2version==1.0.1
certifi==2021.5.30
cffi==1.15.1
cfgv==3.3.1
cftime @ file:///home/conda/feedstock_root/build_artifacts/cftime_1632539733990/work
charset-normalizer==2.0.12
click==7.1.2
click-plugins==1.1.1
cligj @ file:///home/conda/feedstock_root/build_artifacts/cligj_1633637764473/work
cloudpickle @ file:///home/conda/feedstock_root/build_artifacts/cloudpickle_1674202310934/work
colorama==0.4.5
contextvars==2.4
coverage==6.2
coveralls==3.3.1
cryptography==40.0.2
cycler @ file:///home/conda/feedstock_root/build_artifacts/cycler_1635519461629/work
cytoolz==0.11.0
dask @ file:///home/conda/feedstock_root/build_artifacts/dask-core_1614995065708/work
distlib==0.3.9
distributed @ file:///home/conda/feedstock_root/build_artifacts/distributed_1615002625500/work
docopt==0.6.2
docutils==0.18.1
filelock==3.4.1
Fiona==1.8.20
flake8==5.0.4
fsspec @ file:///home/conda/feedstock_root/build_artifacts/fsspec_1674184942191/work
GDAL==3.3.0
geojson==2.5.0
geopandas @ file:///home/conda/feedstock_root/build_artifacts/geopandas_1623249625470/work
HeapDict==1.0.1
identify==2.4.4
idna==3.10
immutables @ file:///home/conda/feedstock_root/build_artifacts/immutables_1628601257972/work
importlib-metadata==4.2.0
importlib-resources==5.2.3
iniconfig==1.1.1
jeepney==0.7.1
Jinja2 @ file:///home/conda/feedstock_root/build_artifacts/jinja2_1636510082894/work
joblib @ file:///home/conda/feedstock_root/build_artifacts/joblib_1663332044897/work
keyring==23.4.1
kiwisolver @ file:///home/conda/feedstock_root/build_artifacts/kiwisolver_1610099771815/work
llvmlite==0.36.0
locket @ file:///home/conda/feedstock_root/build_artifacts/locket_1650660393415/work
mapclassify @ file:///home/conda/feedstock_root/build_artifacts/mapclassify_1673861555770/work
MarkupSafe @ file:///home/conda/feedstock_root/build_artifacts/markupsafe_1621455668064/work
matplotlib @ file:///home/conda/feedstock_root/build_artifacts/matplotlib-suite_1611858699142/work
mccabe==0.7.0
msgpack @ file:///home/conda/feedstock_root/build_artifacts/msgpack-python_1610121702224/work
munch==2.5.0
netCDF4 @ file:///home/conda/feedstock_root/build_artifacts/netcdf4_1624308175279/work
networkx @ file:///home/conda/feedstock_root/build_artifacts/networkx_1646092782768/work
nodeenv==1.6.0
numba @ file:///home/conda/feedstock_root/build_artifacts/numba_1623568542230/work
numpy @ file:///home/conda/feedstock_root/build_artifacts/numpy_1626681920064/work
olefile @ file:///home/conda/feedstock_root/build_artifacts/olefile_1602866521163/work
packaging @ file:///home/conda/feedstock_root/build_artifacts/packaging_1637239678211/work
pandas==1.1.5
partd @ file:///home/conda/feedstock_root/build_artifacts/partd_1617910651905/work
Pillow @ file:///home/conda/feedstock_root/build_artifacts/pillow_1621287993989/work
Pint @ file:///home/conda/feedstock_root/build_artifacts/pint_1630435029884/work
pkginfo==1.10.0
platformdirs==2.4.0
pluggy==1.0.0
pre-commit==2.17.0
psutil @ file:///home/conda/feedstock_root/build_artifacts/psutil_1610127101219/work
py==1.11.0
pycodestyle==2.9.1
pycparser==2.21
pyflakes==2.5.0
Pygments==2.14.0
pyparsing @ file:///home/conda/feedstock_root/build_artifacts/pyparsing_1724616129934/work
pyproj @ file:///home/conda/feedstock_root/build_artifacts/pyproj_1614934904503/work
pytest==7.0.1
pytest-cov==4.0.0
pytest-runner==5.3.2
python-dateutil @ file:///home/conda/feedstock_root/build_artifacts/python-dateutil_1626286286081/work
pytz @ file:///home/conda/feedstock_root/build_artifacts/pytz_1693930252784/work
PyYAML==5.4.1
readme-renderer==34.0
requests==2.27.1
requests-toolbelt==1.0.0
rfc3986==1.5.0
Rtree @ file:///home/conda/feedstock_root/build_artifacts/rtree_1610147153210/work
scikit-learn @ file:///home/conda/feedstock_root/build_artifacts/scikit-learn_1630910533947/work
scipy @ file:///home/conda/feedstock_root/build_artifacts/scipy_1629411471490/work
SecretStorage==3.3.3
Shapely @ file:///home/conda/feedstock_root/build_artifacts/shapely_1628205367507/work
six @ file:///home/conda/feedstock_root/build_artifacts/six_1620240208055/work
sortedcontainers @ file:///home/conda/feedstock_root/build_artifacts/sortedcontainers_1621217038088/work
tblib @ file:///home/conda/feedstock_root/build_artifacts/tblib_1616261298899/work
threadpoolctl @ file:///home/conda/feedstock_root/build_artifacts/threadpoolctl_1643647933166/work
toml==0.10.2
tomli==1.2.3
toolz @ file:///home/conda/feedstock_root/build_artifacts/toolz_1657485559105/work
tornado @ file:///home/conda/feedstock_root/build_artifacts/tornado_1610094701020/work
tox==3.28.0
tqdm==4.64.1
twine==3.8.0
typing_extensions @ file:///home/conda/feedstock_root/build_artifacts/typing_extensions_1644850595256/work
urllib3==1.26.20
virtualenv==20.16.2
watchdog==2.3.1
webencodings==0.5.1
xarray @ file:///home/conda/feedstock_root/build_artifacts/xarray_1621474818012/work
-e git+https://github.com/Ouranosinc/xclim.git@04dd41642ad2f5bd10c44c5501e1a6351f74ad57#egg=xclim
zict==2.0.0
zipp @ file:///home/conda/feedstock_root/build_artifacts/zipp_1633302054558/work

name: xclim
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.2.0=pyh71513ae_0
  - bokeh=2.3.3=py36h5fab9bb_0
  - boltons=21.0.0=pyhd8ed1ab_0
  - boost-cpp=1.74.0=hc6e9bd1_3
  - bottleneck=1.3.2=py36he33b4a0_4
  - bzip2=1.0.8=h7f98852_4
  - c-ares=1.18.1=h7f98852_0
  - ca-certificates=2025.2.25=h06a4308_0
  - cairo=1.16.0=h6cf1ce9_1008
  - certifi=2021.5.30=py36h06a4308_0
  - cfitsio=3.470=hb418390_7
  - cftime=1.5.1=py36he33b4a0_0
  - click=7.1.2=pyh9f0ad1d_0
  - click-plugins=1.1.1=py_0
  - cligj=0.7.2=pyhd8ed1ab_1
  - cloudpickle=2.2.1=pyhd8ed1ab_0
  - contextvars=2.4=py_0
  - curl=7.79.1=h2574ce0_1
  - cycler=0.11.0=pyhd8ed1ab_0
  - cytoolz=0.11.0=py36h8f6f2f9_3
  - dask=2021.3.0=pyhd8ed1ab_0
  - dask-core=2021.3.0=pyhd8ed1ab_0
  - distributed=2021.3.0=py36h5fab9bb_0
  - expat=2.4.8=h27087fc_0
  - fiona=1.8.20=py36he9df7c8_1
  - fontconfig=2.14.0=h8e229c2_0
  - freetype=2.10.4=h0708190_1
  - freexl=1.0.6=h7f98852_0
  - fsspec=2023.1.0=pyhd8ed1ab_0
  - gdal=3.3.0=py36h5febb71_1
  - geojson=2.5.0=py_0
  - geopandas=0.9.0=pyhd8ed1ab_1
  - geopandas-base=0.9.0=pyhd8ed1ab_1
  - geos=3.9.1=h9c3ff4c_2
  - geotiff=1.6.0=hcf90da6_5
  - gettext=0.19.8.1=h0b5b191_1005
  - giflib=5.2.1=h36c2ea0_2
  - hdf4=4.2.15=h10796ff_3
  - hdf5=1.10.6=nompi_h6a2412b_1114
  - heapdict=1.0.1=py_0
  - icu=68.2=h9c3ff4c_0
  - immutables=0.16=py36h8f6f2f9_0
  - importlib_metadata=4.8.1=hd8ed1ab_1
  - jinja2=3.0.3=pyhd8ed1ab_0
  - joblib=1.2.0=pyhd8ed1ab_0
  - jpeg=9e=h166bdaf_1
  - json-c=0.15=h98cffda_0
  - kealib=1.4.14=hcc255d8_2
  - keyutils=1.6.1=h166bdaf_0
  - kiwisolver=1.3.1=py36h605e78d_1
  - krb5=1.19.3=h3790be6_0
  - lcms2=2.12=hddcbb42_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libblas=3.9.0=16_linux64_openblas
  - libcblas=3.9.0=16_linux64_openblas
  - libcurl=7.79.1=h2574ce0_1
  - libdap4=3.20.6=hd7c4107_2
  - libedit=3.1.20191231=he28a2e2_2
  - libev=4.33=h516909a_1
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgdal=3.3.0=h679344c_1
  - libgfortran-ng=13.2.0=h69a702a_0
  - libgfortran5=13.2.0=ha4646dd_0
  - libglib=2.68.4=h3e27bee_0
  - libgomp=11.2.0=h1234567_1
  - libiconv=1.17=h166bdaf_0
  - libkml=1.3.0=h238a007_1014
  - liblapack=3.9.0=16_linux64_openblas
  - libllvm10=10.0.1=he513fc3_3
  - libnetcdf=4.8.0=nompi_hcd642e3_103
  - libnghttp2=1.43.0=h812cca2_1
  - libnsl=2.0.0=h7f98852_0
  - libopenblas=0.3.21=h043d6bf_0
  - libpng=1.6.37=h21135ba_2
  - libpq=13.3=hd57d9b9_0
  - librttopo=1.1.0=h1185371_6
  - libspatialindex=1.9.3=h9c3ff4c_4
  - libspatialite=5.0.1=h20cb978_4
  - libssh2=1.10.0=ha56f1ee_2
  - libstdcxx-ng=11.2.0=h1234567_1
  - libtiff=4.2.0=hbd63e13_2
  - libuuid=2.32.1=h7f98852_1000
  - libwebp-base=1.2.2=h7f98852_1
  - libxcb=1.13=h7f98852_1004
  - libxml2=2.9.12=h72842e0_0
  - libzip=1.8.0=h4de3113_1
  - llvmlite=0.36.0=py36h05121d2_0
  - locket=1.0.0=pyhd8ed1ab_0
  - lz4-c=1.9.3=h9c3ff4c_1
  - mapclassify=2.5.0=pyhd8ed1ab_1
  - markupsafe=2.0.1=py36h8f6f2f9_0
  - matplotlib-base=3.3.4=py36hd391965_0
  - msgpack-python=1.0.2=py36h605e78d_1
  - munch=2.5.0=py_0
  - ncurses=6.4=h6a678d5_0
  - netcdf4=1.5.7=nompi_py36h3d597d4_100
  - networkx=2.7=pyhd8ed1ab_0
  - numba=0.53.1=py36h1328434_1
  - numpy=1.19.5=py36hfc0c790_2
  - olefile=0.46=pyh9f0ad1d_1
  - openjpeg=2.4.0=hb52868f_1
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd8ed1ab_0
  - pandas=1.1.5=py36h284efc9_0
  - partd=1.2.0=pyhd8ed1ab_0
  - pcre=8.45=h9c3ff4c_0
  - pillow=8.2.0=py36ha6010c0_1
  - pint=0.17=pyhd8ed1ab_1
  - pip=21.2.2=py36h06a4308_0
  - pixman=0.40.0=h36c2ea0_0
  - poppler=21.03.0=h93df280_0
  - poppler-data=0.4.12=hd8ed1ab_0
  - postgresql=13.3=h2510834_0
  - proj=8.0.0=h277dcde_0
  - psutil=5.8.0=py36h8f6f2f9_1
  - pthread-stubs=0.4=h36c2ea0_1001
  - pyparsing=3.1.4=pyhd8ed1ab_0
  - pyproj=3.0.1=py36h6e9aebd_1
  - python=3.6.13=h12debd9_1
  - python-dateutil=2.8.2=pyhd8ed1ab_0
  - python_abi=3.6=2_cp36m
  - pytz=2023.3.post1=pyhd8ed1ab_0
  - pyyaml=5.4.1=py36h8f6f2f9_1
  - readline=8.2=h5eee18b_0
  - rtree=0.9.7=py36hb415506_1
  - scikit-learn=0.24.2=py36hc89565f_1
  - scipy=1.5.3=py36h81d768a_1
  - setuptools=58.0.4=py36h06a4308_0
  - shapely=1.7.1=py36hff28ebb_5
  - six=1.16.0=pyh6c4a22f_0
  - sortedcontainers=2.4.0=pyhd8ed1ab_0
  - sqlite=3.45.3=h5eee18b_0
  - tblib=1.7.0=pyhd8ed1ab_0
  - threadpoolctl=3.1.0=pyh8a188c0_0
  - tiledb=2.2.9=h91fcb0e_0
  - tk=8.6.14=h39e8969_0
  - toolz=0.12.0=pyhd8ed1ab_0
  - tornado=6.1=py36h8f6f2f9_1
  - typing-extensions=4.1.1=hd8ed1ab_0
  - typing_extensions=4.1.1=pyha770c72_0
  - tzcode=2022a=h166bdaf_0
  - tzdata=2025b=h78e105d_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xarray=0.18.2=pyhd8ed1ab_0
  - xerces-c=3.2.3=h9d8b166_3
  - xorg-kbproto=1.0.7=h7f98852_1002
  - 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-libxdmcp=1.1.3=h7f98852_0
  - xorg-libxext=1.3.4=h7f98852_1
  - xorg-libxrender=0.9.10=h7f98852_1003
  - xorg-renderproto=0.11.1=h7f98852_1002
  - xorg-xextproto=7.3.0=h7f98852_1002
  - xorg-xproto=7.0.31=h7f98852_1007
  - xz=5.6.4=h5eee18b_1
  - yaml=0.2.5=h7f98852_2
  - zict=2.0.0=py_0
  - zipp=3.6.0=pyhd8ed1ab_0
  - zlib=1.2.13=h5eee18b_1
  - zstd=1.4.9=ha95c52a_0
  - pip:
      - bleach==4.1.0
      - bump2version==1.0.1
      - cffi==1.15.1
      - cfgv==3.3.1
      - charset-normalizer==2.0.12
      - colorama==0.4.5
      - coverage==6.2
      - coveralls==3.3.1
      - cryptography==40.0.2
      - distlib==0.3.9
      - docopt==0.6.2
      - docutils==0.18.1
      - filelock==3.4.1
      - flake8==5.0.4
      - identify==2.4.4
      - idna==3.10
      - importlib-metadata==4.2.0
      - importlib-resources==5.2.3
      - iniconfig==1.1.1
      - jeepney==0.7.1
      - keyring==23.4.1
      - mccabe==0.7.0
      - nodeenv==1.6.0
      - pkginfo==1.10.0
      - platformdirs==2.4.0
      - pluggy==1.0.0
      - pre-commit==2.17.0
      - py==1.11.0
      - pycodestyle==2.9.1
      - pycparser==2.21
      - pyflakes==2.5.0
      - pygments==2.14.0
      - pytest==7.0.1
      - pytest-cov==4.0.0
      - pytest-runner==5.3.2
      - readme-renderer==34.0
      - requests==2.27.1
      - requests-toolbelt==1.0.0
      - rfc3986==1.5.0
      - secretstorage==3.3.3
      - toml==0.10.2
      - tomli==1.2.3
      - tox==3.28.0
      - tqdm==4.64.1
      - twine==3.8.0
      - urllib3==1.26.20
      - virtualenv==20.16.2
      - watchdog==2.3.1
      - webencodings==0.5.1
prefix: /opt/conda/envs/xclim

tests/test_indices.py::test_relative_humidity_dewpoint[clip-100-bohren98] tests/test_indices.py::test_relative_humidity_dewpoint[clip-100-tetens30] tests/test_indices.py::test_relative_humidity_dewpoint[clip-100-sonntag90] tests/test_indices.py::test_relative_humidity_dewpoint[clip-100-goffgratch46] tests/test_indices.py::test_relative_humidity_dewpoint[clip-100-wmo08] tests/test_indices.py::test_relative_humidity_dewpoint[mask-nan-bohren98] tests/test_indices.py::test_relative_humidity_dewpoint[mask-nan-tetens30] tests/test_indices.py::test_relative_humidity_dewpoint[mask-nan-sonntag90] tests/test_indices.py::test_relative_humidity_dewpoint[mask-nan-goffgratch46] tests/test_indices.py::test_relative_humidity_dewpoint[mask-nan-wmo08] tests/test_indices.py::test_relative_humidity_dewpoint[None-151-bohren98] tests/test_indices.py::test_relative_humidity_dewpoint[None-151-tetens30] tests/test_indices.py::test_relative_humidity_dewpoint[None-151-sonntag90] tests/test_indices.py::test_relative_humidity_dewpoint[None-151-goffgratch46] tests/test_indices.py::test_relative_humidity_dewpoint[None-151-wmo08] tests/test_subset.py::TestSubsetShape::test_subset_multiregions
tests/test_indices.py::TestTnDaysBelow::test_simple tests/test_indices.py::TestRainOnFrozenGround::test_simple tests/test_indices.py::TestRainOnFrozenGround::test_small_rain tests/test_indices.py::TestRainOnFrozenGround::test_consecutive_rain
tests/test_atmos.py::test_wind_speed_from_vectors tests/test_atmos.py::test_relative_humidity_dewpoint tests/test_atmos.py::test_saturation_vapor_pressure tests/test_atmos.py::test_relative_humidity tests/test_atmos.py::test_specific_humidity tests/test_indices.py::TestBaseFlowIndex::test_simple tests/test_indices.py::TestMaxNDayPrecipitationAmount::test_single_max tests/test_indices.py::TestMaxNDayPrecipitationAmount::test_sumlength_max tests/test_indices.py::TestMaxNDayPrecipitationAmount::test_multi_max tests/test_indices.py::TestMax1DayPrecipitationAmount::test_single_max tests/test_indices.py::TestMax1DayPrecipitationAmount::test_multi_max tests/test_indices.py::TestMax1DayPrecipitationAmount::test_uniform_max tests/test_indices.py::TestColdSpellDurationIndex::test_simple tests/test_indices.py::TestColdSpellDays::test_simple tests/test_indices.py::TestConsecutiveFrostDays::test_one_freeze_day tests/test_indices.py::TestConsecutiveFrostDays::test_no_freeze tests/test_indices.py::TestConsecutiveFrostDays::test_all_year_freeze tests/test_indices.py::TestMaximumConsecutiveFrostFreeDays::test_one_freeze_day tests/test_indices.py::TestMaximumConsecutiveFrostFreeDays::test_two_freeze_days_with_threshold tests/test_indices.py::TestMaximumConsecutiveFrostFreeDays::test_no_freeze tests/test_indices.py::TestMaximumConsecutiveFrostFreeDays::test_all_year_freeze tests/test_indices.py::TestCoolingDegreeDays::test_no_cdd tests/test_indices.py::TestCoolingDegreeDays::test_cdd tests/test_indices.py::TestDailyFreezeThawCycles::test_simple tests/test_indices.py::TestDailyFreezeThawCycles::test_zeroed_thresholds tests/test_indices.py::TestDailyPrIntensity::test_simple tests/test_indices.py::TestDailyPrIntensity::test_mm tests/test_indices.py::TestLastSpringFrost::test_simple tests/test_indices.py::TestDaysOverPrecipThresh::test_simple tests/test_indices.py::TestDaysOverPrecipThresh::test_quantile tests/test_indices.py::TestDaysOverPrecipThresh::test_nd tests/test_indices.py::TestFreshetStart::test_simple tests/test_indices.py::TestFreshetStart::test_no_start tests/test_indices.py::TestGrowingDegreeDays::test_simple tests/test_indices.py::TestGrowingSeasonEnd::test_varying_mid_dates[1950-01-01-1951-01-01-07-01-nan] tests/test_indices.py::TestGrowingSeasonEnd::test_varying_mid_dates[2000-01-01-2000-12-31-07-01-365] tests/test_indices.py::TestGrowingSeasonEnd::test_varying_mid_dates[2000-07-10-2001-01-01-07-01-nan] tests/test_indices.py::TestGrowingSeasonEnd::test_varying_mid_dates[2000-06-15-2000-07-15-07-01-198] tests/test_indices.py::TestGrowingSeasonEnd::test_varying_mid_dates[2000-06-15-2000-07-25-07-15-208] tests/test_indices.py::TestGrowingSeasonEnd::test_varying_mid_dates[2000-06-15-2000-07-15-10-01-274] tests/test_indices.py::TestGrowingSeasonEnd::test_varying_mid_dates[2000-06-15-2000-07-15-01-10-nan] tests/test_indices.py::TestGrowingSeasonLength::test_simple[1950-01-01-1951-01-01-0] tests/test_indices.py::TestGrowingSeasonLength::test_simple[2000-01-01-2000-12-31-365] tests/test_indices.py::TestGrowingSeasonLength::test_simple[2000-07-10-2001-01-01-nan] tests/test_indices.py::TestGrowingSeasonLength::test_simple[2000-06-15-2001-01-01-199] tests/test_indices.py::TestGrowingSeasonLength::test_simple[2000-06-15-2000-07-15-31] tests/test_indices.py::TestGrowingSeasonLength::test_southhemisphere tests/test_indices.py::TestHeatingDegreeDays::test_simple tests/test_indices.py::TestHeatWaveIndex::test_simple tests/test_indices.py::TestHeatWaveFrequency::test_1d[22 tests/test_indices.py::TestHeatWaveFrequency::test_1d[10 tests/test_indices.py::TestHeatWaveFrequency::test_1d[40 tests/test_indices.py::TestHeatWaveMaxLength::test_1d[22 tests/test_indices.py::TestHeatWaveMaxLength::test_1d[10 tests/test_indices.py::TestHeatWaveMaxLength::test_1d[40 tests/test_indices.py::TestHeatWaveTotalLength::test_1d[22 tests/test_indices.py::TestHeatWaveTotalLength::test_1d[10 tests/test_indices.py::TestHeatWaveTotalLength::test_1d[40 tests/test_indices.py::TestHotSpellFrequency::test_1d[30 tests/test_indices.py::TestHotSpellFrequency::test_1d[10 tests/test_indices.py::TestHotSpellFrequency::test_1d[40 tests/test_indices.py::TestHotSpellMaxLength::test_1d[30 tests/test_indices.py::TestHotSpellMaxLength::test_1d[10 tests/test_indices.py::TestHotSpellMaxLength::test_1d[40 tests/test_indices.py::TestTxDaysAbove::test_simple tests/test_indices.py::TestLiquidPrecipitationRatio::test_simple tests/test_indices.py::TestMaximumConsecutiveDryDays::test_simple tests/test_indices.py::TestMaximumConsecutiveDryDays::test_run_start_at_0 tests/test_indices.py::TestMaximumConsecutiveTxDays::test_simple tests/test_indices.py::TestPrecipAccumulation::test_simple tests/test_indices.py::TestPrecipAccumulation::test_yearly tests/test_indices.py::TestPrecipAccumulation::test_mixed_phases tests/test_indices.py::TestTGXN10p::test_tg10p_simple tests/test_indices.py::TestTGXN10p::test_tx10p_simple tests/test_indices.py::TestTGXN10p::test_tn10p_simple tests/test_indices.py::TestTGXN10p::test_doy_interpolation tests/test_indices.py::TestTGXN90p::test_tg90p_simple tests/test_indices.py::TestTGXN90p::test_tx90p_simple tests/test_indices.py::TestTGXN90p::test_tn90p_simple tests/test_indices.py::TestTas::test_tas[K-K] tests/test_indices.py::TestTas::test_tas[K-degC] tests/test_indices.py::TestTas::test_tas[degC-K] tests/test_indices.py::TestTas::test_tas[degC-degC] tests/test_indices.py::TestTxMin::test_simple tests/test_indices.py::TestTxMean::test_attrs tests/test_indices.py::TestTxMax::test_simple tests/test_indices.py::TestTgMaxTgMinIndices::test_static_daily_temperature_range tests/test_indices.py::TestTgMaxTgMinIndices::test_static_variable_daily_temperature_range tests/test_indices.py::TestTgMaxTgMinIndices::test_static_extreme_temperature_range tests/test_indices.py::TestTgMaxTgMinIndices::test_uniform_freeze_thaw_cycles tests/test_indices.py::TestTgMaxTgMinIndices::test_static_freeze_thaw_cycles tests/test_indices.py::TestWarmDayFrequency::test_1d tests/test_indices.py::TestWarmNightFrequency::test_1d tests/test_indices.py::TestTxTnDaysAbove::test_1d tests/test_indices.py::TestWarmSpellDurationIndex::test_simple tests/test_indices.py::TestWinterRainRatio::test_simple tests/test_indices.py::TestTG::test_cmip3_tgmean tests/test_indices.py::TestTG::test_cmip3_tgmin tests/test_indices.py::TestTG::test_cmip3_tgmax tests/test_indices.py::TestTG::test_indice_against_icclim tests/test_indices.py::TestWindConversion::test_uas_vas_2_sfcwind tests/test_indices.py::TestWindConversion::test_sfcwind_2_uas_vas tests/test_indices.py::test_saturation_vapor_pressure[None-exp00-tetens30] tests/test_indices.py::test_saturation_vapor_pressure[None-exp00-sonntag90] tests/test_indices.py::test_saturation_vapor_pressure[None-exp00-goffgratch46] tests/test_indices.py::test_saturation_vapor_pressure[None-exp00-wmo08] tests/test_indices.py::test_saturation_vapor_pressure[0 tests/test_indices.py::test_relative_humidity[clip-100-tetens30] tests/test_indices.py::test_relative_humidity[clip-100-sonntag90] tests/test_indices.py::test_relative_humidity[clip-100-goffgratch46] tests/test_indices.py::test_relative_humidity[clip-100-wmo08] tests/test_indices.py::test_relative_humidity[mask-nan-tetens30] tests/test_indices.py::test_relative_humidity[mask-nan-sonntag90] tests/test_indices.py::test_relative_humidity[mask-nan-goffgratch46] tests/test_indices.py::test_relative_humidity[mask-nan-wmo08] tests/test_indices.py::test_relative_humidity[None-188-tetens30] tests/test_indices.py::test_relative_humidity[None-188-sonntag90] tests/test_indices.py::test_relative_humidity[None-188-goffgratch46] tests/test_indices.py::test_relative_humidity[None-188-wmo08] tests/test_indices.py::test_specific_humidity[clip-0.014-tetens30] tests/test_indices.py::test_specific_humidity[clip-0.014-sonntag90] tests/test_indices.py::test_specific_humidity[clip-0.014-goffgratch46] tests/test_indices.py::test_specific_humidity[clip-0.014-wmo08] tests/test_indices.py::test_specific_humidity[mask-nan-tetens30] tests/test_indices.py::test_specific_humidity[mask-nan-sonntag90] tests/test_indices.py::test_specific_humidity[mask-nan-goffgratch46] tests/test_indices.py::test_specific_humidity[mask-nan-wmo08] tests/test_indices.py::test_specific_humidity[None-0.022-tetens30] tests/test_indices.py::test_specific_humidity[None-0.022-sonntag90] tests/test_indices.py::test_specific_humidity[None-0.022-goffgratch46] tests/test_indices.py::test_specific_humidity[None-0.022-wmo08] tests/test_subset.py::TestSubsetTime::test_simple tests/test_subset.py::TestSubsetTime::test_time_dates_outofbounds tests/test_subset.py::TestSubsetTime::test_warnings tests/test_subset.py::TestSubsetTime::test_time_start_only tests/test_subset.py::TestSubsetTime::test_time_end_only tests/test_subset.py::TestSubsetTime::test_time_incomplete_years tests/test_subset.py::TestSubsetGridPoint::test_time_simple tests/test_subset.py::TestSubsetGridPoint::test_dataset tests/test_subset.py::TestSubsetGridPoint::test_simple[True-lon0-lat0] tests/test_subset.py::TestSubsetGridPoint::test_simple[True-lon1-lat1] tests/test_subset.py::TestSubsetGridPoint::test_simple[False-lon0-lat0] tests/test_subset.py::TestSubsetGridPoint::test_simple[False-lon1-lat1] tests/test_subset.py::TestSubsetGridPoint::test_irregular tests/test_subset.py::TestSubsetGridPoint::test_positive_lons tests/test_subset.py::TestSubsetGridPoint::test_raise tests/test_subset.py::TestSubsetGridPoint::test_tolerance tests/test_subset.py::TestSubsetBbox::test_dataset tests/test_subset.py::TestSubsetBbox::test_simple tests/test_subset.py::TestSubsetBbox::test_irregular tests/test_subset.py::TestSubsetBbox::test_irregular_dataset tests/test_subset.py::TestSubsetBbox::test_inverted_coords tests/test_subset.py::TestSubsetBbox::test_badly_named_latlons tests/test_subset.py::TestSubsetBbox::test_single_bounds_rectilinear tests/test_subset.py::TestSubsetBbox::test_single_bounds_curvilinear tests/test_subset.py::TestSubsetBbox::test_positive_lons tests/test_subset.py::TestSubsetBbox::test_time tests/test_subset.py::TestSubsetBbox::test_raise tests/test_subset.py::TestSubsetBbox::test_warnings tests/test_subset.py::TestSubsetShape::test_wraps[True] tests/test_subset.py::TestSubsetShape::test_wraps[False] tests/test_subset.py::TestSubsetShape::test_no_wraps[True] tests/test_subset.py::TestSubsetShape::test_no_wraps[False] tests/test_subset.py::TestSubsetShape::test_all_neglons tests/test_subset.py::TestSubsetShape::test_rotated_pole_with_time tests/test_subset.py::TestSubsetShape::test_small_poly_buffer tests/test_subset.py::TestSubsetShape::test_mask_multiregions tests/test_subset.py::TestDistance::test_values tests/test_subset.py::TestDistance::test_broadcasting
xclim/subset.py xclim/indices/_conversion.py xclim/indicators/atmos/_conversion.py docs/notebooks/example.ipynb
xclim/subset.py xclim/indices/_conversion.py xclim/indicators/atmos/_conversion.py docs/notebooks/example.ipynb