From 0f0607062ec285b94c1a109e915990f8b7e1df93 Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 7 Jul 2022 13:06:06 -0400 Subject: [PATCH 001/106] update HISTORY.rst --- HISTORY.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/HISTORY.rst b/HISTORY.rst index 533abc68d..b325cfe1b 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -16,6 +16,7 @@ Internal changes ^^^^^^^^^^^^^^^^ * Marked a test (``test_release_notes_file_not_implemented``) that can only pass when source files are available so that it can easily be skipped on conda-forge build tests. (:issue:`1116`, :pull:`1117`). * Split a few YAML strings found in the virtual modules that regularly issued warnings on the code checking CI steps. (:pull:`1118`). +* French indicator translations are now more standardized and follow agreed-upon grammar conventions. (:issue:`936`). 0.37.0 (20 June 2022) --------------------- From a81d65b4e03dbe03f1e7fbeba67821b93d176da4 Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 7 Jul 2022 15:34:56 -0400 Subject: [PATCH 002/106] English indicator metadata cleanup --- xclim/indicators/atmos/_conversion.py | 33 ++-- xclim/indicators/atmos/_precip.py | 145 +++++++------- xclim/indicators/atmos/_synoptic.py | 4 +- xclim/indicators/atmos/_temperature.py | 257 +++++++++++-------------- xclim/indicators/atmos/_wind.py | 2 +- xclim/indicators/land/_snow.py | 30 +-- xclim/indicators/land/_streamflow.py | 14 +- xclim/indices/_multivariate.py | 2 +- 8 files changed, 230 insertions(+), 257 deletions(-) diff --git a/xclim/indicators/atmos/_conversion.py b/xclim/indicators/atmos/_conversion.py index 1d8febac1..19ec25bcd 100644 --- a/xclim/indicators/atmos/_conversion.py +++ b/xclim/indicators/atmos/_conversion.py @@ -38,7 +38,7 @@ class Converter(Indicator): identifier="humidex", units="C", standard_name="air_temperature", - long_name="humidex index", + long_name="Humidex index", description="Humidex index describing the temperature felt by the average person in response to relative humidity.", cell_methods="", compute=indices.humidex, @@ -48,7 +48,7 @@ class Converter(Indicator): identifier="heat_index", units="C", standard_name="air_temperature", - long_name="heat index", + long_name="Heat index", description="Perceived temperature after relative humidity is taken into account.", cell_methods="", compute=indices.heat_index, @@ -75,7 +75,7 @@ class Converter(Indicator): "Wind direction computed as the angle of the (uas, vas) vector." " A direction of 0° is attributed to winds with a speed under {calm_wind_thresh}.", ], - long_name=["Near-Surface Wind Speed", "Near-Surface Wind from Direction"], + long_name=["Near-surface wind speed", "Near-surface wind from direction"], cell_methods="", compute=indices.uas_vas_2_sfcwind, ) @@ -86,7 +86,7 @@ class Converter(Indicator): var_name=["uas", "vas"], units=["m s-1", "m s-1"], standard_name=["eastward_wind", "northward_wind"], - long_name=["Near-Surface Eastward Wind", "Near-Surface Northward Wind"], + long_name=["Near-surface eastward wind", "Near-surface northward wind"], description=[ "Eastward wind speed computed from its speed and direction of origin.", "Northward wind speed computed from its speed and direction of origin.", @@ -101,8 +101,7 @@ class Converter(Indicator): units="Pa", long_name="Saturation vapor pressure", description=lambda **kws: ( - "The saturation vapor pressure was calculated from a temperature " - "according to the {method} method." + "The saturation vapor pressure was calculated from a temperature according to the {method} method." ) + ( " The computation was done in reference to ice for temperatures below {ice_thresh}." @@ -117,7 +116,7 @@ class Converter(Indicator): identifier="hurs_fromdewpoint", units="%", var_name="hurs", - long_name="Relative Humidity", + long_name="Relative humidity", standard_name="relative_humidity", title="Relative humidity from temperature and dewpoint temperature.", description=lambda **kws: ( @@ -143,13 +142,12 @@ class Converter(Indicator): relative_humidity = Converter( identifier="hurs", units="%", - long_name="Relative Humidity", + long_name="Relative humidity", standard_name="relative_humidity", title="Relative humidity from temperature, pressure and specific humidity.", description=lambda **kws: ( - "Computed from temperature, specific humidity and pressure through the " - "saturation vapor pressure, which was calculated from temperature " - "according to the {method} method." + "Computed from temperature, specific humidity and pressure through the saturation vapor pressure, " + "which was calculated from temperature according to the {method} method." ) + ( " The computation was done in reference to ice for temperatures below {ice_thresh}." @@ -169,12 +167,11 @@ class Converter(Indicator): specific_humidity = Converter( identifier="huss", units="", - long_name="Specific Humidity", + long_name="Specific humidity", standard_name="specific_humidity", description=lambda **kws: ( - "Computed from temperature, relative humidity and pressure through the " - "saturation vapor pressure, which was calculated from temperature " - "according to the {method} method." + "Computed from temperature, relative humidity and pressure through the saturation vapor pressure, " + "which was calculated from temperature according to the {method} method." ) + ( " The computation was done in reference to ice for temperatures below {ice_thresh}." @@ -188,7 +185,7 @@ class Converter(Indicator): specific_humidity_from_dewpoint = Converter( identifier="huss_fromdewpoint", units="", - long_name="Specific Humidity", + long_name="Specific humidity", standard_name="specific_humidity", description=( "Computed from dewpoint temperature and pressure through the saturation " @@ -280,7 +277,7 @@ class Converter(Indicator): corn_heat_units = Converter( identifier="corn_heat_units", units="", - long_name="Corn heat units (Tmin > {thresh_tasmin} and Tmax > {thresh_tasmax}).", + long_name="Corn heat units", description="Temperature-based index used to estimate the development of corn crops. " "Corn growth occurs when the minimum and maximum daily temperature both exceeds " "specific thresholds : Tmin > {thresh_tasmin} and Tmax > {thresh_tasmax}.", @@ -293,7 +290,7 @@ class Converter(Indicator): universal_thermal_climate_index = Converter( identifier="utci", units="K", - long_name="Universal Thermal Climate Index", + long_name="Universal thermal climate index", description="UTCI is the equivalent temperature for the environment derived from a reference environment " "and is used to evaluate heat stress in outdoor spaces.", cell_methods="", diff --git a/xclim/indicators/atmos/_precip.py b/xclim/indicators/atmos/_precip.py index 161e4579b..4e3bf1782 100644 --- a/xclim/indicators/atmos/_precip.py +++ b/xclim/indicators/atmos/_precip.py @@ -99,23 +99,19 @@ class HrPrecip(Hourly): rain_on_frozen_ground_days = PrTasxWithIndexing( identifier="rain_frzgr", units="days", - standard_name="number_of_days_with_lwe_thickness_of_" - "precipitation_amount_above_threshold", + standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_above_threshold", long_name="Number of rain on frozen ground days", - description="{freq} number of days with rain above {thresh} " - "after a series of seven days " - "with average daily temperature below 0℃. " - "Precipitation is assumed to be rain when the" - "daily average temperature is above 0℃.", + description="{freq} number of days with rain above {thresh} after a series of seven days with average daily " + "temperature below 0℃. Precipitation is assumed to be rain when the daily average temperature is above 0℃.", cell_methods="", compute=indices.rain_on_frozen_ground_days, ) max_1day_precipitation_amount = PrecipWithIndexing( identifier="rx1day", - units="mm/day", + units="mm d-1", standard_name="lwe_thickness_of_precipitation_amount", - long_name="maximum 1-day total precipitation", + long_name="Maximum 1-day total precipitation", description="{freq} maximum 1-day total precipitation", cell_methods="time: maximum over days", compute=indices.max_1day_precipitation_amount, @@ -126,7 +122,7 @@ class HrPrecip(Hourly): var_name="rx{window}day", units="mm", standard_name="lwe_thickness_of_precipitation_amount", - long_name="maximum {window}-day total precipitation", + long_name="maximum n-day total precipitation", description="{freq} maximum {window}-day total precipitation.", cell_methods="time: maximum over days", compute=indices.max_n_day_precipitation_amount, @@ -136,8 +132,8 @@ class HrPrecip(Hourly): identifier="wetdays", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_at_or_above_threshold", - long_name="Number of wet days (precip >= {thresh})", - description="{freq} number of days with daily precipitation over {thresh}.", + long_name="Number of wet days", + description="{freq} number of days with daily precipitation at or above {thresh}.", cell_methods="time: sum over days", compute=indices.wetdays, ) @@ -145,8 +141,8 @@ class HrPrecip(Hourly): wetdays_prop = PrecipWithIndexing( identifier="wetdays_prop", units="1", - long_name="Proportion of wet days (precip >= {thresh})", - description="{freq} proportion of days with precipitation over {thresh}.", + long_name="Proportion of wet days", + description="{freq} proportion of days with precipitation at or above {thresh}.", cell_methods="time: sum over days", compute=indices.wetdays_prop, ) @@ -155,7 +151,7 @@ class HrPrecip(Hourly): identifier="dry_days", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_below_threshold", - long_name="Number of dry days (precip < {thresh})", + long_name="Number of dry days", description="{freq} number of days with daily precipitation under {thresh}.", cell_methods="time: sum over days", compute=indices.dry_days, @@ -164,11 +160,9 @@ class HrPrecip(Hourly): maximum_consecutive_wet_days = Precip( identifier="cwd", units="days", - standard_name="number_of_days_with_lwe_thickness_of_" - "precipitation_amount_at_or_above_threshold", - long_name="Maximum consecutive wet days (Precip >= {thresh})", - description="{freq} maximum number of consecutive days with daily " - "precipitation over {thresh}.", + standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_at_or_above_threshold", + long_name="Maximum consecutive wet days", + description="{freq} maximum number of consecutive days with daily precipitation at or above {thresh}.", cell_methods="time: sum over days", compute=indices.maximum_consecutive_wet_days, ) @@ -176,32 +170,29 @@ class HrPrecip(Hourly): maximum_consecutive_dry_days = Precip( identifier="cdd", units="days", - standard_name="number_of_days_with_lwe_thickness_of_" - "precipitation_amount_below_threshold", - long_name="Maximum consecutive dry days (Precip < {thresh})", - description="{freq} maximum number of consecutive days with daily " - "precipitation below {thresh}.", + standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_below_threshold", + long_name="Maximum consecutive dry days", + description="{freq} maximum number of consecutive days with daily precipitation below {thresh}.", cell_methods="time: sum over days", compute=indices.maximum_consecutive_dry_days, ) daily_pr_intensity = PrecipWithIndexing( identifier="sdii", - units="mm/day", + units="mm d-1", standard_name="lwe_thickness_of_precipitation_amount", long_name="Average precipitation during wet days (SDII)", - description="{freq} Simple Daily Intensity Index (SDII) : {freq} average precipitation " - "for days with daily precipitation over {thresh}. This indicator is also known as the 'Simple Daily " - "Intensity Index' (SDII).", + description="{freq} average precipitation for days with daily precipitation over {thresh}. " + "This indicator is also known as the 'Simple Daily Intensity Index' (SDII).", cell_methods="", compute=indices.daily_pr_intensity, ) max_pr_intensity = HrPrecip( identifier="max_pr_intensity", - units="mm/h", + units="mm h-1", standard_name="precipitation", - long_name="Maximum precipitation intensity over {window}h duration", + long_name="Maximum precipitation intensity over time window", description="{freq} maximum precipitation intensity over rolling {window}h window.", cell_methods="time: max", compute=indices.max_pr_intensity, @@ -215,7 +206,7 @@ class HrPrecip(Hourly): units="mm", standard_name="lwe_thickness_of_precipitation_amount", long_name="Total precipitation", - description="{freq} total precipitation", + description="{freq} total precipitation.", cell_methods="time: sum over days", compute=indices.precip_accumulation, parameters=dict(tas=None, phase=None), @@ -263,8 +254,9 @@ class HrPrecip(Hourly): identifier="spi", units="", standard_name="spi", - long_name="Standardized Precipitation Index (SPI)", - description="Precipitations over rolling window {window}-X window, normalized such that SPI averages to 0 for calibration data. The window unit `X` is the minimal time period defined by resampling frequency {freq}", + long_name="Standardized precipitation index", + description="Precipitations over rolling window {window}-X window, normalized such that SPI averages to 0 for " + "calibration data. The window unit `X` is the minimal time period defined by resampling frequency {freq}", cell_methods="", compute=indices.standardized_precipitation_index, ) @@ -274,8 +266,10 @@ class HrPrecip(Hourly): identifier="spei", units="", standard_name="spei", - long_name="Standardized Precipitation Evapotranspiration Index (SPEI)", - description="Water budget (precipitation - evapotranspiration) over rolling window {window}-X window, normalized such that SPEI averages to 0 for calibration data. The window unit `X` is the minimal time period defined by resampling frequency {freq}", + long_name="Standardized precipitation evapotranspiration index", + description="Water budget (precipitation - evapotranspiration) over rolling window {window}-X window, normalized " + "such that SPEI averages to 0 for calibration data. The window unit `X` is the minimal time period defined by " + "resampling frequency {freq}", cell_methods="", compute=indices.standardized_precipitation_evapotranspiration_index, ) @@ -304,12 +298,12 @@ class HrPrecip(Hourly): "fire_weather_index", ], long_name=[ - "Drought Code", - "Duff Moisture Code", - "Fine Fuel Moisture Code", - "Initial Spread Index", - "Buildup Index", - "Fire Weather Index", + "Drought code", + "Duff moisture code", + "Fine fuel moisture code", + "Initial spread index", + "Buildup index", + "Fire weather index", ], description=[ "Numeric rating of the average moisture content of deep, compact organic layers.", @@ -329,7 +323,7 @@ class HrPrecip(Hourly): identifier="last_snowfall", standard_name="day_of_year", long_name="Date of last snowfall", - description="{freq} last day where the solid precipitation flux exceeded {thresh}", + description="{freq} last day where the solid precipitation flux exceeded {thresh}.", units="", compute=indices.last_snowfall, ) @@ -338,7 +332,7 @@ class HrPrecip(Hourly): identifier="first_snowfall", standard_name="day_of_year", long_name="Date of first snowfall", - description="{freq} first day where the solid precipitation flux exceeded {thresh}", + description="{freq} first day where the solid precipitation flux exceeded {thresh}.", units="", compute=indices.first_snowfall, ) @@ -346,7 +340,7 @@ class HrPrecip(Hourly): days_with_snow = PrecipWithIndexing( identifier="days_with_snow", title="Days with snowfall", - long_name="Number of days with solid precipitation flux between low and high thresholds.", + long_name="Number of days with solid precipitation flux between low and high thresholds", description="{freq} number of days with solid precipitation flux larger than {low} and smaller or equal to {high}.", units="days", compute=indices.days_with_snow, @@ -355,9 +349,9 @@ class HrPrecip(Hourly): days_over_precip_thresh = PrecipWithIndexing( identifier="days_over_precip_thresh", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_above_threshold", - description="{freq} number of days with precipitation above the {pr_per_thresh}th" - " percentile of {pr_per_period} period." - " Only days with at least {thresh} are counted.", + long_name="Number of days with precipitation flux above base threshold", + description="{freq} number of days with precipitation above the {pr_per_thresh}th percentile of {pr_per_period} " + "period. Only days with at least {thresh} are counted.", units="days", cell_methods="time: sum over days", compute=indices.days_over_precip_thresh, @@ -366,10 +360,10 @@ class HrPrecip(Hourly): days_over_precip_doy_thresh = PrecipWithIndexing( identifier="days_over_precip_doy_thresh", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_above_daily_threshold", - description="{freq} number of days with precipitation above the {pr_per_thresh}th daily percentile." - " Only days with at least {thresh} are counted." - " A {pr_per_window} day(s) window, centred on each calendar day in the" - " {pr_per_period} period, is used to compute the {pr_per_thresh}th percentile(s).", + long_name="Number of days with daily precipitation flux above base threshold", + description="{freq} number of days with precipitation above the {pr_per_thresh}th daily percentile. Only days with " + "at least {thresh} are counted. A {pr_per_window} day(s) window, centered on each calendar day in the " + "{pr_per_period} period, is used to compute the {pr_per_thresh}th percentile(s).", units="days", cell_methods="time: sum over days", compute=indices.days_over_precip_thresh, @@ -377,19 +371,20 @@ class HrPrecip(Hourly): high_precip_low_temp = PrTasxWithIndexing( identifier="high_precip_low_temp", + long_name="Number of days with precipitation above specified threshold and temperature below specified threshold", description="{freq} number of days with precipitation above {pr_thresh} and temperature below {tas_thresh}.", units="days", cell_methods="time: sum over days", compute=indices.high_precip_low_temp, ) +# FIXME: Are fraction_over_precip_thresh and fraction_over_precip_doy_thresh the same thing? fraction_over_precip_doy_thresh = PrecipWithIndexing( identifier="fraction_over_precip_doy_thresh", - description="{freq} fraction of total precipitation due to days with precipitation" - " above {pr_per_thresh}th daily percentile." - " Only days with at least {thresh} are included in the total." - " A {pr_per_window} day(s) window, centred on each calendar day in the" - " {pr_per_period} period, is used to compute the {pr_per_thresh}th percentile(s).", + long_name="Fraction of precipitation due to wet days with daily precipitation over a given percentile", + description="{freq} fraction of total precipitation due to days with precipitation above {pr_per_thresh}th daily " + "percentile. Only days with at least {thresh} are included in the total. A {pr_per_window} day(s) window, centered " + "on each calendar day in the {pr_per_period} period, is used to compute the {pr_per_thresh}th percentile(s).", units="", cell_methods="", compute=indices.fraction_over_precip_thresh, @@ -397,9 +392,9 @@ class HrPrecip(Hourly): fraction_over_precip_thresh = PrecipWithIndexing( identifier="fraction_over_precip_thresh", - description="{freq} fraction of total precipitation due to days with precipitation" - " above {pr_per_thresh}th percentile of {pr_per_period} period." - " Only days with at least {thresh} are included in the total.", + long_name="Fraction of precipitation due to wet days with precipitation over a given percentile", + description="{freq} fraction of total precipitation due to days with precipitation above {pr_per_thresh}th " + "percentile of {pr_per_period} period. Only days with at least {thresh} are included in the total.", units="", cell_methods="", compute=indices.fraction_over_precip_thresh, @@ -407,10 +402,11 @@ class HrPrecip(Hourly): liquid_precip_ratio = PrTasxWithIndexing( identifier="liquid_precip_ratio", - description="{freq} ratio of rainfall to total precipitation." - " Rainfall is estimated as precipitation on days where temperature is above {thresh}.", - abstract="The ratio of total liquid precipitation over the total precipitation. Liquid precipitation is" - " approximated from total precipitation on days where temperature is above a threshold.", + long_name="Ratio of rainfall to total precipitation", + description="The {freq} ratio of rainfall to total precipitation. Rainfall is estimated as precipitation on days " + "where temperature is above {thresh}.", + abstract="The ratio of total liquid precipitation over the total precipitation. Liquid precipitation is " + "approximated from total precipitation on days where temperature is above a threshold.", units="", compute=indices.liquid_precip_ratio, parameters={"tas": {"kind": InputKind.VARIABLE}, "prsn": None}, @@ -419,8 +415,9 @@ class HrPrecip(Hourly): dry_spell_frequency = Precip( identifier="dry_spell_frequency", - description="The {freq} number of dry periods of {window} days and more, during which the {op} precipitation " - "on a window of {window} days is under {thresh}.", + long_name="Dry spell frequency", + description="The {freq} number of dry periods of {window} days and more, during which the {op} precipitation on a " + "window of {window} day(s) is below {thresh}.", units="", cell_methods="", compute=indices.dry_spell_frequency, @@ -429,6 +426,7 @@ class HrPrecip(Hourly): dry_spell_total_length = Precip( identifier="dry_spell_total_length", + long_name="Dry spell total length", description="The {freq} number of days in dry periods of {window} days and more, during which the {op}" "precipitation within windows of {window} days is under {thresh}.", units="days", @@ -438,7 +436,8 @@ class HrPrecip(Hourly): rprctot = PrecipWithIndexing( identifier="rprctot", - description="Proportion of accumulated precipitation arising from convective processes.", + long_name="Proportion of accumulated precipitation arising from convective processes", + description="Proportion of accumulated precipitation arising from convective processes with threshold of {thresh}.", units="", cell_methods="time: sum", compute=indices.rprctot, @@ -458,8 +457,8 @@ class HrPrecip(Hourly): warm_and_dry_days = PrecipWithIndexing( identifier="warm_and_dry_days", units="days", - long_name="warm and dry days", - title="warm and dry days", + long_name="Warm and dry days", + title="Warm and dry days", description="{freq} number of days where tas > {tas_per_thresh}th percentile and pr < {pr_per_thresh}th percentile", cell_methods="time: sum over days", compute=indices.warm_and_dry_days, @@ -468,8 +467,8 @@ class HrPrecip(Hourly): warm_and_wet_days = PrecipWithIndexing( identifier="warm_and_wet_days", units="days", - long_name="warm and wet days", - title="warm and wet days", + long_name="Warm and wet days", + title="Warm and wet days", description="{freq} number of days where tas > {tas_per_thresh}th percentile and pr > {pr_per_thresh}th percentile", cell_methods="time: sum over days", compute=indices.warm_and_wet_days, @@ -478,8 +477,8 @@ class HrPrecip(Hourly): cold_and_wet_days = PrecipWithIndexing( identifier="cold_and_wet_days", units="days", - long_name="cold and wet days", - title="cold and wet days", + long_name="Cold and wet days", + title="Cold and wet days", description="{freq} number of days where tas < {tas_per_thresh}th percentile and pr > {pr_per_thresh}th percentile", cell_methods="time: sum over days", compute=indices.cold_and_wet_days, diff --git a/xclim/indicators/atmos/_synoptic.py b/xclim/indicators/atmos/_synoptic.py index 72e85981d..2911ee112 100644 --- a/xclim/indicators/atmos/_synoptic.py +++ b/xclim/indicators/atmos/_synoptic.py @@ -22,8 +22,8 @@ class JetStream(Indicator): "Maximum strength of smoothed zonal wind speed", ], description=[ - "Daily latitude of maximum smoothed zonal wind speed", - "Daily maximum strength of smoothed zonal wind speed", + "Daily latitude of maximum smoothed zonal wind speed.", + "Daily maximum strength of smoothed zonal wind speed.", ], compute=indices.jetstream_metric_woollings, ) diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 968e1914a..7204379cb 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -95,7 +95,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tn_days_above", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", - long_name="Number of days with Tmin > {thresh}", + long_name="Number of days with Tmin above threshold", description="{freq} number of days where daily minimum temperature exceeds {thresh}.", cell_methods="time: sum over days", compute=indices.tn_days_above, @@ -105,7 +105,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tn_days_below", units="days", standard_name="number_of_days_with_air_temperature_below_threshold", - long_name="Number of days with Tmin < {thresh}", + long_name="Number of days with Tmin below threshold", description="{freq} number of days where daily minimum temperature is below {thresh}.", cell_methods="time: sum over days", compute=indices.tn_days_below, @@ -115,7 +115,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tg_days_above", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", - long_name="Number of days with Tavg > {thresh}", + long_name="Number of days with Tmean above threshold", description="{freq} number of days where daily mean temperature exceeds {thresh}.", cell_methods="time: sum over days", compute=indices.tg_days_above, @@ -125,7 +125,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tg_days_below", units="days", standard_name="number_of_days_with_air_temperature_below_threshold", - long_name="Number of days with Tavg < {thresh}", + long_name="Number of days with Tmean below threshold", description="{freq} number of days where daily mean temperature is below {thresh}.", cell_methods="time: sum over days", compute=indices.tg_days_below, @@ -135,7 +135,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tx_days_above", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", - long_name="Number of days with Tmax > {thresh}", + long_name="Number of days with Tmax above threshold", description="{freq} number of days where daily maximum temperature exceeds {thresh}.", cell_methods="time: sum over days", compute=indices.tx_days_above, @@ -145,7 +145,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tx_days_below", units="days", standard_name="number_of_days_with_air_temperature_below_threshold", - long_name="Number of days with Tmax < {thresh}", + long_name="Number of days with Tmax below threshold", description="{freq} number of days where daily max temperature is below {thresh}.", cell_methods="time: sum over days", compute=indices.tx_days_below, @@ -155,9 +155,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tx_tn_days_above", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", - long_name="Number of days with Tmax > {thresh_tasmax} and Tmin > {thresh_tasmin}", - description="{freq} number of days where daily maximum temperature exceeds " - "{thresh_tasmax} and minimum temperature exceeds {thresh_tasmin}.", + long_name="Number of days with Tmax above a specified threshold and Tmin above a specified threshold", + description="{freq} number of days where daily maximum temperature exceeds {thresh_tasmax} and minimum temperature " + "exceeds {thresh_tasmin}.", cell_methods="", compute=indices.tx_tn_days_above, ) @@ -167,13 +167,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="heat_wave_frequency", units="", standard_name="heat_wave_events", - long_name="Number of heat wave events (Tmin > {thresh_tasmin} " - "and Tmax > {thresh_tasmax} for >= {window} days)", - description="{freq} number of heat wave events over a given period. " - "An event occurs when the minimum and maximum daily " - "temperature both exceeds specific thresholds : " - "(Tmin > {thresh_tasmin} and Tmax > {thresh_tasmax}) " - "over a minimum number of days ({window}).", + long_name="Number of heat wave events", + description="{freq} number of heat wave events over a given period. An event occurs when the minimum and maximum " + "daily temperature both exceeds specific thresholds : (Tmin > {thresh_tasmin} and Tmax > {thresh_tasmax}) over a " + "minimum number of days ({window}).", cell_methods="", keywords="health,", compute=indices.heat_wave_frequency, @@ -183,13 +180,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="heat_wave_max_length", units="days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", - long_name="Maximum length of heat wave events (Tmin > {thresh_tasmin}" - "and Tmax > {thresh_tasmax} for >= {window} days)", - description="{freq} maximum length of heat wave events occurring in a given period. " - "An event occurs when the minimum and maximum daily " - "temperature both exceeds specific thresholds " - "(Tmin > {thresh_tasmin} and Tmax > {thresh_tasmax}) over " - "a minimum number of days ({window}).", + long_name="Maximum length of heat wave events", + description="{freq} maximum length of heat wave events occurring in a given period. An event occurs when the " + "minimum and maximum daily temperature both exceeds specific thresholds (Tmin > {thresh_tasmin} and Tmax > " + "{thresh_tasmax}) over a minimum number of days ({window}).", cell_methods="", keywords="health,", compute=indices.heat_wave_max_length, @@ -199,13 +193,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="heat_wave_total_length", units="days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", - long_name="Total length of heat wave events (Tmin > {thresh_tasmin} " - "and Tmax > {thresh_tasmax} for >= {window} days)", - description="{freq} total length of heat wave events occurring in a given period. " - "An event occurs when the minimum and maximum daily " - "temperature both exceeds specific thresholds " - "(Tmin > {thresh_tasmin} and Tmax > {thresh_tasmax}) over " - "a minimum number of days ({window}).", + long_name="Total length of heat wave events", + description="{freq} total length of heat wave events occurring in a given period. An event occurs when the minimum " + "and maximum daily temperature both exceeds specific thresholds (Tmin > {thresh_tasmin} and Tmax > " + "{thresh_tasmax}) over a minimum number of days ({window}).", cell_methods="", keywords="health,", compute=indices.heat_wave_total_length, @@ -217,8 +208,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="days", standard_name="heat_wave_index", long_name="Number of days that are part of a heatwave", - description="{freq} number of days that are part of a heatwave, " - "defined as five or more consecutive days over {thresh}.", + description="{freq} number of days that are part of a heatwave, defined as five or more consecutive days " + "over {thresh}.", cell_methods="", compute=indices.heat_wave_index, ) @@ -228,10 +219,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="hot_spell_frequency", units="", standard_name="hot_spell_events", - long_name="Number of hot spell events (Tmax > {thresh_tasmax} for >= {window} days)", - description="{freq} number of hot spell events over a given period. " - "An event occurs when the maximum daily temperature exceeds a specific threshold: (Tmax > {thresh_tasmax}) " - "over a minimum number of days ({window}).", + long_name="Number of hot spell events", + description="{freq} number of hot spell events over a given period. An event occurs when the maximum daily " + "temperature exceeds a specific threshold: (Tmax > {thresh_tasmax}) over a minimum number of days ({window}).", cell_methods="", keywords="health,", compute=indices.hot_spell_frequency, @@ -241,10 +231,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="hot_spell_max_length", units="days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", - long_name="Maximum length of hot spell events (Tmax > {thresh_tasmax} for >= {window} days)", - description="{freq} maximum length of hot spell events occurring in a given period. " - "An event occurs when the maximum daily temperature exceeds a specific threshold: (Tmax > {thresh_tasmax}) " - "over a minimum number of days ({window}).", + long_name="Maximum length of hot spell events", + description="{freq} maximum length of hot spell events occurring in a given period. An event occurs when the " + "maximum daily temperature exceeds a specific threshold: (Tmax > {thresh_tasmax}) over a minimum number of days " + "({window}).", cell_methods="", keywords="health,", compute=indices.hot_spell_max_length, @@ -345,7 +335,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="dtr", units="K", standard_name="air_temperature", - long_name="Mean Diurnal Temperature Range", + long_name="Mean diurnal temperature range", description="{freq} mean diurnal temperature range.", cell_methods="time range within days time: mean over days", compute=indices.daily_temperature_range, @@ -357,7 +347,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="dtrmax", units="K", standard_name="air_temperature", - long_name="Maximum Diurnal Temperature Range", + long_name="Maximum diurnal temperature range", description="{freq} maximum diurnal temperature range.", cell_methods="time range within days time: max over days", compute=indices.daily_temperature_range, @@ -368,11 +358,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="dtrvar", units="K", standard_name="air_temperature", - long_name="Mean Diurnal Temperature Range Variability", - description="{freq} mean diurnal temparature range variability " - "(defined as the average day-to-day variation " - "in daily temperature range " - "for the given time period)", + long_name="Mean diurnal temperature range variability", + description="{freq} mean diurnal temperature range variability (defined as the average day-to-day variation " + "in daily temperature range for the given time period)", cell_methods="time range within days time: difference " "over days time: mean over days", compute=indices.daily_temperature_range_variability, @@ -382,7 +370,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="etr", units="K", standard_name="air_temperature", - long_name="Intra-period Extreme Temperature Range", + long_name="Intra-period extreme temperature range", description="{freq} range between the maximum of daily max temperature " "(tx_max) and the minimum of daily min temperature (tn_min)", compute=indices.extreme_temperature_range, @@ -394,10 +382,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="days", standard_name="cold_spell_duration_index", long_name="Number of days part of a percentile-defined cold spell", - description="{freq} number of days with at least {window} consecutive days " - "where the daily minimum temperature is below the {tasmin_per_thresh}th " - "percentile(s). A {tasmin_per_window} day(s) window, centred on each calendar day in the " - "{tasmin_per_period} period, is used to compute the {tasmin_per_thresh}th percentile(s).", + description="{freq} number of days with at least {window} consecutive days where the daily minimum temperature " + "is below the {tasmin_per_thresh}th percentile(s). A {tasmin_per_window} day(s) window, centered on each calendar " + "day in the {tasmin_per_period} period, is used to compute the {tasmin_per_thresh}th percentile(s).", cell_methods="", compute=indices.cold_spell_duration_index, ) @@ -419,8 +406,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="", standard_name="cold_spell_frequency", long_name="Number of cold spell events", - description="{freq} number cold spell events, defined as {window} " - "or more consecutive days with mean daily " + description="{freq} number cold spell events, defined as {window} or more consecutive days with mean daily " "temperature below {thresh}.", cell_methods="", compute=indices.cold_spell_frequency, @@ -429,7 +415,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): cool_night_index = Temp( identifier="cool_night_index", units="degC", - long_name="cool night index", + long_name="Cool night index", description="Mean minimum temperature for September (northern hemisphere) or March (southern hemisphere).", cell_methods="time: mean over days", abstract="A night coolness variable which takes into account the mean minimum night temperatures during the " @@ -441,9 +427,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): daily_freezethaw_cycles = TempWithIndexing( identifier="dlyfrzthw", units="days", - long_name="daily freezethaw cycles", - description="{freq} number of days with a diurnal freeze-thaw cycle " - ": Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}.", + long_name="Freeze-thaw cycles", + description="{freq} number of days with a diurnal freeze-thaw cycle (Tmax > {thresh_tasmax} and " + "Tmin <= {thresh_tasmin}).", cell_methods="", compute=indices.multiday_temperature_swing, parameters={ @@ -459,9 +445,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="freezethaw_spell_frequency", title="Frequency of freeze-thaw spells", units="days", - long_name="{freq} number of freeze-thaw spells.", - description="{freq} number of freeze-thaw spells" - ": Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin} " + long_name="Number of freeze-thaw spells.", + description="{freq} number of freeze-thaw spells (Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}) " "for at least {window} consecutive day(s).", cell_methods="", compute=indices.multiday_temperature_swing, @@ -475,11 +460,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): freezethaw_spell_mean_length = Temp( identifier="freezethaw_spell_mean_length", - title="Averge length of freeze-thaw spells.", + title="Average length of freeze-thaw spells.", units="days", - long_name="{freq} average length of freeze-thaw spells.", - description="{freq} average length of freeze-thaw spells" - ": Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin} " + long_name="Average length of freeze-thaw spells.", + description="{freq} average length of freeze-thaw spells (Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}) " "for at least {window} consecutive day(s).", cell_methods="", compute=indices.multiday_temperature_swing, @@ -495,9 +479,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="freezethaw_spell_max_length", title="Maximal length of freeze-thaw spells.", units="days", - long_name="{freq} maximal length of freeze-thaw spells.", - description="{freq} maximal length of freeze-thaw spells" - ": Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin} " + long_name="Maximal length of freeze-thaw spells.", + description="{freq} maximal length of freeze-thaw spells (Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}) " "for at least {window} consecutive day(s).", cell_methods="", compute=indices.multiday_temperature_swing, @@ -513,7 +496,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="cooling_degree_days", units="K days", standard_name="integral_of_air_temperature_excess_wrt_time", - long_name="Cooling degree days (Tmean > {thresh})", + long_name="Cooling degree days (Tmean > threshold)", description="{freq} cooling degree days above {thresh}.", cell_methods="time: sum over days", compute=indices.cooling_degree_days, @@ -524,7 +507,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="heating_degree_days", units="K days", standard_name="integral_of_air_temperature_deficit_wrt_time", - long_name="Heating degree days (Tmean < {thresh})", + long_name="Heating degree days (Tmean < threshold)", description="{freq} heating degree days below {thresh}.", cell_methods="time: sum over days", compute=indices.heating_degree_days, @@ -535,7 +518,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="growing_degree_days", units="K days", standard_name="integral_of_air_temperature_excess_wrt_time", - long_name="Growing degree days above {thresh}", + long_name="Growing degree days", description="{freq} growing degree days above {thresh}.", cell_methods="time: sum over days", compute=indices.growing_degree_days, @@ -546,7 +529,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="freezing_degree_days", units="K days", standard_name="integral_of_air_temperature_deficit_wrt_time", - long_name="Freezing degree days (Tmean < {thresh})", + long_name="Freezing degree days (Tmean < threshold)", description="{freq} freezing degree days below {thresh}.", cell_methods="time: sum over days", compute=indices.heating_degree_days, @@ -569,8 +552,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="", standard_name="day_of_year", long_name="Day of year of spring freshet start", - description="Day of year of spring freshet start, defined as the first day a temperature " - "threshold of {thresh} is exceeded for at least {window} days.", + description="Day of year of spring freshet start, defined as the first day a temperature threshold of {thresh} " + "is exceeded for at least {window} days.", compute=indices.freshet_start, ) @@ -578,7 +561,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="frost_days", units="days", standard_name="days_with_air_temperature_below_threshold", - long_name="Number of frost days (Tmin < {thresh})", + long_name="Number of frost days", description="{freq} number of days with minimum daily temperature below {thresh}.", cell_methods="time: sum over days", compute=indices.frost_days, @@ -588,11 +571,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="frost_season_length", units="days", standard_name="days_with_air_temperature_below_threshold", - long_name="Length of the frost season", - description="{freq} number of days between the first occurrence of at least " - "{window} consecutive days with minimum daily temperature below freezing and " - "the first occurrence of at least {window} consecutive days with " - "minimuim daily temperature above freezing after {mid_date}.", + long_name="Length of the frost season (Tmin > 0°C)", + description="{freq} number of days between the first occurrence of at least {window} consecutive days with " + "minimum daily temperature below {thresh} and the first occurrence of at least {window} consecutive days with " + "minimum daily temperature above {thresh} after {mid_date}.", cell_methods="time: sum over days", compute=indices.frost_season_length, parameters=dict(thresh="0 degC"), @@ -612,7 +594,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="first_day_below", units="", standard_name="day_of_year", - long_name="First day of year with temperature below {thresh}", + long_name="First day of year with temperature below threshold", description="First day of year with temperature below {thresh} for at least {window} days.", compute=indices.first_day_below, ) @@ -621,7 +603,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="first_day_above", units="", standard_name="day_of_year", - long_name="First day of year with temperature above {thresh}", + long_name="First day of year with temperature above threshold", description="First day of year with temperature above {thresh} for at least {window} days.", compute=indices.first_day_above, ) @@ -631,7 +613,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="ice_days", standard_name="days_with_air_temperature_below_threshold", units="days", - long_name="Number of ice days (Tmax < {thresh})", + long_name="Number of ice days", description="{freq} number of days with maximum daily temperature below {thresh}.", cell_methods="time: sum over days", compute=indices.ice_days, @@ -641,9 +623,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="consecutive_frost_days", units="days", standard_name="spell_length_of_days_with_air_temperature_below_threshold", - long_name="Maximum number of consecutive days with Tmin < {thresh}", - description="{freq} maximum number of consecutive days with " - "minimum daily temperature below {thresh}.", + long_name="Maximum number of consecutive frost days", + description="{freq} maximum number of consecutive days with minimum daily temperature below {thresh}.", cell_methods="time: maximum over days", compute=indices.maximum_consecutive_frost_days, ) @@ -653,10 +634,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="days", standard_name="days_with_air_temperature_above_threshold", long_name="Length of the frost free season", - description="{freq} number of days between the first occurrence of at least " - "{window} consecutive days with minimum daily temperature above or at the freezing point and " - "the first occurrence of at least {window} consecutive days with " - "minimum daily temperature below freezing after {mid_date}.", + description="{freq} number of days between the first occurrence of at least {window} consecutive days " + "with minimum daily temperature above or at the freezing point and the first occurrence of at least " + "{window} consecutive days with minimum daily temperature below freezing after {mid_date}.", cell_methods="time: sum over days", compute=indices.frost_free_season_length, parameters={"thresh": {"default": "0 degC"}}, @@ -678,7 +658,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="", standard_name="day_of_year", long_name="Day of year of frost free season end", - description="Day of year of end of frost free season, defined as the first day minimum temperatures below a " + description="Day of year of end of frost free season, defined as the first day minimum temperatures below a " "threshold of {thresh}, after a run of days above this threshold, for at least {window} days.", cell_methods="", compute=indices.frost_free_season_end, @@ -689,9 +669,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="consecutive_frost_free_days", units="days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", - long_name="Maximum number of consecutive days with Tmin >= {thresh}", - description="{freq} maximum number of consecutive days with " - "minimum daily temperature above or equal to {thresh}.", + long_name="Maximum number of consecutive days with Tmin >= threshold", + description="{freq} maximum number of consecutive days with minimum daily temperature above or equal to {thresh}.", cell_methods="time: maximum over days", compute=indices.maximum_consecutive_frost_free_days, ) @@ -701,9 +680,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="", standard_name="day_of_year", long_name="Day of year of growing season start", - description="Day of year of start of growing season, defined as the first day of " - "consistent superior or equal to threshold temperature of {thresh} after a run of " - "{window} days inferior to threshold temperature.", + description="Day of year of start of growing season, defined as the first day of consistent superior or equal to " + "threshold temperature of {thresh} after a run of {window} days inferior to threshold temperature.", cell_methods="", compute=indices.growing_season_start, parameters={"thresh": {"default": "5.0 degC"}}, @@ -713,10 +691,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="growing_season_length", units="days", standard_name="growing_season_length", - long_name="ETCCDI Growing Season Length (Tmean > {thresh})", - description="{freq} number of days between the first occurrence of at least " - "{window} consecutive days with mean daily temperature over {thresh} and " - "the first occurrence of at least {window} consecutive days with " + long_name="ETCCDI Growing Season Length", + description="{freq} number of days between the first occurrence of at least {window} consecutive days " + "with mean daily temperature over {thresh} and the first occurrence of at least {window} consecutive days with " "mean daily temperature below {thresh} after {mid_date}.", cell_methods="", compute=indices.growing_season_length, @@ -728,9 +705,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="", standard_name="day_of_year", long_name="Day of year of growing season end", - description="Day of year of end of growing season, defined as the first day of " - "consistent inferior threshold temperature of {thresh} after a run of " - "{window} days superior to threshold temperature.", + description="Day of year of end of growing season, defined as the first day of consistent inferior threshold " + "temperature of {thresh} after a run of {window} days superior to threshold temperature.", cell_methods="", compute=indices.growing_season_end, parameters={"thresh": {"default": "5.0 degC"}}, @@ -753,9 +729,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="days", standard_name="days_with_air_temperature_above_threshold", long_name="Number of days when Tmean > {tas_per_thresh}th percentile", - description="{freq} number of days with mean daily temperature above the the {tas_per_thresh}th " - "percentile(s). A {tas_per_window} day(s) window, centred on each calendar day in the " - "{tas_per_period} period, is used to compute the {tas_per_thresh}th percentile(s).", + description="{freq} number of days with mean daily temperature above the 90th percentile. " + "A {tas_per_window} day(s) window, centered on each calendar day in the {tas_per_period} period, " + "is used to compute the 90th percentile.", cell_methods="time: sum over days", compute=indices.tg90p, ) @@ -765,9 +741,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="days", standard_name="days_with_air_temperature_below_threshold", long_name="Number of days when Tmean < {tas_per_thresh}th percentile", - description="{freq} number of days with mean daily temperature below the {tas_per_thresh}th " - "percentile(s). A {tas_per_window} day(s) window, centred on each calendar day in the " - "{tas_per_period} period, is used to compute the {tas_per_thresh}th percentile(s).", + description="{freq} number of days with mean daily temperature below the 10th percentile. " + "A {tas_per_window} day(s) window, centered on each calendar day in the {tas_per_period} period, " + "is used to compute the 10th percentile.", cell_methods="time: sum over days", compute=indices.tg10p, ) @@ -776,10 +752,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tx90p", units="days", standard_name="days_with_air_temperature_above_threshold", - long_name="Number of days when Tmax > {tasmax_per_thresh}th percentile", - description="{freq} number of days with maximum daily temperature above the {tasmax_per_thresh}th " - "percentile(s). A {tasmax_per_window} day(s) window, centred on each calendar day in the " - "{tasmax_per_period} period, is used to compute the {tasmax_per_thresh}th percentile(s).", + long_name="Number of days when Tmax > 90th percentile", + description="{freq} number of days with maximum daily temperature above the 90th percentile. " + "A {tasmax_per_window} day(s) window, centered on each calendar day in the {tasmax_per_period} period, " + "is used to compute the 90th percentile.", cell_methods="time: sum over days", compute=indices.tx90p, ) @@ -788,10 +764,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tx10p", units="days", standard_name="days_with_air_temperature_below_threshold", - long_name="Number of days when Tmax < {tasmax_per_thresh}th percentile", - description="{freq} number of days with maximum daily temperature below the {tasmax_per_thresh}th " - "percentile(s). A {tasmax_per_window} day(s) window, centred on each calendar day in the " - "{tasmax_per_period} period, is used to compute the {tasmax_per_thresh}th percentile(s).", + long_name="Number of days when Tmax < 10th percentile", + description="{freq} number of days with maximum daily temperature below the 10th percentile. " + "A {tasmax_per_window} day(s) window, centered on each calendar day in the {tasmax_per_period} period, " + "is used to compute the 10th percentile.", cell_methods="time: sum over days", compute=indices.tx10p, ) @@ -800,10 +776,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tn90p", units="days", standard_name="days_with_air_temperature_above_threshold", - long_name="Number of days when Tmin > {tasmin_per_thresh}th percentile", - description="{freq} number of days with minimum daily temperature above the the {tasmin_per_thresh}th " - "percentile(s). A {tasmin_per_window} day(s) window, centred on each calendar day in the " - "{tasmin_per_period} period, is used to compute the {tasmin_per_thresh}th percentile(s).", + long_name="Number of days when Tmin > 90th percentile", + description="{freq} number of days with minimum daily temperature above the 90th percentile. " + "A {tasmin_per_window} day(s) window, centered on each calendar day in the {tasmin_per_period} period, " + "is used to compute the 90th percentile.", cell_methods="time: sum over days", compute=indices.tn90p, ) @@ -812,10 +788,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tn10p", units="days", standard_name="days_with_air_temperature_below_threshold", - long_name="Number of days when Tmin < {tasmin_per_thresh}th percentile", - description="{freq} number of days with minimum daily temperature below the the {tasmin_per_thresh}th " - "percentile(s). A {tasmin_per_window} day(s) window, centred on each calendar day in the " - "{tasmin_per_period} period, is used to compute the {tasmin_per_thresh}th percentile(s).", + long_name="Number of days when Tmin < 10th percentile", + description="{freq} number of days with minimum daily temperature below the 10th percentile. " + "A {tasmin_per_window} day(s) window, centered on each calendar day in the {tasmin_per_period} period, " + "is used to compute the 10th percentile.", cell_methods="time: sum over days", compute=indices.tn10p, ) @@ -823,9 +799,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): degree_days_exceedance_date = Temp( identifier="degree_days_exceedance_date", + long_name="Day of year when cumulative degree days exceed threshold.", units="", standard_name="day_of_year", - long_name="Day of year when cumulative degree days exceed {sum_thresh}.", description="Day of year when the integral of degree days (tmean {op} {thresh})" " exceeds {sum_thresh}, the cumulative sum starts on {after_date}.", cell_methods="", @@ -849,6 +825,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): maximum_consecutive_warm_days = Temp( identifier="maximum_consecutive_warm_days", + long_name="Maximum consecutive warm days", description="{freq} longest spell of consecutive days with Tmax above {thresh}.", units="days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", @@ -876,11 +853,10 @@ def cfcheck(self, tas, snd=None): huglin_index = Temp( identifier="huglin_index", units="", - long_name="Huglin heliothermal index (Summation of ((Tmin + Tmax)/2 - {thresh}) * Latitude-based day-length" - "coefficient (`k`), for days between {start_date} and {end_date}).", + long_name="Huglin heliothermal index", description="Heat-summation index for agroclimatic suitability estimation, developed specifically for viticulture. " - "Considers daily Tmin and Tmax with a base of {thresh}, typically between 1 April and 30 September. " - "Integrates a day-length coefficient calculation for higher latitudes.", + "Computed with {method} formula (Summation of ((Tmin + Tmax)/2 - {thresh}) * k), where coefficient (`k`) is a " + "latitude-based day-length for days typically between 1 April and 30 September.", cell_methods="", comment="Metric originally published in Huglin (1978). Day-length coefficient based on Hall & Jones (2010)", var_name="hi", @@ -892,12 +868,10 @@ def cfcheck(self, tas, snd=None): biologically_effective_degree_days = Temp( identifier="biologically_effective_degree_days", units="K days", - long_name="Biologically effective degree days computed with {method} formula (Summation of min((max((Tmin + Tmax)/2" - " - {thresh_tasmin}, 0) * k) + TR_adg, 9°C), for days between {start_date} and {end_date}).", + long_name="Biologically effective degree days", description="Heat-summation index for agroclimatic suitability estimation, developed specifically for viticulture. " - "Considers daily Tmin and Tmax with a base of {thresh_tasmin} between 1 April and 31 October, with a maximum daily " - "value for degree days (typically 9°C). It also integrates a modification coefficient for latitudes " - "between 40°N and 50°N as well as swings in daily temperature range.", + "Computed with {method} formula (Summation of min((max((Tmin + Tmax)/2 - {thresh_tasmin}, 0) * k) + TR_adj, 9°C), " + "where coefficient (`k`) is a latitude-based day-length for days between {start_date} and {end_date}).", cell_methods="", comment="Original formula published in Gladstones, 1992.", var_name="bedd", @@ -909,13 +883,12 @@ def cfcheck(self, tas, snd=None): effective_growing_degree_days = Temp( identifier="effective_growing_degree_days", units="K days", - long_name="Effective growing degree days computed with {method} formula (Summation of max((Tmin + Tmax)/2 " - "- {thresh}, 0), for days between between dynamically-determined start and end dates).", + long_name="Effective growing degree days", description="Heat-summation index for agroclimatic suitability estimation." - "Considers daily Tmin and Tmax with a base of {thresh} between dynamically-determined growing season start" - "and end dates. The 'bootsma' method uses a 10-day average temperature above {thresh} to identify a start date, " - "while the 'qian' method uses a weighted mean average above {thresh} over 5 days to determine start date. " - "The end date of the growing season is the date of first fall frost (Tmin < 0°C).", + "Computed with {method} formula (Summation of max((Tmin + Tmax)/2 - {thresh}, 0) between dynamically-determined " + "growing season start and end dates. The 'bootsma' method uses a 10-day average temperature above {thresh} to " + "identify a start date, while the 'qian' method uses a weighted mean average above {thresh} over 5 days to " + "determine start date. The end date of the growing season is the date of first fall frost (Tmin < 0°C).", cell_methods="", comment="Original formula published in Bootsma et al. 2005.", var_name="egdd", diff --git a/xclim/indicators/atmos/_wind.py b/xclim/indicators/atmos/_wind.py index abf2bd783..5dcb02e01 100644 --- a/xclim/indicators/atmos/_wind.py +++ b/xclim/indicators/atmos/_wind.py @@ -26,7 +26,7 @@ class Wind(ResamplingIndicatorWithIndexing): identifier="windy_days", units="days", standard_name="number_of_days_with_sfcWind_above_threshold", - long_name="Number of days with surface wind speed above threshold", + long_name="Number of days with surface wind speed at or above threshold", description="{freq} number of days with surface wind speed >= {thresh}", cell_methods="time: sum over days", compute=indices.windy_days, diff --git a/xclim/indicators/land/_snow.py b/xclim/indicators/land/_snow.py index f6f9a6fe3..7ecd7ad95 100644 --- a/xclim/indicators/land/_snow.py +++ b/xclim/indicators/land/_snow.py @@ -31,8 +31,8 @@ class SnowWithIndexing(ResamplingIndicatorWithIndexing): snow_cover_duration = SnowWithIndexing( identifier="snow_cover_duration", units="days", - long_name="Number of days with snow depth above threshold", - description="{freq} number of days with snow depth greater or equal to {thresh}", + long_name="Number of days with snow depth at or above threshold", + description="The {freq} number of days with snow depth greater or equal to {thresh}", compute=xci.snow_cover_duration, ) @@ -58,8 +58,8 @@ class SnowWithIndexing(ResamplingIndicatorWithIndexing): identifier="snd_max_doy", standard_name="day_of_year", var_name="{freq}_snd_max_doy", - long_name="Date when snow depth reaches its maximum value.", - description="{freq} day of year when snow depth reaches its maximum value.", + long_name="Date when snow depth reaches its maximum value", + description="The {freq} day of year when snow depth reaches its maximum value.", units="", _partial=True, compute=xci.snd_max_doy, @@ -69,7 +69,8 @@ class SnowWithIndexing(ResamplingIndicatorWithIndexing): identifier="snow_melt_we_max", standard_name="change_over_time_in_surface_snow_amount", var_name="{freq}_snow_melt_we_max", - description="{freq} maximum negative change in melt amount over {window} days.", + long_name="Maximum snow melt", + description="The {freq} maximum negative change in melt amount over {window} days.", units="kg m-2", compute=xci.snow_melt_we_max, ) @@ -78,8 +79,8 @@ class SnowWithIndexing(ResamplingIndicatorWithIndexing): identifier="snw_max", standard_name="surface_snow_amount", var_name="{freq}_snw_max", - long_name="Maximum daily snow amount", - description="{freq} day of year when snow amount on the surface reaches its maximum.", + long_name="Maximum snow amount", + description="The {freq} day of year when snow amount on the surface reaches its maximum.", units="kg m-2", compute=xci.snw_max, ) @@ -89,7 +90,7 @@ class SnowWithIndexing(ResamplingIndicatorWithIndexing): standard_name="day_of_year", var_name="{freq}_snw_max_doy", long_name="Day of year of maximum daily snow amount", - description="{freq} maximum snow amount on the surface.", + description="The {freq} maximum snow amount on the surface.", units="", compute=xci.snw_max_doy, ) @@ -97,7 +98,8 @@ class SnowWithIndexing(ResamplingIndicatorWithIndexing): melt_and_precip_max = Snow( identifier="melt_and_precip_max", var_name="{freq}_melt_and_precip_max", - description="{freq} maximum precipitation flux and negative change in snow amount over {window} days.", + long_name="Maximum snow melt and precipitation", + description="The {freq} maximum precipitation flux and negative change in snow amount over {window} days.", units="kg m-2", compute=xci.melt_and_precip_max, ) @@ -106,7 +108,8 @@ class SnowWithIndexing(ResamplingIndicatorWithIndexing): winter_storm = SnowWithIndexing( identifier="winter_storm", var_name="{freq}_winter_storm", - description="{freq} number of days with snowfall accumulation above {thresh}.", + long_name="Days with snowfall at or above threshold", + description="The {freq} number of days with snowfall accumulation above {thresh}.", units="days", compute=xci.winter_storm, ) @@ -115,8 +118,9 @@ class SnowWithIndexing(ResamplingIndicatorWithIndexing): blowing_snow = Snow( identifier="blowing_snow", var_name="{freq}_blowing_snow", - description="{freq} number of days with snowfall over last {window} days above {snd_thresh} and wind speed above " - "{sfcWind_thresh}.", + long_name="Blowing snow days", + description="The {freq} number of days with snowfall over last {window} days above {snd_thresh} and wind speed " + "above {sfcWind_thresh}.", units="days", compute=xci.blowing_snow, ) @@ -126,7 +130,7 @@ class SnowWithIndexing(ResamplingIndicatorWithIndexing): units="cm", standard_name="surface_snow_thickness", long_name="Mean of daily snow depth", - description="{freq} mean of daily mean snow depth.", + description="The {freq} mean of daily mean snow depth.", cell_methods="time: mean over days", compute=xci.snow_depth, ) diff --git a/xclim/indicators/land/_streamflow.py b/xclim/indicators/land/_streamflow.py index 97550b2f4..36f118221 100644 --- a/xclim/indicators/land/_streamflow.py +++ b/xclim/indicators/land/_streamflow.py @@ -69,9 +69,9 @@ def cfcheck(self, **das): freq_analysis = FA( identifier="freq_analysis", var_name="q{window}{mode:r}{indexer}", - long_name="N-year return period {mode} {indexer} {window}-day flow", - description="Streamflow frequency analysis for the {mode} {indexer} {window}-day flow " - "estimated using the {dist} distribution.", + long_name="N-year return period flow amount", + description="Streamflow frequency analysis for the {mode} {indexer} {window}-day flow estimated using the {dist} " + "distribution.", units="m^3 s-1", title="Flow values for given return periods.", compute=declare_units(da=None)(frequency_analysis), @@ -89,7 +89,7 @@ def cfcheck(self, **das): stats = Stats( identifier="stats", var_name="q{indexer}{op:r}", - long_name="{freq} {op} of {indexer} daily flow ", + long_name="Daily flow statistics", description="{freq} {op} of {indexer} daily flow", title="Statistic of the daily flow on a given period.", units="m^3 s-1", @@ -101,7 +101,7 @@ def cfcheck(self, **das): var_name="params", units="", standard_name="{dist} parameters", - long_name="{dist} distribution parameters", + long_name="Distribution parameters", description="Parameters of the {dist} distribution", title="Distribution parameters fitted over the time dimension.", cell_methods="time: fit", @@ -112,7 +112,7 @@ def cfcheck(self, **das): doy_qmax = Streamflow( identifier="doy_qmax", var_name="q{indexer}_doy_qmax", - long_name="Day of the year of the maximum over {indexer}", + long_name="Day of the year of the maximum over time period", description="Day of the year of the maximum over {indexer}", title="Day of year of the maximum.", units="", @@ -124,7 +124,7 @@ def cfcheck(self, **das): doy_qmin = Streamflow( identifier="doy_qmin", var_name="q{indexer}_doy_qmin", - long_name="Day of the year of the minimum over {indexer}", + long_name="Day of the year of the minimum over time period", description="Day of the year of the minimum over {indexer}", title="Day of year of the minimum.", units="", diff --git a/xclim/indices/_multivariate.py b/xclim/indices/_multivariate.py index 12d05904f..f533cd276 100644 --- a/xclim/indices/_multivariate.py +++ b/xclim/indices/_multivariate.py @@ -1700,7 +1700,7 @@ def blowing_snow( window: int = 3, freq: str = "AS-JUL", ) -> xarray.DataArray: - """Days with blowing snow events. + """Blowing snow days. Number of days where both snowfall over the last days and daily wind speeds are above respective thresholds. From 1391f652af0b1877480426ee0e42f81fb2f8ab1b Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 7 Jul 2022 15:43:59 -0400 Subject: [PATCH 003/106] update HISTORY.rst --- HISTORY.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/HISTORY.rst b/HISTORY.rst index b325cfe1b..d1921f8be 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -12,11 +12,15 @@ New features and enhancements - Wrapped SBCK tests are also properly run in the tox testing ensemble. (:pull:`1119`). * New indices for droughts: SPI (standardized precipitations) and SPEI (standardized water budgets) (:issue:`131`, :pull:`1096`) +Breaking changes +^^^^^^^^^^^^^^^^ +* English indicator metadata has been adjusted to remove automatic formatting in the `long_name` of fields. (:issue:`936`). +* French indicator metadata translations are now more uniform and follow agreed-upon grammar conventions. (:issue:`936`). + Internal changes ^^^^^^^^^^^^^^^^ * Marked a test (``test_release_notes_file_not_implemented``) that can only pass when source files are available so that it can easily be skipped on conda-forge build tests. (:issue:`1116`, :pull:`1117`). * Split a few YAML strings found in the virtual modules that regularly issued warnings on the code checking CI steps. (:pull:`1118`). -* French indicator translations are now more standardized and follow agreed-upon grammar conventions. (:issue:`936`). 0.37.0 (20 June 2022) --------------------- From d627398fe705da21a1957c6e529870dc0f3eda65 Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 7 Jul 2022 15:57:17 -0400 Subject: [PATCH 004/106] update HISTORY.rst --- HISTORY.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index d1921f8be..8a75f636a 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -14,8 +14,8 @@ New features and enhancements Breaking changes ^^^^^^^^^^^^^^^^ -* English indicator metadata has been adjusted to remove automatic formatting in the `long_name` of fields. (:issue:`936`). -* French indicator metadata translations are now more uniform and follow agreed-upon grammar conventions. (:issue:`936`). +* English indicator metadata has been adjusted to remove frequencies and other automatically formatted fields in the `long_name` of indicators. (:issue:`936`, :pull:`1123`). +* French indicator metadata translations are now more uniform and follow agreed-upon grammar conventions. (:issue:`936`, :pull:`1123`). Internal changes ^^^^^^^^^^^^^^^^ From c33055bff9741cd473bf91270a175419ed986fec Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 2 Aug 2022 13:41:17 -0400 Subject: [PATCH 005/106] update english indicator metadata and associated tests --- xclim/indicators/atmos/_precip.py | 6 +++--- xclim/indicators/atmos/_temperature.py | 10 +++++----- xclim/testing/tests/test_formatting.py | 5 +---- xclim/testing/tests/test_indicators.py | 10 +++++----- xclim/testing/tests/test_land.py | 12 ++++++++++-- xclim/testing/tests/test_precip.py | 16 ++++++++-------- xclim/testing/tests/test_temperature.py | 18 +++++++++++++++--- 7 files changed, 47 insertions(+), 30 deletions(-) diff --git a/xclim/indicators/atmos/_precip.py b/xclim/indicators/atmos/_precip.py index 4e3bf1782..d4f3852af 100644 --- a/xclim/indicators/atmos/_precip.py +++ b/xclim/indicators/atmos/_precip.py @@ -416,7 +416,7 @@ class HrPrecip(Hourly): dry_spell_frequency = Precip( identifier="dry_spell_frequency", long_name="Dry spell frequency", - description="The {freq} number of dry periods of {window} days and more, during which the {op} precipitation on a " + description="The {freq} number of dry periods of {window} day(s) or more, during which the {op} precipitation on a " "window of {window} day(s) is below {thresh}.", units="", cell_methods="", @@ -427,8 +427,8 @@ class HrPrecip(Hourly): dry_spell_total_length = Precip( identifier="dry_spell_total_length", long_name="Dry spell total length", - description="The {freq} number of days in dry periods of {window} days and more, during which the {op}" - "precipitation within windows of {window} days is under {thresh}.", + description="The {freq} number of days in dry periods of {window} day(s) or more, during which the {op}" + "precipitation within windows of {window} day(s) is under {thresh}.", units="days", cell_methods="", compute=indices.dry_spell_total_length, diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 7204379cb..7d0e31464 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -445,7 +445,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="freezethaw_spell_frequency", title="Frequency of freeze-thaw spells", units="days", - long_name="Number of freeze-thaw spells.", + long_name="Frequency of freeze-thaw spells", description="{freq} number of freeze-thaw spells (Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}) " "for at least {window} consecutive day(s).", cell_methods="", @@ -460,9 +460,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): freezethaw_spell_mean_length = Temp( identifier="freezethaw_spell_mean_length", - title="Average length of freeze-thaw spells.", + title="Average length of freeze-thaw spells", units="days", - long_name="Average length of freeze-thaw spells.", + long_name="Average length of freeze-thaw spells", description="{freq} average length of freeze-thaw spells (Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}) " "for at least {window} consecutive day(s).", cell_methods="", @@ -477,9 +477,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): freezethaw_spell_max_length = Temp( identifier="freezethaw_spell_max_length", - title="Maximal length of freeze-thaw spells.", + title="Maximal length of freeze-thaw spells", units="days", - long_name="Maximal length of freeze-thaw spells.", + long_name="Maximal length of freeze-thaw spells", description="{freq} maximal length of freeze-thaw spells (Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}) " "for at least {window} consecutive day(s).", cell_methods="", diff --git a/xclim/testing/tests/test_formatting.py b/xclim/testing/tests/test_formatting.py index ec7e17aea..b93f85bf4 100644 --- a/xclim/testing/tests/test_formatting.py +++ b/xclim/testing/tests/test_formatting.py @@ -32,10 +32,7 @@ def test_indicator_docstring(): ) assert doc[6] == "Keywords : health,." assert doc[12] == " Default : `ds.tasmin`. [Required units : [temperature]]" - assert doc[35] == ( - " Number of heat wave events (Tmin > {thresh_tasmin} and Tmax > " - "{thresh_tasmax} for >= {window} days) (heat_wave_events)" - ) + assert doc[35] == " Number of heat wave events (heat_wave_events)" doc = degree_days_exceedance_date.__doc__.split("\n") assert doc[20] == " Default : >. " diff --git a/xclim/testing/tests/test_indicators.py b/xclim/testing/tests/test_indicators.py index 4d6f663ae..b1cd19f64 100644 --- a/xclim/testing/tests/test_indicators.py +++ b/xclim/testing/tests/test_indicators.py @@ -497,14 +497,14 @@ def test_identifier(): def test_formatting(pr_series): out = atmos.wetdays(pr_series(np.arange(366)), thresh=1.0 * units.mm / units.day) # pint 0.10 now pretty print day as d. - assert out.attrs["long_name"] in [ - "Number of wet days (precip >= 1 mm/day)", - "Number of wet days (precip >= 1 mm/d)", + assert out.attrs["long_name"] == "Number of wet days" + assert out.attrs["description"] in [ + "Annual number of days with daily precipitation at or above 1.0 mm/d." ] out = atmos.wetdays(pr_series(np.arange(366)), thresh=1.5 * units.mm / units.day) + assert out.attrs["long_name"] == "Number of wet days" assert out.attrs["long_name"] in [ - "Number of wet days (precip >= 1.5 mm/day)", - "Number of wet days (precip >= 1.5 mm/d)", + "Annual number of days with daily precipitation at or above 1.5 mm/d." ] diff --git a/xclim/testing/tests/test_land.py b/xclim/testing/tests/test_land.py index 258f69828..24de73a2b 100644 --- a/xclim/testing/tests/test_land.py +++ b/xclim/testing/tests/test_land.py @@ -23,14 +23,22 @@ def test_simple(self, ndq_series): out = land.freq_analysis( ndq_series, mode="max", t=[2, 5], dist="gamma", season="DJF" ) - assert out.long_name == "N-year return period maximal winter 1-day flow" + assert out.long_name == "N-year return period flow amount" + assert out.description in [ + "Streamflow frequency analysis for the maximal winter 1-day flow " + "estimated using the gamma distribution." + ] assert out.name == "q1maxwinter" assert out.shape == (2, 2, 3) # nrt, nx, ny np.testing.assert_array_equal(out.isnull(), False) def test_no_indexer(self, ndq_series): out = land.freq_analysis(ndq_series, mode="max", t=[2, 5], dist="gamma") - assert out.long_name == "N-year return period maximal annual 1-day flow" + assert out.long_name == "N-year return period flow amount" + assert out.description in [ + "Streamflow frequency analysis for the maximal annual 1-day flow " + "estimated using the gamma distribution." + ] assert out.name == "q1maxannual" assert out.shape == (2, 2, 3) # nrt, nx, ny np.testing.assert_array_equal(out.isnull(), False) diff --git a/xclim/testing/tests/test_precip.py b/xclim/testing/tests/test_precip.py index fad29bcf3..3cdf12726 100644 --- a/xclim/testing/tests/test_precip.py +++ b/xclim/testing/tests/test_precip.py @@ -573,15 +573,15 @@ def test_dry_spell(atmosds): np.testing.assert_allclose(total_d_max, [76, 97], rtol=1e-1) assert ( - "The annual number of dry periods of 7 days and more, during which the total " - "precipitation on a window of 7 days is under 3 mm." + "The annual number of dry periods of 7 day(s) or more, " + "during which the total precipitation on a window of 7 day(s) is below 3 mm." ) in events.description assert ( - "The annual number of days in dry periods of 7 days and more" + "The annual number of days in dry period(s) of 7 days or more" in total_d_sum.description ) assert ( - "The annual number of days in dry periods of 7 days and more" + "The annual number of days in dry period(s) of 7 days or more" in total_d_max.description ) @@ -617,10 +617,10 @@ def test_dry_spell_frequency_op(): np.testing.assert_allclose(test_sum[0, 2], [1], rtol=1e-1) np.testing.assert_allclose(test_max[0, 2], [2], rtol=1e-1) assert ( - "The monthly number of dry periods of 7 days and more, during which the total precipitation " - "on a window of 7 days is under 3 mm." + "The monthly number of dry periods of 7 day(s) or more, " + "during which the total precipitation on a window of 7 day(s) is below 3 mm." ) in test_sum.description assert ( - "The monthly number of dry periods of 7 days and more, during which the maximal precipitation " - "on a window of 7 days is under 3 mm." + "The monthly number of dry periods of 7 day(s) or more, " + "during which the maximal precipitation on a window of 7 day(s) is below 3 mm." ) in test_max.description diff --git a/xclim/testing/tests/test_temperature.py b/xclim/testing/tests/test_temperature.py index eeb70eed1..5f1e1aa3d 100644 --- a/xclim/testing/tests/test_temperature.py +++ b/xclim/testing/tests/test_temperature.py @@ -1331,7 +1331,11 @@ def test_freezethaw_spell_frequency(): ) np.testing.assert_array_equal(out.isel(location=-1), [1, 0, 1, 1]) - assert out.attrs["long_name"] == "Annual number of freeze-thaw spells." + assert out.attrs["long_name"] == "Frequency of freeze-thaw spells" + assert out.attrs["description"] in [ + "Annual number of freeze-thaw spells (Tmax > 0 degC and Tmin <= 0 degC) " + "for at least 2 consecutive day(s)." + ] def test_freezethaw_spell_mean_length(): @@ -1351,7 +1355,11 @@ def test_freezethaw_spell_mean_length(): ) np.testing.assert_array_equal(out.isel(location=-1), [2, 0, 2, 2]) - assert out.attrs["long_name"] == "Annual average length of freeze-thaw spells." + assert out.attrs["long_name"] == "Average length of freeze-thaw spells" + assert out.attrs["description"] in [ + "Annual average length of freeze-thaw spells (Tmax > 0 degC and Tmin <= 0 degC) " + "for at least 2 consecutive day(s)." + ] def test_freezethaw_spell_max_length(): @@ -1371,4 +1379,8 @@ def test_freezethaw_spell_max_length(): ) np.testing.assert_array_equal(out.isel(location=-1), [2, 0, 2, 2]) - assert out.attrs["long_name"] == "Annual maximal length of freeze-thaw spells." + assert out.attrs["long_name"] == "Maximal length of freeze-thaw spells" + assert out.attrs["description"] in [ + "Annual maximal length of freeze-thaw spells (Tmax > 0 degC and Tmin <= 0 degC) " + "for at least 2 consecutive day(s)." + ] From 6693128f9e9674dcdc5a0453aa21477b2cbf4448 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 2 Aug 2022 15:20:22 -0400 Subject: [PATCH 006/106] synchronize conversion indicator metadata in English and French --- xclim/data/fr.json | 28 ++++----- xclim/indicators/atmos/_conversion.py | 82 ++++++++++++++++++++++----- 2 files changed, 82 insertions(+), 28 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 2e0aa8649..bce7124ea 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -317,7 +317,7 @@ "long_name": "température journalière moyenne", "description": "température journalière moyenne estimée par la médiane des températures maximales et minimales.", "title": "Moyenne des températures maximales et minimales", - "abstract": "La température journalière moyenne en assumant une distribution symétrique des températures. Tg = (Tx + Tn) / 2" + "abstract": "La température journalière moyenne en assumant une distribution symétrique des températures (Tg = (Tx + Tn) / 2)." }, "TG_MIN": { "long_name": "Minimum de la température journalière moyenne", @@ -705,11 +705,11 @@ "abstract": "Calcul de la magnitude et la direction de la vitesse du vent à partir des deux composantes ouest-est et sud-nord." }, "WIND_SPEED_FROM_VECTOR.sfcWind": { - "long_name": "Vitesse du vent de surface", + "long_name": "Vitesse du vent près de la surface", "description": "Magnitude de la vitesse du vent calculée à partir des deux composantes uas et vas." }, "WIND_SPEED_FROM_VECTOR.sfcWindfromdir": { - "long_name": "Direction de provenance du vent de surface", + "long_name": "Vent près de la surface en provenance d'une direction", "description": "Direction de provenance du vent calculée à partir des deux composantes uas et vas. Les vents du nord ont une direction de 360° et les vents de moins de {calm_wind_thresh} ont une direction de 0°." }, "WIND_VECTOR_FROM_SPEED": { @@ -717,11 +717,11 @@ "abstract": "Calcul des deux composantes ouest-est et nord-sud du vent à partir de la magnitude et la direction de provenance de sa vitesse." }, "WIND_VECTOR_FROM_SPEED.uas": { - "long_name": "Vent d'ouest de surface", + "long_name": "Vent d'ouest près de la surface", "description": "Vitesse d'ouest du vent de surface calculé à partir de la norme de sa vitesse et de sa direction de provenance." }, "WIND_VECTOR_FROM_SPEED.vas": { - "long_name": "Vent du sud de surface", + "long_name": "Vent du sud près de la surface", "description": "Vitesse du sud du vent de surface calculé à partir de la norme de sa vitesse et de sa direction de provenance." }, "E_SAT": { @@ -733,19 +733,19 @@ "HURS_FROMDEWPOINT": { "long_name": "Humidité relative", "description": "Calculée à partir de la température et du point de rosée à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", - "title": "Humidité relative à partir du point de rosée", - "abstract": "Calcul de l'humidité relative à partir de la température et du point de rosée à l'aire de la pression de vapeur saturante." + "title": "Humidité relative à partir de la température et du point de rosée", + "abstract": "Calcul de l'humidité relative à partir de la température et du point de rosée à l'aide de la pression de vapeur saturante." }, "HURS": { "long_name": "Humidité relative", "description": "Calculée à partir de la température, de l'humidité spécifique et de la pression à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", - "title": "Humidité relative à partir de l'humidité spécifique et de la pression", + "title": "Humidité relative à partir de la température, l'humidité spécifique et de la pression", "abstract": "Calcul de l'humidité relative à partir de la température, de l'humidité spécifique et de la pression à l'aide de la pression de vapeur saturante." }, "HUSS": { "long_name": "Humidité spécifique", "description": "Calculée à partir de la température, de l'humidité relative et de la pression à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", - "title": "Humidité spécifique à partir de l'humidité relative et de la pression", + "title": "Humidité spécifique à partir de la température, l'humidité relative et de la pression", "abstract": "Calcul de l'humidité spécifique à partir de la température, de l'humidité relative et de la pression à l'aide de la pression de vapeur saturante." }, "HUSS_FROMDEWPOINT": { @@ -925,8 +925,8 @@ "CORN_HEAT_UNITS": { "title": "Unités thermiques maïs", "abstract": "Indice basé sur la température utilisé pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température journalière minimale et maximale excèdent des seuils donnés.", - "description": "Indice basé sur la température utilisé pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température journalière minimale et maximale excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement.)", - "long_name": "Unités thermiques maïs (Tmin > {thresh_tasmin} et Tmax > {thresh_tasmax})." + "description": "Indice basé sur la température utilisé pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température journalière minimale et maximale excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement.", + "long_name": "Unités thermiques maïs" }, "FREEZETHAW_SPELL_FREQUENCY": { "title": "Fréquence des événements de gel-dégel quotidien", @@ -948,9 +948,9 @@ }, "WIND_CHILL": { "title": "Facteur éolien", - "abstract": "Le facteur éolien est un indice qui équivaut à la sensation du froid par un individu moyen. Il est calculé à partir de la température et de la vitesse du vent à 10 m. Tel que définit par Environnement et Changement Climatique Canada, une seconde formule est utilisé pour les vents faibles. La formule standard est sinon la même qu'utilisée aux États-Unis.", - "description": "Refroiddissement éolien, équivalent à la sensation du froid due au vent par in individu moyen.", - "long_name": "Facteur éolien" + "abstract": "Le facteur éolien est un indice qui équivaut à la sensation du froid par un individu moyen. Il est calculé à partir de la température et de la vitesse du vent à 10 m. Tel que définit par Environnement et Changement Climatique Canada, une seconde formule est utilisée pour les vents faibles. La formule standard est sinon la même qu'utilisée aux États-Unis.", + "description": "L'indice de refroiddissement éolien, équivalent à la température ressentie due au vent froid par un individu moyen.", + "long_name": "Indice de facteur éolien" }, "HUMIDEX": { "title": "Indice humidex", diff --git a/xclim/indicators/atmos/_conversion.py b/xclim/indicators/atmos/_conversion.py index 19ec25bcd..ba58973c7 100644 --- a/xclim/indicators/atmos/_conversion.py +++ b/xclim/indicators/atmos/_conversion.py @@ -41,6 +41,8 @@ class Converter(Indicator): long_name="Humidex index", description="Humidex index describing the temperature felt by the average person in response to relative humidity.", cell_methods="", + abstract="The humidex describes the temperature felt by a person when relative humidity is taken into account. " + "It can be interpreted as the equivalent temperature felt when the air is dry.", compute=indices.humidex, ) @@ -51,6 +53,8 @@ class Converter(Indicator): long_name="Heat index", description="Perceived temperature after relative humidity is taken into account.", cell_methods="", + abstract="The heat index is an estimate of the temperature felt by a person in the shade " + "when relative humidity is taken into account.", compute=indices.heat_index, ) @@ -61,6 +65,7 @@ class Converter(Indicator): long_name="Daily mean temperature", description="Estimated mean temperature from maximum and minimum temperatures", cell_methods="time: mean within days", + abstract="The average daily temperature assuming a symmetrical temperature distribution (Tg = (Tx + Tn) / 2).", compute=indices.tas, ) @@ -77,6 +82,8 @@ class Converter(Indicator): ], long_name=["Near-surface wind speed", "Near-surface wind from direction"], cell_methods="", + abstract="Calculation of the magnitude and direction of the wind speed " + "from the two components west-east and south-north.", compute=indices.uas_vas_2_sfcwind, ) @@ -88,10 +95,12 @@ class Converter(Indicator): standard_name=["eastward_wind", "northward_wind"], long_name=["Near-surface eastward wind", "Near-surface northward wind"], description=[ - "Eastward wind speed computed from its speed and direction of origin.", - "Northward wind speed computed from its speed and direction of origin.", + "Eastward wind speed computed from the magnitude of its speed and direction of origin.", + "Northward wind speed computed from magnitude of its speed and direction of origin.", ], cell_methods="", + abstract="Calculation of the two components (west-east and north-south) of the wind " + "from the magnitude of its speed and direction of origin.", compute=indices.sfcwind_2_uas_vas, ) @@ -99,15 +108,18 @@ class Converter(Indicator): saturation_vapor_pressure = Converter( identifier="e_sat", units="Pa", - long_name="Saturation vapor pressure", + long_name="Saturation vapour pressure", description=lambda **kws: ( - "The saturation vapor pressure was calculated from a temperature according to the {method} method." + "The saturation vapour pressure was calculated from a temperature 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 "" ), + title="Saturation vapour pressure (e_sat)", + abstract="Calculation of the saturation vapour pressure from the temperature, according to a given method. " + "If ice_thresh is given, the calculation is done with reference to ice for temperatures below this threshold.", compute=indices.saturation_vapor_pressure, ) @@ -118,10 +130,10 @@ class Converter(Indicator): var_name="hurs", long_name="Relative humidity", standard_name="relative_humidity", - title="Relative humidity from temperature and dewpoint temperature.", + title="Relative humidity from temperature and dewpoint temperature", description=lambda **kws: ( "Computed from temperature, and dew point temperature through the " - "saturation vapor pressures, which were calculated " + "saturation vapour pressures, which were calculated " "according to the {method} method." ) + ( @@ -129,6 +141,7 @@ class Converter(Indicator): if kws["ice_thresh"] is not None else "" ), + abstract="Calculation of relative humidity from temperature and dew point using the saturation vapour pressure.", compute=indices.relative_humidity, parameters={ "tdps": {"kind": InputKind.VARIABLE}, @@ -144,9 +157,9 @@ class Converter(Indicator): units="%", long_name="Relative humidity", standard_name="relative_humidity", - title="Relative humidity from temperature, pressure and specific humidity.", + title="Relative humidity from temperature, specific humidity, and pressure", description=lambda **kws: ( - "Computed from temperature, specific humidity and pressure through the saturation vapor pressure, " + "Computed from temperature, specific humidity and pressure through the saturation vapour pressure, " "which was calculated from temperature according to the {method} method." ) + ( @@ -154,6 +167,8 @@ class Converter(Indicator): if kws["ice_thresh"] is not None else "" ), + abstract="Calculation of relative humidity from temperature, " + "specific humidity, and pressure using the saturation vapour pressure.", compute=indices.relative_humidity, parameters={ "tdps": None, @@ -169,8 +184,9 @@ class Converter(Indicator): units="", long_name="Specific humidity", standard_name="specific_humidity", + title="Specific humidity from temperature, relative humidity, and pressure", description=lambda **kws: ( - "Computed from temperature, relative humidity and pressure through the saturation vapor pressure, " + "Computed from temperature, relative humidity and pressure through the saturation vapour pressure, " "which was calculated from temperature according to the {method} method." ) + ( @@ -178,6 +194,8 @@ class Converter(Indicator): if kws["ice_thresh"] is not None else "" ), + abstract="Calculation of specific humidity from temperature, " + "relative humidity, and pressure using the saturation vapour pressure.", compute=indices.specific_humidity, parameters={"invalid_values": "mask"}, ) @@ -187,10 +205,13 @@ class Converter(Indicator): units="", long_name="Specific humidity", standard_name="specific_humidity", + title="Specific humidity from dew point temperature and pressure", description=( "Computed from dewpoint temperature and pressure through the saturation " "vapor pressure, which was calculated according to the {method} method." ), + abstract="Calculation of the specific humidity from dew point temperature " + "and pressure using the saturation vapour pressure.", compute=indices.specific_humidity_from_dewpoint, ) @@ -199,10 +220,13 @@ class Converter(Indicator): units="kg m-2 s-1", standard_name="solid_precipitation_flux", long_name="Solid precipitation", + title="Snowfall approximation", description=( "Solid precipitation estimated from total precipitation and temperature" " with method {method} and threshold temperature {thresh}." ), + abstract="Solid precipitation estimated from total precipitation and temperature " + "with a given method and temperature threshold.", compute=indices.snowfall_approximation, ) @@ -212,10 +236,13 @@ class Converter(Indicator): units="kg m-2 s-1", standard_name="precipitation_flux", long_name="Liquid precipitation", + title="Rainfall approximation", description=( "Liquid precipitation estimated from total precipitation and temperature" " with method {method} and threshold temperature {thresh}." ), + abstract="Liquid precipitation estimated from total precipitation and temperature " + "with a given method and temperature threshold.", compute=indices.rain_approximation, ) @@ -223,7 +250,8 @@ class Converter(Indicator): wind_chill_index = Converter( identifier="wind_chill", units="degC", - long_name="Wind chill index", + long_name="Wind chill factor", + title="Wind chill", description=lambda **kws: ( "Wind chill index describing the temperature felt by the average person in response to cold wind." ) @@ -233,6 +261,10 @@ class Converter(Indicator): if kws["method"] == "CAN" else "Invalid temperatures (T > 50°F) and winds (V < 3 mph) where masked." ), + abstract="Wind chill factor is an index that equates to how cold an average person feels. " + "It is calculated from the temperature and the wind speed at 10 m. " + "As defined by Environment and Climate Change Canada, a second formula is used for light winds. " + "The standard formula is otherwise the same as used in the United States.", compute=indices.wind_chill_index, parameters={"mask_invalid": True}, ) @@ -244,9 +276,14 @@ class Converter(Indicator): units="kg m-2 s-1", standard_name="water_potential_evapotranspiration_flux", long_name="Potential evapotranspiration", + title="Potential evapotranspiration", description=( "The potential for water evaporation from soil and transpiration by plants if the water " - "supply is sufficient, with the method {method}." + "supply is sufficient, calculated with the {method} method." + ), + abstract=( + "The potential for water evaporation from soil and transpiration by plants if the water " + "supply is sufficient, calculated with a given method." ), compute=indices.potential_evapotranspiration, ) @@ -255,9 +292,14 @@ class Converter(Indicator): identifier="water_budget_from_tas", units="kg m-2 s-1", long_name="Water budget", + title="Water budget", description=( "Precipitation minus potential evapotranspiration as a measure of an approximated surface water budget, " - "where the potential evapotranspiration is calculated with the method {method}." + "where the potential evapotranspiration, calculated with the {method} method." + ), + abstract=( + "Precipitation minus potential evapotranspiration as a measure of an approximated surface water budget, " + "where the potential evapotranspiration, calculated with a given method." ), compute=indices.water_budget, ) @@ -266,9 +308,13 @@ class Converter(Indicator): identifier="water_budget", units="kg m-2 s-1", long_name="Water budget", + title="Water budget", description=( "Precipitation minus potential evapotranspiration as a measure of an approximated surface water budget." ), + abstract=( + "Precipitation minus potential evapotranspiration as a measure of an approximated surface water budget." + ), compute=indices.water_budget, parameters={"method": "dummy"}, ) @@ -278,9 +324,12 @@ class Converter(Indicator): identifier="corn_heat_units", units="", long_name="Corn heat units", + title=" Corn heat units", description="Temperature-based index used to estimate the development of corn crops. " - "Corn growth occurs when the minimum and maximum daily temperature both exceeds " - "specific thresholds : Tmin > {thresh_tasmin} and Tmax > {thresh_tasmax}.", + "Corn growth occurs when the minimum and maximum daily temperature both exceed " + " {thresh_tasmin} and {thresh_tasmax}, respectively.", + abstract="A temperature-based index used to estimate the development of corn crops. " + "Corn growth occurs when the daily minimum and maximum temperatures exceed given thresholds.", var_name="chu", cell_methods="", missing="skip", @@ -291,8 +340,11 @@ class Converter(Indicator): identifier="utci", units="K", long_name="Universal thermal climate index", + title="Universal thermal climate index", description="UTCI is the equivalent temperature for the environment derived from a reference environment " "and is used to evaluate heat stress in outdoor spaces.", + abstract="UTCI is the equivalent temperature for the environment derived from a reference environment " + "and is used to evaluate heat stress in outdoor spaces.", cell_methods="", var_name="utci", compute=indices.universal_thermal_climate_index, @@ -302,7 +354,9 @@ class Converter(Indicator): identifier="mean_radiant_temperature", units="K", long_name="Mean radiant temperature", + title="Mean radiant temperature", description="The incidence of radiation on the body from all directions.", + abstract="The average temperature of solar and thermal radiation incident on the body's exterior.", cell_methods="", var_name="mrt", compute=indices.mean_radiant_temperature, From fecaae9201e8b983c406ad40ce497a32a7977589 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 2 Aug 2022 15:33:25 -0400 Subject: [PATCH 007/106] make fixme note about the shifting of lowercase in description fields of indicators, test adjustments --- xclim/indicators/atmos/_temperature.py | 5 +++++ xclim/testing/tests/test_indicators.py | 2 +- xclim/testing/tests/test_precip.py | 4 ++-- xclim/testing/tests/test_temperature.py | 3 ++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 7d0e31464..5c611b05f 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -416,6 +416,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="cool_night_index", units="degC", long_name="Cool night index", + # FIXME: Section formatting will shift these month names to all lowercase. description="Mean minimum temperature for September (northern hemisphere) or March (southern hemisphere).", cell_methods="time: mean over days", abstract="A night coolness variable which takes into account the mean minimum night temperatures during the " @@ -428,6 +429,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="dlyfrzthw", units="days", long_name="Freeze-thaw cycles", + # FIXME: Section formatting will shift variable names to all lowercase. description="{freq} number of days with a diurnal freeze-thaw cycle (Tmax > {thresh_tasmax} and " "Tmin <= {thresh_tasmin}).", cell_methods="", @@ -446,6 +448,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): title="Frequency of freeze-thaw spells", units="days", long_name="Frequency of freeze-thaw spells", + # FIXME: Section formatting will shift variable names to all lowercase. description="{freq} number of freeze-thaw spells (Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}) " "for at least {window} consecutive day(s).", cell_methods="", @@ -463,6 +466,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): title="Average length of freeze-thaw spells", units="days", long_name="Average length of freeze-thaw spells", + # FIXME: Section formatting will shift variable names to all lowercase. description="{freq} average length of freeze-thaw spells (Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}) " "for at least {window} consecutive day(s).", cell_methods="", @@ -480,6 +484,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): title="Maximal length of freeze-thaw spells", units="days", long_name="Maximal length of freeze-thaw spells", + # FIXME: Section formatting will shift variable names to all lowercase. description="{freq} maximal length of freeze-thaw spells (Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}) " "for at least {window} consecutive day(s).", cell_methods="", diff --git a/xclim/testing/tests/test_indicators.py b/xclim/testing/tests/test_indicators.py index b1cd19f64..3222bb695 100644 --- a/xclim/testing/tests/test_indicators.py +++ b/xclim/testing/tests/test_indicators.py @@ -499,7 +499,7 @@ def test_formatting(pr_series): # pint 0.10 now pretty print day as d. assert out.attrs["long_name"] == "Number of wet days" assert out.attrs["description"] in [ - "Annual number of days with daily precipitation at or above 1.0 mm/d." + "Annual number of days with daily precipitation at or above 1 mm/d." ] out = atmos.wetdays(pr_series(np.arange(366)), thresh=1.5 * units.mm / units.day) assert out.attrs["long_name"] == "Number of wet days" diff --git a/xclim/testing/tests/test_precip.py b/xclim/testing/tests/test_precip.py index 3cdf12726..aadc1bbb1 100644 --- a/xclim/testing/tests/test_precip.py +++ b/xclim/testing/tests/test_precip.py @@ -577,11 +577,11 @@ def test_dry_spell(atmosds): "during which the total precipitation on a window of 7 day(s) is below 3 mm." ) in events.description assert ( - "The annual number of days in dry period(s) of 7 days or more" + "The annual number of days in dry periods of 7 day(s) or more" in total_d_sum.description ) assert ( - "The annual number of days in dry period(s) of 7 days or more" + "The annual number of days in dry periods of 7 day(s) or more" in total_d_max.description ) diff --git a/xclim/testing/tests/test_temperature.py b/xclim/testing/tests/test_temperature.py index 5f1e1aa3d..89ea7bf3c 100644 --- a/xclim/testing/tests/test_temperature.py +++ b/xclim/testing/tests/test_temperature.py @@ -1333,7 +1333,8 @@ def test_freezethaw_spell_frequency(): assert out.attrs["long_name"] == "Frequency of freeze-thaw spells" assert out.attrs["description"] in [ - "Annual number of freeze-thaw spells (Tmax > 0 degC and Tmin <= 0 degC) " + # FIXME: Section formatting shifts variable names to all lowercase. + "Annual number of freeze-thaw spells (tmax > 0 degC and tmin <= 0 degC) " "for at least 2 consecutive day(s)." ] From 0ed6000e5ebef643da27fc0cd1219522e6d2caaa Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 2 Aug 2022 15:39:07 -0400 Subject: [PATCH 008/106] fix CHU test --- xclim/indicators/atmos/_conversion.py | 4 ++-- xclim/testing/tests/test_temperature.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/xclim/indicators/atmos/_conversion.py b/xclim/indicators/atmos/_conversion.py index ba58973c7..d2b6a3868 100644 --- a/xclim/indicators/atmos/_conversion.py +++ b/xclim/indicators/atmos/_conversion.py @@ -326,8 +326,8 @@ class Converter(Indicator): long_name="Corn heat units", title=" Corn heat units", description="Temperature-based index used to estimate the development of corn crops. " - "Corn growth occurs when the minimum and maximum daily temperature both exceed " - " {thresh_tasmin} and {thresh_tasmax}, respectively.", + "Corn growth occurs when the minimum and maximum daily temperatures both exceed " + "{thresh_tasmin} and {thresh_tasmax}, respectively.", abstract="A temperature-based index used to estimate the development of corn crops. " "Corn growth occurs when the daily minimum and maximum temperatures exceed given thresholds.", var_name="chu", diff --git a/xclim/testing/tests/test_temperature.py b/xclim/testing/tests/test_temperature.py index 89ea7bf3c..e347d4cc7 100644 --- a/xclim/testing/tests/test_temperature.py +++ b/xclim/testing/tests/test_temperature.py @@ -1310,7 +1310,8 @@ def test_corn_heat_units(): ) assert ( - "specific thresholds : tmin > 4.44 degc and tmax > 10 degc." in chu.description + "minimum and maximum daily temperatures both exceed 4.44 degc and 10 degc, respectively." + in chu.description ) From e5998ced40daf904e97772a8fe998e0fcb4c3fd6 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 3 Aug 2022 10:49:07 -0400 Subject: [PATCH 009/106] test fixes --- xclim/testing/tests/test_indicators.py | 2 +- xclim/testing/tests/test_temperature.py | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/xclim/testing/tests/test_indicators.py b/xclim/testing/tests/test_indicators.py index 3222bb695..828c7e486 100644 --- a/xclim/testing/tests/test_indicators.py +++ b/xclim/testing/tests/test_indicators.py @@ -503,7 +503,7 @@ def test_formatting(pr_series): ] out = atmos.wetdays(pr_series(np.arange(366)), thresh=1.5 * units.mm / units.day) assert out.attrs["long_name"] == "Number of wet days" - assert out.attrs["long_name"] in [ + assert out.attrs["description"] in [ "Annual number of days with daily precipitation at or above 1.5 mm/d." ] diff --git a/xclim/testing/tests/test_temperature.py b/xclim/testing/tests/test_temperature.py index e347d4cc7..607ac9c46 100644 --- a/xclim/testing/tests/test_temperature.py +++ b/xclim/testing/tests/test_temperature.py @@ -1335,8 +1335,8 @@ def test_freezethaw_spell_frequency(): assert out.attrs["long_name"] == "Frequency of freeze-thaw spells" assert out.attrs["description"] in [ # FIXME: Section formatting shifts variable names to all lowercase. - "Annual number of freeze-thaw spells (tmax > 0 degC and tmin <= 0 degC) " - "for at least 2 consecutive day(s)." + "Annual number of freeze-thaw spells (Tmax > 0 degC and Tmin <= 0 degC) " + "for at least 2 consecutive day(s).".lower().capitalize() ] @@ -1359,8 +1359,9 @@ def test_freezethaw_spell_mean_length(): assert out.attrs["long_name"] == "Average length of freeze-thaw spells" assert out.attrs["description"] in [ + # FIXME: Section formatting shifts variable names to all lowercase. "Annual average length of freeze-thaw spells (Tmax > 0 degC and Tmin <= 0 degC) " - "for at least 2 consecutive day(s)." + "for at least 2 consecutive day(s).".lower().capitalize() ] @@ -1383,6 +1384,7 @@ def test_freezethaw_spell_max_length(): assert out.attrs["long_name"] == "Maximal length of freeze-thaw spells" assert out.attrs["description"] in [ + # FIXME: Section formatting shifts variable names to all lowercase. "Annual maximal length of freeze-thaw spells (Tmax > 0 degC and Tmin <= 0 degC) " - "for at least 2 consecutive day(s)." + "for at least 2 consecutive day(s).".lower().capitalize() ] From 664fd335dfb1cbbbf71daebe6a2ebfe061a7ba30 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 8 Aug 2022 16:38:02 -0400 Subject: [PATCH 010/106] =?UTF-8?q?journali=C3=A8re=20to=20quotidienne?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xclim/data/fr.json | 206 ++++++++++++++++++++++----------------------- 1 file changed, 103 insertions(+), 103 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index bce7124ea..f91b1841c 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -201,7 +201,7 @@ }, "SDII": { "long_name": "Indice simple de l'intensité des précipitations", - "description": "Indice simple d'intensité des précipitations {freq:m} [SDII]. Moyenne {freq:f} de la précipitation journalière pour les jours où la précipitation est au-dessus de {thresh}.", + "description": "Indice simple d'intensité des précipitations {freq:m} [SDII]. Moyenne {freq:f} de la précipitation quotidienne pour les jours où la précipitation est au-dessus de {thresh}.", "title": "Indice simple de l'intensité des précipitations", "abstract": "Moyenne de la précipitation quotidienne pour les jours où la précipitation est au-dessus d'un seuil." }, @@ -209,11 +209,11 @@ "long_name": "Précipitation totale", "description": "Précipitation totale {freq:f}.", "title": "Précipitation accumulée totale (liquide ou solide)", - "abstract": "Précipitation accumulée totale. Si la température journalière moyenne est donnée, le paramètre phase peut-être utilisé pour restreindre le calcul aux précipitations d'une seule phase (liquide ou solide). Les précipitations sont considérées solides si la température journalière moyenne est sous 0°C (et vice-versa)." + "abstract": "Précipitation accumulée totale. Si la température quotidienne moyenne est donnée, le paramètre phase peut-être utilisé pour restreindre le calcul aux précipitations d'une seule phase (liquide ou solide). Les précipitations sont considérées solides si la température quotidienne moyenne est sous 0°C (et vice-versa)." }, "WET_PRCPTOT": { "long_name": "Précipitation totale lors de jours pluvieux", - "description": "Précipitation totale {freq:f} lorsque la précipitation journalière excède {thresh}.", + "description": "Précipitation totale {freq:f} lorsque la précipitation quotidienne excède {thresh}.", "title": "Précipitation accumulée totale lors de jours pluvieux", "abstract": "Précipitation accumulée totale lors de jours pluvieux. Un jour est considéré pluvieux si la précipitation est supérieure ou égale à un seuil donné." }, @@ -221,13 +221,13 @@ "long_name": "Précipitation liquide totale", "description": "Précipitation liquide totale {freq:f}, estimée comme la précipitation lorsque la température moyenne est >= 0°C.", "title": "Précipitation liquide accumulée totale", - "abstract": "Précipitation liquide accumulée totale. Les précipitations sont considérées liquides lorsque la température journalière moyenne est au-dessus de 0°C." + "abstract": "Précipitation liquide accumulée totale. Les précipitations sont considérées liquides lorsque la température quotidienne moyenne est au-dessus de 0°C." }, "SOLIDPRCPTOT": { "long_name": "Précipitation solide totale", "description": "Précipitation solide totale {freq:f}, estimée comme la précipitation lorsque la température moyenne est < 0°C.", "title": "Précipitation solide accumulée totale", - "abstract": "Précipitation liquide accumulée totale. Les précipitations sont considérées liquides lorsque la température journalière moyenne est sous 0°C." + "abstract": "Précipitation liquide accumulée totale. Les précipitations sont considérées liquides lorsque la température quotidienne moyenne est sous 0°C." }, "SPI": { "long_name": "Indice de précipitation standardisé (SPI)", @@ -249,123 +249,123 @@ }, "TN_DAYS_ABOVE": { "long_name": "Nombre de jours avec Tmin > {thresh}", - "description": "Nombre {freq:m} de jours où la température journalière minimale est au-dessus de {thresh}.", + "description": "Nombre {freq:m} de jours où la température quotidienne minimale est au-dessus de {thresh}.", "title": "Nombre de jours avec Tmin au-dessus d'un certain seuil", - "abstract": "Nombre de jours où la température journalière minimale est au-dessus d'un seuil." + "abstract": "Nombre de jours où la température quotidienne minimale est au-dessus d'un seuil." }, "TN_DAYS_BELOW": { "long_name": "Nombre de jours avec Tmin < {thresh}", - "description": "Nombre {freq:m} de jours où la température journalière minimale est sous {thresh}.", + "description": "Nombre {freq:m} de jours où la température quotidienne minimale est sous {thresh}.", "title": "Nombre de jours avec Tmin sous un certain seuil", - "abstract": "Nombre de jours où la température journalière minimale est sous un seuil." + "abstract": "Nombre de jours où la température quotidienne minimale est sous un seuil." }, "TG_DAYS_ABOVE": { "long_name": "Nombre de jours avec Tmoy > {thresh}", - "description": "Nombre {freq:m} de jours où la température journalière moyenne est au-dessus de {thresh}.", + "description": "Nombre {freq:m} de jours où la température quotidienne moyenne est au-dessus de {thresh}.", "title": "Nombre de jours avec tmoy au-dessus d'un certain seuil", - "abstract": "Nombre de jours où la température journalière moyenne est au-dessus d'un seuil." + "abstract": "Nombre de jours où la température quotidienne moyenne est au-dessus d'un seuil." }, "TG_DAYS_BELOW": { "long_name": "Nombre de jours avec Tmoy < {thresh}", - "description": "Nombre {freq:m} de jours où la température journalière moyenne est sous {thresh}.", + "description": "Nombre {freq:m} de jours où la température quotidienne moyenne est sous {thresh}.", "title": "Nombre de jours avec tmoy sous un certain seuil", - "abstract": "Nombre de jours où la température journalière moyenne est sous un seuil." + "abstract": "Nombre de jours où la température quotidienne moyenne est sous un seuil." }, "TX_DAYS_ABOVE": { "long_name": "Nombre de jours avec Tmax > {thresh}", - "description": "Nombre {freq:m} de jours où la température journalière maximale est au-dessus de {thresh}.", + "description": "Nombre {freq:m} de jours où la température quotidienne maximale est au-dessus de {thresh}.", "title": "Nombre de jours avec Tmax au-dessus d'un certain seuil", - "abstract": "Nombre de jours où la température journalière maximale est au-dessus d'un seuil." + "abstract": "Nombre de jours où la température quotidienne maximale est au-dessus d'un seuil." }, "TX_DAYS_BELOW": { "long_name": "Nombre de jours avec Tmax < {thresh}", - "description": "Nombre {freq:m} de jours où la température journalière maximale est sous {thresh}.", + "description": "Nombre {freq:m} de jours où la température quotidienne maximale est sous {thresh}.", "title": "Nombre de jours avec Tmax sous un certain seuil", - "abstract": "Nombre de jours où la température journalière maximale est sous un seuil." + "abstract": "Nombre de jours où la température quotidienne maximale est sous un seuil." }, "TX_TN_DAYS_ABOVE": { "long_name": "Nombre de jours avec Tmax > {thresh_tasmax} et Tmin > {thresh_tasmin}", - "description": "Nombre {freq:m} de jours où la température journalière maximale excède {thresh_tasmax} et la température journalière minimale excède {thresh_tasmin}.", + "description": "Nombre {freq:m} de jours où la température quotidienne maximale excède {thresh_tasmax} et la température quotidienne minimale excède {thresh_tasmin}.", "title": "Nombre de jours avec des températures quotidiennes minimales et maximales chaudes", - "abstract": "Nombre de jours où les températures journalières maximales et minimales sont au-dessus de seuils donnés." + "abstract": "Nombre de jours où les températures quotidiennes maximales et minimales sont au-dessus de seuils donnés." }, "HEAT_WAVE_FREQUENCY": { "long_name": "Nombre de vagues de chaleur (Tmin > {thresh_tasmin} et Tmax > {thresh_tasmax} pour {window} jours)", "description": "Nombre {freq:m} de vagues de chaleur. Une vague de chaleur se produit lorsque les températures quotidiennes minimales et maximales excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Fréquence des vagues de chaleur", - "abstract": "Nombre de vagues de chaleur. Une vague de chaleur se produit lorsque les températures journalières minimales et maximales excèdent des seuils donnés durant un certain nombre de jours." + "abstract": "Nombre de vagues de chaleur. Une vague de chaleur se produit lorsque les températures quotidiennes minimales et maximales excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_TOTAL_LENGTH": { "long_name": "Durée totale des vagues de chaleur (Tmin > {thresh_tasmin} et Tmax > {thresh_tasmax} pour >= {window} days)", "description": "Durée totale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures quotidiennes minimales et maximales excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Durée totale des vagues de chaleur", - "abstract": "Durée totale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures journalières minimales et maximales excèdent des seuils donnés durant un certain nombre de jours." + "abstract": "Durée totale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures quotidiennes minimales et maximales excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_MAX_LENGTH": { "long_name": "Longueur maximale des vagues de chaleur (Tmin > {thresh_tasmin} et Tmax > {thresh_tasmax} pour {window} jours au moins)", "description": "Longueur maximale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures quotidiennes minimales et maximales excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Longueur maximale des vagues de chaleur", - "abstract": "Longueur maximale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures journalières minimales et maximales excèdent des seuils donnés durant un certain nombre de jours." + "abstract": "Longueur maximale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures quotidiennes minimales et maximales excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_INDEX": { "long_name": "Nombre de jours de vague de chaleur", "description": "Nombre {freq:m} de jours de vague de chaleur, définie comme cinq jours consécutifs ou plus où la température est au-dessus de {thresh}.", "title": "Indice de vague de chaleur", - "abstract": "Nombre de jours de vagues de chaleur. Une vague de chaleur se produit lorsque la température journalière maximale excède un seuil durant au moins 5 jours." + "abstract": "Nombre de jours de vagues de chaleur. Une vague de chaleur se produit lorsque la température quotidienne maximale excède un seuil durant au moins 5 jours." }, "TG": { - "long_name": "température journalière moyenne", - "description": "température journalière moyenne estimée par la médiane des températures maximales et minimales.", + "long_name": "température quotidienne moyenne", + "description": "température quotidienne moyenne estimée par la médiane des températures maximales et minimales.", "title": "Moyenne des températures maximales et minimales", - "abstract": "La température journalière moyenne en assumant une distribution symétrique des températures (Tg = (Tx + Tn) / 2)." + "abstract": "La température quotidienne moyenne en assumant une distribution symétrique des températures (Tg = (Tx + Tn) / 2)." }, "TG_MIN": { - "long_name": "Minimum de la température journalière moyenne", - "description": "Minimum {freq:m} de la température journalière moyenne.", - "title": "Minimum de la température journalière moyenne", - "abstract": "Minimum de la température journalière moyenne." + "long_name": "Minimum de la température quotidienne moyenne", + "description": "Minimum {freq:m} de la température quotidienne moyenne.", + "title": "Minimum de la température quotidienne moyenne", + "abstract": "Minimum de la température quotidienne moyenne." }, "TG_MAX": { - "long_name": "Maximum de la température journalière moyenne", - "description": "Maximum {freq:m} de la température journalière moyenne.", - "title": "Maximum de la température journalière moyenne", - "abstract": "Maximum de la température journalière moyenne." + "long_name": "Maximum de la température quotidienne moyenne", + "description": "Maximum {freq:m} de la température quotidienne moyenne.", + "title": "Maximum de la température quotidienne moyenne", + "abstract": "Maximum de la température quotidienne moyenne." }, "TG_MEAN": { - "long_name": "Moyenne de la température journalière", - "description": "Moyenne {freq:f} de la température journalière.", - "title": "Température journalière moyenne", - "abstract": "Température journalière moyenne." + "long_name": "Moyenne de la température quotidienne", + "description": "Moyenne {freq:f} de la température quotidienne.", + "title": "Température quotidienne moyenne", + "abstract": "Température quotidienne moyenne." }, "TG10P": { - "long_name": "Nombre de jours où la température est au-dessus du {per_base_thresh}e percentile", + "long_name": "Nombre de jours où la température quotidienne est au-dessus du {per_base_thresh}e percentile", "description": "Nombre {freq:m} de jours où la température est au-dessus du {per_base_thresh}e percentile. Le {per_base_thresh}e percentile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", "title": "Nombre de jours où la température est au-dessus du {per_base_thresh}e percentile", "abstract": "Nombre de jours où la température est au-dessus du {per_base_thresh}e percentile" }, "TG90P": { - "long_name": "Nombre de jours où la température est au-dessus du {per_base_thresh}e percentile", + "long_name": "Nombre de jours où la température quotidienne est au-dessus du {per_base_thresh}e percentile", "description": "Nombre {freq:m} de jours où la température est au-dessus du {per_base_thresh}e percentile. Le {per_base_thresh}e percentile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", "title": "Nombre de jours où la température est au-dessus du {per_base_thresh}e percentile", "abstract": "Nombre de jours où la température est au-dessus du {per_base_thresh}e percentile." }, "TN_MIN": { - "long_name": "Minimum de la température journalière", - "description": "Minimum {freq:m} de la température journalière minimale.", - "title": "Température journalière minimale", - "abstract": "Température journalière minimale." + "long_name": "Minimum de la température quotidienne", + "description": "Minimum {freq:m} de la température quotidienne minimale.", + "title": "Température quotidienne minimale", + "abstract": "Température quotidienne minimale." }, "TN_MAX": { - "long_name": "Maximum de la température journalière minimale", - "description": "Maximum {freq:m} de la température journalière minimale.", + "long_name": "Maximum de la température quotidienne minimale", + "description": "Maximum {freq:m} de la température quotidienne minimale.", "title": "Maximum de la température minimale", - "abstract": "Maximum de la température journalière minimale." + "abstract": "Maximum de la température quotidienne minimale." }, "TN_MEAN": { - "long_name": "Moyenne de la température journalière minimale", - "description": "Moyenne {freq:f} de la température journalière minimale.", + "long_name": "Moyenne de la température quotidienne minimale", + "description": "Moyenne {freq:f} de la température quotidienne minimale.", "title": "Moyenne de la température minimale", - "abstract": "Moyenne de la température journalière minimale." + "abstract": "Moyenne de la température quotidienne minimale." }, "TN10P": { "long_name": "Nombre de jours où la température minimale est en dessous du {per_base_thresh}e percentile", @@ -380,22 +380,22 @@ "abstract": "Nombre de jours où la température minimale est au-dessus du {per_base_thresh}e percentile." }, "TX_MIN": { - "long_name": "Minimum de la température journalière maximale", - "description": "Minimum {freq:m} de la température journalière maximale.", + "long_name": "Minimum de la température quotidienne maximale", + "description": "Minimum {freq:m} de la température quotidienne maximale.", "title": "Minimum de la température maximale", - "abstract": "Minimum de la température journalière maximale." + "abstract": "Minimum de la température quotidienne maximale." }, "TX_MAX": { - "long_name": "Maximum de la température journalière", - "description": "Maximum {freq:m} de la température journalière maximale.", - "title": "Température journalière maximale", - "abstract": "Température journalière maximale." + "long_name": "Maximum de la température quotidienne", + "description": "Maximum {freq:m} de la température quotidienne maximale.", + "title": "Température quotidienne maximale", + "abstract": "Température quotidienne maximale." }, "TX_MEAN": { - "long_name": "Moyenne de la température journalière maximale", - "description": "Moyenne {freq:f} de la température journalière maximale.", + "long_name": "Moyenne de la température quotidienne maximale", + "description": "Moyenne {freq:f} de la température quotidienne maximale.", "title": "Moyenne de la température maximale", - "abstract": "Moyenne de la température journalière maximale." + "abstract": "Moyenne de la température quotidienne maximale." }, "TX10P": { "long_name": "Nombre de jours où la température maximale est en dessous du {per_base_thresh}e percentile", @@ -413,13 +413,13 @@ "long_name": "Amplitude diurne maximale de la température", "description": "Maximum {freq:m} de l'amplitude diurne de la température.", "title": "Amplitude diurne maximale de la température", - "abstract": "L'écart maximal entre les températures journalières maximale et minimale." + "abstract": "L'écart maximal entre les températures quotidiennes maximale et minimale." }, "DTR": { "long_name": "Amplitude diurne de la température", "description": "Moyenne {freq:f} de l'amplitude diurne de la température.", "title": "Amplitude diurne de la température", - "abstract": "La différence moyenne entre les températures journalières maximale et minimale." + "abstract": "La différence moyenne entre les températures quotidiennes maximale et minimale." }, "DTRVAR": { "long_name": "Variabilité de l'amplitude diurne de la température", @@ -429,31 +429,31 @@ }, "ETR": { "long_name": "Amplitude des températures extrêmes", - "description": "Calcul {freq:m} de l'intervalle entre le maximum de la température journalière maximale et le minimum de la température journalière minimale.", + "description": "Calcul {freq:m} de l'intervalle entre le maximum de la température quotidienne maximale et le minimum de la température quotidienne minimale.", "title": "Intervalle des températures extrêmes", "abstract": "Le maximum de la température maximale moins le minimum de la température minimale." }, "COLD_SPELL_DURATION_INDEX": { "long_name": "Indice de durée des vagues de froid", - "description": "Nombre {freq:m} de jours de vague de froid. Une vague de froid se produit lorsque la température journalière minimale est sous le {per_base_thresh} percentile durant au moins {window} jours consécutifs. Le {per_base_thresh} percentile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "description": "Nombre {freq:m} de jours de vague de froid. Une vague de froid se produit lorsque la température quotidienne minimale est sous le {per_base_thresh} percentile durant au moins {window} jours consécutifs. Le {per_base_thresh} percentile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", "title": "Indice de durée des vagues de froid", - "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température journalière minimale est sous le {per_base_thresh} percentile durant au moins {window} nombre de jours consécutifs." + "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température quotidienne minimale est sous le {per_base_thresh} percentile durant au moins {window} nombre de jours consécutifs." }, "COLD_SPELL_FREQUENCY": { "long_name": "Nombre de vagues de froid", - "description": "Nombre {freq:m} de vagues de froid. Une vague de froid se produit lorsque la température journalière minimale est sous {thresh} durant au moins {window} jours consécutifs.", + "description": "Nombre {freq:m} de vagues de froid. Une vague de froid se produit lorsque la température quotidienne minimale est sous {thresh} durant au moins {window} jours consécutifs.", "title": "Nombre de vagues de froid", - "abstract": "Nombre de vagues de froid. Une vague de froid se produit lorsque la température journalière minimale est sous un seuil durant au moins un certain nombre de jours consécutifs." + "abstract": "Nombre de vagues de froid. Une vague de froid se produit lorsque la température quotidienne minimale est sous un seuil durant au moins un certain nombre de jours consécutifs." }, "COLD_SPELL_DAYS": { "long_name": "Jours de vagues de froid", - "description": "Nombre {freq:m} de jours de vague de froid. Une vague de froid se produit lorsque la température journalière minimale est sous {thresh} durant au moins {window} jours consécutifs.", + "description": "Nombre {freq:m} de jours de vague de froid. Une vague de froid se produit lorsque la température quotidienne minimale est sous {thresh} durant au moins {window} jours consécutifs.", "title": "Jours de vague de froid", - "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température journalière minimale est sous un seuil durant au moins un certain nombre de jours consécutifs." + "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température quotidienne minimale est sous un seuil durant au moins un certain nombre de jours consécutifs." }, "COOL_NIGHT_INDEX": { "long_name": "Indice de fraîcheur des nuits", - "description": "Moyenne {freq:f} de la température journalière minimale en septembre (hémisphère nord) ou en mars (hémisphère sud).", + "description": "Moyenne {freq:f} de la température quotidienne minimale en septembre (hémisphère nord) ou en mars (hémisphère sud).", "title": "Indice de fraîcheur des nuits", "comment": "Formule prise de Tonietto & Carbonneau, 2004 (10.1016/j.agrformet.2003.06.001).", "abstract": "Indicateur des conditions nycthermiques de maturation, qui correspond à la valeur moyenne de la température minimale de l'air sur les 30 jours précédant la date de récolte potentielle." @@ -529,27 +529,27 @@ }, "FROST_DAYS": { "long_name": "Nombre de jours de gel (Tmin < {thresh})", - "description": "Nombre {freq:m} de jours où la température journalière minimale est sous {thresh}.", + "description": "Nombre {freq:m} de jours où la température quotidienne minimale est sous {thresh}.", "title": "Nombre de jours de gel", - "abstract": "Nombre de jours où la température journalière minimale est sous un seuil." + "abstract": "Nombre de jours où la température quotidienne minimale est sous un seuil." }, "ICE_DAYS": { "long_name": "Nombre de jours de glace (Tmax < {thresh})", - "description": "Nombre {freq:m} de jours où la température journalière maximale est sous {thresh}.", + "description": "Nombre {freq:m} de jours où la température quotidienne maximale est sous {thresh}.", "title": "Nombre de jours de glace", - "abstract": "Nombre de jours où la température journalière maximale est sous un seuil." + "abstract": "Nombre de jours où la température quotidienne maximale est sous un seuil." }, "CONSECUTIVE_FROST_DAYS": { "long_name": "Durée maximale des périodes de gel (Tmin < 0°C)", - "description": "Durée maximale {freq:f} des périodes où la température journalière minimale est sous 0°C.", + "description": "Durée maximale {freq:f} des périodes où la température quotidienne minimale est sous 0°C.", "title": "Durée maximale des périodes de gel (Tmin < 0°C)", - "abstract": "Durée maximale des périodes consécutives où la température journalière minimale est sous 0°C." + "abstract": "Durée maximale des périodes consécutives où la température quotidienne minimale est sous 0°C." }, "FROST_FREE_SEASON_LENGTH": { "long_name": "Durée de la saison sans gel", - "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs où la température journalière moyenne dépasse {thresh} et la première occurrence (après le {mid_date}) d'au moins {window} jours consécutifs où la température est sous {thresh}.", + "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs où la température quotidienne moyenne dépasse {thresh} et la première occurrence (après le {mid_date}) d'au moins {window} jours consécutifs où la température est sous {thresh}.", "title": "Durée de la saison sans gel", - "abstract": "Nombre de jours entre la première série de N jours avec des températures journalières moyennes au-dessus d'un seuil et la première série de N jours avec des températures journalières moyennes sous ce même seuil." + "abstract": "Nombre de jours entre la première série de N jours avec des températures quotidiennes moyennes au-dessus d'un seuil et la première série de N jours avec des températures quotidiennes moyennes sous ce même seuil." }, "FROST_FREE_SEASON_START": { "long_name": "Jour de l'année du début de la saison sans gel", @@ -559,9 +559,9 @@ }, "GROWING_SEASON_LENGTH": { "long_name": "Durée de la saison de croissance", - "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs où la température journalière moyenne dépasse {thresh} et la première occurrence (après le {mid_date}) d'au moins {window} jours consécutifs où la température est sous {thresh}.", + "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs où la température quotidienne moyenne dépasse {thresh} et la première occurrence (après le {mid_date}) d'au moins {window} jours consécutifs où la température est sous {thresh}.", "title": "Durée de la saison de croissance", - "abstract": "Nombre de jours entre la première série de N jours avec des températures journalières moyennes au-dessus d'un seuil et la première série de N jours avec des températures journalières moyennes sous ce même seuil." + "abstract": "Nombre de jours entre la première série de N jours avec des températures quotidiennes moyennes au-dessus d'un seuil et la première série de N jours avec des températures quotidiennes moyennes sous ce même seuil." }, "GROWING_SEASON_START": { "long_name": "Jour de l'année du début de la saison de croissance", @@ -594,8 +594,8 @@ "abstract": "Analyse de fréquence selon un mode et une distribution." }, "STATS": { - "long_name": "{op} du {indexer} {freq:m} du flux journalier", - "description": "{op} du {indexer} {freq:m} du flux journalier.", + "long_name": "{op} du {indexer} {freq:m} du flux quotidien", + "description": "{op} du {indexer} {freq:m} du flux quotidien.", "title": "Calcul de statistiques sur des sous-périodes.", "abstract": "" }, @@ -631,45 +631,45 @@ }, "DRY_DAYS": { "long_name": "Nombre de jours secs (precip < {thresh})", - "description": "Nombre {freq} de jours où la précipitation journalière est sous {thresh}.", + "description": "Nombre {freq} de jours où la précipitation quotidienne est sous {thresh}.", "title": "Jours secs", - "abstract": "Nombre de jours où la précipitation journalière est sous un seuil." + "abstract": "Nombre de jours où la précipitation quotidienne est sous un seuil." }, "HOT_SPELL_FREQUENCY": { "long_name": "Nombre de périodes chaudes (Tmax > {thresh_tasmax} durant >= {window} jours)", - "description": "Nombre {freq} de périodes chaudes. Une période chaude se produit lorsque la température journalière maximale excède {thresh_tasmax} durant au moins {window} jours.", + "description": "Nombre {freq} de périodes chaudes. Une période chaude se produit lorsque la température quotidienne maximale excède {thresh_tasmax} durant au moins {window} jours.", "title": "Fréquences des périodes chaudes", - "abstract": "Nombre de périodes chaudes dans un période donnée. Une période chaude se produit lorsque la température journalière maximale excède un seuil spécifique durant un minimum de jours." + "abstract": "Nombre de périodes chaudes dans un période donnée. Une période chaude se produit lorsque la température quotidienne maximale excède un seuil spécifique durant un minimum de jours." }, "LAST_SPRING_FROST": { "long_name": "Jour de l'année du dernier gel printanier", - "description": "Jour de l'année du dernier gel printanier, defini comme le dernier jour où la température journalière moyenne reste sous {thresh} durant au moins {window} jours avant une certaine date.", + "description": "Jour de l'année du dernier gel printanier, defini comme le dernier jour où la température quotidienne moyenne reste sous {thresh} durant au moins {window} jours avant une certaine date.", "title": "Jour de l'année du dernier gel printanier", "abstract": "Dernier jour où la température est inférieur à un seuil durant un certain nombre de jours, limité par une date finale." }, "HOT_SPELL_MAX_LENGTH": { "long_name": "Longueur maximale des périodes chaudes (Tmax > {thresh_tasmax} durant >= {window} jours)", - "description": "Longueur maximale {freq:f} des périodes chaudes. Une période chaude se produit lorsque la température journalière maximale excède {thresh_tasmax} durant au moins {window} jours.", + "description": "Longueur maximale {freq:f} des périodes chaudes. Une période chaude se produit lorsque la température quotidienne maximale excède {thresh_tasmax} durant au moins {window} jours.", "title": "Longueur maximale des périodes chaudes", - "abstract": "Longueur maximale des périodes chaudes dans une période donnée. Une période chaude se produit lorsque la température journalière maximale excède un seuil spécifique durant un minimum de jours." + "abstract": "Longueur maximale des périodes chaudes dans une période donnée. Une période chaude se produit lorsque la température quotidienne maximale excède un seuil spécifique durant un minimum de jours." }, "CONSECUTIVE_FROST_FREE_DAYS": { "long_name": "Nombre maximal de jours consécutifs avec Tmin >= {thresh}", - "description": "Nombre maximal {freq} de jours consécutifs où la température journalière minimale excède ou est égale à {thresh}.", + "description": "Nombre maximal {freq} de jours consécutifs où la température quotidienne minimale excède ou est égale à {thresh}.", "title": "Nombre maximal de jours consécutifs sans gel (Tmin >= 0℃)", - "abstract": "La nombre maximal de jours consécutifs sans gel: où la température journalière minimale est au-dessus ou égale à un seuil." + "abstract": "La nombre maximal de jours consécutifs sans gel: où la température quotidienne minimale est au-dessus ou égale à un seuil." }, "GROWING_SEASON_END": { "long_name": "Jour de l'année de la fin de la saison de croissance", - "description": "Jour de l'année de la fin de la saison de croissance. La saison de croissance est définie comme l'intervalle entre la première série de {window} jours où la température journalière est au-dessus de {thresh} et la première série (après le {mid_date}) de {window} jours où elle est sous {thresh}.", + "description": "Jour de l'année de la fin de la saison de croissance. La saison de croissance est définie comme l'intervalle entre la première série de {window} jours où la température quotidienne est au-dessus de {thresh} et la première série (après le {mid_date}) de {window} jours où elle est sous {thresh}.", "title": "Fin de la saison de croissance", - "abstract": "Jour de l'année de la fin de la saison de croissance. La saison de croissance est définie comme l'intervalle entre la première série de N jours où la température journalière est au-dessus d'un seuil et la première série (après une certaine date) de N jours où elle est sous ce même seuil." + "abstract": "Jour de l'année de la fin de la saison de croissance. La saison de croissance est définie comme l'intervalle entre la première série de N jours où la température quotidienne est au-dessus d'un seuil et la première série (après une certaine date) de N jours où elle est sous ce même seuil." }, "FROST_FREE_SEASON_END": { "long_name": "Jour de l'année de la fin de la saison sans gel", - "description": "Jour de l'année de la fin de la saison sans gel. La saison sans gel est définie comme l'intervalle entre la première série de {window} jours où la température journalière est au-dessus de {thresh} et la première série (après le {mid_date}) de {window} jours où elle est sous {thresh}.", + "description": "Jour de l'année de la fin de la saison sans gel. La saison sans gel est définie comme l'intervalle entre la première série de {window} jours où la température quotidienne est au-dessus de {thresh} et la première série (après le {mid_date}) de {window} jours où elle est sous {thresh}.", "title": "Fin de la saison sans gel", - "abstract": "Jour de l'année de la fin de la saison sans gél. La saison sans gel est définie comme l'intervalle entre la première série de N jours où la température journalière est au-dessus d'un seuil et la première série (après une certaine date) de N jours où elle est sous ce même seuil." + "abstract": "Jour de l'année de la fin de la saison sans gél. La saison sans gel est définie comme l'intervalle entre la première série de N jours où la température quotidienne est au-dessus d'un seuil et la première série (après une certaine date) de N jours où elle est sous ce même seuil." }, "FWI": { "description": "L'IFM est formé de six composantes qui tiennent compte des effets de la teneur en eau des combustibles et des conditions météorologiques sur le comportement du feu.", @@ -779,10 +779,10 @@ "abstract": "Précipitation solide estimée à partir de la précipitation totale et de la température selon une méthode et un seuil de température donnés." }, "SD": { - "long_name": "Profondeur de neige journalière moyenne", - "description": "Profondeur de neige journalière moyenne.", + "long_name": "Profondeur de neige quotidienne moyenne", + "description": "Profondeur de neige quotidienne moyenne.", "title": "Moyenne de la profondeur de neige", - "abstract": "Profondeur de neige journalière moyenne." + "abstract": "Profondeur de neige quotidienne moyenne." }, "PRLP": { "long_name": "Précipitation liquide", @@ -842,7 +842,7 @@ "long_name": "Quantité de neige maximale", "description": "Quantité maximale {freq:f} de neige.", "title": "Quantité de neige maximale", - "abstract": "Maximum de la quantité de neige journalière." + "abstract": "Maximum de la quantité de neige quotidienne." }, "SNW_MAX_DOY": { "long_name": "Date de la quantité de neige maximale", @@ -924,8 +924,8 @@ }, "CORN_HEAT_UNITS": { "title": "Unités thermiques maïs", - "abstract": "Indice basé sur la température utilisé pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température journalière minimale et maximale excèdent des seuils donnés.", - "description": "Indice basé sur la température utilisé pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température journalière minimale et maximale excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement.", + "abstract": "Indice basé sur la température utilisé pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température quotidienne minimale et maximale excèdent des seuils donnés.", + "description": "Indice basé sur la température utilisé pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température quotidienne minimale et maximale excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement.", "long_name": "Unités thermiques maïs" }, "FREEZETHAW_SPELL_FREQUENCY": { @@ -1034,8 +1034,8 @@ "title": "Force et latitude du courant-jet", "abstract": "Latitude et magnitude du maximum de la vitesse du vent zonal entre 15 à 75°N et -60 à 0°E.", "description": [ - "Latitude journalière du maximum du vent zonal lissé", - "Magnitude journalière du maximum du vent zonal lissé" + "Latitude quotidienne du maximum du vent zonal lissé", + "Magnitude quotidienne du maximum du vent zonal lissé" ], "long_name": [ "Latitude du maximum du vent zonal", From 6d16368f581298af57101a98914ee4aaba0fcdaf Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 8 Aug 2022 16:49:45 -0400 Subject: [PATCH 011/106] =?UTF-8?q?Temp=C3=A9rature=20quotidienne=20min/ma?= =?UTF-8?q?x=20=E2=86=92=20Temp=C3=A9rature=20minimale/maximale=20quotidie?= =?UTF-8?q?nne?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xclim/data/fr.json | 106 ++++++++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index f91b1841c..885fc10b0 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -249,15 +249,15 @@ }, "TN_DAYS_ABOVE": { "long_name": "Nombre de jours avec Tmin > {thresh}", - "description": "Nombre {freq:m} de jours où la température quotidienne minimale est au-dessus de {thresh}.", + "description": "Nombre {freq:m} de jours où la température minimale quotidienne est au-dessus de {thresh}.", "title": "Nombre de jours avec Tmin au-dessus d'un certain seuil", - "abstract": "Nombre de jours où la température quotidienne minimale est au-dessus d'un seuil." + "abstract": "Nombre de jours où la température minimale quotidienne est au-dessus d'un seuil." }, "TN_DAYS_BELOW": { "long_name": "Nombre de jours avec Tmin < {thresh}", - "description": "Nombre {freq:m} de jours où la température quotidienne minimale est sous {thresh}.", + "description": "Nombre {freq:m} de jours où la température minimale quotidienne est sous {thresh}.", "title": "Nombre de jours avec Tmin sous un certain seuil", - "abstract": "Nombre de jours où la température quotidienne minimale est sous un seuil." + "abstract": "Nombre de jours où la température minimale quotidienne est sous un seuil." }, "TG_DAYS_ABOVE": { "long_name": "Nombre de jours avec Tmoy > {thresh}", @@ -273,19 +273,19 @@ }, "TX_DAYS_ABOVE": { "long_name": "Nombre de jours avec Tmax > {thresh}", - "description": "Nombre {freq:m} de jours où la température quotidienne maximale est au-dessus de {thresh}.", + "description": "Nombre {freq:m} de jours où la température maximale quotidienne est au-dessus de {thresh}.", "title": "Nombre de jours avec Tmax au-dessus d'un certain seuil", - "abstract": "Nombre de jours où la température quotidienne maximale est au-dessus d'un seuil." + "abstract": "Nombre de jours où la température maximale quotidienne est au-dessus d'un seuil." }, "TX_DAYS_BELOW": { "long_name": "Nombre de jours avec Tmax < {thresh}", - "description": "Nombre {freq:m} de jours où la température quotidienne maximale est sous {thresh}.", + "description": "Nombre {freq:m} de jours où la température maximale quotidienne est sous {thresh}.", "title": "Nombre de jours avec Tmax sous un certain seuil", - "abstract": "Nombre de jours où la température quotidienne maximale est sous un seuil." + "abstract": "Nombre de jours où la température maximale quotidienne est sous un seuil." }, "TX_TN_DAYS_ABOVE": { "long_name": "Nombre de jours avec Tmax > {thresh_tasmax} et Tmin > {thresh_tasmin}", - "description": "Nombre {freq:m} de jours où la température quotidienne maximale excède {thresh_tasmax} et la température quotidienne minimale excède {thresh_tasmin}.", + "description": "Nombre {freq:m} de jours où la température maximale quotidienne excède {thresh_tasmax} et la température minimale quotidienne excède {thresh_tasmin}.", "title": "Nombre de jours avec des températures quotidiennes minimales et maximales chaudes", "abstract": "Nombre de jours où les températures quotidiennes maximales et minimales sont au-dessus de seuils donnés." }, @@ -311,7 +311,7 @@ "long_name": "Nombre de jours de vague de chaleur", "description": "Nombre {freq:m} de jours de vague de chaleur, définie comme cinq jours consécutifs ou plus où la température est au-dessus de {thresh}.", "title": "Indice de vague de chaleur", - "abstract": "Nombre de jours de vagues de chaleur. Une vague de chaleur se produit lorsque la température quotidienne maximale excède un seuil durant au moins 5 jours." + "abstract": "Nombre de jours de vagues de chaleur. Une vague de chaleur se produit lorsque la température maximale quotidienne excède un seuil durant au moins 5 jours." }, "TG": { "long_name": "température quotidienne moyenne", @@ -351,21 +351,21 @@ }, "TN_MIN": { "long_name": "Minimum de la température quotidienne", - "description": "Minimum {freq:m} de la température quotidienne minimale.", - "title": "Température quotidienne minimale", - "abstract": "Température quotidienne minimale." + "description": "Minimum {freq:m} de la température minimale quotidienne.", + "title": "Température minimale quotidienne", + "abstract": "Température minimale quotidienne." }, "TN_MAX": { - "long_name": "Maximum de la température quotidienne minimale", - "description": "Maximum {freq:m} de la température quotidienne minimale.", + "long_name": "Maximum de la température minimale quotidienne", + "description": "Maximum {freq:m} de la température minimale quotidienne.", "title": "Maximum de la température minimale", - "abstract": "Maximum de la température quotidienne minimale." + "abstract": "Maximum de la température minimale quotidienne." }, "TN_MEAN": { - "long_name": "Moyenne de la température quotidienne minimale", - "description": "Moyenne {freq:f} de la température quotidienne minimale.", + "long_name": "Moyenne de la température minimale quotidienne", + "description": "Moyenne {freq:f} de la température minimale quotidienne.", "title": "Moyenne de la température minimale", - "abstract": "Moyenne de la température quotidienne minimale." + "abstract": "Moyenne de la température minimale quotidienne." }, "TN10P": { "long_name": "Nombre de jours où la température minimale est en dessous du {per_base_thresh}e percentile", @@ -380,22 +380,22 @@ "abstract": "Nombre de jours où la température minimale est au-dessus du {per_base_thresh}e percentile." }, "TX_MIN": { - "long_name": "Minimum de la température quotidienne maximale", - "description": "Minimum {freq:m} de la température quotidienne maximale.", + "long_name": "Minimum de la température maximale quotidienne", + "description": "Minimum {freq:m} de la température maximale quotidienne.", "title": "Minimum de la température maximale", - "abstract": "Minimum de la température quotidienne maximale." + "abstract": "Minimum de la température maximale quotidienne." }, "TX_MAX": { "long_name": "Maximum de la température quotidienne", - "description": "Maximum {freq:m} de la température quotidienne maximale.", - "title": "Température quotidienne maximale", - "abstract": "Température quotidienne maximale." + "description": "Maximum {freq:m} de la température maximale quotidienne.", + "title": "Température maximale quotidienne", + "abstract": "Température maximale quotidienne." }, "TX_MEAN": { - "long_name": "Moyenne de la température quotidienne maximale", - "description": "Moyenne {freq:f} de la température quotidienne maximale.", + "long_name": "Moyenne de la température maximale quotidienne", + "description": "Moyenne {freq:f} de la température maximale quotidienne.", "title": "Moyenne de la température maximale", - "abstract": "Moyenne de la température quotidienne maximale." + "abstract": "Moyenne de la température maximale quotidienne." }, "TX10P": { "long_name": "Nombre de jours où la température maximale est en dessous du {per_base_thresh}e percentile", @@ -429,31 +429,31 @@ }, "ETR": { "long_name": "Amplitude des températures extrêmes", - "description": "Calcul {freq:m} de l'intervalle entre le maximum de la température quotidienne maximale et le minimum de la température quotidienne minimale.", + "description": "Calcul {freq:m} de l'intervalle entre le maximum de la température maximale quotidienne et le minimum de la température minimale quotidienne.", "title": "Intervalle des températures extrêmes", "abstract": "Le maximum de la température maximale moins le minimum de la température minimale." }, "COLD_SPELL_DURATION_INDEX": { "long_name": "Indice de durée des vagues de froid", - "description": "Nombre {freq:m} de jours de vague de froid. Une vague de froid se produit lorsque la température quotidienne minimale est sous le {per_base_thresh} percentile durant au moins {window} jours consécutifs. Le {per_base_thresh} percentile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "description": "Nombre {freq:m} de jours de vague de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous le {per_base_thresh} percentile durant au moins {window} jours consécutifs. Le {per_base_thresh} percentile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", "title": "Indice de durée des vagues de froid", - "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température quotidienne minimale est sous le {per_base_thresh} percentile durant au moins {window} nombre de jours consécutifs." + "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous le {per_base_thresh} percentile durant au moins {window} nombre de jours consécutifs." }, "COLD_SPELL_FREQUENCY": { "long_name": "Nombre de vagues de froid", - "description": "Nombre {freq:m} de vagues de froid. Une vague de froid se produit lorsque la température quotidienne minimale est sous {thresh} durant au moins {window} jours consécutifs.", + "description": "Nombre {freq:m} de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous {thresh} durant au moins {window} jours consécutifs.", "title": "Nombre de vagues de froid", - "abstract": "Nombre de vagues de froid. Une vague de froid se produit lorsque la température quotidienne minimale est sous un seuil durant au moins un certain nombre de jours consécutifs." + "abstract": "Nombre de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous un seuil durant au moins un certain nombre de jours consécutifs." }, "COLD_SPELL_DAYS": { "long_name": "Jours de vagues de froid", - "description": "Nombre {freq:m} de jours de vague de froid. Une vague de froid se produit lorsque la température quotidienne minimale est sous {thresh} durant au moins {window} jours consécutifs.", + "description": "Nombre {freq:m} de jours de vague de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous {thresh} durant au moins {window} jours consécutifs.", "title": "Jours de vague de froid", - "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température quotidienne minimale est sous un seuil durant au moins un certain nombre de jours consécutifs." + "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous un seuil durant au moins un certain nombre de jours consécutifs." }, "COOL_NIGHT_INDEX": { "long_name": "Indice de fraîcheur des nuits", - "description": "Moyenne {freq:f} de la température quotidienne minimale en septembre (hémisphère nord) ou en mars (hémisphère sud).", + "description": "Moyenne {freq:f} de la température minimale quotidienne en septembre (hémisphère nord) ou en mars (hémisphère sud).", "title": "Indice de fraîcheur des nuits", "comment": "Formule prise de Tonietto & Carbonneau, 2004 (10.1016/j.agrformet.2003.06.001).", "abstract": "Indicateur des conditions nycthermiques de maturation, qui correspond à la valeur moyenne de la température minimale de l'air sur les 30 jours précédant la date de récolte potentielle." @@ -496,10 +496,10 @@ }, "BIOLOGICALLY_EFFECTIVE_DEGREE_DAYS": { "long_name": "Degrés-jours biologiquement actifs", - "description": "Accumulation des degrés-jours borné par Tmin > {thresh_tasmin} et Tmax-Tmin < {max_daily_degree_days}. Les degrés jours quotidiens sont corrigés selon Tmax-Tmin et selon un coefficient de longueur du jour dépendent de la latitude.", + "description": "Accumulation des degrés-jours borné par Tmin > {thresh_tasmin} et Tmax-Tmin < {max_daily_degree_days}. Les degrés jours quotidiens sont corrigés selon Tmax-Tmin et selon un coefficient de durée du jour dépendent de la latitude.", "title": "Degrés-jours biologiquement actifs", "comment": "Formule originale prise de Gladstones 1992.", - "abstract": "Indice basé sur une relation non linéaire entre la température et les processus physiologiques. Il intègre une borne supérieure du cumul, un coefficient lié à la longueur du jour et une correction liée à l'écart journalier des températures." + "abstract": "Indice basé sur une relation non linéaire entre la température et les processus physiologiques. Il intègre une borne supérieure du cumul, un coefficient lié à la durée du jour et une correction liée à l'écart journalier des températures." }, "EFFECTIVE_GROWING_DEGREE_DAYS": { "long_name": "Degrés-jours effectives", @@ -529,21 +529,21 @@ }, "FROST_DAYS": { "long_name": "Nombre de jours de gel (Tmin < {thresh})", - "description": "Nombre {freq:m} de jours où la température quotidienne minimale est sous {thresh}.", + "description": "Nombre {freq:m} de jours où la température minimale quotidienne est sous {thresh}.", "title": "Nombre de jours de gel", - "abstract": "Nombre de jours où la température quotidienne minimale est sous un seuil." + "abstract": "Nombre de jours où la température minimale quotidienne est sous un seuil." }, "ICE_DAYS": { "long_name": "Nombre de jours de glace (Tmax < {thresh})", - "description": "Nombre {freq:m} de jours où la température quotidienne maximale est sous {thresh}.", + "description": "Nombre {freq:m} de jours où la température maximale quotidienne est sous {thresh}.", "title": "Nombre de jours de glace", - "abstract": "Nombre de jours où la température quotidienne maximale est sous un seuil." + "abstract": "Nombre de jours où la température maximale quotidienne est sous un seuil." }, "CONSECUTIVE_FROST_DAYS": { "long_name": "Durée maximale des périodes de gel (Tmin < 0°C)", - "description": "Durée maximale {freq:f} des périodes où la température quotidienne minimale est sous 0°C.", + "description": "Durée maximale {freq:f} des périodes où la température minimale quotidienne est sous 0°C.", "title": "Durée maximale des périodes de gel (Tmin < 0°C)", - "abstract": "Durée maximale des périodes consécutives où la température quotidienne minimale est sous 0°C." + "abstract": "Durée maximale des périodes consécutives où la température minimale quotidienne est sous 0°C." }, "FROST_FREE_SEASON_LENGTH": { "long_name": "Durée de la saison sans gel", @@ -637,9 +637,9 @@ }, "HOT_SPELL_FREQUENCY": { "long_name": "Nombre de périodes chaudes (Tmax > {thresh_tasmax} durant >= {window} jours)", - "description": "Nombre {freq} de périodes chaudes. Une période chaude se produit lorsque la température quotidienne maximale excède {thresh_tasmax} durant au moins {window} jours.", + "description": "Nombre {freq} de périodes chaudes. Une période chaude se produit lorsque la température maximale quotidienne excède {thresh_tasmax} durant au moins {window} jours.", "title": "Fréquences des périodes chaudes", - "abstract": "Nombre de périodes chaudes dans un période donnée. Une période chaude se produit lorsque la température quotidienne maximale excède un seuil spécifique durant un minimum de jours." + "abstract": "Nombre de périodes chaudes dans un période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède un seuil spécifique durant un minimum de jours." }, "LAST_SPRING_FROST": { "long_name": "Jour de l'année du dernier gel printanier", @@ -649,15 +649,15 @@ }, "HOT_SPELL_MAX_LENGTH": { "long_name": "Longueur maximale des périodes chaudes (Tmax > {thresh_tasmax} durant >= {window} jours)", - "description": "Longueur maximale {freq:f} des périodes chaudes. Une période chaude se produit lorsque la température quotidienne maximale excède {thresh_tasmax} durant au moins {window} jours.", + "description": "Longueur maximale {freq:f} des périodes chaudes. Une période chaude se produit lorsque la température maximale quotidienne excède {thresh_tasmax} durant au moins {window} jours.", "title": "Longueur maximale des périodes chaudes", - "abstract": "Longueur maximale des périodes chaudes dans une période donnée. Une période chaude se produit lorsque la température quotidienne maximale excède un seuil spécifique durant un minimum de jours." + "abstract": "Longueur maximale des périodes chaudes dans une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède un seuil spécifique durant un minimum de jours." }, "CONSECUTIVE_FROST_FREE_DAYS": { "long_name": "Nombre maximal de jours consécutifs avec Tmin >= {thresh}", - "description": "Nombre maximal {freq} de jours consécutifs où la température quotidienne minimale excède ou est égale à {thresh}.", + "description": "Nombre maximal {freq} de jours consécutifs où la température minimale quotidienne excède ou est égale à {thresh}.", "title": "Nombre maximal de jours consécutifs sans gel (Tmin >= 0℃)", - "abstract": "La nombre maximal de jours consécutifs sans gel: où la température quotidienne minimale est au-dessus ou égale à un seuil." + "abstract": "La nombre maximal de jours consécutifs sans gel: où la température minimale quotidienne est au-dessus ou égale à un seuil." }, "GROWING_SEASON_END": { "long_name": "Jour de l'année de la fin de la saison de croissance", @@ -906,7 +906,7 @@ }, "WARM_SPELL_DURATION_INDEX": { "title": "Indice de durée des vagues de chaleur", - "abstract": "Nombre de jours faisant partie de vagues d'une longueur minimale où la température maximale quotidienne excède le {per_base_thresh}e percentile. Le {per_base_thresh} percentile des températures devrait être calculé avec une fenêtre mobile de {per_window} jours.", + "abstract": "Nombre de jours faisant partie de vagues d'une durée minimale où la température maximale quotidienne excède le {per_base_thresh}e percentile. Le {per_base_thresh} percentile des températures devrait être calculé avec une fenêtre mobile de {per_window} jours.", "description": "Durée totale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque Tmax est au-dessus du {per_base_thresh}e percentile durant au moins {window} jours.", "long_name": "Durée des vagues de chaleur" }, @@ -924,8 +924,8 @@ }, "CORN_HEAT_UNITS": { "title": "Unités thermiques maïs", - "abstract": "Indice basé sur la température utilisé pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température quotidienne minimale et maximale excèdent des seuils donnés.", - "description": "Indice basé sur la température utilisé pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température quotidienne minimale et maximale excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement.", + "abstract": "Indice basé sur la température utilisé pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température minimale quotidienne et maximale excèdent des seuils donnés.", + "description": "Indice basé sur la température utilisé pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température minimale quotidienne et maximale excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement.", "long_name": "Unités thermiques maïs" }, "FREEZETHAW_SPELL_FREQUENCY": { From a876bded35369a0518fa9ccf164e404034ae349b Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 8 Aug 2022 16:57:08 -0400 Subject: [PATCH 012/106] percentile -> centile --- xclim/data/fr.json | 104 ++++++++++++++++++++++----------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 885fc10b0..28acc19c5 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -338,16 +338,16 @@ "abstract": "Température quotidienne moyenne." }, "TG10P": { - "long_name": "Nombre de jours où la température quotidienne est au-dessus du {per_base_thresh}e percentile", - "description": "Nombre {freq:m} de jours où la température est au-dessus du {per_base_thresh}e percentile. Le {per_base_thresh}e percentile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température est au-dessus du {per_base_thresh}e percentile", - "abstract": "Nombre de jours où la température est au-dessus du {per_base_thresh}e percentile" + "long_name": "Nombre de jours où la température quotidienne est au-dessus du {per_base_thresh}e centile", + "description": "Nombre {freq:m} de jours où la température est au-dessus du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "title": "Nombre de jours où la température est au-dessus du {per_base_thresh}e centile", + "abstract": "Nombre de jours où la température est au-dessus du {per_base_thresh}e centile" }, "TG90P": { - "long_name": "Nombre de jours où la température quotidienne est au-dessus du {per_base_thresh}e percentile", - "description": "Nombre {freq:m} de jours où la température est au-dessus du {per_base_thresh}e percentile. Le {per_base_thresh}e percentile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température est au-dessus du {per_base_thresh}e percentile", - "abstract": "Nombre de jours où la température est au-dessus du {per_base_thresh}e percentile." + "long_name": "Nombre de jours où la température quotidienne est au-dessus du {per_base_thresh}e centile", + "description": "Nombre {freq:m} de jours où la température est au-dessus du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "title": "Nombre de jours où la température est au-dessus du {per_base_thresh}e centile", + "abstract": "Nombre de jours où la température est au-dessus du {per_base_thresh}e centile." }, "TN_MIN": { "long_name": "Minimum de la température quotidienne", @@ -368,16 +368,16 @@ "abstract": "Moyenne de la température minimale quotidienne." }, "TN10P": { - "long_name": "Nombre de jours où la température minimale est en dessous du {per_base_thresh}e percentile", - "description": "Nombre {freq:m} de jours où la température minimale est en dessous du {per_base_thresh}e percentile. Le {per_base_thresh}e percentile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température minimale est en dessous du {per_base_thresh}e percentile", - "abstract": "Nombre de jours où la température minimale est en dessous du {per_base_thresh}e percentile." + "long_name": "Nombre de jours où la température minimale est en dessous du {per_base_thresh}e centile", + "description": "Nombre {freq:m} de jours où la température minimale est en dessous du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "title": "Nombre de jours où la température minimale est en dessous du {per_base_thresh}e centile", + "abstract": "Nombre de jours où la température minimale est en dessous du {per_base_thresh}e centile." }, "TN90P": { - "long_name": "Nombre de jours où la température minimale est au-dessus du {per_base_thresh}e percentile", - "description": "Nombre {freq:m} de jours où la température minimale est au-dessus du {per_base_thresh}e percentile. Le {per_base_thresh}e percentile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température minimale est au-dessus du {per_base_thresh}e percentile", - "abstract": "Nombre de jours où la température minimale est au-dessus du {per_base_thresh}e percentile." + "long_name": "Nombre de jours où la température minimale est au-dessus du {per_base_thresh}e centile", + "description": "Nombre {freq:m} de jours où la température minimale est au-dessus du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "title": "Nombre de jours où la température minimale est au-dessus du {per_base_thresh}e centile", + "abstract": "Nombre de jours où la température minimale est au-dessus du {per_base_thresh}e centile." }, "TX_MIN": { "long_name": "Minimum de la température maximale quotidienne", @@ -398,16 +398,16 @@ "abstract": "Moyenne de la température maximale quotidienne." }, "TX10P": { - "long_name": "Nombre de jours où la température maximale est en dessous du {per_base_thresh}e percentile", - "description": "Nombre {freq:m} de jours où la température maximale est en dessous du {per_base_thresh}e percentile. Le {per_base_thresh}e percentile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température maximale est en dessous du {per_base_thresh}e percentile", - "abstract": "Nombre de jours où la température maximale est en dessous du {per_base_thresh}e percentile." + "long_name": "Nombre de jours où la température maximale est en dessous du {per_base_thresh}e centile", + "description": "Nombre {freq:m} de jours où la température maximale est en dessous du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "title": "Nombre de jours où la température maximale est en dessous du {per_base_thresh}e centile", + "abstract": "Nombre de jours où la température maximale est en dessous du {per_base_thresh}e centile." }, "TX90P": { - "long_name": "Nombre de jours où la température maximale est au-dessus du {per_base_thresh}e percentile", - "description": "Nombre {freq:m} de jours où la température maximale est au-dessus du {per_base_thresh}e percentile. Le {per_base_thresh}e percentile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température maximale est au-dessus du {per_base_thresh}e percentile", - "abstract": "Nombre de jours où la température maximale est au-dessus du {per_base_thresh}e percentile." + "long_name": "Nombre de jours où la température maximale est au-dessus du {per_base_thresh}e centile", + "description": "Nombre {freq:m} de jours où la température maximale est au-dessus du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "title": "Nombre de jours où la température maximale est au-dessus du {per_base_thresh}e centile", + "abstract": "Nombre de jours où la température maximale est au-dessus du {per_base_thresh}e centile." }, "DTRMAX": { "long_name": "Amplitude diurne maximale de la température", @@ -435,9 +435,9 @@ }, "COLD_SPELL_DURATION_INDEX": { "long_name": "Indice de durée des vagues de froid", - "description": "Nombre {freq:m} de jours de vague de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous le {per_base_thresh} percentile durant au moins {window} jours consécutifs. Le {per_base_thresh} percentile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "description": "Nombre {freq:m} de jours de vague de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous le {per_base_thresh} centile durant au moins {window} jours consécutifs. Le {per_base_thresh} centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", "title": "Indice de durée des vagues de froid", - "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous le {per_base_thresh} percentile durant au moins {window} nombre de jours consécutifs." + "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous le {per_base_thresh} centile durant au moins {window} nombre de jours consécutifs." }, "COLD_SPELL_FREQUENCY": { "long_name": "Nombre de vagues de froid", @@ -875,28 +875,28 @@ "abstract": "Nombre de jours avec précipitation au-dessus d'un seuil et températures sous un seuil." }, "DAYS_OVER_PRECIP_THRESH": { - "title": "Nombre de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e percentile", - "abstract": "Nombre de jours d'une période où la précipitation est au-dessus du {pr_per_thresh}e percentile calculé sur la période {pr_per_period} et d'un seuil fixe.", - "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e percentile calculé sur la période {pr_per_period}. Seuls les jours avec au moins {thresh} sont comptés.", - "long_name": "Nombre de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e percentile calculé sur la période {pr_per_period}" + "title": "Nombre de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e centile", + "abstract": "Nombre de jours d'une période où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period} et d'un seuil fixe.", + "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period}. Seuls les jours avec au moins {thresh} sont comptés.", + "long_name": "Nombre de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period}" }, "DAYS_OVER_PRECIP_DOY_THRESH": { - "title": "Nombre de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e percentile quotidien", - "abstract": "Nombre de jours d'une période où la précipitation est au-dessus du {pr_per_thresh}e percentile quotidien et d'un seuil fixe.", - "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e percentile quotidien. Seuls les jours avec au moins {thresh} sont comptés. Le {pr_per_thresh}e percentile est calculé sur une fenêtre glissante de {pr_per_window} jour(s) de la période {pr_per_period}.", - "long_name": "Nombre de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e percentile quotidien" + "title": "Nombre de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien", + "abstract": "Nombre de jours d'une période où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien et d'un seuil fixe.", + "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien. Seuls les jours avec au moins {thresh} sont comptés. Le {pr_per_thresh}e centile est calculé sur une fenêtre glissante de {pr_per_window} jour(s) de la période {pr_per_period}.", + "long_name": "Nombre de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien" }, "FRACTION_OVER_PRECIP_THRESH": { - "title": "Fraction des jours pluvieux où la précipitation est au-dessus d'un percentile quotidien.", - "abstract": "Fraction des jours pluvieux d'une période où la précipitation est au-dessus d'un percentile quotidien. La référence est le nombre de jours où la précipitation est au-dessus d'un seuil fixe.", - "description": "Fraction {freq:f} des jours pluvieux où la précipitation est au-dessus d'un percentile quotidien. La référence est le nombre jours où la précipitation est au-dessus d'un seuil fixe.", - "long_name": "Fraction des jours pluvieux où la précipitation est au-dessus d'un percentile quotidien." + "title": "Fraction des jours pluvieux où la précipitation est au-dessus d'un centile quotidien.", + "abstract": "Fraction des jours pluvieux d'une période où la précipitation est au-dessus d'un centile quotidien. La référence est le nombre de jours où la précipitation est au-dessus d'un seuil fixe.", + "description": "Fraction {freq:f} des jours pluvieux où la précipitation est au-dessus d'un centile quotidien. La référence est le nombre jours où la précipitation est au-dessus d'un seuil fixe.", + "long_name": "Fraction des jours pluvieux où la précipitation est au-dessus d'un centile quotidien." }, "FRACTION_OVER_PRECIP_DOY_THRESH": { - "title": "Fraction de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e percentile quotidien", - "abstract": "Fraction de jours d'une période où la précipitation est au-dessus du {pr_per_thresh}e percentile quotidien et d'un seuil fixe.", - "description": "Fraction {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e percentile quotidien. Seuls les jours avec au moins {thresh} sont comptés. Le {pr_per_thresh}e percentile est calculé sur une fenêtre glissante de {pr_per_window} jour(s) de la période {pr_per_period}.", - "long_name": "Fraction de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e percentile quotidien" + "title": "Fraction de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien", + "abstract": "Fraction de jours d'une période où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien et d'un seuil fixe.", + "description": "Fraction {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien. Seuls les jours avec au moins {thresh} sont comptés. Le {pr_per_thresh}e centile est calculé sur une fenêtre glissante de {pr_per_window} jour(s) de la période {pr_per_period}.", + "long_name": "Fraction de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien" }, "LIQUID_PRECIP_RATIO": { "title": "Fraction liquide de la précipitation totale", @@ -906,8 +906,8 @@ }, "WARM_SPELL_DURATION_INDEX": { "title": "Indice de durée des vagues de chaleur", - "abstract": "Nombre de jours faisant partie de vagues d'une durée minimale où la température maximale quotidienne excède le {per_base_thresh}e percentile. Le {per_base_thresh} percentile des températures devrait être calculé avec une fenêtre mobile de {per_window} jours.", - "description": "Durée totale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque Tmax est au-dessus du {per_base_thresh}e percentile durant au moins {window} jours.", + "abstract": "Nombre de jours faisant partie de vagues d'une durée minimale où la température maximale quotidienne excède le {per_base_thresh}e centile. Le {per_base_thresh} centile des températures devrait être calculé avec une fenêtre mobile de {per_window} jours.", + "description": "Durée totale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque Tmax est au-dessus du {per_base_thresh}e centile durant au moins {window} jours.", "long_name": "Durée des vagues de chaleur" }, "MAXIMUM_CONSECUTIVE_WARM_DAYS": { @@ -996,26 +996,26 @@ }, "COLD_AND_DRY_DAYS": { "title": "Nombre de jours froide et secs", - "abstract": "Nombre de jours où la température est en dessous du {tas_per_thresh}e percentile et les précipitations en dessous du {pr_per_thresh}e percentile.", - "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e percentile et les précipitations en dessous du {pr_per_thresh}e percentile.", + "abstract": "Nombre de jours où la température est en dessous du {tas_per_thresh}e centile et les précipitations en dessous du {pr_per_thresh}e centile.", + "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et les précipitations en dessous du {pr_per_thresh}e centile.", "long_name": "Nombre {freq:m} de jours froids et secs" }, "WARM_AND_DRY_DAYS": { "title": "Nombre de jours chauds et secs", - "abstract": "Nombre de jours où la température est au-dessus du {tas_per_thresh}e percentile et les précipitations en dessous du {pr_per_thresh}e percentile.", - "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e percentile et les précipitations en dessous du {pr_per_thresh}e percentile.", + "abstract": "Nombre de jours où la température est au-dessus du {tas_per_thresh}e centile et les précipitations en dessous du {pr_per_thresh}e centile.", + "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et les précipitations en dessous du {pr_per_thresh}e centile.", "long_name": "Nombre {freq:m} de jours chauds et secs" }, "WARM_AND_WET_DAYS": { "title": "Nombre de jours chauds et pluvieux", - "abstract": "Nombre de jours où la température est au-dessus du {tas_per_thresh}e percentile et les précipitations au-dessus du {pr_per_thresh}e percentile.", - "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e percentile et les précipitations au-dessus du {pr_per_thresh}e percentile.", + "abstract": "Nombre de jours où la température est au-dessus du {tas_per_thresh}e centile et les précipitations au-dessus du {pr_per_thresh}e centile.", + "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et les précipitations au-dessus du {pr_per_thresh}e centile.", "long_name": "Nombre {freq:m} de jours chauds et pluvieux" }, "COLD_AND_WET_DAYS": { "title": "Nombre de jours froids et pluvieux", - "abstract": "Nombre de jours où la température est en dessous du {tas_per_thresh}e percentile et les précipitations au-dessus du {pr_per_thresh}e percentile.", - "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e percentile et les précipitations au-dessus du {pr_per_thresh}e percentile.", + "abstract": "Nombre de jours où la température est en dessous du {tas_per_thresh}e centile et les précipitations au-dessus du {pr_per_thresh}e centile.", + "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et les précipitations au-dessus du {pr_per_thresh}e centile.", "long_name": "Nombre {freq:m} de jours froids et pluvieux" }, "CALM_DAYS": { From 27fa913fa81e788f49146dbcc3e3c4fcfb22875c Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 8 Aug 2022 17:11:42 -0400 Subject: [PATCH 013/106] =?UTF-8?q?pluvieux=20->=20avec=20pr=C3=A9cipitati?= =?UTF-8?q?on,=20less=20use=20of=20plural=20form=20of=20"temperature"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xclim/data/fr.json | 64 +++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 28acc19c5..44f3a3819 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -176,15 +176,15 @@ "abstract": "Proportion de la précipitation totale due aux processus de convections. Seuls les jours avec un flux minimum de précipitation sont considérés." }, "WETDAYS": { - "long_name": "Nombre de jours pluvieux (précip >= {thresh})", + "long_name": "Nombre de jours avec précipitation (précip >= {thresh})", "description": "Nombre {freq:m} de jours où les précipitations sont au-dessus de {thresh}.", "title": "Jours mouillés", "abstract": "Nombre de jours où les précipitations sont au-dessus d'un seuil." }, "WETDAY_PROP": { - "long_name": "Proportion de jours pluvieux (précip >= {thresh})", + "long_name": "Proportion de jours avec précipitation (précip >= {thresh})", "description": "Propotion {freq:m} de jours où les précipitations sont au-dessus de {thresh}.", - "title": "Proportion de jours pluvieux", + "title": "Proportion de jours avec précipitation", "abstract": "Proportion de jours où les précipitations sont au-dessus d'un seuil." }, "CDD": { @@ -212,10 +212,10 @@ "abstract": "Précipitation accumulée totale. Si la température quotidienne moyenne est donnée, le paramètre phase peut-être utilisé pour restreindre le calcul aux précipitations d'une seule phase (liquide ou solide). Les précipitations sont considérées solides si la température quotidienne moyenne est sous 0°C (et vice-versa)." }, "WET_PRCPTOT": { - "long_name": "Précipitation totale lors de jours pluvieux", + "long_name": "Précipitation totale lors de jours avec précipitation", "description": "Précipitation totale {freq:f} lorsque la précipitation quotidienne excède {thresh}.", - "title": "Précipitation accumulée totale lors de jours pluvieux", - "abstract": "Précipitation accumulée totale lors de jours pluvieux. Un jour est considéré pluvieux si la précipitation est supérieure ou égale à un seuil donné." + "title": "Précipitation accumulée totale lors de jours avec précipitation", + "abstract": "Précipitation accumulée totale lors de jours avec précipitation. Un jour est considéré avec précipitation si la précipitation est supérieure ou égale à un seuil donné." }, "LIQUIDPRCPTOT": { "long_name": "Précipitation liquide totale", @@ -286,26 +286,26 @@ "TX_TN_DAYS_ABOVE": { "long_name": "Nombre de jours avec Tmax > {thresh_tasmax} et Tmin > {thresh_tasmin}", "description": "Nombre {freq:m} de jours où la température maximale quotidienne excède {thresh_tasmax} et la température minimale quotidienne excède {thresh_tasmin}.", - "title": "Nombre de jours avec des températures quotidiennes minimales et maximales chaudes", - "abstract": "Nombre de jours où les températures quotidiennes maximales et minimales sont au-dessus de seuils donnés." + "title": "Nombre de jours avec des températures minimales et maximales quotidiennes chaudes", + "abstract": "Nombre de jours où les températures maximales et minimales quotidiennes sont au-dessus de seuils donnés." }, "HEAT_WAVE_FREQUENCY": { "long_name": "Nombre de vagues de chaleur (Tmin > {thresh_tasmin} et Tmax > {thresh_tasmax} pour {window} jours)", - "description": "Nombre {freq:m} de vagues de chaleur. Une vague de chaleur se produit lorsque les températures quotidiennes minimales et maximales excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", + "description": "Nombre {freq:m} de vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Fréquence des vagues de chaleur", - "abstract": "Nombre de vagues de chaleur. Une vague de chaleur se produit lorsque les températures quotidiennes minimales et maximales excèdent des seuils donnés durant un certain nombre de jours." + "abstract": "Nombre de vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_TOTAL_LENGTH": { "long_name": "Durée totale des vagues de chaleur (Tmin > {thresh_tasmin} et Tmax > {thresh_tasmax} pour >= {window} days)", - "description": "Durée totale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures quotidiennes minimales et maximales excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", + "description": "Durée totale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Durée totale des vagues de chaleur", - "abstract": "Durée totale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures quotidiennes minimales et maximales excèdent des seuils donnés durant un certain nombre de jours." + "abstract": "Durée totale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_MAX_LENGTH": { "long_name": "Longueur maximale des vagues de chaleur (Tmin > {thresh_tasmin} et Tmax > {thresh_tasmax} pour {window} jours au moins)", - "description": "Longueur maximale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures quotidiennes minimales et maximales excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", + "description": "Longueur maximale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Longueur maximale des vagues de chaleur", - "abstract": "Longueur maximale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures quotidiennes minimales et maximales excèdent des seuils donnés durant un certain nombre de jours." + "abstract": "Longueur maximale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_INDEX": { "long_name": "Nombre de jours de vague de chaleur", @@ -413,13 +413,13 @@ "long_name": "Amplitude diurne maximale de la température", "description": "Maximum {freq:m} de l'amplitude diurne de la température.", "title": "Amplitude diurne maximale de la température", - "abstract": "L'écart maximal entre les températures quotidiennes maximale et minimale." + "abstract": "L'écart maximal entre les températures maximale et minimale quotidiennes ." }, "DTR": { "long_name": "Amplitude diurne de la température", "description": "Moyenne {freq:f} de l'amplitude diurne de la température.", "title": "Amplitude diurne de la température", - "abstract": "La différence moyenne entre les températures quotidiennes maximale et minimale." + "abstract": "La différence moyenne entre les températures maximale et minimale quotidiennes." }, "DTRVAR": { "long_name": "Variabilité de l'amplitude diurne de la température", @@ -549,7 +549,7 @@ "long_name": "Durée de la saison sans gel", "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs où la température quotidienne moyenne dépasse {thresh} et la première occurrence (après le {mid_date}) d'au moins {window} jours consécutifs où la température est sous {thresh}.", "title": "Durée de la saison sans gel", - "abstract": "Nombre de jours entre la première série de N jours avec des températures quotidiennes moyennes au-dessus d'un seuil et la première série de N jours avec des températures quotidiennes moyennes sous ce même seuil." + "abstract": "Nombre de jours entre la première série de N jours avec une température moyenne quotidienne au-dessus d'un seuil et la première série de N jours avec une température moyenne quotidienne sous ce même seuil." }, "FROST_FREE_SEASON_START": { "long_name": "Jour de l'année du début de la saison sans gel", @@ -561,7 +561,7 @@ "long_name": "Durée de la saison de croissance", "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs où la température quotidienne moyenne dépasse {thresh} et la première occurrence (après le {mid_date}) d'au moins {window} jours consécutifs où la température est sous {thresh}.", "title": "Durée de la saison de croissance", - "abstract": "Nombre de jours entre la première série de N jours avec des températures quotidiennes moyennes au-dessus d'un seuil et la première série de N jours avec des températures quotidiennes moyennes sous ce même seuil." + "abstract": "Nombre de jours entre la première série de N jours avec une température moyenne quotidienne au-dessus d'un seuil et la première série de N jours avec une température moyenne quotidienne sous ce même seuil." }, "GROWING_SEASON_START": { "long_name": "Jour de l'année du début de la saison de croissance", @@ -875,28 +875,28 @@ "abstract": "Nombre de jours avec précipitation au-dessus d'un seuil et températures sous un seuil." }, "DAYS_OVER_PRECIP_THRESH": { - "title": "Nombre de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e centile", + "title": "Nombre de jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile", "abstract": "Nombre de jours d'une période où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period} et d'un seuil fixe.", "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period}. Seuls les jours avec au moins {thresh} sont comptés.", - "long_name": "Nombre de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period}" + "long_name": "Nombre de jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period}" }, "DAYS_OVER_PRECIP_DOY_THRESH": { - "title": "Nombre de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien", + "title": "Nombre de jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien", "abstract": "Nombre de jours d'une période où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien et d'un seuil fixe.", "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien. Seuls les jours avec au moins {thresh} sont comptés. Le {pr_per_thresh}e centile est calculé sur une fenêtre glissante de {pr_per_window} jour(s) de la période {pr_per_period}.", - "long_name": "Nombre de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien" + "long_name": "Nombre de jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien" }, "FRACTION_OVER_PRECIP_THRESH": { - "title": "Fraction des jours pluvieux où la précipitation est au-dessus d'un centile quotidien.", - "abstract": "Fraction des jours pluvieux d'une période où la précipitation est au-dessus d'un centile quotidien. La référence est le nombre de jours où la précipitation est au-dessus d'un seuil fixe.", - "description": "Fraction {freq:f} des jours pluvieux où la précipitation est au-dessus d'un centile quotidien. La référence est le nombre jours où la précipitation est au-dessus d'un seuil fixe.", - "long_name": "Fraction des jours pluvieux où la précipitation est au-dessus d'un centile quotidien." + "title": "Fraction des jours avec précipitation où la précipitation est au-dessus d'un centile quotidien.", + "abstract": "Fraction des jours avec précipitation d'une période où la précipitation est au-dessus d'un centile quotidien. La référence est le nombre de jours où la précipitation est au-dessus d'un seuil fixe.", + "description": "Fraction {freq:f} des jours avec précipitation où la précipitation est au-dessus d'un centile quotidien. La référence est le nombre jours où la précipitation est au-dessus d'un seuil fixe.", + "long_name": "Fraction des jours avec précipitation où la précipitation est au-dessus d'un centile quotidien." }, "FRACTION_OVER_PRECIP_DOY_THRESH": { - "title": "Fraction de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien", + "title": "Fraction de jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien", "abstract": "Fraction de jours d'une période où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien et d'un seuil fixe.", "description": "Fraction {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien. Seuls les jours avec au moins {thresh} sont comptés. Le {pr_per_thresh}e centile est calculé sur une fenêtre glissante de {pr_per_window} jour(s) de la période {pr_per_period}.", - "long_name": "Fraction de jours pluvieux où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien" + "long_name": "Fraction de jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien" }, "LIQUID_PRECIP_RATIO": { "title": "Fraction liquide de la précipitation totale", @@ -1007,16 +1007,16 @@ "long_name": "Nombre {freq:m} de jours chauds et secs" }, "WARM_AND_WET_DAYS": { - "title": "Nombre de jours chauds et pluvieux", + "title": "Nombre de jours chauds avec précipitation", "abstract": "Nombre de jours où la température est au-dessus du {tas_per_thresh}e centile et les précipitations au-dessus du {pr_per_thresh}e centile.", "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et les précipitations au-dessus du {pr_per_thresh}e centile.", - "long_name": "Nombre {freq:m} de jours chauds et pluvieux" + "long_name": "Nombre {freq:m} de jours chauds avec précipitation" }, "COLD_AND_WET_DAYS": { - "title": "Nombre de jours froids et pluvieux", + "title": "Nombre de jours froids avec précipitation", "abstract": "Nombre de jours où la température est en dessous du {tas_per_thresh}e centile et les précipitations au-dessus du {pr_per_thresh}e centile.", "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et les précipitations au-dessus du {pr_per_thresh}e centile.", - "long_name": "Nombre {freq:m} de jours froids et pluvieux" + "long_name": "Nombre {freq:m} de jours froids avec précipitation" }, "CALM_DAYS": { "title": "Nombre de jours de vent calme", From 2b6f136e07cdd228a0de7d704cc600323e1ccd9a Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 8 Aug 2022 17:23:02 -0400 Subject: [PATCH 014/106] Update expected translation --- xclim/testing/tests/test_locales.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xclim/testing/tests/test_locales.py b/xclim/testing/tests/test_locales.py index 41022ee17..d869cd666 100644 --- a/xclim/testing/tests/test_locales.py +++ b/xclim/testing/tests/test_locales.py @@ -43,7 +43,7 @@ def test_local_dict(tmp_path): loc, dic = xloc.get_local_dict("fr") assert loc == "fr" - assert dic["TG_MEAN"]["long_name"] == "Moyenne de la température journalière" + assert dic["TG_MEAN"]["long_name"] == "Moyenne de la température quotidienne" loc, dic = xloc.get_local_dict(esperanto) assert loc == "eo" @@ -109,7 +109,7 @@ def test_indicator_output(tas_series): assert "long_name_fr" in tgmean.attrs assert ( tgmean.attrs["description_fr"] - == "Moyenne annuelle de la température journalière." + == "Moyenne annuelle de la température quotidienne." ) From e1687b796dae86a10366a57370efedb3dde74c72 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 8 Aug 2022 18:14:31 -0400 Subject: [PATCH 015/106] some precipitation indicator metadata fixes, update test --- xclim/data/fr.json | 4 ++-- xclim/indicators/atmos/_precip.py | 22 ++++++++++++++++++++-- xclim/testing/tests/test_locales.py | 6 ++---- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 44f3a3819..54ae66aa3 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -148,7 +148,7 @@ "long_name": "Nombre de jours de pluie sur sol gelé", "description": "Nombre {freq:m} de jours avec plus de {thresh} de pluie suivant sept jours consécutifs où la température était sous 0°C. Les précipitations sont considérées comme de la pluie lorsque la température moyenne est au-dessus de 0°C.", "title": "Nombre de jours de pluie sur sol gelé", - "abstract": "Nombre de jours avec des précipitations au-dessus d'un certain seuil après 7 jours consécutifs où la température était sous 0°C. Les précipitations sont considérées comme de la pluie lorsque la température moyenne est au-dessus de 0°C." + "abstract": "Nombre de jours avec pluie au-dessus d'un certain seuil après 7 jours consécutifs où la température était sous 0°C. Les précipitations sont considérées comme de la pluie lorsque la température moyenne est au-dessus de 0°C." }, "RX1DAY": { "long_name": "Précipitation quotidienne maximale", @@ -176,7 +176,7 @@ "abstract": "Proportion de la précipitation totale due aux processus de convections. Seuls les jours avec un flux minimum de précipitation sont considérés." }, "WETDAYS": { - "long_name": "Nombre de jours avec précipitation (précip >= {thresh})", + "long_name": "Nombre de jours avec précipitation", "description": "Nombre {freq:m} de jours où les précipitations sont au-dessus de {thresh}.", "title": "Jours mouillés", "abstract": "Nombre de jours où les précipitations sont au-dessus d'un seuil." diff --git a/xclim/indicators/atmos/_precip.py b/xclim/indicators/atmos/_precip.py index d4f3852af..13d78f8fc 100644 --- a/xclim/indicators/atmos/_precip.py +++ b/xclim/indicators/atmos/_precip.py @@ -100,19 +100,24 @@ class HrPrecip(Hourly): identifier="rain_frzgr", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_above_threshold", + title="Number of rain on frozen ground days", long_name="Number of rain on frozen ground days", description="{freq} number of days with rain above {thresh} after a series of seven days with average daily " "temperature below 0℃. Precipitation is assumed to be rain when the daily average temperature is above 0℃.", + abstract="The number of days with rain above a given threshold after a series of seven days with average daily " + "temperature below 0°C. Precipitation is assumed to be rain when the daily average temperature is above 0°C.", cell_methods="", compute=indices.rain_on_frozen_ground_days, ) max_1day_precipitation_amount = PrecipWithIndexing( identifier="rx1day", - units="mm d-1", + units="mm/day", standard_name="lwe_thickness_of_precipitation_amount", + title="Maximum 1-day total precipitation", long_name="Maximum 1-day total precipitation", description="{freq} maximum 1-day total precipitation", + abstract="Maximum total daily precipitation for a given period.", cell_methods="time: maximum over days", compute=indices.max_1day_precipitation_amount, ) @@ -122,8 +127,10 @@ class HrPrecip(Hourly): var_name="rx{window}day", units="mm", standard_name="lwe_thickness_of_precipitation_amount", + title="maximum n-day total precipitation", long_name="maximum n-day total precipitation", description="{freq} maximum {window}-day total precipitation.", + abstract="Maximum of the moving sum of daily precipitation for a given period.", cell_methods="time: maximum over days", compute=indices.max_n_day_precipitation_amount, ) @@ -132,8 +139,10 @@ class HrPrecip(Hourly): identifier="wetdays", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_at_or_above_threshold", + title="Number of wet days", long_name="Number of wet days", description="{freq} number of days with daily precipitation at or above {thresh}.", + abstract="The number of days with daily precipitation at or above a given threshold.", cell_methods="time: sum over days", compute=indices.wetdays, ) @@ -141,8 +150,10 @@ class HrPrecip(Hourly): wetdays_prop = PrecipWithIndexing( identifier="wetdays_prop", units="1", + title="Proportion of wet days", long_name="Proportion of wet days", description="{freq} proportion of days with precipitation at or above {thresh}.", + abstract="The proportion of days with daily precipitation at or above a given threshold.", cell_methods="time: sum over days", compute=indices.wetdays_prop, ) @@ -151,8 +162,10 @@ class HrPrecip(Hourly): identifier="dry_days", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_below_threshold", + title="Number of dry days", long_name="Number of dry days", description="{freq} number of days with daily precipitation under {thresh}.", + abstract="The number of days with daily precipitation under a given threshold.", cell_methods="time: sum over days", compute=indices.dry_days, ) @@ -161,8 +174,10 @@ class HrPrecip(Hourly): identifier="cwd", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_at_or_above_threshold", + title="Maximum consecutive wet days", long_name="Maximum consecutive wet days", description="{freq} maximum number of consecutive days with daily precipitation at or above {thresh}.", + abstract="The longest number of consecutive days where daily precipitation is at or above a given threshold.", cell_methods="time: sum over days", compute=indices.maximum_consecutive_wet_days, ) @@ -171,8 +186,10 @@ class HrPrecip(Hourly): identifier="cdd", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_below_threshold", + title="Maximum consecutive dry days", long_name="Maximum consecutive dry days", description="{freq} maximum number of consecutive days with daily precipitation below {thresh}.", + abstract="The longest number of consecutive days where daily precipitation below a given threshold.", cell_methods="time: sum over days", compute=indices.maximum_consecutive_dry_days, ) @@ -181,7 +198,8 @@ class HrPrecip(Hourly): identifier="sdii", units="mm d-1", standard_name="lwe_thickness_of_precipitation_amount", - long_name="Average precipitation during wet days (SDII)", + title="Simple Daily Intensity Index", + long_name="Average precipitation during wet days", description="{freq} average precipitation for days with daily precipitation over {thresh}. " "This indicator is also known as the 'Simple Daily Intensity Index' (SDII).", cell_methods="", diff --git a/xclim/testing/tests/test_locales.py b/xclim/testing/tests/test_locales.py index d869cd666..5ba8858bc 100644 --- a/xclim/testing/tests/test_locales.py +++ b/xclim/testing/tests/test_locales.py @@ -62,7 +62,7 @@ def test_local_dict(tmp_path): loc, dic = xloc.get_local_dict(("fr", {"TX_MAX": {"long_name": "Fait chaud."}})) assert loc == "fr" assert dic["TX_MAX"]["long_name"] == "Fait chaud." - assert dic["TG_MEAN"]["long_name"] == "Moyenne de la température journalière" + assert dic["TG_MEAN"]["long_name"] == "Moyenne de la température quotidienne" def test_local_attrs_sing(): @@ -72,9 +72,7 @@ def test_local_attrs_sing(): assert "description" not in attrs with pytest.raises(ValueError): - attrs = xloc.get_local_attrs( - atmos.tg_mean, "fr", esperanto, append_locale_name=False - ) + xloc.get_local_attrs(atmos.tg_mean, "fr", esperanto, append_locale_name=False) def test_local_attrs_multi(tmp_path): From f62d864afd3343dd9955cb96228e590366011a3b Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 9 Aug 2022 12:43:53 -0400 Subject: [PATCH 016/106] precipitation indicators --- xclim/data/fr.json | 52 ++++++------ xclim/indicators/atmos/_precip.py | 136 +++++++++++++++++++++--------- 2 files changed, 120 insertions(+), 68 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 54ae66aa3..24a605a3b 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -163,11 +163,11 @@ "abstract": "Maximum de la somme mobile des précipitations quotidiennes pour une période donnée." }, "MAX_PR_INTENSITY": { - "long_name": "Intensité maximale de précipitation sur une durée de {window} h", + "long_name": "Intensité maximale de précipitation durant une fenêtre mobile temporelle", "description": "Intensité maximale {freq:f} de précipitation sur une fenêtre mobile de {window} h.", - "title": "Intensité de précipitation maximale sur une durée et période donnée", + "title": "Intensité de précipitation maximale durant une fenêtre mobile temporelle donnée", "keywords": "courbes IDF", - "abstract": "Maximum de l'intensité de précipitation horaire pour une durée et période donnée." + "abstract": "Maximum de l'intensité de précipitation horaire durant une fenêtre mobile temporelle donnée." }, "RPRCTOT": { "long_name": "Proportion convective de la précipitation totale", @@ -219,27 +219,27 @@ }, "LIQUIDPRCPTOT": { "long_name": "Précipitation liquide totale", - "description": "Précipitation liquide totale {freq:f}, estimée comme la précipitation lorsque la température moyenne est >= 0°C.", + "description": "Précipitation liquide totale {freq:f}, estimée comme la précipitation lorsque la température moyenne est >= {thresh}.", "title": "Précipitation liquide accumulée totale", "abstract": "Précipitation liquide accumulée totale. Les précipitations sont considérées liquides lorsque la température quotidienne moyenne est au-dessus de 0°C." }, "SOLIDPRCPTOT": { "long_name": "Précipitation solide totale", - "description": "Précipitation solide totale {freq:f}, estimée comme la précipitation lorsque la température moyenne est < 0°C.", + "description": "Précipitation solide totale {freq:f}, estimée comme la précipitation lorsque la température moyenne est < {thresh}.", "title": "Précipitation solide accumulée totale", - "abstract": "Précipitation liquide accumulée totale. Les précipitations sont considérées liquides lorsque la température quotidienne moyenne est sous 0°C." + "abstract": "Précipitation solide accumulée totale. Les précipitations sont considérées solides lorsque la température quotidienne moyenne est sous 0°C." }, "SPI": { "long_name": "Indice de précipitation standardisé (SPI)", - "description": "Précipitations sur une fenêtre mobile de {window} {freq:nom}, normalisées tel que la moyenne de SPI est 0 pour les données de calibration.", + "description": "Précipitations sur une fenêtre mobile de {window} {freq:nom}, normalisées tel que la moyenne de SPI est 0 pour les données de calibration. L'unité de la fenêtre 'X' est l'unité de temps déterminée par la fréquence de rééchantillonage", "title": "Indice de précipitation standardisé (SPI)", - "abstract": "Précipitations sur une fenêtre mobile, normalisées tel que la moyenne de SPI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de rééchantillonage" + "abstract": "Précipitations sur une fenêtre mobile, normalisée telles que la moyenne de SPI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de ré-échantillonnage." }, "SPEI": { "long_name": "Indice de précipitation évapotranspiration standardisé (SPEI)", - "description": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile de {window} {freq:nom}, normalisé tel que la moyenne de SPEI est 0 pour les données de calibration.", + "description": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile de {window} {freq:nom}, normalisé tel que la moyenne de SPEI est 0 pour les données de calibration. L'unité de fenêtre `X` est l'unité de temps determinée par la fréquence de ré-échantillonnage {freq}.", "title": "Indice de précipitation évapotranspiration standardisé (SPEI)", - "abstract": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile, normalisé tel que la moyenne de SPEI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de rééchantillonage." + "abstract": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile, normalisé tel que la moyenne de SPEI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de ré-échantillonnage." }, "DC": { "long_name": "Indice de sécheresse", @@ -248,7 +248,7 @@ "abstract": "L'indice de sécheresse fait partie du système canadien des Indices Forêt-Météo. C'est un code numérique estimant la teneur en humidité moyenne de couches organiques." }, "TN_DAYS_ABOVE": { - "long_name": "Nombre de jours avec Tmin > {thresh}", + "long_name": "Nombre de jours avec Tmin > seuil", "description": "Nombre {freq:m} de jours où la température minimale quotidienne est au-dessus de {thresh}.", "title": "Nombre de jours avec Tmin au-dessus d'un certain seuil", "abstract": "Nombre de jours où la température minimale quotidienne est au-dessus d'un seuil." @@ -875,16 +875,16 @@ "abstract": "Nombre de jours avec précipitation au-dessus d'un seuil et températures sous un seuil." }, "DAYS_OVER_PRECIP_THRESH": { - "title": "Nombre de jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile", - "abstract": "Nombre de jours d'une période où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period} et d'un seuil fixe.", + "title": "Nombre de jours avec précipitation où la précipitation est au-dessus un centile donné", + "abstract": "Nombre de jours d'une période où la précipitation est au-dessus un centile donné, calculé sur une période donné et un seuil fixe.", "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period}. Seuls les jours avec au moins {thresh} sont comptés.", - "long_name": "Nombre de jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period}" + "long_name": "NNombre de jours avec un flux de précipitations supérieur au seuil de base." }, "DAYS_OVER_PRECIP_DOY_THRESH": { - "title": "Nombre de jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien", - "abstract": "Nombre de jours d'une période où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien et d'un seuil fixe.", + "title": "Nombre de jours avec précipitation où la précipitation est au-dessus un centile quotidien donné", + "abstract": "Nombre de jours d'une période où la précipitation est au-dessus un centile quotidien donné et d'un seuil fixe.", "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien. Seuls les jours avec au moins {thresh} sont comptés. Le {pr_per_thresh}e centile est calculé sur une fenêtre glissante de {pr_per_window} jour(s) de la période {pr_per_period}.", - "long_name": "Nombre de jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien" + "long_name": "Nombre de jours avec précipitation où la précipitation est au-dessus un centile quotidien donné" }, "FRACTION_OVER_PRECIP_THRESH": { "title": "Fraction des jours avec précipitation où la précipitation est au-dessus d'un centile quotidien.", @@ -900,7 +900,7 @@ }, "LIQUID_PRECIP_RATIO": { "title": "Fraction liquide de la précipitation totale", - "abstract": "Le ratio entre la précipitation liquide et la précipitation totale. La précipitation liquide est approximée par la précipitation lorsque la température est au-dessus d'un seuil.", + "abstract": "Le ratio entre la précipitation liquide et la précipitation totale. La précipitation liquide est approximée par la précipitation lorsque la température est au-dessus d'un seuil donné.", "description": "Le ratio {freq:m} entre la précipitation liquide et la précipitation totale. La précipitation liquide est approximée par la précipitation lorsque la température est au-dessus de {thresh}.", "long_name": "Fraction liquide de la précipitation totale" }, @@ -984,37 +984,37 @@ }, "DRY_SPELL_FREQUENCY": { "title": "Fréquence des périodes sèches", - "abstract": "Fréquence des périodes sèches de n jours et plus, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de n jours sont inférieures à un seuil donné.", + "abstract": "Fréquence des périodes sèches de `N` jours et plus, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donné sont inférieurs à un seuil donné.", "description": "Fréquence {freq:f} des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}.", - "long_name": "Fréquence {freq:f} des périodes sèches de {window} jours et plus" + "long_name": "Fréquence des périodes sèches" }, "DRY_SPELL_TOTAL_LENGTH": { "title": "Durée totale en jours des périodes séches", - "abstract": "Durée totale en jours des périodes séches de n jours et plus, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de n jours sont inférieures à un seuil donné.", + "abstract": "Durée totale en jours des périodes séches de `N` jours et plus, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donné sont inférieures à un seuil donné.", "description": "Durée totale {freq:f} en jours des périodes séches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}.", - "long_name": "Durée totale {freq:f} en jours des périodes sèches de {window} jours et plus" + "long_name": "Durée totale en jours des périodes séches" }, "COLD_AND_DRY_DAYS": { "title": "Nombre de jours froide et secs", - "abstract": "Nombre de jours où la température est en dessous du {tas_per_thresh}e centile et les précipitations en dessous du {pr_per_thresh}e centile.", + "abstract": "Nombre de jours où la température est en dessous un centile donné et les précipitations en dessous un centile donné.", "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et les précipitations en dessous du {pr_per_thresh}e centile.", "long_name": "Nombre {freq:m} de jours froids et secs" }, "WARM_AND_DRY_DAYS": { "title": "Nombre de jours chauds et secs", - "abstract": "Nombre de jours où la température est au-dessus du {tas_per_thresh}e centile et les précipitations en dessous du {pr_per_thresh}e centile.", + "abstract": "Nombre de jours où la température est au-dessus du un centile donné et les précipitations en dessous un centile donné.", "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et les précipitations en dessous du {pr_per_thresh}e centile.", "long_name": "Nombre {freq:m} de jours chauds et secs" }, "WARM_AND_WET_DAYS": { "title": "Nombre de jours chauds avec précipitation", - "abstract": "Nombre de jours où la température est au-dessus du {tas_per_thresh}e centile et les précipitations au-dessus du {pr_per_thresh}e centile.", + "abstract": "Nombre de jours où la température est au-dessus du un centile donné et les précipitations au-dessus du un centile donné.", "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et les précipitations au-dessus du {pr_per_thresh}e centile.", "long_name": "Nombre {freq:m} de jours chauds avec précipitation" }, "COLD_AND_WET_DAYS": { "title": "Nombre de jours froids avec précipitation", - "abstract": "Nombre de jours où la température est en dessous du {tas_per_thresh}e centile et les précipitations au-dessus du {pr_per_thresh}e centile.", + "abstract": "Nombre de jours où la température est en dessous un centile donné et les précipitations au-dessus du un centile donné.", "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et les précipitations au-dessus du {pr_per_thresh}e centile.", "long_name": "Nombre {freq:m} de jours froids avec précipitation" }, diff --git a/xclim/indicators/atmos/_precip.py b/xclim/indicators/atmos/_precip.py index 13d78f8fc..f141fba59 100644 --- a/xclim/indicators/atmos/_precip.py +++ b/xclim/indicators/atmos/_precip.py @@ -97,10 +97,10 @@ class HrPrecip(Hourly): rain_on_frozen_ground_days = PrTasxWithIndexing( + title="Number of rain on frozen ground days", identifier="rain_frzgr", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_above_threshold", - title="Number of rain on frozen ground days", long_name="Number of rain on frozen ground days", description="{freq} number of days with rain above {thresh} after a series of seven days with average daily " "temperature below 0℃. Precipitation is assumed to be rain when the daily average temperature is above 0℃.", @@ -111,10 +111,10 @@ class HrPrecip(Hourly): ) max_1day_precipitation_amount = PrecipWithIndexing( + title="Maximum 1-day total precipitation", identifier="rx1day", units="mm/day", standard_name="lwe_thickness_of_precipitation_amount", - title="Maximum 1-day total precipitation", long_name="Maximum 1-day total precipitation", description="{freq} maximum 1-day total precipitation", abstract="Maximum total daily precipitation for a given period.", @@ -123,11 +123,11 @@ class HrPrecip(Hourly): ) max_n_day_precipitation_amount = Precip( + title="maximum n-day total precipitation", identifier="max_n_day_precipitation_amount", var_name="rx{window}day", units="mm", standard_name="lwe_thickness_of_precipitation_amount", - title="maximum n-day total precipitation", long_name="maximum n-day total precipitation", description="{freq} maximum {window}-day total precipitation.", abstract="Maximum of the moving sum of daily precipitation for a given period.", @@ -136,10 +136,10 @@ class HrPrecip(Hourly): ) wetdays = PrecipWithIndexing( + title="Number of wet days", identifier="wetdays", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_at_or_above_threshold", - title="Number of wet days", long_name="Number of wet days", description="{freq} number of days with daily precipitation at or above {thresh}.", abstract="The number of days with daily precipitation at or above a given threshold.", @@ -148,9 +148,9 @@ class HrPrecip(Hourly): ) wetdays_prop = PrecipWithIndexing( + title="Proportion of wet days", identifier="wetdays_prop", units="1", - title="Proportion of wet days", long_name="Proportion of wet days", description="{freq} proportion of days with precipitation at or above {thresh}.", abstract="The proportion of days with daily precipitation at or above a given threshold.", @@ -159,10 +159,10 @@ class HrPrecip(Hourly): ) dry_days = PrecipWithIndexing( + title="Number of dry days", identifier="dry_days", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_below_threshold", - title="Number of dry days", long_name="Number of dry days", description="{freq} number of days with daily precipitation under {thresh}.", abstract="The number of days with daily precipitation under a given threshold.", @@ -171,10 +171,10 @@ class HrPrecip(Hourly): ) maximum_consecutive_wet_days = Precip( + title="Maximum consecutive wet days", identifier="cwd", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_at_or_above_threshold", - title="Maximum consecutive wet days", long_name="Maximum consecutive wet days", description="{freq} maximum number of consecutive days with daily precipitation at or above {thresh}.", abstract="The longest number of consecutive days where daily precipitation is at or above a given threshold.", @@ -183,10 +183,10 @@ class HrPrecip(Hourly): ) maximum_consecutive_dry_days = Precip( + title="Maximum consecutive dry days", identifier="cdd", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_below_threshold", - title="Maximum consecutive dry days", long_name="Maximum consecutive dry days", description="{freq} maximum number of consecutive days with daily precipitation below {thresh}.", abstract="The longest number of consecutive days where daily precipitation below a given threshold.", @@ -195,23 +195,26 @@ class HrPrecip(Hourly): ) daily_pr_intensity = PrecipWithIndexing( + title="Simple Daily Intensity Index", identifier="sdii", units="mm d-1", standard_name="lwe_thickness_of_precipitation_amount", - title="Simple Daily Intensity Index", long_name="Average precipitation during wet days", description="{freq} average precipitation for days with daily precipitation over {thresh}. " "This indicator is also known as the 'Simple Daily Intensity Index' (SDII).", + abstract="Average precipitation for days with daily precipitation above a given threshold.", cell_methods="", compute=indices.daily_pr_intensity, ) max_pr_intensity = HrPrecip( + title="Maximum precipitation intensity over time window", identifier="max_pr_intensity", units="mm h-1", standard_name="precipitation", long_name="Maximum precipitation intensity over time window", description="{freq} maximum precipitation intensity over rolling {window}h window.", + abstract="Maximum precipitation intensity over a given rolling time window.", cell_methods="time: max", compute=indices.max_pr_intensity, duration="{window}", @@ -219,24 +222,29 @@ class HrPrecip(Hourly): ) precip_accumulation = PrecipWithIndexing( - title="Accumulated total precipitation (solid and liquid)", + title="Total accumulated precipitation (solid and liquid)", identifier="prcptot", units="mm", standard_name="lwe_thickness_of_precipitation_amount", - long_name="Total precipitation", + long_name="Total accumulated precipitation", description="{freq} total precipitation.", + abstract="Total accumulated precipitation. If the average daily temperature is given, the phase parameter can be " + "used to restrict the calculation to precipitation of only one phase (liquid or solid). Precipitation is " + "considered solid if the average daily temperature is below 0°C (and vice versa).", cell_methods="time: sum over days", compute=indices.precip_accumulation, parameters=dict(tas=None, phase=None), ) wet_precip_accumulation = PrecipWithIndexing( - title="Accumulated total precipitation (solid and liquid) during wet days", + title="Total accumulated precipitation (solid and liquid) during wet days", identifier="wet_prcptot", units="mm", standard_name="lwe_thickness_of_precipitation_amount", - long_name="Total precipitation", + long_name="Total accumulated precipitation", description="{freq} total precipitation over wet days, defined as days where precipitation exceeds {thresh}.", + abstract="Total accumulated precipitation on days with precipitation. " + "A day is considered to have precipitation if the precipitation is greater than or equal to a given threshold.", cell_methods="time: sum over days", compute=indices.prcptot, parameters={"thresh": {"default": "1 mm/day"}}, @@ -244,24 +252,28 @@ class HrPrecip(Hourly): liquid_precip_accumulation = PrTasxWithIndexing( - title="Accumulated liquid precipitation.", + title="Total accumulated liquid precipitation.", identifier="liquidprcptot", units="mm", standard_name="lwe_thickness_of_liquid_precipitation_amount", - long_name="Total liquid precipitation", - description="{freq} total {phase} precipitation, estimated as precipitation when temperature >= {thresh}", + long_name="Total accumulated liquid precipitation", + description="{freq} total {phase} precipitation, estimated as precipitation when temperature >= {thresh}.", + abstract="Total accumulated liquid precipitation. " + "Precipitation is considered liquid when the average daily temperature is at or above 0°C.", cell_methods="time: sum over days", compute=indices.precip_accumulation, parameters={"tas": {"kind": InputKind.VARIABLE}, "phase": "liquid"}, ) solid_precip_accumulation = PrTasxWithIndexing( - title="Accumulated solid precipitation.", + title="Total accumulated solid precipitation.", identifier="solidprcptot", units="mm", standard_name="lwe_thickness_of_snowfall_amount", - long_name="Total solid precipitation", - description="{freq} total solid precipitation, estimated as precipitation when temperature < {thresh}", + long_name="Total accumulated solid precipitation", + description="{freq} total solid precipitation, estimated as precipitation when temperature < {thresh}.", + abstract="Total accumulated solid precipitation. " + "Precipitation is considered solid when the average daily temperature is below 0°C.", cell_methods="time: sum over days", compute=indices.precip_accumulation, parameters={"tas": {"kind": InputKind.VARIABLE}, "phase": "solid"}, @@ -273,8 +285,10 @@ class HrPrecip(Hourly): units="", standard_name="spi", long_name="Standardized precipitation index", - description="Precipitations over rolling window {window}-X window, normalized such that SPI averages to 0 for " - "calibration data. The window unit `X` is the minimal time period defined by resampling frequency {freq}", + description="Precipitations over a moving {window}-X window, normalized such that SPI averages to 0 for " + "calibration data. The window unit `X` is the minimal time period defined by resampling frequency {freq}.", + abstract="Precipitation over a moving window, normalized such that SPI averages to 0 for the calibration data. " + "The window unit `X` is the minimal time period defined by the resampling frequency.", cell_methods="", compute=indices.standardized_precipitation_index, ) @@ -285,19 +299,26 @@ class HrPrecip(Hourly): units="", standard_name="spei", long_name="Standardized precipitation evapotranspiration index", - description="Water budget (precipitation - evapotranspiration) over rolling window {window}-X window, normalized " - "such that SPEI averages to 0 for calibration data. The window unit `X` is the minimal time period defined by " - "resampling frequency {freq}", + description="Water budget (precipitation - evapotranspiration) over a moving {window}-X window, normalized " + "such that SPEI averages to 0 for calibration data. The window unit `X` is the minimal time period defined by the " + "resampling frequency {freq}.", + abstract="Water budget (precipitation - evapotranspiration) over a moving window, normalized such that the " + "SPEI averages to 0 for the calibration data. The window unit `X` is the minimal time period defined by the " + "resampling frequency.", cell_methods="", compute=indices.standardized_precipitation_evapotranspiration_index, ) drought_code = FireWeather( + title="Daily drought code", identifier="dc", units="", standard_name="drought_code", long_name="Drought Code", - description="Numeric rating of the average moisture content of organic layers.", + description="Numerical code estimating the average moisture content of organic layers. " + "Calculated with the '{start_up_mode}' method.", + abstract="The Drought Index is part of the Canadian Forest-Weather Index system. " + "It is a numerical code that estimates the average moisture content of organic layers.", compute=indices.drought_code, missing="skip", ) @@ -338,66 +359,80 @@ class HrPrecip(Hourly): last_snowfall = PrecipWithIndexing( + title="Last day where solid precipitation flux exceeded a given threshold", identifier="last_snowfall", standard_name="day_of_year", long_name="Date of last snowfall", description="{freq} last day where the solid precipitation flux exceeded {thresh}.", + abstract="The last day where the solid precipitation flux exceeded a given threshold during a time period.", units="", compute=indices.last_snowfall, ) first_snowfall = PrecipWithIndexing( + title="First day where solid precipitation flux exceeded a given threshold", identifier="first_snowfall", standard_name="day_of_year", long_name="Date of first snowfall", description="{freq} first day where the solid precipitation flux exceeded {thresh}.", + abstract="The first day where the solid precipitation flux exceeded a given threshold during a time period.", units="", compute=indices.first_snowfall, ) days_with_snow = PrecipWithIndexing( - identifier="days_with_snow", title="Days with snowfall", + identifier="days_with_snow", long_name="Number of days with solid precipitation flux between low and high thresholds", description="{freq} number of days with solid precipitation flux larger than {low} and smaller or equal to {high}.", + abstract="Number of days with snow between a lower and upper limit.", units="days", compute=indices.days_with_snow, ) days_over_precip_thresh = PrecipWithIndexing( + title="Number of days with precipitation above a given percentile", identifier="days_over_precip_thresh", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_above_threshold", long_name="Number of days with precipitation flux above base threshold", description="{freq} number of days with precipitation above the {pr_per_thresh}th percentile of {pr_per_period} " "period. Only days with at least {thresh} are counted.", + abstract="Number of days in a period where precipitation is above a given percentile, " + "calculated over a given period and a fixed threshold.", units="days", cell_methods="time: sum over days", compute=indices.days_over_precip_thresh, ) days_over_precip_doy_thresh = PrecipWithIndexing( + title="Number of days with precipitation above a given daily percentile", identifier="days_over_precip_doy_thresh", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_above_daily_threshold", long_name="Number of days with daily precipitation flux above base threshold", description="{freq} number of days with precipitation above the {pr_per_thresh}th daily percentile. Only days with " "at least {thresh} are counted. A {pr_per_window} day(s) window, centered on each calendar day in the " "{pr_per_period} period, is used to compute the {pr_per_thresh}th percentile(s).", + abstract="Number of days in a period where precipitation is above a given daily percentile and a fixed threshold.", units="days", cell_methods="time: sum over days", compute=indices.days_over_precip_thresh, ) high_precip_low_temp = PrTasxWithIndexing( + title="Days with precipitation and cold temperature", identifier="high_precip_low_temp", - long_name="Number of days with precipitation above specified threshold and temperature below specified threshold", - description="{freq} number of days with precipitation above {pr_thresh} and temperature below {tas_thresh}.", + long_name="Days with precipitation above a given threshold and temperature below a given threshold", + description="{freq} number of days with precipitation at or above {pr_thresh} and temperature below {tas_thresh}.", + abstract="Number of days with precipitation above a given threshold and temperature below a given threshold.", units="days", cell_methods="time: sum over days", compute=indices.high_precip_low_temp, ) # FIXME: Are fraction_over_precip_thresh and fraction_over_precip_doy_thresh the same thing? +# FIXME: Clarity needed in both French and English metadata fields fraction_over_precip_doy_thresh = PrecipWithIndexing( + title="", identifier="fraction_over_precip_doy_thresh", long_name="Fraction of precipitation due to wet days with daily precipitation over a given percentile", description="{freq} fraction of total precipitation due to days with precipitation above {pr_per_thresh}th daily " @@ -408,6 +443,8 @@ class HrPrecip(Hourly): compute=indices.fraction_over_precip_thresh, ) +# FIXME: Are fraction_over_precip_thresh and fraction_over_precip_doy_thresh the same thing? +# FIXME: Clarity needed in both French and English metadata fields fraction_over_precip_thresh = PrecipWithIndexing( identifier="fraction_over_precip_thresh", long_name="Fraction of precipitation due to wet days with precipitation over a given percentile", @@ -419,12 +456,13 @@ class HrPrecip(Hourly): ) liquid_precip_ratio = PrTasxWithIndexing( + title="Fraction of liquid to total precipitation", identifier="liquid_precip_ratio", - long_name="Ratio of rainfall to total precipitation", + long_name="Fraction of liquid to total precipitation", description="The {freq} ratio of rainfall to total precipitation. Rainfall is estimated as precipitation on days " "where temperature is above {thresh}.", abstract="The ratio of total liquid precipitation over the total precipitation. Liquid precipitation is " - "approximated from total precipitation on days where temperature is above a threshold.", + "approximated from total precipitation on days where temperature is above a given threshold.", units="", compute=indices.liquid_precip_ratio, parameters={"tas": {"kind": InputKind.VARIABLE}, "prsn": None}, @@ -432,10 +470,13 @@ class HrPrecip(Hourly): dry_spell_frequency = Precip( + title="Dry spell frequency", identifier="dry_spell_frequency", long_name="Dry spell frequency", - description="The {freq} number of dry periods of {window} day(s) or more, during which the {op} precipitation on a " + description="{freq} number of dry periods of {window} day(s) or more, during which the {op} precipitation on a " "window of {window} day(s) is below {thresh}.", + abstract="The frequency of dry periods of `N` days or more, during which the accumulated or maximum precipitation " + "over a given time window of days is below a given threshold.", units="", cell_methods="", compute=indices.dry_spell_frequency, @@ -443,19 +484,26 @@ class HrPrecip(Hourly): dry_spell_total_length = Precip( + title="Dry spell total length", identifier="dry_spell_total_length", long_name="Dry spell total length", - description="The {freq} number of days in dry periods of {window} day(s) or more, during which the {op}" - "precipitation within windows of {window} day(s) is under {thresh}.", + description="{freq} number of days in dry periods of {window} day(s) or more, during which the {op} precipitation " + "within windows of {window} day(s) is under {thresh}.", + abstract="The total length of dry periods of `N` days or more, during which the accumulated or maximum " + "precipitation over a given time window of days is below a given threshold.", units="days", cell_methods="", compute=indices.dry_spell_total_length, ) rprctot = PrecipWithIndexing( + title="Proportion of accumulated precipitation arising from convective processes", identifier="rprctot", long_name="Proportion of accumulated precipitation arising from convective processes", - description="Proportion of accumulated precipitation arising from convective processes with threshold of {thresh}.", + description="Proportion of accumulated precipitation arising from convective processes " + "with precipitation of at least {thresh}.", + abstract="The proportion of total precipitation due to convective processes. " + "Only days with surpassing a minimum precipitation flux are considered.", units="", cell_methods="time: sum", compute=indices.rprctot, @@ -463,41 +511,45 @@ class HrPrecip(Hourly): cold_and_dry_days = PrecipWithIndexing( + title="Cold and dry days", identifier="cold_and_dry_days", units="days", - long_name="Cold and dry days", - title="Cold and dry days", + long_name="Number of cold and dry days", description="{freq} number of days where tas < {tas_per_thresh}th percentile and pr < {pr_per_thresh}th percentile", + abstract="Number of days with temperature below a given percentile and precipitation below a given percentile.", cell_methods="time: sum over days", compute=indices.cold_and_dry_days, ) warm_and_dry_days = PrecipWithIndexing( + title="Warm and dry days", identifier="warm_and_dry_days", units="days", - long_name="Warm and dry days", - title="Warm and dry days", + long_name="Number of warm and dry days", description="{freq} number of days where tas > {tas_per_thresh}th percentile and pr < {pr_per_thresh}th percentile", + abstract="Number of days with temperature above a given percentile and precipitation below a given percentile.", cell_methods="time: sum over days", compute=indices.warm_and_dry_days, ) warm_and_wet_days = PrecipWithIndexing( + title="Warm and wet days", identifier="warm_and_wet_days", units="days", - long_name="Warm and wet days", - title="Warm and wet days", + long_name="Number of warm and wet days", description="{freq} number of days where tas > {tas_per_thresh}th percentile and pr > {pr_per_thresh}th percentile", + abstract="Number of days with temperature above a given percentile and precipitation above a given percentile.", cell_methods="time: sum over days", compute=indices.warm_and_wet_days, ) cold_and_wet_days = PrecipWithIndexing( + title="Cold and wet days", identifier="cold_and_wet_days", units="days", - long_name="Cold and wet days", - title="Cold and wet days", + long_name="Number of cold and wet days", description="{freq} number of days where tas < {tas_per_thresh}th percentile and pr > {pr_per_thresh}th percentile", + abstract="Number of days with temperature below a given percentile and precipitation above a given percentile.", cell_methods="time: sum over days", compute=indices.cold_and_wet_days, ) From b2df48ac2dc585cf60232197ef03b4d2df0d5c65 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 9 Aug 2022 14:10:17 -0400 Subject: [PATCH 017/106] Adjust metadata of dry_spell indicators --- xclim/indicators/atmos/_precip.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xclim/indicators/atmos/_precip.py b/xclim/indicators/atmos/_precip.py index f141fba59..793dc2fc0 100644 --- a/xclim/indicators/atmos/_precip.py +++ b/xclim/indicators/atmos/_precip.py @@ -473,7 +473,7 @@ class HrPrecip(Hourly): title="Dry spell frequency", identifier="dry_spell_frequency", long_name="Dry spell frequency", - description="{freq} number of dry periods of {window} day(s) or more, during which the {op} precipitation on a " + description="The {freq} number of dry periods of {window} day(s) or more, during which the {op} precipitation on a " "window of {window} day(s) is below {thresh}.", abstract="The frequency of dry periods of `N` days or more, during which the accumulated or maximum precipitation " "over a given time window of days is below a given threshold.", @@ -487,8 +487,8 @@ class HrPrecip(Hourly): title="Dry spell total length", identifier="dry_spell_total_length", long_name="Dry spell total length", - description="{freq} number of days in dry periods of {window} day(s) or more, during which the {op} precipitation " - "within windows of {window} day(s) is under {thresh}.", + description="The {freq} number of days in dry periods of {window} day(s) or more, during which the {op} " + "precipitation within windows of {window} day(s) is under {thresh}.", abstract="The total length of dry periods of `N` days or more, during which the accumulated or maximum " "precipitation over a given time window of days is below a given threshold.", units="days", From c09e143b8f39c4264cd6f939dc6f145a4bba1414 Mon Sep 17 00:00:00 2001 From: Pascal Bourgault Date: Tue, 9 Aug 2022 14:26:04 -0400 Subject: [PATCH 018/106] Remove mention of old argument in DC and FWI attrs --- xclim/data/fr.json | 8 ++++---- xclim/indicators/atmos/_precip.py | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 24a605a3b..908fc440b 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -243,7 +243,7 @@ }, "DC": { "long_name": "Indice de sécheresse", - "description": "Code numérique estimant la teneur en humidité moyenne de couches organiques. Calculée avec la méthode de mise en route '{start_up_mode}'.", + "description": "Code numérique estimant la teneur en humidité moyenne de couches organiques.", "title": "Indice de sécheresse quotidien", "abstract": "L'indice de sécheresse fait partie du système canadien des Indices Forêt-Météo. C'est un code numérique estimant la teneur en humidité moyenne de couches organiques." }, @@ -678,15 +678,15 @@ }, "FWI.dc": { "long_name": "Indice de sécheresse", - "description": "Évaluation numérique de la teneur moyenne en eau des épaisses couches organiques compactes. Calculée avec la méthode de mise en route '{start_up_mode}'." + "description": "Évaluation numérique de la teneur moyenne en eau des épaisses couches organiques compactes." }, "FWI.dmc": { "long_name": "Indice d'humidité de l'humus", - "description": "Évaluation numérique de la teneur moyenne en eau des couches organiques peu tassées de moyenne épaisseur. Calculée avec la méthode de mise en route '{start_up_mode}'." + "description": "Évaluation numérique de la teneur moyenne en eau des couches organiques peu tassées de moyenne épaisseur." }, "FWI.ffmc": { "long_name": "Indice du combustible léger (FFMC)", - "description": "Évaluation numérique de la teneur en eau de la litière et d'autres combustibles légers. Calculée avec la méthode de mise en route '{start_up_mode}'." + "description": "Évaluation numérique de la teneur en eau de la litière et d'autres combustibles légers." }, "FWI.isi": { "long_name": "Indice de propagation initiale", diff --git a/xclim/indicators/atmos/_precip.py b/xclim/indicators/atmos/_precip.py index 793dc2fc0..e7f84ac40 100644 --- a/xclim/indicators/atmos/_precip.py +++ b/xclim/indicators/atmos/_precip.py @@ -315,8 +315,7 @@ class HrPrecip(Hourly): units="", standard_name="drought_code", long_name="Drought Code", - description="Numerical code estimating the average moisture content of organic layers. " - "Calculated with the '{start_up_mode}' method.", + description="Numerical code estimating the average moisture content of organic layers.", abstract="The Drought Index is part of the Canadian Forest-Weather Index system. " "It is a numerical code that estimates the average moisture content of organic layers.", compute=indices.drought_code, From 49e9833129131d3c5364048324c9c97b864e49da Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 9 Aug 2022 14:35:56 -0400 Subject: [PATCH 019/106] add missing titles --- xclim/indicators/atmos/_conversion.py | 33 +++++++++++++++------------ xclim/indicators/atmos/_synoptic.py | 1 + 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/xclim/indicators/atmos/_conversion.py b/xclim/indicators/atmos/_conversion.py index d2b6a3868..a4ceffc50 100644 --- a/xclim/indicators/atmos/_conversion.py +++ b/xclim/indicators/atmos/_conversion.py @@ -35,6 +35,7 @@ class Converter(Indicator): humidex = Converter( + title="Humidex", identifier="humidex", units="C", standard_name="air_temperature", @@ -47,6 +48,7 @@ class Converter(Indicator): ) heat_index = Converter( + title="Heat index", identifier="heat_index", units="C", standard_name="air_temperature", @@ -59,6 +61,7 @@ class Converter(Indicator): ) tg = Converter( + title="Mean temperature", identifier="tg", units="K", standard_name="air_temperature", @@ -71,6 +74,7 @@ class Converter(Indicator): wind_speed_from_vector = Converter( + title="Wind speed and direction from vector", identifier="wind_speed_from_vector", var_name=["sfcWind", "sfcWindfromdir"], units=["m s-1", "degree"], @@ -89,6 +93,7 @@ class Converter(Indicator): wind_vector_from_speed = Converter( + title="Wind vector from speed and direction", identifier="wind_vector_from_speed", var_name=["uas", "vas"], units=["m s-1", "m s-1"], @@ -106,6 +111,7 @@ class Converter(Indicator): saturation_vapor_pressure = Converter( + title="Saturation vapour pressure (e_sat)", identifier="e_sat", units="Pa", long_name="Saturation vapour pressure", @@ -117,7 +123,6 @@ class Converter(Indicator): if kws["ice_thresh"] is not None else "" ), - title="Saturation vapour pressure (e_sat)", abstract="Calculation of the saturation vapour pressure from the temperature, according to a given method. " "If ice_thresh is given, the calculation is done with reference to ice for temperatures below this threshold.", compute=indices.saturation_vapor_pressure, @@ -125,12 +130,12 @@ class Converter(Indicator): relative_humidity_from_dewpoint = Converter( + title="Relative humidity from temperature and dewpoint temperature", identifier="hurs_fromdewpoint", units="%", var_name="hurs", long_name="Relative humidity", standard_name="relative_humidity", - title="Relative humidity from temperature and dewpoint temperature", description=lambda **kws: ( "Computed from temperature, and dew point temperature through the " "saturation vapour pressures, which were calculated " @@ -153,11 +158,11 @@ class Converter(Indicator): relative_humidity = Converter( + title="Relative humidity from temperature, specific humidity, and pressure", identifier="hurs", units="%", long_name="Relative humidity", standard_name="relative_humidity", - title="Relative humidity from temperature, specific humidity, and pressure", description=lambda **kws: ( "Computed from temperature, specific humidity and pressure through the saturation vapour pressure, " "which was calculated from temperature according to the {method} method." @@ -180,11 +185,11 @@ class Converter(Indicator): specific_humidity = Converter( + title="Specific humidity from temperature, relative humidity, and pressure", identifier="huss", units="", long_name="Specific humidity", standard_name="specific_humidity", - title="Specific humidity from temperature, relative humidity, and pressure", description=lambda **kws: ( "Computed from temperature, relative humidity and pressure through the saturation vapour pressure, " "which was calculated from temperature according to the {method} method." @@ -201,11 +206,11 @@ class Converter(Indicator): ) specific_humidity_from_dewpoint = Converter( + title="Specific humidity from dew point temperature and pressure", identifier="huss_fromdewpoint", units="", long_name="Specific humidity", standard_name="specific_humidity", - title="Specific humidity from dew point temperature and pressure", description=( "Computed from dewpoint temperature and pressure through the saturation " "vapor pressure, which was calculated according to the {method} method." @@ -216,11 +221,11 @@ class Converter(Indicator): ) snowfall_approximation = Converter( + title="Snowfall approximation", identifier="prsn", units="kg m-2 s-1", standard_name="solid_precipitation_flux", long_name="Solid precipitation", - title="Snowfall approximation", description=( "Solid precipitation estimated from total precipitation and temperature" " with method {method} and threshold temperature {thresh}." @@ -232,11 +237,11 @@ class Converter(Indicator): rain_approximation = Converter( + title="Rainfall approximation", identifier="prlp", units="kg m-2 s-1", standard_name="precipitation_flux", long_name="Liquid precipitation", - title="Rainfall approximation", description=( "Liquid precipitation estimated from total precipitation and temperature" " with method {method} and threshold temperature {thresh}." @@ -248,10 +253,10 @@ class Converter(Indicator): wind_chill_index = Converter( + title="Wind chill", identifier="wind_chill", units="degC", long_name="Wind chill factor", - title="Wind chill", description=lambda **kws: ( "Wind chill index describing the temperature felt by the average person in response to cold wind." ) @@ -271,12 +276,12 @@ class Converter(Indicator): potential_evapotranspiration = Converter( + title="Potential evapotranspiration", identifier="potential_evapotranspiration", var_name="evspsblpot", units="kg m-2 s-1", standard_name="water_potential_evapotranspiration_flux", long_name="Potential evapotranspiration", - title="Potential evapotranspiration", description=( "The potential for water evaporation from soil and transpiration by plants if the water " "supply is sufficient, calculated with the {method} method." @@ -289,10 +294,10 @@ class Converter(Indicator): ) water_budget_from_tas = Converter( + title="Water budget", identifier="water_budget_from_tas", units="kg m-2 s-1", long_name="Water budget", - title="Water budget", description=( "Precipitation minus potential evapotranspiration as a measure of an approximated surface water budget, " "where the potential evapotranspiration, calculated with the {method} method." @@ -305,10 +310,10 @@ class Converter(Indicator): ) water_budget = Converter( + title="Water budget", identifier="water_budget", units="kg m-2 s-1", long_name="Water budget", - title="Water budget", description=( "Precipitation minus potential evapotranspiration as a measure of an approximated surface water budget." ), @@ -321,10 +326,10 @@ class Converter(Indicator): corn_heat_units = Converter( + title=" Corn heat units", identifier="corn_heat_units", units="", long_name="Corn heat units", - title=" Corn heat units", description="Temperature-based index used to estimate the development of corn crops. " "Corn growth occurs when the minimum and maximum daily temperatures both exceed " "{thresh_tasmin} and {thresh_tasmax}, respectively.", @@ -337,10 +342,10 @@ class Converter(Indicator): ) universal_thermal_climate_index = Converter( + title="Universal thermal climate index", identifier="utci", units="K", long_name="Universal thermal climate index", - title="Universal thermal climate index", description="UTCI is the equivalent temperature for the environment derived from a reference environment " "and is used to evaluate heat stress in outdoor spaces.", abstract="UTCI is the equivalent temperature for the environment derived from a reference environment " @@ -351,10 +356,10 @@ class Converter(Indicator): ) mean_radiant_temperature = Converter( + title="Mean radiant temperature", identifier="mean_radiant_temperature", units="K", long_name="Mean radiant temperature", - title="Mean radiant temperature", description="The incidence of radiation on the body from all directions.", abstract="The average temperature of solar and thermal radiation incident on the body's exterior.", cell_methods="", diff --git a/xclim/indicators/atmos/_synoptic.py b/xclim/indicators/atmos/_synoptic.py index 2911ee112..fd9b21e3c 100644 --- a/xclim/indicators/atmos/_synoptic.py +++ b/xclim/indicators/atmos/_synoptic.py @@ -25,5 +25,6 @@ class JetStream(Indicator): "Daily latitude of maximum smoothed zonal wind speed.", "Daily maximum strength of smoothed zonal wind speed.", ], + abstract="Latitude and magnitude of maximum zonal wind speed between 15 to 75°N and -60 to 0°E.", compute=indices.jetstream_metric_woollings, ) From 87b09ef3e121b567708dff7db0d37710e05104f8 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 9 Aug 2022 15:25:55 -0400 Subject: [PATCH 020/106] Fixes for seaIce, wind, snow, and precipitation indicators --- xclim/data/fr.json | 6 ++--- xclim/indicators/atmos/_precip.py | 1 + xclim/indicators/atmos/_wind.py | 8 +++++-- xclim/indicators/land/_snow.py | 38 +++++++++++++++++++++++------- xclim/indicators/seaIce/_seaice.py | 8 +++++-- 5 files changed, 46 insertions(+), 15 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 908fc440b..fa3b33cd0 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -778,7 +778,7 @@ "title": "Approximation de la neige", "abstract": "Précipitation solide estimée à partir de la précipitation totale et de la température selon une méthode et un seuil de température donnés." }, - "SD": { + "SNOW_DEPTH": { "long_name": "Profondeur de neige quotidienne moyenne", "description": "Profondeur de neige quotidienne moyenne.", "title": "Moyenne de la profondeur de neige", @@ -860,7 +860,7 @@ "long_name": "Jours de poudrerie", "description": "Nombre {freq:m} de jours avec accumulation de neige supérieure ou égale à {snd_thresh} au cours des {window} jours précédents et vents supérieurs à {sfcwind_thresh}.", "title": "Nombre de jours de poudrerie", - "abstract": "Nombre de jours où les conditions sont favorables à la poudrerie." + "abstract": "Nombre de jours avec des chutes de neige, une épaisseur de neige et une vitesse du vent supérieures à des seuils donnés pendant une période de jours." }, "WINTER_STORM": { "long_name": "Jours avec forte accumulation de neige", @@ -878,7 +878,7 @@ "title": "Nombre de jours avec précipitation où la précipitation est au-dessus un centile donné", "abstract": "Nombre de jours d'une période où la précipitation est au-dessus un centile donné, calculé sur une période donné et un seuil fixe.", "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period}. Seuls les jours avec au moins {thresh} sont comptés.", - "long_name": "NNombre de jours avec un flux de précipitations supérieur au seuil de base." + "long_name": "Nombre de jours avec un flux de précipitations supérieur au seuil de base." }, "DAYS_OVER_PRECIP_DOY_THRESH": { "title": "Nombre de jours avec précipitation où la précipitation est au-dessus un centile quotidien donné", diff --git a/xclim/indicators/atmos/_precip.py b/xclim/indicators/atmos/_precip.py index e7f84ac40..8e7c018cc 100644 --- a/xclim/indicators/atmos/_precip.py +++ b/xclim/indicators/atmos/_precip.py @@ -324,6 +324,7 @@ class HrPrecip(Hourly): fire_weather_indexes = FireWeather( + title="Fire weather indexes", identifier="fwi", realm="atmos", var_name=["dc", "dmc", "ffmc", "isi", "bui", "fwi"], diff --git a/xclim/indicators/atmos/_wind.py b/xclim/indicators/atmos/_wind.py index 5dcb02e01..88ea27be0 100644 --- a/xclim/indicators/atmos/_wind.py +++ b/xclim/indicators/atmos/_wind.py @@ -13,21 +13,25 @@ class Wind(ResamplingIndicatorWithIndexing): calm_days = Wind( + title="Calm days", identifier="calm_days", units="days", standard_name="number_of_days_with_sfcWind_below_threshold", long_name="Number of days with surface wind speed below threshold", - description="{freq} number of days with surface wind speed < {thresh}", + description="{freq} number of days with surface wind speed < {thresh}.", + abstract="Number of days with surface wind speed below threshold.", cell_methods="time: sum over days", compute=indices.calm_days, ) windy_days = Wind( + title="Windy days", identifier="windy_days", units="days", standard_name="number_of_days_with_sfcWind_above_threshold", long_name="Number of days with surface wind speed at or above threshold", - description="{freq} number of days with surface wind speed >= {thresh}", + description="{freq} number of days with surface wind speed >= {thresh}.", + abstract="Number of days with surface wind speed at or above threshold.", cell_methods="time: sum over days", compute=indices.windy_days, ) diff --git a/xclim/indicators/land/_snow.py b/xclim/indicators/land/_snow.py index 7ecd7ad95..bf0ce2afb 100644 --- a/xclim/indicators/land/_snow.py +++ b/xclim/indicators/land/_snow.py @@ -29,86 +29,104 @@ class SnowWithIndexing(ResamplingIndicatorWithIndexing): snow_cover_duration = SnowWithIndexing( + title="Snow cover duration", identifier="snow_cover_duration", units="days", long_name="Number of days with snow depth at or above threshold", - description="The {freq} number of days with snow depth greater or equal to {thresh}", + description="The {freq} number of days with snow depth greater than or equal to {thresh}.", + abstract="Number of days when the snow depth is greater than or equal to a given threshold.", compute=xci.snow_cover_duration, ) continuous_snow_cover_start = Snow( + title="Start date of continuous snow cover", identifier="continuous_snow_cover_start", standard_name="day_of_year", long_name="Start date of continuous snow cover", description="Day of year when snow depth is above or equal to {thresh} for {window} consecutive days.", + abstract="The first date on which snow depth is greater than or equal to a given threshold " + "for a given number of consecutive days.", units="", compute=xci.continuous_snow_cover_start, ) continuous_snow_cover_end = Snow( + title="End date of continuous snow cover", identifier="continuous_snow_cover_end", standard_name="day_of_year", long_name="End date of continuous snow cover", description="Day of year when snow depth is below {thresh} for {window} consecutive days.", + abstract="The first date on which snow depth is below a given threshold for a given number of consecutive days.", units="", compute=xci.continuous_snow_cover_end, ) snd_max_doy = SnowWithIndexing( + title="Day of year of maximum snow depth", identifier="snd_max_doy", standard_name="day_of_year", var_name="{freq}_snd_max_doy", - long_name="Date when snow depth reaches its maximum value", - description="The {freq} day of year when snow depth reaches its maximum value.", + long_name="Day of the year when snow depth reaches its maximum value", + description="The {freq} day of the year when snow depth reaches its maximum value.", + abstract="Day of the year when snow depth reaches its maximum value.", units="", _partial=True, compute=xci.snd_max_doy, ) snow_melt_we_max = Snow( + title="Maximum snow melt", identifier="snow_melt_we_max", standard_name="change_over_time_in_surface_snow_amount", var_name="{freq}_snow_melt_we_max", long_name="Maximum snow melt", description="The {freq} maximum negative change in melt amount over {window} days.", + abstract="The water equivalent of the maximum snow melt.", units="kg m-2", compute=xci.snow_melt_we_max, ) snw_max = SnowWithIndexing( + title="Maximum snow amount", identifier="snw_max", standard_name="surface_snow_amount", var_name="{freq}_snw_max", long_name="Maximum snow amount", - description="The {freq} day of year when snow amount on the surface reaches its maximum.", + description="The {freq} maximum snow amount on the surface.", + abstract="The maximum snow amount on the surface.", units="kg m-2", compute=xci.snw_max, ) snw_max_doy = SnowWithIndexing( + title="Day of year of maximum snow amount", identifier="snw_max_doy", standard_name="day_of_year", var_name="{freq}_snw_max_doy", long_name="Day of year of maximum daily snow amount", - description="The {freq} maximum snow amount on the surface.", + description="The {freq} day of year when snow amount on the surface reaches its maximum.", + abstract="The day of year when snow amount on the surface reaches its maximum.", units="", compute=xci.snw_max_doy, ) melt_and_precip_max = Snow( + title="Water equivalent maximum from precipitation and snow melt", identifier="melt_and_precip_max", var_name="{freq}_melt_and_precip_max", - long_name="Maximum snow melt and precipitation", + long_name="Water equivalent maximum from precipitation and snow melt", description="The {freq} maximum precipitation flux and negative change in snow amount over {window} days.", + abstract="Maximum water input from precipitation flux and snow melt over a given window of days.", units="kg m-2", compute=xci.melt_and_precip_max, ) winter_storm = SnowWithIndexing( + title="Winter storm days", identifier="winter_storm", var_name="{freq}_winter_storm", - long_name="Days with snowfall at or above threshold", + long_name="Days with snowfall at or above a given threshold", description="The {freq} number of days with snowfall accumulation above {thresh}.", units="days", compute=xci.winter_storm, @@ -116,21 +134,25 @@ class SnowWithIndexing(ResamplingIndicatorWithIndexing): blowing_snow = Snow( + title="Blowing snow days", identifier="blowing_snow", var_name="{freq}_blowing_snow", - long_name="Blowing snow days", + long_name="Days with snowfall and wind speed at or above given thresholds", description="The {freq} number of days with snowfall over last {window} days above {snd_thresh} and wind speed " "above {sfcWind_thresh}.", + abstract="The number of days with snowfall, snow depth, and windspeed over given thresholds for a period of days.", units="days", compute=xci.blowing_snow, ) snow_depth = SnowWithIndexing( + title="Mean snow depth", identifier="snow_depth", units="cm", standard_name="surface_snow_thickness", long_name="Mean of daily snow depth", description="The {freq} mean of daily mean snow depth.", + abstract="Mean of daily snow depth.", cell_methods="time: mean over days", compute=xci.snow_depth, ) diff --git a/xclim/indicators/seaIce/_seaice.py b/xclim/indicators/seaIce/_seaice.py index 73421020c..70665efdd 100644 --- a/xclim/indicators/seaIce/_seaice.py +++ b/xclim/indicators/seaIce/_seaice.py @@ -18,22 +18,26 @@ class SiconcAreacello(Indicator): sea_ice_extent = SiconcAreacello( + title="Sea ice extent", identifier="sea_ice_extent", units="m2", standard_name="sea_ice_extent", long_name="Sea ice extent", - description="The sum of ocean areas where sea ice concentration is at least {thresh}.", + description="The sum of ocean areas where sea ice concentration exceeds {thresh}.", + abstract="A measure of the extent of all areas where sea ice concentration exceeds a threshold.", cell_methods="lon: sum lat: sum", compute=indices.sea_ice_extent, ) sea_ice_area = SiconcAreacello( + title="Sea ice area", identifier="sea_ice_area", units="m2", standard_name="sea_ice_area", long_name="Sea ice area", - description="The sum of ice-covered areas where sea ice concentration is at least {thresh}.", + description="The sum of ice-covered areas where sea ice concentration exceeds {thresh}.", + abstract="A measure of total ocean surface covered by sea ice.", cell_methods="lon: sum lat: sum", compute=indices.sea_ice_area, ) From 554ac910494c9c95975f6f6063b8f5f8a2d61884 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 9 Aug 2022 15:58:09 -0400 Subject: [PATCH 021/106] Fixes for streamflow and synoptic indicators --- xclim/data/fr.json | 26 +++++++++++--------------- xclim/indicators/atmos/_synoptic.py | 1 + xclim/indicators/land/_streamflow.py | 24 ++++++++++++++++-------- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index fa3b33cd0..372a2ef25 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -583,39 +583,35 @@ }, "RB_FLASHINESS_INDEX": { "long_name": "Indice Richards-Baker de torrentialité", - "description": "Indice Richards-Baker mesurant le caractère torrentiel d'un débit de rivière.", + "description": "{freq} de R-B indice, un indice mesurant le caractère torrentiel d'un débit de rivière.", "title": "Indice Richards-Baker de torrentialité", "abstract": "Mesure des oscillations du débit relatif au débit moyen, quantifiant la fréquence et la rapidité des changements de débits." }, "FREQ_ANALYSIS": { - "long_name": "Période de retour {mode} {indexer} du flux de {window} jours", - "description": "Analyse de fréquence pour le {mode} {indexer} du flux de {window} jours, estimé avec la distribution {dist:f}.", + "long_name": "Période de retour du montant de débit", + "description": "Analyse de fréquence de débit du courant pour le {mode} {indexer} du flux de {window} jours, estimé avec la distribution {dist:f}.", "title": "Période de retour", - "abstract": "Analyse de fréquence selon un mode et une distribution." + "abstract": "Analyse de fréquence de débit du courant selon un mode et une distribution." }, "STATS": { - "long_name": "{op} du {indexer} {freq:m} du flux quotidien", + "long_name": "Statistique du flux quotidien", "description": "{op} du {indexer} {freq:m} du flux quotidien.", - "title": "Calcul de statistiques sur des sous-périodes.", - "abstract": "" + "title": "Calcul de statistiques sur des sous-périodes." }, "FIT": { "long_name": "Paramètres d'une distribution {dist:f}", "description": "Paramètres d'une distribution {dist:f}.", - "title": "Calcul les paramètres d'une distribution univariée pour un ensemble de données", - "abstract": "" + "title": "Calcul les paramètres d'une distribution univariée pour un ensemble de données" }, "DOY_QMAX": { - "long_name": "Jour de l'année du maximum le long de {indexer}", + "long_name": "Jour de l'année du maximum le long d'un période de temps", "description": "Jour de l'année du maximum le long de {indexer}.", - "title": "Jour de l'année du maximum", - "abstract": "" + "title": "Jour de l'année du maximum" }, "DOY_QMIN": { - "long_name": "Jour de l'année du minimum le long de {indexer}", + "long_name": "Jour de l'année du minimum le long d'un période de temps'", "description": "Jour de l'année du minimum le long de {indexer}.", - "title": "Jour de l'année du minimum", - "abstract": "" + "title": "Jour de l'année du minimum" }, "SEA_ICE_AREA": { "long_name": "Surface de la banquise", diff --git a/xclim/indicators/atmos/_synoptic.py b/xclim/indicators/atmos/_synoptic.py index fd9b21e3c..91d4ce0a4 100644 --- a/xclim/indicators/atmos/_synoptic.py +++ b/xclim/indicators/atmos/_synoptic.py @@ -14,6 +14,7 @@ class JetStream(Indicator): jetstream_metric_woollings = JetStream( + title="Strength and latitude of jetstream", identifier="jetstream_metric_woollings", var_name=["jetlat", "jetstr"], units=["degrees_North", "m s-1"], diff --git a/xclim/indicators/land/_streamflow.py b/xclim/indicators/land/_streamflow.py index 36f118221..6fbef469c 100644 --- a/xclim/indicators/land/_streamflow.py +++ b/xclim/indicators/land/_streamflow.py @@ -1,6 +1,8 @@ """Streamflow indicator definitions.""" from __future__ import annotations +from abc import ABC + from xclim.core.cfchecks import check_valid from xclim.core.indicator import Indicator, ResamplingIndicator from xclim.core.units import declare_units @@ -50,7 +52,7 @@ class FA(Streamflow): missing = "skip" -# Disable the daily checks because the inputs are period extremas. +# Disable the daily checks because the inputs are period extremes. class Fit(Indicator): src_freq = None @@ -59,62 +61,68 @@ def cfcheck(self, **das): base_flow_index = Streamflow( + title="Base flow index", identifier="base_flow_index", units="", long_name="Base flow index", - description="Minimum 7-day average flow divided by the mean flow.", + description="Minimum of the 7-day moving average flow divided by the mean flow.", + asbtract="Minimum of the 7-day moving average flow divided by the mean flow.", compute=base_flow_index, ) freq_analysis = FA( + title="Return period flow amount", identifier="freq_analysis", var_name="q{window}{mode:r}{indexer}", long_name="N-year return period flow amount", description="Streamflow frequency analysis for the {mode} {indexer} {window}-day flow estimated using the {dist} " "distribution.", + abstract="Streamflow frequency analysis on the basis of a given mode and distribution.", units="m^3 s-1", - title="Flow values for given return periods.", compute=declare_units(da=None)(frequency_analysis), ) rb_flashiness_index = Streamflow( + title="Richards-Baker flashiness index", identifier="rb_flashiness_index", units="", var_name="rbi", long_name="Richards-Baker flashiness index", - description="{freq} R-B Index, an index measuring the flashiness of flow.", + description="{freq} de R-B Index, an index measuring the flashiness of flow.", + abstract="Measurement of flow oscillations relative to average flow, " + "quantifying the frequency and speed of flow changes.", compute=rb_flashiness_index, ) stats = Stats( + title="Statistic of the daily flow for a given period.", identifier="stats", var_name="q{indexer}{op:r}", long_name="Daily flow statistics", description="{freq} {op} of {indexer} daily flow", - title="Statistic of the daily flow on a given period.", units="m^3 s-1", compute=declare_units(da=None)(generic.select_resample_op), ) fit = Fit( + title="Distribution parameters fitted over the time dimension.", identifier="fit", var_name="params", units="", standard_name="{dist} parameters", long_name="Distribution parameters", description="Parameters of the {dist} distribution", - title="Distribution parameters fitted over the time dimension.", cell_methods="time: fit", compute=declare_units(da=None)(_fit), ) doy_qmax = Streamflow( + title="Day of year of the maximum.", identifier="doy_qmax", var_name="q{indexer}_doy_qmax", long_name="Day of the year of the maximum over time period", description="Day of the year of the maximum over {indexer}", - title="Day of year of the maximum.", units="", compute=declare_units(da=None)(generic.select_resample_op), parameters=dict(op=generic.doymax), @@ -122,11 +130,11 @@ def cfcheck(self, **das): doy_qmin = Streamflow( + title="Day of year of the minimum.", identifier="doy_qmin", var_name="q{indexer}_doy_qmin", long_name="Day of the year of the minimum over time period", description="Day of the year of the minimum over {indexer}", - title="Day of year of the minimum.", units="", compute=declare_units(da=None)(generic.select_resample_op), parameters=dict(op=generic.doymin), From 8c3449d25cd8a8dc5f6fac622c382b42d152f978 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 9 Aug 2022 16:00:55 -0400 Subject: [PATCH 022/106] fix FWI title --- xclim/testing/tests/test_indicators.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xclim/testing/tests/test_indicators.py b/xclim/testing/tests/test_indicators.py index 828c7e486..fa4174bee 100644 --- a/xclim/testing/tests/test_indicators.py +++ b/xclim/testing/tests/test_indicators.py @@ -474,7 +474,7 @@ def test_signature(): def test_doc(): doc = xclim.atmos.fire_weather_indexes.__doc__ - assert doc.startswith("Fire weather indexes. (realm: atmos)") + assert doc.startswith("Fire weather indexes (realm: atmos)") assert "This indicator will check for missing values according to the method" in doc assert "Based on indice :py:func:`~xclim.indices.fwi.fire_weather_indexes`." in doc assert "ffmc0 : str or DataArray, optional" in doc From 547977aceee5ef14a815892609cb8a6a0a011b84 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 9 Aug 2022 17:12:51 -0400 Subject: [PATCH 023/106] fix failing test and update test failure message --- xclim/data/fr.json | 12 ++++++++---- xclim/testing/tests/test_locales.py | 5 ++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 372a2ef25..f8dd0faf2 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -596,22 +596,26 @@ "STATS": { "long_name": "Statistique du flux quotidien", "description": "{op} du {indexer} {freq:m} du flux quotidien.", - "title": "Calcul de statistiques sur des sous-périodes." + "title": "Calcul de statistiques sur des sous-périodes.", + "abstract": "" }, "FIT": { "long_name": "Paramètres d'une distribution {dist:f}", "description": "Paramètres d'une distribution {dist:f}.", - "title": "Calcul les paramètres d'une distribution univariée pour un ensemble de données" + "title": "Calcul les paramètres d'une distribution univariée pour un ensemble de données", + "abstract": "" }, "DOY_QMAX": { "long_name": "Jour de l'année du maximum le long d'un période de temps", "description": "Jour de l'année du maximum le long de {indexer}.", - "title": "Jour de l'année du maximum" + "title": "Jour de l'année du maximum", + "abstract": "" }, "DOY_QMIN": { "long_name": "Jour de l'année du minimum le long d'un période de temps'", "description": "Jour de l'année du minimum le long de {indexer}.", - "title": "Jour de l'année du minimum" + "title": "Jour de l'année du minimum", + "abstract": "" }, "SEA_ICE_AREA": { "long_name": "Surface de la banquise", diff --git a/xclim/testing/tests/test_locales.py b/xclim/testing/tests/test_locales.py index 5ba8858bc..53ccbc2d6 100644 --- a/xclim/testing/tests/test_locales.py +++ b/xclim/testing/tests/test_locales.py @@ -152,7 +152,10 @@ def test_xclim_translations(locale, official_indicators): if len(untranslated) > 0 or len(incomplete) > 0: pytest.fail( - f"Indicators {', '.join(untranslated)} do not have translations and {', '.join(incomplete)} have incomplete ones for official locale {locale}." + f"{len(untranslated)} indicators are missing translations" + f"{': [' + ', '.join(untranslated) + ']' if len(untranslated) else ''}" + f"{' and ' if len(incomplete) else '.'}" + f"[{', '.join(incomplete)}] have incomplete translations for official locale `{locale}`." ) From f0cca552228bf263e358cfd997ecbc27b887cc04 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 11 Aug 2022 14:35:11 -0400 Subject: [PATCH 024/106] synchronize temperature indicators, part 1 --- xclim/data/fr.json | 50 ++++++++++---------- xclim/indicators/atmos/_temperature.py | 64 ++++++++++++++++++-------- 2 files changed, 70 insertions(+), 44 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index f8dd0faf2..7d0f1bbbf 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -248,70 +248,70 @@ "abstract": "L'indice de sécheresse fait partie du système canadien des Indices Forêt-Météo. C'est un code numérique estimant la teneur en humidité moyenne de couches organiques." }, "TN_DAYS_ABOVE": { - "long_name": "Nombre de jours avec Tmin > seuil", + "long_name": "Nombre de jours avec température minimale quotidienne au-dessus d'un seuil donné", "description": "Nombre {freq:m} de jours où la température minimale quotidienne est au-dessus de {thresh}.", - "title": "Nombre de jours avec Tmin au-dessus d'un certain seuil", - "abstract": "Nombre de jours où la température minimale quotidienne est au-dessus d'un seuil." + "title": "Nombre de jours avec température minimale quotidienne au-dessus d'un seuil donné", + "abstract": "Nombre de jours où la température minimale quotidienne est au-dessus d'un seuil donné." }, "TN_DAYS_BELOW": { - "long_name": "Nombre de jours avec Tmin < {thresh}", + "long_name": "Nombre de jours avec température minimale quotidienne sous un seuil donné", "description": "Nombre {freq:m} de jours où la température minimale quotidienne est sous {thresh}.", - "title": "Nombre de jours avec Tmin sous un certain seuil", - "abstract": "Nombre de jours où la température minimale quotidienne est sous un seuil." + "title": "Nombre de jours avec température minimale quotidienne sous d'un seuil donné", + "abstract": "Nombre de jours où la température minimale quotidienne est sous un seuil donné." }, "TG_DAYS_ABOVE": { - "long_name": "Nombre de jours avec Tmoy > {thresh}", + "long_name": "Nombre de jours avec température moyenne quotidienne au-dessus d'un seuil donné", "description": "Nombre {freq:m} de jours où la température quotidienne moyenne est au-dessus de {thresh}.", - "title": "Nombre de jours avec tmoy au-dessus d'un certain seuil", - "abstract": "Nombre de jours où la température quotidienne moyenne est au-dessus d'un seuil." + "title": "Nombre de jours avec température moyenne quotidienne au-dessus d'un seuil donné", + "abstract": "Nombre de jours où la température quotidienne moyenne est au-dessus d'un seuil donné." }, "TG_DAYS_BELOW": { - "long_name": "Nombre de jours avec Tmoy < {thresh}", + "long_name": "Nombre de jours avec température moyenne quotidienne sous un seuil donné", "description": "Nombre {freq:m} de jours où la température quotidienne moyenne est sous {thresh}.", - "title": "Nombre de jours avec tmoy sous un certain seuil", - "abstract": "Nombre de jours où la température quotidienne moyenne est sous un seuil." + "title": "Nombre de jours avec température moyenne quotidienne sous d'un seuil donné", + "abstract": "Nombre de jours où la température quotidienne moyenne est sous un seuil donné." }, "TX_DAYS_ABOVE": { - "long_name": "Nombre de jours avec Tmax > {thresh}", + "long_name": "Nombre de jours avec température maximale quotidienne au-dessus d'un seuil donné", "description": "Nombre {freq:m} de jours où la température maximale quotidienne est au-dessus de {thresh}.", - "title": "Nombre de jours avec Tmax au-dessus d'un certain seuil", - "abstract": "Nombre de jours où la température maximale quotidienne est au-dessus d'un seuil." + "title": "Nombre de jours avec température maximale quotidienne au-dessus d'un seuil donné", + "abstract": "Nombre de jours où la température maximale quotidienne est au-dessus d'un seuil donné." }, "TX_DAYS_BELOW": { - "long_name": "Nombre de jours avec Tmax < {thresh}", + "long_name": "Nombre de jours avec température maximale quotidienne sous un seuil donné", "description": "Nombre {freq:m} de jours où la température maximale quotidienne est sous {thresh}.", - "title": "Nombre de jours avec Tmax sous un certain seuil", - "abstract": "Nombre de jours où la température maximale quotidienne est sous un seuil." + "title": "Nombre de jours avec température maximale quotidienne sous d'un seuil donné", + "abstract": "Nombre de jours où la température maximale quotidienne est sous un seuil donné." }, "TX_TN_DAYS_ABOVE": { - "long_name": "Nombre de jours avec Tmax > {thresh_tasmax} et Tmin > {thresh_tasmin}", + "long_name": "Nombre de jours où les températures minimales et maximales quotidiennes dépassent des seuils donnés.", "description": "Nombre {freq:m} de jours où la température maximale quotidienne excède {thresh_tasmax} et la température minimale quotidienne excède {thresh_tasmin}.", - "title": "Nombre de jours avec des températures minimales et maximales quotidiennes chaudes", + "title": "Nombre de jours où les températures minimales et maximales quotidiennes dépassent les seuils.", "abstract": "Nombre de jours où les températures maximales et minimales quotidiennes sont au-dessus de seuils donnés." }, "HEAT_WAVE_FREQUENCY": { - "long_name": "Nombre de vagues de chaleur (Tmin > {thresh_tasmin} et Tmax > {thresh_tasmax} pour {window} jours)", + "long_name": "Nombre de vagues de chaleur", "description": "Nombre {freq:m} de vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Fréquence des vagues de chaleur", "abstract": "Nombre de vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_TOTAL_LENGTH": { - "long_name": "Durée totale des vagues de chaleur (Tmin > {thresh_tasmin} et Tmax > {thresh_tasmax} pour >= {window} days)", + "long_name": "Durée totale des vagues de chaleur", "description": "Durée totale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Durée totale des vagues de chaleur", "abstract": "Durée totale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_MAX_LENGTH": { - "long_name": "Longueur maximale des vagues de chaleur (Tmin > {thresh_tasmin} et Tmax > {thresh_tasmax} pour {window} jours au moins)", + "long_name": "Longueur maximale des vagues de chaleur", "description": "Longueur maximale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Longueur maximale des vagues de chaleur", "abstract": "Longueur maximale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_INDEX": { "long_name": "Nombre de jours de vague de chaleur", - "description": "Nombre {freq:m} de jours de vague de chaleur, définie comme cinq jours consécutifs ou plus où la température est au-dessus de {thresh}.", + "description": "Nombre {freq:m} de jours de vague de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Indice de vague de chaleur", - "abstract": "Nombre de jours de vagues de chaleur. Une vague de chaleur se produit lorsque la température maximale quotidienne excède un seuil durant au moins 5 jours." + "abstract": "Nombre de jours de vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "TG": { "long_name": "température quotidienne moyenne", diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index b58d2190e..a8a08f52d 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -92,111 +92,133 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): tn_days_above = TempWithIndexing( + title="Number of days with minimum temperature above a given threshold", identifier="tn_days_above", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", - long_name="Number of days with Tmin above threshold", + long_name="The number of days with minimum temperature above a given threshold", description="{freq} number of days where daily minimum temperature exceeds {thresh}.", + abstract="The number of days with minimum temperature above a given threshold.", cell_methods="time: sum over days", compute=indices.tn_days_above, ) tn_days_below = TempWithIndexing( + title="Number of days with minimum temperature below a given threshold", identifier="tn_days_below", units="days", standard_name="number_of_days_with_air_temperature_below_threshold", - long_name="Number of days with Tmin below threshold", + long_name="The number of days with minimum temperature below a given threshold", description="{freq} number of days where daily minimum temperature is below {thresh}.", + abstract="The number of days with minimum temperature below a given threshold.", cell_methods="time: sum over days", compute=indices.tn_days_below, ) tg_days_above = TempWithIndexing( + title="Number of days with mean temperature above a given threshold", identifier="tg_days_above", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", - long_name="Number of days with Tmean above threshold", + long_name="The number of days with mean temperature above a given threshold", description="{freq} number of days where daily mean temperature exceeds {thresh}.", + abstract="The number of days with mean temperature above a given threshold.", cell_methods="time: sum over days", compute=indices.tg_days_above, ) tg_days_below = TempWithIndexing( + title="Number of days with mean temperature below a given threshold", identifier="tg_days_below", units="days", standard_name="number_of_days_with_air_temperature_below_threshold", - long_name="Number of days with Tmean below threshold", + long_name="The number of days with mean temperature below a given threshold", description="{freq} number of days where daily mean temperature is below {thresh}.", + abstract="The number of days with mean temperature below a given threshold.", cell_methods="time: sum over days", compute=indices.tg_days_below, ) tx_days_above = TempWithIndexing( + title="Number of days with maximum temperature above a given threshold", identifier="tx_days_above", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", - long_name="Number of days with Tmax above threshold", + long_name="The number of days with maximum temperature above a given threshold", description="{freq} number of days where daily maximum temperature exceeds {thresh}.", + abstract="The number of days with maximum temperature above a given threshold.", cell_methods="time: sum over days", compute=indices.tx_days_above, ) tx_days_below = TempWithIndexing( + title="Number of days with maximum temperature below a given threshold", identifier="tx_days_below", units="days", standard_name="number_of_days_with_air_temperature_below_threshold", - long_name="Number of days with Tmax below threshold", + long_name="The number of days with maximum temperature below a given threshold", description="{freq} number of days where daily max temperature is below {thresh}.", + abstract="The number of days with maximum temperature below a given threshold.", cell_methods="time: sum over days", compute=indices.tx_days_below, ) tx_tn_days_above = TempWithIndexing( + title="Number of days with daily minimum and maximum temperatures exceeding thresholds", identifier="tx_tn_days_above", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", - long_name="Number of days with Tmax above a specified threshold and Tmin above a specified threshold", + long_name="Number of days with daily minimum and daily maximum temperatures above given thresholds", description="{freq} number of days where daily maximum temperature exceeds {thresh_tasmax} and minimum temperature " "exceeds {thresh_tasmin}.", + abstract="Number of days with daily maximum and minimum temperatures above given thresholds", cell_methods="", compute=indices.tx_tn_days_above, ) heat_wave_frequency = Temp( + title="Heat wave frequency", identifier="heat_wave_frequency", units="", standard_name="heat_wave_events", long_name="Number of heat wave events", - description="{freq} number of heat wave events over a given period. An event occurs when the minimum and maximum " - "daily temperature both exceeds specific thresholds : (Tmin > {thresh_tasmin} and Tmax > {thresh_tasmax}) over a " - "minimum number of days ({window}).", + description="{freq} number of heat wave events within a given period. A heat wave occurs when daily minimum and " + "maximum temperatures exceed thresh_tasmin} and {thresh_tasmax}, respectively, over at least {window} days.", + abstract="Number of heat waves. A heat wave occurs when daily minimum and maximum temperatures exceed given " + "thresholds for a number of days.", cell_methods="", keywords="health,", compute=indices.heat_wave_frequency, ) heat_wave_max_length = Temp( + title="Heat wave maximum length", identifier="heat_wave_max_length", units="days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", long_name="Maximum length of heat wave events", - description="{freq} maximum length of heat wave events occurring in a given period. An event occurs when the " - "minimum and maximum daily temperature both exceeds specific thresholds (Tmin > {thresh_tasmin} and Tmax > " - "{thresh_tasmax}) over a minimum number of days ({window}).", + description="{freq} maximum length of heat wave events occurring within a given period. " + "A heat wave occurs when daily minimum and maximum temperatures exceed thresh_tasmin} and {thresh_tasmax}, " + "respectively, over at least {window} days.", + abstract="Total duration of heat waves. A heat wave occurs when daily minimum and maximum temperatures exceed " + "given thresholds for a number of days.", cell_methods="", keywords="health,", compute=indices.heat_wave_max_length, ) heat_wave_total_length = Temp( + title="Heat wave total length", identifier="heat_wave_total_length", units="days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", long_name="Total length of heat wave events", - description="{freq} total length of heat wave events occurring in a given period. An event occurs when the minimum " - "and maximum daily temperature both exceeds specific thresholds (Tmin > {thresh_tasmin} and Tmax > " - "{thresh_tasmax}) over a minimum number of days ({window}).", + description="{freq} total length of heat wave events occurring within a given period. " + "A heat wave occurs when daily minimum and maximum temperatures exceed thresh_tasmin} and {thresh_tasmax}, " + "respectively, over at least {window} days.", + abstract="Maximum length of heat waves. A heat wave occurs when daily minimum and maximum temperatures exceed " + "given thresholds for a number of days.", cell_methods="", keywords="health,", compute=indices.heat_wave_total_length, @@ -204,12 +226,16 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): heat_wave_index = Temp( + title="Heat wave index", identifier="heat_wave_index", units="days", standard_name="heat_wave_index", - long_name="Number of days that are part of a heatwave", - description="{freq} number of days that are part of a heatwave, defined as five or more consecutive days " - "over {thresh}.", + long_name="Number of days that constitute heatwave events", + description="{freq} total number of days that are part of a heatwave within a given period. " + "A heat wave occurs when daily minimum and maximum temperatures exceed thresh_tasmin} and {thresh_tasmax}, " + "respectively, over at least {window} days.", + abstract="Number of days that constitute heatwave events. A heat wave occurs when daily minimum and maximum " + "temperatures exceed given thresholds for a number of days.", cell_methods="", compute=indices.heat_wave_index, ) From 6fe2ed9f857e3fe6663088277b6d88c6459154cd Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 12 Aug 2022 11:08:32 -0400 Subject: [PATCH 025/106] basic temperature indicators and daily temperature range --- xclim/data/fr.json | 58 +++++++++++++------------- xclim/indicators/atmos/_temperature.py | 50 ++++++++++++++++------ 2 files changed, 67 insertions(+), 41 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 7d0f1bbbf..0ed1af3a4 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -314,28 +314,28 @@ "abstract": "Nombre de jours de vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "TG": { - "long_name": "température quotidienne moyenne", + "long_name": "Moyenne des températures maximales et minimales quotidennes", "description": "température quotidienne moyenne estimée par la médiane des températures maximales et minimales.", - "title": "Moyenne des températures maximales et minimales", - "abstract": "La température quotidienne moyenne en assumant une distribution symétrique des températures (Tg = (Tx + Tn) / 2)." + "title": "Température moyenne", + "abstract": "La température quotidienne en assumant une distribution symétrique des températures (Tg = (Tx + Tn) / 2)." }, "TG_MIN": { - "long_name": "Minimum de la température quotidienne moyenne", - "description": "Minimum {freq:m} de la température quotidienne moyenne.", - "title": "Minimum de la température quotidienne moyenne", - "abstract": "Minimum de la température quotidienne moyenne." + "long_name": "Minimum de la température moyenne quotidienne", + "description": "Minimum {freq:m} de la température moyenne quotidienne.", + "title": "Minimum de la température moyenne", + "abstract": "Minimum de la température moyenne quotidienne." }, "TG_MAX": { - "long_name": "Maximum de la température quotidienne moyenne", - "description": "Maximum {freq:m} de la température quotidienne moyenne.", - "title": "Maximum de la température quotidienne moyenne", - "abstract": "Maximum de la température quotidienne moyenne." + "long_name": "Maximum de la température moyenne quotidienne", + "description": "Maximum {freq:m} de la température moyenne quotidienne.", + "title": "Maximum de la température moyenne", + "abstract": "Maximum de la température moyenne quotidienne." }, "TG_MEAN": { - "long_name": "Moyenne de la température quotidienne", + "long_name": "Moyenne de la température moyenne quotidienne", "description": "Moyenne {freq:f} de la température quotidienne.", - "title": "Température quotidienne moyenne", - "abstract": "Température quotidienne moyenne." + "title": "Température moyenne", + "abstract": "Moyenne de la température moyenne quotidienne." }, "TG10P": { "long_name": "Nombre de jours où la température quotidienne est au-dessus du {per_base_thresh}e centile", @@ -350,10 +350,10 @@ "abstract": "Nombre de jours où la température est au-dessus du {per_base_thresh}e centile." }, "TN_MIN": { - "long_name": "Minimum de la température quotidienne", + "long_name": "Minimum de la température minimale quotidienne", "description": "Minimum {freq:m} de la température minimale quotidienne.", - "title": "Température minimale quotidienne", - "abstract": "Température minimale quotidienne." + "title": "Température minimale", + "abstract": "Minimum de la température minimale quotidienne." }, "TN_MAX": { "long_name": "Maximum de la température minimale quotidienne", @@ -388,8 +388,8 @@ "TX_MAX": { "long_name": "Maximum de la température quotidienne", "description": "Maximum {freq:m} de la température maximale quotidienne.", - "title": "Température maximale quotidienne", - "abstract": "Température maximale quotidienne." + "title": "Température maximale", + "abstract": "Maximum de la température maximale quotidienne." }, "TX_MEAN": { "long_name": "Moyenne de la température maximale quotidienne", @@ -413,7 +413,7 @@ "long_name": "Amplitude diurne maximale de la température", "description": "Maximum {freq:m} de l'amplitude diurne de la température.", "title": "Amplitude diurne maximale de la température", - "abstract": "L'écart maximal entre les températures maximale et minimale quotidiennes ." + "abstract": "L'écart maximal entre les températures maximale et minimale quotidiennes." }, "DTR": { "long_name": "Amplitude diurne de la température", @@ -423,7 +423,7 @@ }, "DTRVAR": { "long_name": "Variabilité de l'amplitude diurne de la température", - "description": "Variation interdiurne moyenne {freq:f} de l'amplitude diurne de la température.", + "description": "Variation interdiurne moyenne {freq:f} de l'amplitude diurne de la température (définie comme la variation quotidienne moyenne de l'amplitude diurne des températures quotidiennes pour une période donnée).", "title": "Variation interdiurne moyenne de l'amplitude diurne de la température", "abstract": "Variation interdiurne moyenne de l'amplitude diurne de la température." }, @@ -630,16 +630,16 @@ "abstract": "Mesure de l'étendue de toutes les régions où la concentration de glace de mer excède un seuil." }, "DRY_DAYS": { - "long_name": "Nombre de jours secs (precip < {thresh})", + "long_name": "Nombre de jours secs", "description": "Nombre {freq} de jours où la précipitation quotidienne est sous {thresh}.", - "title": "Jours secs", + "title": "Nombre de jours secs", "abstract": "Nombre de jours où la précipitation quotidienne est sous un seuil." }, "HOT_SPELL_FREQUENCY": { - "long_name": "Nombre de périodes chaudes (Tmax > {thresh_tasmax} durant >= {window} jours)", - "description": "Nombre {freq} de périodes chaudes. Une période chaude se produit lorsque la température maximale quotidienne excède {thresh_tasmax} durant au moins {window} jours.", + "long_name": "Nombre de périodes chaudes", + "description": "Nombre {freq} de périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède {thresh_tasmax} durant au moins {window} jours.", "title": "Fréquences des périodes chaudes", - "abstract": "Nombre de périodes chaudes dans un période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède un seuil spécifique durant un minimum de jours." + "abstract": "Nombre de périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède un seuil spécifique durant un minimum de jours." }, "LAST_SPRING_FROST": { "long_name": "Jour de l'année du dernier gel printanier", @@ -648,10 +648,10 @@ "abstract": "Dernier jour où la température est inférieur à un seuil durant un certain nombre de jours, limité par une date finale." }, "HOT_SPELL_MAX_LENGTH": { - "long_name": "Longueur maximale des périodes chaudes (Tmax > {thresh_tasmax} durant >= {window} jours)", - "description": "Longueur maximale {freq:f} des périodes chaudes. Une période chaude se produit lorsque la température maximale quotidienne excède {thresh_tasmax} durant au moins {window} jours.", + "long_name": "Longueur maximale des périodes chaudes", + "description": "Longueur maximale {freq:f} des périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède {thresh_tasmax} durant au moins {window} jours.", "title": "Longueur maximale des périodes chaudes", - "abstract": "Longueur maximale des périodes chaudes dans une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède un seuil spécifique durant un minimum de jours." + "abstract": "Longueur maximale des périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède un seuil spécifique durant un minimum de jours." }, "CONSECUTIVE_FROST_FREE_DAYS": { "long_name": "Nombre maximal de jours consécutifs avec Tmin >= {thresh}", diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index a8a08f52d..435c2c540 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -171,7 +171,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): long_name="Number of days with daily minimum and daily maximum temperatures above given thresholds", description="{freq} number of days where daily maximum temperature exceeds {thresh_tasmax} and minimum temperature " "exceeds {thresh_tasmin}.", - abstract="Number of days with daily maximum and minimum temperatures above given thresholds", + abstract="Number of days with daily maximum and minimum temperatures above given thresholds.", cell_methods="", compute=indices.tx_tn_days_above, ) @@ -184,7 +184,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): standard_name="heat_wave_events", long_name="Number of heat wave events", description="{freq} number of heat wave events within a given period. A heat wave occurs when daily minimum and " - "maximum temperatures exceed thresh_tasmin} and {thresh_tasmax}, respectively, over at least {window} days.", + "maximum temperatures exceed {thresh_tasmin} and {thresh_tasmax}, respectively, over at least {window} days.", abstract="Number of heat waves. A heat wave occurs when daily minimum and maximum temperatures exceed given " "thresholds for a number of days.", cell_methods="", @@ -242,153 +242,179 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): hot_spell_frequency = Temp( + title="Hot spell frequency", identifier="hot_spell_frequency", units="", standard_name="hot_spell_events", long_name="Number of hot spell events", - description="{freq} number of hot spell events over a given period. An event occurs when the maximum daily " - "temperature exceeds a specific threshold: (Tmax > {thresh_tasmax}) over a minimum number of days ({window}).", + description="{freq} number of hot spell events within a given period. A hot spell event occurs when the maximum " + "daily temperature exceeds {thresh_tasmax} over at least {window} days.", + abstract="Number of hot spells events within a given period. A hot spell occurs when the daily maximum temperature" + "exceeds a given threshold for a minimum number of days.", cell_methods="", keywords="health,", compute=indices.hot_spell_frequency, ) hot_spell_max_length = Temp( + title="Hot spell maximum length", identifier="hot_spell_max_length", units="days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", long_name="Maximum length of hot spell events", - description="{freq} maximum length of hot spell events occurring in a given period. An event occurs when the " - "maximum daily temperature exceeds a specific threshold: (Tmax > {thresh_tasmax}) over a minimum number of days " - "({window}).", + description="{freq} maximum length of hot spell events occurring within a given period. " + "A hot spell event occurs when the maximum daily temperature exceeds {thresh_tasmax} over at least {window} days.", + abstract="Maximum length of hot spells events within a given period. A hot spell occurs when the daily maximum " + "temperature exceeds a given threshold for a minimum number of days.", cell_methods="", keywords="health,", compute=indices.hot_spell_max_length, ) tg_mean = TempWithIndexing( + title="Mean temperature", identifier="tg_mean", units="K", standard_name="air_temperature", long_name="Mean daily mean temperature", description="{freq} mean of daily mean temperature.", + abstract="Mean of daily mean temperature.", cell_methods="time: mean over days", compute=indices.tg_mean, ) tg_max = TempWithIndexing( + title="Maximum of mean temperature", identifier="tg_max", units="K", standard_name="air_temperature", long_name="Maximum daily mean temperature", description="{freq} maximum of daily mean temperature.", + abstract="Maximum of daily mean temperature.", cell_methods="time: maximum over days", compute=indices.tg_max, ) tg_min = TempWithIndexing( + title="Minimum of mean temperature", identifier="tg_min", units="K", standard_name="air_temperature", long_name="Minimum daily mean temperature", description="{freq} minimum of daily mean temperature.", + abstract="Minimum of daily mean temperature.", cell_methods="time: minimum over days", compute=indices.tg_min, ) tx_mean = TempWithIndexing( + title="Mean of maximum temperature", identifier="tx_mean", units="K", standard_name="air_temperature", long_name="Mean daily maximum temperature", description="{freq} mean of daily maximum temperature.", + abstract="Mean of daily maximum temperature.", cell_methods="time: mean over days", compute=indices.tx_mean, ) tx_max = TempWithIndexing( + title="Maximum temperature", identifier="tx_max", units="K", standard_name="air_temperature", long_name="Maximum daily maximum temperature", description="{freq} maximum of daily maximum temperature.", + abstract="Maximum of daily maximum temperature.", cell_methods="time: maximum over days", compute=indices.tx_max, ) tx_min = TempWithIndexing( + title="Minimum of maximum temperature", identifier="tx_min", units="K", standard_name="air_temperature", long_name="Minimum daily maximum temperature", description="{freq} minimum of daily maximum temperature.", + abstract="Minimum of daily maximum temperature.", cell_methods="time: minimum over days", compute=indices.tx_min, ) tn_mean = TempWithIndexing( + title="Mean of minimum temperature", identifier="tn_mean", units="K", standard_name="air_temperature", long_name="Mean daily minimum temperature", description="{freq} mean of daily minimum temperature.", + abstract="Mean of daily minimum temperature.", cell_methods="time: mean over days", compute=indices.tn_mean, ) tn_max = TempWithIndexing( + title="Maximum of minimum temperature", identifier="tn_max", units="K", standard_name="air_temperature", long_name="Maximum daily minimum temperature", description="{freq} maximum of daily minimum temperature.", + abstract="Maximum of daily minimum temperature.", cell_methods="time: maximum over days", compute=indices.tn_max, ) tn_min = TempWithIndexing( + title="Minimum temperature", identifier="tn_min", units="K", standard_name="air_temperature", long_name="Minimum daily minimum temperature", description="{freq} minimum of daily minimum temperature.", + abstract="Minimum of daily minimum temperature.", cell_methods="time: minimum over days", compute=indices.tn_min, ) daily_temperature_range = TempWithIndexing( - title="Mean of daily temperature range.", + title="Mean of daily temperature range", identifier="dtr", units="K", standard_name="air_temperature", long_name="Mean diurnal temperature range", description="{freq} mean diurnal temperature range.", cell_methods="time range within days time: mean over days", + abstract="The average difference between the daily maximum and minimum temperatures.", compute=indices.daily_temperature_range, parameters=dict(op="mean"), ) max_daily_temperature_range = TempWithIndexing( - title="Maximum of daily temperature range.", + title="Maximum of daily temperature range", identifier="dtrmax", units="K", standard_name="air_temperature", long_name="Maximum diurnal temperature range", description="{freq} maximum diurnal temperature range.", cell_methods="time range within days time: max over days", + abstract="The maximum difference between the daily maximum and minimum temperatures.", compute=indices.daily_temperature_range, parameters=dict(op="max"), ) daily_temperature_range_variability = TempWithIndexing( + title="Variability of daily temperature range", identifier="dtrvar", units="K", standard_name="air_temperature", long_name="Mean diurnal temperature range variability", description="{freq} mean diurnal temperature range variability (defined as the average day-to-day variation " - "in daily temperature range for the given time period)", - cell_methods="time range within days time: difference " - "over days time: mean over days", + "in daily temperature range for the given time period).", + abstract="The average day-to-day variation in daily temperature range.", + cell_methods="time range within days time: difference over days time: mean over days", compute=indices.daily_temperature_range_variability, ) From 582e72c2808180704365fe77ae470595f82c78e4 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 12 Aug 2022 12:30:38 -0400 Subject: [PATCH 026/106] fix formatting errors --- xclim/indicators/atmos/_temperature.py | 6 +++--- xclim/testing/tests/test_locales.py | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 435c2c540..c11a4002a 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -199,7 +199,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): standard_name="spell_length_of_days_with_air_temperature_above_threshold", long_name="Maximum length of heat wave events", description="{freq} maximum length of heat wave events occurring within a given period. " - "A heat wave occurs when daily minimum and maximum temperatures exceed thresh_tasmin} and {thresh_tasmax}, " + "A heat wave occurs when daily minimum and maximum temperatures exceed {thresh_tasmin} and {thresh_tasmax}, " "respectively, over at least {window} days.", abstract="Total duration of heat waves. A heat wave occurs when daily minimum and maximum temperatures exceed " "given thresholds for a number of days.", @@ -215,7 +215,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): standard_name="spell_length_of_days_with_air_temperature_above_threshold", long_name="Total length of heat wave events", description="{freq} total length of heat wave events occurring within a given period. " - "A heat wave occurs when daily minimum and maximum temperatures exceed thresh_tasmin} and {thresh_tasmax}, " + "A heat wave occurs when daily minimum and maximum temperatures exceed {thresh_tasmin} and {thresh_tasmax}, " "respectively, over at least {window} days.", abstract="Maximum length of heat waves. A heat wave occurs when daily minimum and maximum temperatures exceed " "given thresholds for a number of days.", @@ -232,7 +232,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): standard_name="heat_wave_index", long_name="Number of days that constitute heatwave events", description="{freq} total number of days that are part of a heatwave within a given period. " - "A heat wave occurs when daily minimum and maximum temperatures exceed thresh_tasmin} and {thresh_tasmax}, " + "A heat wave occurs when daily minimum and maximum temperatures exceed {thresh_tasmin} and {thresh_tasmax}, " "respectively, over at least {window} days.", abstract="Number of days that constitute heatwave events. A heat wave occurs when daily minimum and maximum " "temperatures exceed given thresholds for a number of days.", diff --git a/xclim/testing/tests/test_locales.py b/xclim/testing/tests/test_locales.py index 53ccbc2d6..8a8e9d6fe 100644 --- a/xclim/testing/tests/test_locales.py +++ b/xclim/testing/tests/test_locales.py @@ -43,7 +43,9 @@ def test_local_dict(tmp_path): loc, dic = xloc.get_local_dict("fr") assert loc == "fr" - assert dic["TG_MEAN"]["long_name"] == "Moyenne de la température quotidienne" + assert ( + dic["TG_MEAN"]["long_name"] == "Moyenne de la température moyenne quotidienne" + ) loc, dic = xloc.get_local_dict(esperanto) assert loc == "eo" @@ -62,7 +64,9 @@ def test_local_dict(tmp_path): loc, dic = xloc.get_local_dict(("fr", {"TX_MAX": {"long_name": "Fait chaud."}})) assert loc == "fr" assert dic["TX_MAX"]["long_name"] == "Fait chaud." - assert dic["TG_MEAN"]["long_name"] == "Moyenne de la température quotidienne" + assert ( + dic["TG_MEAN"]["long_name"] == "Moyenne de la température moyenne quotidienne" + ) def test_local_attrs_sing(): From 834d906b8824e509d687e6727e1096bbd925dab5 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 12 Aug 2022 12:52:39 -0400 Subject: [PATCH 027/106] fix heat wave index thresh reference --- xclim/data/fr.json | 4 ++-- xclim/indicators/atmos/_temperature.py | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 0ed1af3a4..e2faeaa92 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -309,7 +309,7 @@ }, "HEAT_WAVE_INDEX": { "long_name": "Nombre de jours de vague de chaleur", - "description": "Nombre {freq:m} de jours de vague de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", + "description": "Nombre {freq:m} de jours de vague de chaleur. Une vague de chaleur se produit lorsque la température maximale quotidienne excède {thresh} durant au moins {window} jours.", "title": "Indice de vague de chaleur", "abstract": "Nombre de jours de vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, @@ -462,7 +462,7 @@ "long_name": "Cycles de gel-dégel", "description": "Nombre {freq:m} de jours avec un gel-dégel quotidien : Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin}.", "title": "Nombre de jours avec un cycle de gel-dégel", - "abstract": "Le nombre de jours où Tmax est au-dessus d'un seuil et Tmin en dessous d'un seuil, habituellement 0 °C pour les deux." + "abstract": "Le nombre de jours où Tmax est au-dessus d'un seuil et Tmin en dessous d'un seuil, habituellement 0°C pour les deux." }, "COOLING_DEGREE_DAYS": { "long_name": "Degrés-jours de climatisation (Tmoy > {thresh})", diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index c11a4002a..21c22cb11 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -232,8 +232,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): standard_name="heat_wave_index", long_name="Number of days that constitute heatwave events", description="{freq} total number of days that are part of a heatwave within a given period. " - "A heat wave occurs when daily minimum and maximum temperatures exceed {thresh_tasmin} and {thresh_tasmax}, " - "respectively, over at least {window} days.", + "A heat wave occurs when daily maximum temperatures exceed {thresh} over at least {window} days.", abstract="Number of days that constitute heatwave events. A heat wave occurs when daily minimum and maximum " "temperatures exceed given thresholds for a number of days.", cell_methods="", From 31f26ba0d5cb085ee4b560d9e106f1bf8622a47e Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 12 Aug 2022 14:17:49 -0400 Subject: [PATCH 028/106] typo fixes --- xclim/data/fr.json | 2 +- xclim/testing/tests/test_formatting.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index e2faeaa92..d2caf97b0 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -311,7 +311,7 @@ "long_name": "Nombre de jours de vague de chaleur", "description": "Nombre {freq:m} de jours de vague de chaleur. Une vague de chaleur se produit lorsque la température maximale quotidienne excède {thresh} durant au moins {window} jours.", "title": "Indice de vague de chaleur", - "abstract": "Nombre de jours de vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." + "abstract": "Nombre de jours de vagues de chaleur. Une vague de chaleur se produit lorsque la température maximale quotidienne excèdent un seuil donné durant un certain nombre de jours." }, "TG": { "long_name": "Moyenne des températures maximales et minimales quotidennes", diff --git a/xclim/testing/tests/test_formatting.py b/xclim/testing/tests/test_formatting.py index b93f85bf4..adb592802 100644 --- a/xclim/testing/tests/test_formatting.py +++ b/xclim/testing/tests/test_formatting.py @@ -25,7 +25,7 @@ def test_prefix_attrs(): def test_indicator_docstring(): doc = heat_wave_frequency.__doc__.split("\n") - assert doc[0] == "Heat wave frequency. (realm: atmos)" + assert doc[0] == "Heat wave frequency (realm: atmos)" assert ( doc[5] == "Based on indice :py:func:`~xclim.indices._multivariate.heat_wave_frequency`." From 312545054a482eb53580b5f8cb5bb6ff670bc1af Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 17 Aug 2022 21:42:59 +0000 Subject: [PATCH 029/106] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- xclim/indicators/atmos/_temperature.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index fee87b3b2..7492a6d40 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -950,7 +950,7 @@ def cfcheck(self, tas, snd=None): "Computed with {method} formula (Summation of max((Tmin + Tmax)/2 - {thresh}, 0) between dynamically-determined " "growing season start and end dates. The 'bootsma' method uses a 10-day average temperature above {thresh} to " "identify a start date, while the 'qian' method uses a weighted mean average above {thresh} over 5 days to " - "determine start date. The end date of the growing season is the date of first fall frost (Tmin < 0°C). " + "determine start date. The end date of the growing season is the date of first fall frost (Tmin < 0°C). " "Original formula published in Bootsma et al. 2005.", abstract="Considers daily Tmin and Tmax with a base of {thresh} between dynamically-determined growing season start" "and end dates. The 'bootsma' method uses a 10-day average temperature above {thresh} to identify a start date, " From 3e8b76c9efde40a6040a2f974341e5b775fb84b1 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 17 Aug 2022 19:28:37 -0400 Subject: [PATCH 030/106] synchronize temperature indicators, part 2 --- xclim/data/fr.json | 95 +++++++------ xclim/indicators/atmos/_temperature.py | 184 ++++++++++++++++++------- 2 files changed, 180 insertions(+), 99 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index d2caf97b0..59a84db22 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -435,64 +435,63 @@ }, "COLD_SPELL_DURATION_INDEX": { "long_name": "Indice de durée des vagues de froid", - "description": "Nombre {freq:m} de jours de vague de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous le {per_base_thresh} centile durant au moins {window} jours consécutifs. Le {per_base_thresh} centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "description": "{freq} nombre de jours avec au moins {window} jours consécutifs où la température minimale quotidienne est inférieure au(x) {tasmin_per_thresh} centile. Une vague de froid se produit lorsque la température minimale quotidienne est inférieure à un percentile donné pendant au moins {window} jours consécutifs.", "title": "Indice de durée des vagues de froid", - "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous le {per_base_thresh} centile durant au moins {window} nombre de jours consécutifs." + "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est inférieure à un percentile donné pendant au moins {window} jours consécutifs." }, "COLD_SPELL_FREQUENCY": { - "long_name": "Nombre de vagues de froid", + "long_name": "Fréquence des vagues de froid", "description": "Nombre {freq:m} de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous {thresh} durant au moins {window} jours consécutifs.", "title": "Nombre de vagues de froid", "abstract": "Nombre de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous un seuil durant au moins un certain nombre de jours consécutifs." }, "COLD_SPELL_DAYS": { "long_name": "Jours de vagues de froid", - "description": "Nombre {freq:m} de jours de vague de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous {thresh} durant au moins {window} jours consécutifs.", - "title": "Jours de vague de froid", - "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous un seuil durant au moins un certain nombre de jours consécutifs." + "description": "Nombre {freq:m} de jours faisant partie d'une vague de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous {thresh} durant au moins {window} jours consécutifs.", + "title": "Nombre de jours faisant partie d'une vague de froid", + "abstract": "Nombre de jours faisant partie d'une vague de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous un seuil donné durant au moins un certain nombre de jours consécutifs." }, "COOL_NIGHT_INDEX": { "long_name": "Indice de fraîcheur des nuits", "description": "Moyenne {freq:f} de la température minimale quotidienne en septembre (hémisphère nord) ou en mars (hémisphère sud).", "title": "Indice de fraîcheur des nuits", - "comment": "Formule prise de Tonietto & Carbonneau, 2004 (10.1016/j.agrformet.2003.06.001).", "abstract": "Indicateur des conditions nycthermiques de maturation, qui correspond à la valeur moyenne de la température minimale de l'air sur les 30 jours précédant la date de récolte potentielle." }, "DLYFRZTHW": { - "long_name": "Cycles de gel-dégel", - "description": "Nombre {freq:m} de jours avec un gel-dégel quotidien : Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin}.", - "title": "Nombre de jours avec un cycle de gel-dégel", - "abstract": "Le nombre de jours où Tmax est au-dessus d'un seuil et Tmin en dessous d'un seuil, habituellement 0°C pour les deux." + "long_name": "Nombre de jours avec un cycle de gel-dégel", + "description": "Nombre {freq:m} de jours avec un gel-dégel quotidien (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin}).", + "title": "Cycles de gel-dégel", + "abstract": "Le nombre de jours où Tmax est au-dessus d'un seuil donné et Tmin en dessous d'un seuil donné, habituellement 0°C pour les deux." }, "COOLING_DEGREE_DAYS": { - "long_name": "Degrés-jours de climatisation (Tmoy > {thresh})", + "long_name": "Degrés-jours de climatisation", "description": "Cumul {freq:m} des degrés-jours de climatisation (Température au-dessus de {thresh}).", "title": "Degrés-jours de climatisation", - "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est au-dessus d'un seuil et que les immeubles doivent être réfrigérés." + "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est au-dessus d'un seuil donné et que les immeubles doivent être réfrigérés." }, "HEATING_DEGREE_DAYS": { - "long_name": "Degrés-jours de chauffage (Tmoy < {thresh})", + "long_name": "Degrés-jours de chauffage", "description": "Cumul {freq:m} des degrés-jours de chauffage (Température en dessous de {thresh}).", "title": "Degrés-jours de chauffage", - "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est sous un seuil et que les immeubles doivent être chauffés." + "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est sous un seuil donné et que les immeubles doivent être chauffés." }, "GROWING_DEGREE_DAYS": { - "long_name": "Degrés-jours de croissance (Tmoy > {thresh})", + "long_name": "Degrés-jours de croissance", "description": "Cumul {freq} des degrés-jours de croissance (Température au-dessus de {thresh}).", "title": "Degrés-jours de croissance", - "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est au-dessus d'un seuil." + "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est au-dessus d'un seuil donné." }, "FREEZING_DEGREE_DAYS": { - "long_name": "Degrés-jours de gel (Tmoy < {thresh})", + "long_name": "Degrés-jours de gel", "description": "Cumul {freq:m} des degrés-jours de gel (Température en dessous de {thresh}).", "title": "Degrés-jours de gel", - "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est sous un seuil." + "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est sous un seuil donné, habituellement 0°C." }, "THAWING_DEGREE_DAYS": { - "long_name": "Degrés-jours de dégel (Tmoy > {thresh})", + "long_name": "Degrés-jours de dégel", "description": "Cumul {freq} des degrés-jours de dégel (Température au-dessus de {thresh}).", "title": "Degrés-jours de dégel", - "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est au-dessus d'un seuil." + "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est au-dessus d'un seuil donné, habituellement 0°C." }, "BIOLOGICALLY_EFFECTIVE_DEGREE_DAYS": { "long_name": "Degrés-jours biologiquement actifs", @@ -516,46 +515,46 @@ "abstract": "indice climatique basé sur la température moyenne du mois le plus chaud et un coefficient basé sur la latitude pour tenir compte de la durée plus longue du jour favorisant les conditions de croissance. Développé spécifiquement pour la viticulture." }, "FRESHET_START": { - "long_name": "Jour de l'année du début de la crue nivale", - "description": "Jour de l'année du début de la crue nivale, défini comme le {window}e jour consécutif où la température excède {thresh}.", - "title": "Nième jour consécutif où la température excède un seuil", + "long_name": "Premier jour de dépassement constant du seuil de température", + "description": "jour de l'année du début de la crue printanière, défini comme le premier jour où un seuil de température de {thresh} est dépassé pendant au moins {window} jours.", + "title": "Jour de l'année du début de la crue nivale", "abstract": "Premier jour où la température excède un certain seuil depuis un certain nombre de jours consécutifs." }, "FROST_SEASON_LENGTH": { - "long_name": "Durée de la saison de gel (Tmin < 0°C)", - "description": "Durée de la saison de gel, définie comme la période où Tmin est sous 0°C sans redoux de {window} jours ou plus.", + "long_name": "Durée de la saison de gel", + "description": "Nombre {freq} de jours entre la première occurrence d'au moins {window} jours consécutifs avec une température minimale journalière inférieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs avec une température minimale journalière supérieure au point de congélation après {mid_date}.", "title": "Durée de la saison de gel", - "abstract": "Durée de la saison de gel, définie comme la période où Tmin est sous 0°C sans redoux de {window} jours ou plus." + "abstract": "Durée de la saison de gel, définie comme la période pendant laquelle la température minimale quotidnne est inférieure à 0°C sans fenêtre de dégel de plusieurs jours, le dégel se produisant après une date calendaire médiane." }, "FROST_DAYS": { - "long_name": "Nombre de jours de gel (Tmin < {thresh})", + "long_name": "Nombre de jours de gel", "description": "Nombre {freq:m} de jours où la température minimale quotidienne est sous {thresh}.", "title": "Nombre de jours de gel", - "abstract": "Nombre de jours où la température minimale quotidienne est sous un seuil." + "abstract": "Nombre de jours où la température minimale quotidienne est sous un seuil donné." }, "ICE_DAYS": { - "long_name": "Nombre de jours de glace (Tmax < {thresh})", + "long_name": "Nombre de jours de glace", "description": "Nombre {freq:m} de jours où la température maximale quotidienne est sous {thresh}.", "title": "Nombre de jours de glace", - "abstract": "Nombre de jours où la température maximale quotidienne est sous un seuil." + "abstract": "Nombre de jours où la température maximale quotidienne est sous 0°C." }, "CONSECUTIVE_FROST_DAYS": { "long_name": "Durée maximale des périodes de gel (Tmin < 0°C)", - "description": "Durée maximale {freq:f} des périodes où la température minimale quotidienne est sous 0°C.", + "description": "Durée maximale {freq:f} des périodes où la température minimale quotidienne est sous {thresh}.", "title": "Durée maximale des périodes de gel (Tmin < 0°C)", "abstract": "Durée maximale des périodes consécutives où la température minimale quotidienne est sous 0°C." }, "FROST_FREE_SEASON_LENGTH": { "long_name": "Durée de la saison sans gel", - "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs où la température quotidienne moyenne dépasse {thresh} et la première occurrence (après le {mid_date}) d'au moins {window} jours consécutifs où la température est sous {thresh}.", + "description": "Nombre {freq} de jours entre la première occurrence d'au moins {window} jours consécutifs avec une température minimale journalière supérieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs avec une température minimale journalière inférieure au point de congélation après {mid_date}.", "title": "Durée de la saison sans gel", - "abstract": "Nombre de jours entre la première série de N jours avec une température moyenne quotidienne au-dessus d'un seuil et la première série de N jours avec une température moyenne quotidienne sous ce même seuil." + "abstract": "Durée de la saison sans gel, définie comme la période pendant laquelle la température minimale quotidnne est supérieure à 0°C sans fenêtre de gel de plusieurs jours, le gel se produisant après une date calendaire médiane." }, "FROST_FREE_SEASON_START": { - "long_name": "Jour de l'année du début de la saison sans gel", + "long_name": "Premier jour de dépassement constant du seuil de température", "description": "Jour de l'année du début de la saison sans gel, défini comme le {window}e jour consécutif où la température excède {thresh}.", - "title": "Nième jour consécutif où la température excède un seuil", - "abstract": "Premier jour où la température excède un certain seuil depuis un certain nombre de jours consécutifs." + "title": "Jour de l'année du début de la saison sans gel", + "abstract": "Premier jour où la température excède un certain seuil donné depuis un certain nombre de jours consécutifs." }, "GROWING_SEASON_LENGTH": { "long_name": "Durée de la saison de croissance", @@ -654,10 +653,10 @@ "abstract": "Longueur maximale des périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède un seuil spécifique durant un minimum de jours." }, "CONSECUTIVE_FROST_FREE_DAYS": { - "long_name": "Nombre maximal de jours consécutifs avec Tmin >= {thresh}", + "long_name": "Nombre maximal de jours consécutifs avec Tmin supérieure à 0°C", "description": "Nombre maximal {freq} de jours consécutifs où la température minimale quotidienne excède ou est égale à {thresh}.", - "title": "Nombre maximal de jours consécutifs sans gel (Tmin >= 0℃)", - "abstract": "La nombre maximal de jours consécutifs sans gel: où la température minimale quotidienne est au-dessus ou égale à un seuil." + "title": "Nombre maximal de jours consécutifs sans gel", + "abstract": "Nombre maximal de jours consécutifs sans gel où la température minimale quotidienne est au-dessus ou égale à 0°C." }, "GROWING_SEASON_END": { "long_name": "Jour de l'année de la fin de la saison de croissance", @@ -669,7 +668,7 @@ "long_name": "Jour de l'année de la fin de la saison sans gel", "description": "Jour de l'année de la fin de la saison sans gel. La saison sans gel est définie comme l'intervalle entre la première série de {window} jours où la température quotidienne est au-dessus de {thresh} et la première série (après le {mid_date}) de {window} jours où elle est sous {thresh}.", "title": "Fin de la saison sans gel", - "abstract": "Jour de l'année de la fin de la saison sans gél. La saison sans gel est définie comme l'intervalle entre la première série de N jours où la température quotidienne est au-dessus d'un seuil et la première série (après une certaine date) de N jours où elle est sous ce même seuil." + "abstract": "Premier jour où la température est inférieure à un certain seuil donné depuis un certain nombre de jours consécutifs." }, "FWI": { "description": "L'IFM est formé de six composantes qui tiennent compte des effets de la teneur en eau des combustibles et des conditions météorologiques sur le comportement du feu.", @@ -931,20 +930,20 @@ "FREEZETHAW_SPELL_FREQUENCY": { "title": "Fréquence des événements de gel-dégel quotidien", "abstract": "Nombre de périodes de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", - "description": "Fréquence {freq:f} des événements de gel-dégel quotidiens : Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consecutif(s).", + "description": "Fréquence {freq:f} des événements de gel-dégel quotidiens (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consecutif(s)).", "long_name": "Fréquence {freq:f} des événements de gel-dégel quotidien" }, "FREEZETHAW_SPELL_MAX_LENGTH": { - "title": "Durée maximale d'une période de jours consécutifs avec un gel-dégel", + "title": "Durée maximale des séries des événements de gel-dégel quotidien", "abstract": "Durée maximale des périodes de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", - "description": "Durée maximale {freq:f} des événements de gel-dégel quotidien : Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consecutif(s).", - "long_name": "Durée maximale {freq:f} des événements de gel-dégel quotidien" + "description": "Durée maximale {freq:f} des séries des événements de gel-dégel quotidiens (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consecutif(s)).", + "long_name": "Durée maximale {freq:f} des séries des événements de gel-dégel quotidien" }, "FREEZETHAW_SPELL_MEAN_LENGTH": { - "title": "Durée moyenne d'une période de jours consécutifs avec un gel-dégel", + "title": "Durée moyenne des séries des événements de gel-dégel quotidien", "abstract": "Durée moyenne des périodes de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", - "description": "Durée moyenne {freq:f} des événements de gel-dégel quotidien : Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consecutif(s).", - "long_name": "Durée moyenne {freq:f} des événements de gel-dégel quotidien" + "description": "Durée moyenne {freq:f} des séries des événements de gel-dégel quotidien (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consecutif(s)).", + "long_name": "Durée moyenne {freq:f} des séries des événements de gel-dégel quotidien" }, "WIND_CHILL": { "title": "Facteur éolien", diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 7492a6d40..675192335 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -418,71 +418,85 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): ) extreme_temperature_range = TempWithIndexing( + title="Extreme temperature range", identifier="etr", units="K", standard_name="air_temperature", long_name="Intra-period extreme temperature range", - description="{freq} range between the maximum of daily max temperature " - "(tx_max) and the minimum of daily min temperature (tn_min)", + description="{freq} range between the maximum of daily maximum temperature (tx_max) and the minimum of daily" + "minimum temperature (tn_min).", + abstract="The maximum of the maximum temperature minus the minimum of the minimum temperature.", compute=indices.extreme_temperature_range, ) cold_spell_duration_index = Temp( + title="Cold spell duration index", identifier="cold_spell_duration_index", var_name="csdi_{window}", units="days", standard_name="cold_spell_duration_index", long_name="Number of days part of a percentile-defined cold spell", description="{freq} number of days with at least {window} consecutive days where the daily minimum temperature " - "is below the {tasmin_per_thresh}th percentile(s). A {tasmin_per_window} day(s) window, centered on each calendar " - "day in the {tasmin_per_period} period, is used to compute the {tasmin_per_thresh}th percentile(s).", + "is below the {tasmin_per}th percentile. A cold spell occurs when the daily minimum temperature is below a given " + "percentile for at least {window} consecutive days.", + abstract="Number of days part of a percentile-defined cold spell. A cold spell occurs when the daily minimum " + "temperature is below a given percentile for at least {window} consecutive days.", cell_methods="", compute=indices.cold_spell_duration_index, ) cold_spell_days = Temp( + title="Cold spell days", identifier="cold_spell_days", units="days", standard_name="cold_spell_days", long_name="Number of days part of a cold spell", - description="{freq} number of days that are part of a cold spell, defined as {window} " - "or more consecutive days with mean daily " - "temperature below {thresh}.", + description="{freq} number of days that are part of a cold spell. A cold spell is defined as {window} or more " + "consecutive days with mean daily temperature below {thresh}.", + abstract="The number of days that are part of a cold spell. A cold spell is defined as a minimum number of " + "consecutive days with mean daily temperature below a given threshold.", cell_methods="", compute=indices.cold_spell_days, ) cold_spell_frequency = Temp( + title="Cold spell frequency", identifier="cold_spell_frequency", units="", standard_name="cold_spell_frequency", long_name="Number of cold spell events", - description="{freq} number cold spell events, defined as {window} or more consecutive days with mean daily " - "temperature below {thresh}.", + description="{freq} number cold spell events. A cold spell is defined as a minimum number of " + "consecutive days with mean daily temperature below a given threshold.", + abstract="The number of cold spell events. A cold spell is defined as a minimum number of consecutive days with " + "mean daily temperature below a given threshold.", cell_methods="", compute=indices.cold_spell_frequency, ) cool_night_index = Temp( + title="Cool night index", identifier="cool_night_index", units="degC", long_name="Cool night index", # FIXME: Section formatting will shift these month names to all lowercase. description="Mean minimum temperature for September (northern hemisphere) or March (southern hemisphere).", - cell_methods="time: mean over days", abstract="A night coolness variable which takes into account the mean minimum night temperatures during the " "month when ripening usually occurs beyond the ripening period.", + cell_methods="time: mean over days", allowed_periods=["A"], compute=indices.cool_night_index, ) daily_freezethaw_cycles = TempWithIndexing( + title="Daily freeze-thaw cycles", identifier="dlyfrzthw", units="days", - long_name="Freeze-thaw cycles", + long_name="Number of days with a freeze-thaw cycle", # FIXME: Section formatting will shift variable names to all lowercase. - description="{freq} number of days with a diurnal freeze-thaw cycle (Tmax > {thresh_tasmax} and " - "Tmin <= {thresh_tasmin}).", + description="{freq} number of days with a diurnal freeze-thaw cycle (Tmax > {thresh_tasmax} and Tmin <= " + "{thresh_tasmin}).", + abstract="The number of days with a freeze-thaw cycle. A freeze-thaw cycle is defined as a day where Tmax is above " + "a given threshold and Tmin is below a given threshold, usually 0°C for both.", cell_methods="", compute=indices.multiday_temperature_swing, parameters={ @@ -495,13 +509,15 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): freezethaw_spell_frequency = Temp( + title="Freeze-thaw spell frequency", identifier="freezethaw_spell_frequency", - title="Frequency of freeze-thaw spells", units="days", - long_name="Frequency of freeze-thaw spells", + long_name="Frequency of daily freeze-thaw spells", # FIXME: Section formatting will shift variable names to all lowercase. description="{freq} number of freeze-thaw spells (Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}) " "for at least {window} consecutive day(s).", + abstract="Frequency of daily freeze-thaw spells. A freeze-thaw spell is defined as a number of consecutive days " + "where Tmax is above a given threshold and Tmin is below a given threshold, usually 0°C for both.", cell_methods="", compute=indices.multiday_temperature_swing, parameters={ @@ -513,13 +529,15 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): freezethaw_spell_mean_length = Temp( + title="Freeze-thaw spell mean length", identifier="freezethaw_spell_mean_length", - title="Average length of freeze-thaw spells", units="days", - long_name="Average length of freeze-thaw spells", + long_name="Average length of daily freeze-thaw spells", # FIXME: Section formatting will shift variable names to all lowercase. description="{freq} average length of freeze-thaw spells (Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}) " "for at least {window} consecutive day(s).", + abstract="Average length of daily freeze-thaw spells. A freeze-thaw spell is defined as a number of consecutive " + "days where Tmax is above a given threshold and Tmin is below a given threshold, usually 0°C for both.", cell_methods="", compute=indices.multiday_temperature_swing, parameters={ @@ -531,13 +549,15 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): freezethaw_spell_max_length = Temp( - identifier="freezethaw_spell_max_length", title="Maximal length of freeze-thaw spells", + identifier="freezethaw_spell_max_length", units="days", long_name="Maximal length of freeze-thaw spells", # FIXME: Section formatting will shift variable names to all lowercase. description="{freq} maximal length of freeze-thaw spells (Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}) " "for at least {window} consecutive day(s).", + abstract="Maximal length of daily freeze-thaw spells. A freeze-thaw spell is defined as a number of consecutive " + "days where Tmax is above a given threshold and Tmin is below a threshold, usually 0°C for both.", cell_methods="", compute=indices.multiday_temperature_swing, parameters={ @@ -549,143 +569,175 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): cooling_degree_days = TempWithIndexing( + title="Cooling degree days", identifier="cooling_degree_days", units="K days", standard_name="integral_of_air_temperature_excess_wrt_time", - long_name="Cooling degree days (Tmean > threshold)", - description="{freq} cooling degree days above {thresh}.", + long_name="Cooling degree days", + description="{freq} cumulative cooling degree days (mean temperature above {thresh}).", + abstract="The cumulative degree days for days when the average temperature is above a given threshold and buildings must " + "be air conditioned.", cell_methods="time: sum over days", compute=indices.cooling_degree_days, parameters={"thresh": {"default": "18.0 degC"}}, ) heating_degree_days = TempWithIndexing( + title="Heating degree days", identifier="heating_degree_days", units="K days", standard_name="integral_of_air_temperature_deficit_wrt_time", - long_name="Heating degree days (Tmean < threshold)", - description="{freq} heating degree days below {thresh}.", + long_name="Heating degree days", + description="{freq} cumulative heating degree days (mean temperature below {thresh}).", + abstract="The cumulative degree days for days when the average temperature is below a given threshold and buildings must " + "be heated.", cell_methods="time: sum over days", compute=indices.heating_degree_days, parameters={"thresh": {"default": "17.0 degC"}}, ) growing_degree_days = TempWithIndexing( + title="Growing degree days", identifier="growing_degree_days", units="K days", standard_name="integral_of_air_temperature_excess_wrt_time", long_name="Growing degree days", - description="{freq} growing degree days above {thresh}.", + description="{freq} growing degree days (mean temperature above {thresh}).", + abstract="The cumulative degree days for days when the average temperature is above a given threshold.", cell_methods="time: sum over days", compute=indices.growing_degree_days, parameters={"thresh": {"default": "4.0 degC"}}, ) freezing_degree_days = TempWithIndexing( + title="Freezing degree days", identifier="freezing_degree_days", units="K days", standard_name="integral_of_air_temperature_deficit_wrt_time", - long_name="Freezing degree days (Tmean < threshold)", - description="{freq} freezing degree days below {thresh}.", + long_name="Freezing degree days", + description="{freq} freezing degree days (mean temperature below {thresh}).", + abstract="The cumulative degree days for days when the average temperature is below a given threshold, " + "typically 0°C.", cell_methods="time: sum over days", compute=indices.heating_degree_days, parameters={"thresh": {"default": "0 degC"}}, ) thawing_degree_days = TempWithIndexing( + title="Thawing degree days", identifier="thawing_degree_days", units="K days", standard_name="integral_of_air_temperature_excess_wrt_time", - long_name="Thawing degree days (degree days above 0°C)", - description="{freq} thawing degree days above 0°C.", + long_name="Thawing degree days", + description="{freq} thawing degree days (mean temperature above {thresh}).", + abstract="The cumulative degree days for days when the average temperature is above a given threshold, " + "typically 0°C.", cell_methods="time: sum over days", compute=indices.growing_degree_days, parameters={"thresh": {"default": "0 degC"}}, ) freshet_start = Temp( + title="Day of year of spring freshet start", identifier="freshet_start", units="", standard_name="day_of_year", - long_name="Day of year of spring freshet start", + long_name="First day consistently exceeding threshold temperature", description="Day of year of spring freshet start, defined as the first day a temperature threshold of {thresh} " "is exceeded for at least {window} days.", + abstract="First day when the temperature exceeds a certain threshold for a given number of consecutive days", compute=indices.freshet_start, ) frost_days = TempWithIndexing( + title="Frost days", identifier="frost_days", units="days", standard_name="days_with_air_temperature_below_threshold", long_name="Number of frost days", - description="{freq} number of days with minimum daily temperature below {thresh}.", + description="{freq} number of days where the daily minimum temperature is below {thresh}.", + abstract="Number of days where the daily minimum temperature is below a given threshold", cell_methods="time: sum over days", compute=indices.frost_days, ) frost_season_length = Temp( + title="Frost season length", identifier="frost_season_length", units="days", standard_name="days_with_air_temperature_below_threshold", long_name="Length of the frost season", description="{freq} number of days between the first occurrence of at least {window} consecutive days with " - "minimum daily temperature below frezzing and the first occurrence of at least {window} consecutive days with " + "minimum daily temperature below freezing and the first occurrence of at least {window} consecutive days with " "minimum daily temperature above freezing after {mid_date}.", + abstract="Duration of the freezing season, defined as the period when the daily minimum temperature is below 0°C " + "without a thawing window of days, with the thaw occurring after a median calendar date", cell_methods="time: sum over days", compute=indices.frost_season_length, parameters=dict(thresh="0 degC"), ) last_spring_frost = Temp( + title="Last spring frost", identifier="last_spring_frost", units="", standard_name="day_of_year", long_name="Day of year of last spring frost", description="Day of year of last spring frost, defined as the last day a minimum temperature " "threshold of {thresh} is not exceeded before a given date.", + cell_methods="", compute=indices.last_spring_frost, ) first_day_below = Temp( + title="First day below", identifier="first_day_below", units="", standard_name="day_of_year", long_name="First day of year with temperature below threshold", description="First day of year with temperature below {thresh} for at least {window} days.", + cell_methods="", compute=indices.first_day_below, ) first_day_above = Temp( + title="First day above", identifier="first_day_above", units="", standard_name="day_of_year", long_name="First day of year with temperature above threshold", description="First day of year with temperature above {thresh} for at least {window} days.", + cell_methods="", compute=indices.first_day_above, ) ice_days = TempWithIndexing( + title="Ice days", identifier="ice_days", standard_name="days_with_air_temperature_below_threshold", units="days", long_name="Number of ice days", - description="{freq} number of days with maximum daily temperature below {thresh}.", + description="{freq} number of days where the maximum daily temperature is below {thresh}.", + abstract="Number of days where the daily maximum temperature is below 0°C", cell_methods="time: sum over days", compute=indices.ice_days, ) consecutive_frost_days = Temp( + title="Consecutive frost days", identifier="consecutive_frost_days", units="days", standard_name="spell_length_of_days_with_air_temperature_below_threshold", long_name="Maximum number of consecutive frost days", - description="{freq} maximum number of consecutive days with minimum daily temperature below {thresh}.", + description="{freq} maximum number of consecutive days where minimum daily temperature is below {thresh}.", + abstract="Maximum number of consecutive days where the daily minimum temperature is below 0°C", cell_methods="time: maximum over days", compute=indices.maximum_consecutive_frost_days, ) frost_free_season_length = Temp( + title="Frost free season length", identifier="frost_free_season_length", units="days", standard_name="days_with_air_temperature_above_threshold", @@ -693,45 +745,57 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): description="{freq} number of days between the first occurrence of at least {window} consecutive days " "with minimum daily temperature above or at the freezing point and the first occurrence of at least " "{window} consecutive days with minimum daily temperature below freezing after {mid_date}.", + abstract="Duration of the frost free season, defined as the period when the daily minimum temperature is above 0°C " + "without a freezing window of days, with freezing occurring after a median calendar date.", cell_methods="time: sum over days", compute=indices.frost_free_season_length, parameters={"thresh": {"default": "0 degC"}}, ) frost_free_season_start = Temp( + title="Frost free season start", identifier="frost_free_season_start", units="", standard_name="day_of_year", long_name="Day of year of frost free season start", - description="Day of year of beginning of frost free season, defined as the first day a minimum temperature " - "threshold of {thresh} is equal or exceeded for at least {window} days.", + description="Day of the year of the beginning of the frost-free season, defined as the {window}th consecutive day " + "when the temperature exceeds {thresh}.", + abstract="First day when the temperature exceeds a given threshold for a given number of consecutive days", compute=indices.frost_free_season_start, parameters={"thresh": {"default": "0 degC"}}, ) frost_free_season_end = Temp( + title="Frost free season end", identifier="frost_free_season_end", units="", standard_name="day_of_year", long_name="Day of year of frost free season end", - description="Day of year of end of frost free season, defined as the first day minimum temperatures below a " - "threshold of {thresh}, after a run of days above this threshold, for at least {window} days.", + description="Day of the year of the end of the frost-free season, defined as the interval between the first set of " + "{window} days when the daily temperature is above {thresh} and the first set (after {mid_date}) of {window} days " + "when it is below {thresh}.", + abstract="First day when the temperature is below a given threshold for a given number of consecutive days after " + "a median calendar date.", cell_methods="", compute=indices.frost_free_season_end, parameters={"thresh": {"default": "0 degC"}}, ) maximum_consecutive_frost_free_days = Temp( + title="Maximum consecutive frost free days", + # FIXME: shouldn't this be `maximum_`? Breaking changes needed. identifier="consecutive_frost_free_days", units="days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", - long_name="Maximum number of consecutive days with Tmin >= threshold", + long_name="Maximum number of consecutive days with Tmin at or above 0°C", description="{freq} maximum number of consecutive days with minimum daily temperature above or equal to {thresh}.", + abstract="Maximum number of consecutive frost-free days: where the daily minimum temperature is above or equal to 0°C", cell_methods="time: maximum over days", compute=indices.maximum_consecutive_frost_free_days, ) growing_season_start = Temp( + title="Growing season start", identifier="growing_season_start", units="", standard_name="day_of_year", @@ -744,6 +808,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): ) growing_season_length = Temp( + title="Growing season length", identifier="growing_season_length", units="days", standard_name="growing_season_length", @@ -757,6 +822,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): ) growing_season_end = Temp( + title="Growing season end", identifier="growing_season_end", units="", standard_name="day_of_year", @@ -769,6 +835,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): ) tropical_nights = TempWithIndexing( + title="Tropical nights", identifier="tropical_nights", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", @@ -781,6 +848,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): ) tg90p = TempWithIndexing( + title="Days with mean temperature above the 90th percentile", identifier="tg90p", units="days", standard_name="days_with_air_temperature_above_threshold", @@ -793,6 +861,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): ) tg10p = TempWithIndexing( + title="Days with mean temperature below the 10th percentile", identifier="tg10p", units="days", standard_name="days_with_air_temperature_below_threshold", @@ -805,6 +874,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): ) tx90p = TempWithIndexing( + title="Days with maximum temperature above the 90th percentile", identifier="tx90p", units="days", standard_name="days_with_air_temperature_above_threshold", @@ -817,6 +887,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): ) tx10p = TempWithIndexing( + title="Days with maximum temperature below the 10th percentile", identifier="tx10p", units="days", standard_name="days_with_air_temperature_below_threshold", @@ -829,6 +900,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): ) tn90p = TempWithIndexing( + title="Days with minimum temperature above the 90th percentile", identifier="tn90p", units="days", standard_name="days_with_air_temperature_above_threshold", @@ -841,6 +913,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): ) tn10p = TempWithIndexing( + title="Days with minimum temperature below the 10th percentile", identifier="tn10p", units="days", standard_name="days_with_air_temperature_below_threshold", @@ -854,6 +927,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): degree_days_exceedance_date = Temp( + title="Degree day exceedance date", identifier="degree_days_exceedance_date", long_name="Day of year when cumulative degree days exceed threshold.", units="", @@ -866,6 +940,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): warm_spell_duration_index = Temp( + title="Warm spell duration index", identifier="warm_spell_duration_index", long_name="Number of days part of a percentile-defined warm spell", description="{freq} number of days with at least {window} consecutive days " @@ -880,6 +955,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): maximum_consecutive_warm_days = Temp( + title="Maximum consecutive warm days", identifier="maximum_consecutive_warm_days", long_name="Maximum consecutive warm days", description="{freq} longest spell of consecutive days with Tmax above {thresh}.", @@ -907,16 +983,17 @@ def cfcheck(self, tas, snd=None): huglin_index = Temp( + title="Huglin heliothermal index", identifier="huglin_index", units="", long_name="Huglin heliothermal index", description="Heat-summation index for agroclimatic suitability estimation, developed specifically for viticulture. " "Computed with {method} formula (Summation of ((Tmin + Tmax)/2 - {thresh}) * k), where coefficient (`k`) is a " - "latitude-based day-length for days typically between 1 April and 30 September. " - "Metric originally published in Huglin (1978). Day-length coefficient based on Hall & Jones (2010).", + "latitude-based day-length for days typically between 1 April and 30 September.", abstract="Heat-summation index for agroclimatic suitability estimation, developed specifically for viticulture. " - "Considers daily Tmin and Tmax with a base of {thresh}, typically between 1 April and 30 September, and " - "integrates a day-length coefficient calculation for higher latitudes." + "Considers daily Tmin and Tmax with a given base threshold, typically between 1 April and 30 September, and " + "integrates a day-length coefficient calculation for higher latitudes. " + "Metric originally published in Huglin (1978). Day-length coefficient based on Hall & Jones (2010).", cell_methods="", var_name="hi", compute=indices.huglin_index, @@ -925,16 +1002,16 @@ def cfcheck(self, tas, snd=None): biologically_effective_degree_days = Temp( + title="Biologically effective degree days", identifier="biologically_effective_degree_days", units="K days", long_name="Biologically effective degree days", description="Heat-summation index for agroclimatic suitability estimation, developed specifically for viticulture. " "Computed with {method} formula (Summation of min((max((Tmin + Tmax)/2 - {thresh_tasmin}, 0) * k) + TR_adj, 9°C), " - "where coefficient (`k`) is a latitude-based day-length for days between {start_date} and {end_date}). " - "Original formula published in Gladstones, 1992." - abstract="Considers daily Tmin and Tmax with a base of {thresh_tasmin} between 1 April and 31 October, with a maximum daily " - "value for degree days (typically 9°C), and integrates a modification coefficient for latitudes " - "between 40°N and 50°N as well as swings in daily temperature range. ", + "where coefficient (`k`) is a latitude-based day-length for days between {start_date} and {end_date}).", + abstract="Considers daily Tmin and Tmax with a given base threshold between 1 April and 31 October, with a maximum " + "daily value for degree days (typically 9°C), and integrates a modification coefficient for latitudes between " + "40°N and 50°N as well as swings in daily temperature range. Original formula published in Gladstones, 1992.", cell_methods="", var_name="bedd", compute=indices.biologically_effective_degree_days, @@ -943,6 +1020,7 @@ def cfcheck(self, tas, snd=None): effective_growing_degree_days = Temp( + title="Effective growing degree days", identifier="effective_growing_degree_days", units="K days", long_name="Effective growing degree days", @@ -950,12 +1028,12 @@ def cfcheck(self, tas, snd=None): "Computed with {method} formula (Summation of max((Tmin + Tmax)/2 - {thresh}, 0) between dynamically-determined " "growing season start and end dates. The 'bootsma' method uses a 10-day average temperature above {thresh} to " "identify a start date, while the 'qian' method uses a weighted mean average above {thresh} over 5 days to " + "determine start date. The end date of the growing season is the date of first fall frost (Tmin < 0°C). ", + abstract="Considers daily Tmin and Tmax with a given base threshold between dynamically-determined growing season " + "start and end dates. The 'bootsma' method uses a 10-day mean temperature above a given threshold to identify a " + "start date, while the 'qian' method uses a weighted mean temperature above a given threshold over 5 days to " "determine start date. The end date of the growing season is the date of first fall frost (Tmin < 0°C). " "Original formula published in Bootsma et al. 2005.", - abstract="Considers daily Tmin and Tmax with a base of {thresh} between dynamically-determined growing season start" - "and end dates. The 'bootsma' method uses a 10-day average temperature above {thresh} to identify a start date, " - "while the 'qian' method uses a weighted mean average above {thresh} over 5 days to determine start date. " - "The end date of the growing season is the date of first fall frost (Tmin < 0°C)." cell_methods="", var_name="egdd", compute=indices.effective_growing_degree_days, @@ -963,12 +1041,16 @@ def cfcheck(self, tas, snd=None): latitude_temperature_index = Temp( + title="Latitude temperature index", identifier="latitude_temperature_index", units="", long_name="Latitude-temperature index", description="A climate indice based on mean temperature of the warmest month and a latitude-based coefficient to " "account for longer day-length favouring growing conditions. Developed specifically for viticulture. " - "Mean temperature of warmest month * ({lat_factor} - latitude). " + "Mean temperature of warmest month * ({lat_factor} - latitude).", + abstract="A climate indice based on mean temperature of the warmest month and a latitude-based coefficient to " + "account for longer day-length favouring growing conditions. Developed specifically for viticulture. " + "Mean temperature of warmest month * (latitude_factor - latitude). " "Indice originally published in Jackson, D. I., & Cherry, N. J. (1988)", cell_methods="", allowed_periods=["A"], From 4e6c9f9a1e235a34f023aaef4ca39ffa7cc33a38 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 18 Aug 2022 17:57:01 -0400 Subject: [PATCH 031/106] synchronize temperature indicators, part 3 --- xclim/data/fr.json | 90 +++++++++++++------------- xclim/indicators/atmos/_temperature.py | 88 ++++++++++++++++--------- 2 files changed, 102 insertions(+), 76 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 59a84db22..dbfaca640 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -338,16 +338,16 @@ "abstract": "Moyenne de la température moyenne quotidienne." }, "TG10P": { - "long_name": "Nombre de jours où la température quotidienne est au-dessus du {per_base_thresh}e centile", - "description": "Nombre {freq:m} de jours où la température est au-dessus du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température est au-dessus du {per_base_thresh}e centile", - "abstract": "Nombre de jours où la température est au-dessus du {per_base_thresh}e centile" + "long_name": "Nombre de jours où la température quotidienne est sous du 10e centile", + "description": "Nombre {freq:m} de jours où la température est sous du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "title": "Nombre de jours où la température quotidienne est sous du 10e centile", + "abstract": "Nombre de jours où la température quotidienne est sous du 10e centile." }, "TG90P": { - "long_name": "Nombre de jours où la température quotidienne est au-dessus du {per_base_thresh}e centile", + "long_name": "Nombre de jours où la température quotidienne est au-dessus du 90e centile", "description": "Nombre {freq:m} de jours où la température est au-dessus du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température est au-dessus du {per_base_thresh}e centile", - "abstract": "Nombre de jours où la température est au-dessus du {per_base_thresh}e centile." + "title": "Nombre de jours où la température quotidienne est au-dessus du 90e centile", + "abstract": "Nombre de jours où la température quotidienne est au-dessus du 90e centile." }, "TN_MIN": { "long_name": "Minimum de la température minimale quotidienne", @@ -368,16 +368,16 @@ "abstract": "Moyenne de la température minimale quotidienne." }, "TN10P": { - "long_name": "Nombre de jours où la température minimale est en dessous du {per_base_thresh}e centile", - "description": "Nombre {freq:m} de jours où la température minimale est en dessous du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température minimale est en dessous du {per_base_thresh}e centile", - "abstract": "Nombre de jours où la température minimale est en dessous du {per_base_thresh}e centile." + "long_name": "Nombre de jours où la température minimale est sous du 10e centile", + "description": "Nombre {freq:m} de jours où la température minimale est sous du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "title": "Nombre de jours où la température minimale est sous du 10e centile", + "abstract": "Nombre de jours où la température minimale est sous du 10e centile." }, "TN90P": { - "long_name": "Nombre de jours où la température minimale est au-dessus du {per_base_thresh}e centile", + "long_name": "Nombre de jours où la température minimale est au-dessus du 90e centile", "description": "Nombre {freq:m} de jours où la température minimale est au-dessus du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température minimale est au-dessus du {per_base_thresh}e centile", - "abstract": "Nombre de jours où la température minimale est au-dessus du {per_base_thresh}e centile." + "title": "Nombre de jours où la température minimale est au-dessus du 90e centile", + "abstract": "Nombre de jours où la température minimale est au-dessus du 90e centile." }, "TX_MIN": { "long_name": "Minimum de la température maximale quotidienne", @@ -398,16 +398,16 @@ "abstract": "Moyenne de la température maximale quotidienne." }, "TX10P": { - "long_name": "Nombre de jours où la température maximale est en dessous du {per_base_thresh}e centile", + "long_name": "Nombre de jours où la température maximale est sous du 10e centile", "description": "Nombre {freq:m} de jours où la température maximale est en dessous du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température maximale est en dessous du {per_base_thresh}e centile", - "abstract": "Nombre de jours où la température maximale est en dessous du {per_base_thresh}e centile." + "title": "Nombre de jours où la température maximale est sous du 10e centile", + "abstract": "Nombre de jours où la température maximale est sous du 10e centile." }, "TX90P": { - "long_name": "Nombre de jours où la température maximale est au-dessus du {per_base_thresh}e centile", + "long_name": "Nombre de jours où la température maximale est au-dessus du 90e centile", "description": "Nombre {freq:m} de jours où la température maximale est au-dessus du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température maximale est au-dessus du {per_base_thresh}e centile", - "abstract": "Nombre de jours où la température maximale est au-dessus du {per_base_thresh}e centile." + "title": "Nombre de jours où la température maximale est au-dessus du 90e centile", + "abstract": "Nombre de jours où la température maximale est au-dessus du 90e centile." }, "DTRMAX": { "long_name": "Amplitude diurne maximale de la température", @@ -539,9 +539,9 @@ "abstract": "Nombre de jours où la température maximale quotidienne est sous 0°C." }, "CONSECUTIVE_FROST_DAYS": { - "long_name": "Durée maximale des périodes de gel (Tmin < 0°C)", + "long_name": "Durée maximale des périodes de gel", "description": "Durée maximale {freq:f} des périodes où la température minimale quotidienne est sous {thresh}.", - "title": "Durée maximale des périodes de gel (Tmin < 0°C)", + "title": "Durée maximale des périodes de gel", "abstract": "Durée maximale des périodes consécutives où la température minimale quotidienne est sous 0°C." }, "FROST_FREE_SEASON_LENGTH": { @@ -558,21 +558,21 @@ }, "GROWING_SEASON_LENGTH": { "long_name": "Durée de la saison de croissance", - "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs où la température quotidienne moyenne dépasse {thresh} et la première occurrence (après le {mid_date}) d'au moins {window} jours consécutifs où la température est sous {thresh}.", + "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs où la température quotidienne moyenne dépasse {thresh} et la première occurrence d'au moins {window} jours consécutifs où la température est sous {thresh} après le {mid_date}.", "title": "Durée de la saison de croissance", - "abstract": "Nombre de jours entre la première série de N jours avec une température moyenne quotidienne au-dessus d'un seuil et la première série de N jours avec une température moyenne quotidienne sous ce même seuil." + "abstract": "Nombre de jours entre la première occurrence d'une série de jours avec une température moyenne quotidienne supérieure à un seuil et la première occurrence d'une série de jours avec une température moyenne quotidienne inférieure à ce même seuil, survenant après une date de calendrier donnée." }, "GROWING_SEASON_START": { - "long_name": "Jour de l'année du début de la saison de croissance", - "description": "Jour de l'année du début de la saison de croissance, défini comme le {window}e jour consécutif où la température excède {thresh}.", - "title": "Nième jour consécutif où la température excède un seuil", + "long_name": "Nième jour consécutif où la température excède un seuil", + "description": "Jour de l'année du début de la saison de croissance, défini comme le premier jour de température constante supérieure ou égale au seuil de {thresh} après une série de {window} jours inférieurs à la température seuil.", + "title": "Jour de l'année du début de la saison de croissance", "abstract": "Premier jour où la température excède un certain seuil depuis un certain nombre de jours consécutifs." }, "TROPICAL_NIGHTS": { - "long_name": "Nombre de nuits tropicales (Tmin > {thresh})", + "long_name": "Nombre de nuits tropicales", "description": "Nombre {freq:m} de nuits tropicales : définies comme des jours avec une température minimale au-dessus de {thresh}.", "title": "Nombre de nuits tropicales", - "abstract": "Nombre de jours où la température minimale est au-dessus d'un seuil." + "abstract": "Nombre de jours où la température minimale est au-dessus d'un seuil donné." }, "BASE_FLOW_INDEX": { "long_name": "Flux de base", @@ -642,9 +642,9 @@ }, "LAST_SPRING_FROST": { "long_name": "Jour de l'année du dernier gel printanier", - "description": "Jour de l'année du dernier gel printanier, defini comme le dernier jour où la température quotidienne moyenne reste sous {thresh} durant au moins {window} jours avant une certaine date.", + "description": "Jour de l'année du dernier gel printanier, defini comme le dernier jour où la température quotidienne moyenne reste sous {thresh} durant au moins {window} jours avant une certaine date ({before_date}).", "title": "Jour de l'année du dernier gel printanier", - "abstract": "Dernier jour où la température est inférieur à un seuil durant un certain nombre de jours, limité par une date finale." + "abstract": "Dernier jour où la température est inférieur à un seuil donné durant un certain nombre de jours, limité par une date de calendrier finale." }, "HOT_SPELL_MAX_LENGTH": { "long_name": "Longueur maximale des périodes chaudes", @@ -660,9 +660,9 @@ }, "GROWING_SEASON_END": { "long_name": "Jour de l'année de la fin de la saison de croissance", - "description": "Jour de l'année de la fin de la saison de croissance. La saison de croissance est définie comme l'intervalle entre la première série de {window} jours où la température quotidienne est au-dessus de {thresh} et la première série (après le {mid_date}) de {window} jours où elle est sous {thresh}.", + "description": "Jour de l'année du début de la saison de croissance, défini comme le premier jour de température constante supérieure ou égale au seuil de {thresh} après une série de {window} jours inférieurs à la température seuil, survenant après {mid_date}.", "title": "Fin de la saison de croissance", - "abstract": "Jour de l'année de la fin de la saison de croissance. La saison de croissance est définie comme l'intervalle entre la première série de N jours où la température quotidienne est au-dessus d'un seuil et la première série (après une certaine date) de N jours où elle est sous ce même seuil." + "abstract": "Le premier jour où la température est inférieure à un certain seuil pendant un certain nombre de jours consécutifs après une date de calendrier spécifique." }, "FROST_FREE_SEASON_END": { "long_name": "Jour de l'année de la fin de la saison sans gel", @@ -754,20 +754,20 @@ "abstract": "Calcul de l'humidité spécifique à partir de la température du point de rosée et de la pression à l'aide de la pression de vapeur saturante." }, "FIRST_DAY_BELOW": { - "long_name": "Premier jour de l'année avec une température sous {thresh}", - "description": "Premier jour de l'année avec une température sous {thresh} pour au moins {window} jours.", + "long_name": "Premier jour de l'année avec une température sous un seuil", + "description": "Premier jour de l'année avec une température sous {thresh} pour au moins {window} jours après {after_date}.", "title": "Premier jour de l'année de températures sous un seuil", - "abstract": "Calcule le premier jour d'une période où la température est plus basse qu'un certain seuil durant un nombre de jours donné, limité par une date minimale." + "abstract": "Calcule le premier jour d'une période où la température est inférieure à un certain seuil pendant un nombre de jours, après une date de calendrier donnée." }, "FIRST_DAY_ABOVE": { - "long_name": "Premier jour de l'année avec une température au-dessus de {thresh}", - "description": "Premier jour de l'année avec une température au-dessus de {thresh} pour au moins {window} jours.", + "long_name": "Premier jour de l'année avec une température au-dessus d'un seuil", + "description": "Premier jour de l'année avec une température au-dessus de {thresh} pour au moins {window} jours après {after_date}.", "title": "Premier jour de l'année de températures au-dessus d'un seuil", - "abstract": "Calcule le premier jour d'une période où la température est plus élevée qu'un certain seuil durant un nombre de jours donné, limité par une date minimale." + "abstract": "Calcule le premier jour d'une période où la température est supérieure à un certain seuil pendant un nombre de jours, après une date de calendrier donnée." }, "DEGREE_DAYS_EXCEEDANCE_DATE": { - "long_name": "Premier jour de l'année où la somme des degrés-jours excède {sum_thresh}", - "description": "Premier jour de l'année où la somme des degrés-jours (Tmoy {op} {thresh}) excède {sum_thresh}, la somme commençant le {start_date}.", + "long_name": "Premier jour de l'année où la somme des degrés-jours excède un seuil", + "description": "Premier jour de l'année où la somme des degrés-jours (Tmoy {op} {thresh}) excède {sum_thresh}, avec la somme cumulative à partir de {start_date}.", "title": "Jour du dépassement des degrés-jours", "abstract": "Jour de l'année où la somme des degrés-jours excède un seuil. Les degrés-jours sont calculés au-dessus ou au-dessous d'un seuil de température donné." }, @@ -905,13 +905,13 @@ }, "WARM_SPELL_DURATION_INDEX": { "title": "Indice de durée des vagues de chaleur", - "abstract": "Nombre de jours faisant partie de vagues d'une durée minimale où la température maximale quotidienne excède le {per_base_thresh}e centile. Le {per_base_thresh} centile des températures devrait être calculé avec une fenêtre mobile de {per_window} jours.", - "description": "Durée totale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque Tmax est au-dessus du {per_base_thresh}e centile durant au moins {window} jours.", - "long_name": "Durée des vagues de chaleur" + "abstract": "Nombre de jours de la série avec durée minimale où la température maximale quotidienne dépasse un percentile donné. Le seuil percentile des températures doit être calculé avec une fenêtre mobile d'un nombre de jours donné.", + "description": "Nombre de jours avec au moins {window} jours consécutifs où la température maximale quotidienne est supérieure au(x) {tasmax_per_thresh}e centile(s). Une fenêtre de {tasmax_per_window} jour(s), centrée sur chaque jour du calendrier de la période {tasmax_per_period}, est utilisée pour calculer le(s) {tasmax_per_thresh}e(s) centile(s).", + "long_name": "Nombre de jours faisant partie d'une vague de chaleur définie par un centile" }, "MAXIMUM_CONSECUTIVE_WARM_DAYS": { "title": "Nombre maximal de jours chauds consécutifs", - "abstract": "Nombre maximal de jours consecutifs où la température maximale quotidienne excède un certain seuil.", + "abstract": "Nombre maximal de jours consécutifs où la température maximale quotidienne excède un certain seuil.", "description": "Nombre {freq:m} maximal de jours chauds consécutifs (Tmax > {thresh}).", "long_name": "Nombre maximal de jours chauds consécutifs" }, diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 675192335..725c318eb 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -684,7 +684,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): standard_name="day_of_year", long_name="Day of year of last spring frost", description="Day of year of last spring frost, defined as the last day a minimum temperature " - "threshold of {thresh} is not exceeded before a given date.", + "remains below a threshold of {thresh} for at least {window} days before a given date ({before_date}).", + abstract="The last day when temperature is below a given threshold for a certain number of days, " + "limited by a final calendar date.", cell_methods="", compute=indices.last_spring_frost, ) @@ -695,7 +697,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="", standard_name="day_of_year", long_name="First day of year with temperature below threshold", - description="First day of year with temperature below {thresh} for at least {window} days.", + description="First day of year with temperature below {thresh} for at least {window} days after {after_date}.", + abstract="Calculates the first day of a period when the temperature is lower than a certain threshold during a " + "given number of days, after a given calendar date.", cell_methods="", compute=indices.first_day_below, ) @@ -706,7 +710,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="", standard_name="day_of_year", long_name="First day of year with temperature above threshold", - description="First day of year with temperature above {thresh} for at least {window} days.", + description="First day of year with temperature above {thresh} for at least {window} days after {after_date}.", + abstract="Calculates the first day of a period when the temperature is higher than a certain threshold during a " + "given number of days, after a given calendar date.", cell_methods="", compute=indices.first_day_above, ) @@ -789,7 +795,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): standard_name="spell_length_of_days_with_air_temperature_above_threshold", long_name="Maximum number of consecutive days with Tmin at or above 0°C", description="{freq} maximum number of consecutive days with minimum daily temperature above or equal to {thresh}.", - abstract="Maximum number of consecutive frost-free days: where the daily minimum temperature is above or equal to 0°C", + abstract="Maximum number of consecutive frost-free days: where the daily minimum temperature is above " + "or equal to 0°C", cell_methods="time: maximum over days", compute=indices.maximum_consecutive_frost_free_days, ) @@ -802,6 +809,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): long_name="Day of year of growing season start", description="Day of year of start of growing season, defined as the first day of consistent superior or equal to " "threshold temperature of {thresh} after a run of {window} days inferior to threshold temperature.", + abstract="The first day when the temperature exceeds a certain threshold for a certain number of consecutive days.", cell_methods="", compute=indices.growing_season_start, parameters={"thresh": {"default": "5.0 degC"}}, @@ -812,10 +820,13 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="growing_season_length", units="days", standard_name="growing_season_length", - long_name="ETCCDI Growing Season Length", + long_name="Growing season length", description="{freq} number of days between the first occurrence of at least {window} consecutive days " "with mean daily temperature over {thresh} and the first occurrence of at least {window} consecutive days with " "mean daily temperature below {thresh} after {mid_date}.", + abstract="Number of days between the first occurrence of a series of days with a daily average temperature above a " + "threshold and the first occurrence of a series of days with a daily average temperature below that same " + "threshold, occurring after a given calendar date.", cell_methods="", compute=indices.growing_season_length, parameters={"thresh": {"default": "5.0 degC"}}, @@ -828,7 +839,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): standard_name="day_of_year", long_name="Day of year of growing season end", description="Day of year of end of growing season, defined as the first day of consistent inferior threshold " - "temperature of {thresh} after a run of {window} days superior to threshold temperature.", + "temperature of {thresh} after a run of {window} days superior to threshold temperature, occurring after " + "{mid_date}.", + abstract="The first day when the temperature is below a certain threshold for a certain number of consecutive days " + "after a specific calendar date.", cell_methods="", compute=indices.growing_season_end, parameters={"thresh": {"default": "5.0 degC"}}, @@ -839,23 +853,25 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tropical_nights", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", - long_name="Number of Tropical Nights (Tmin > {thresh})", - description="{freq} number of Tropical Nights : defined as days with minimum daily temperature" - " above {thresh}.", + long_name="Number of tropical nights", + description="{freq} number of Tropical Nights: defined as days with minimum daily temperature above {thresh}.", + abstract="Number of days where minimum temperature is below a given threshold.", cell_methods="time: sum over days", compute=indices.tn_days_above, parameters={"thresh": {"default": "20.0 degC"}}, ) +# FIXME: Is there a "tas_per_period"? French indices mention "per_base_thresh"? I don't see them in the indices. tg90p = TempWithIndexing( title="Days with mean temperature above the 90th percentile", identifier="tg90p", units="days", standard_name="days_with_air_temperature_above_threshold", - long_name="Number of days when Tmean > {tas_per_thresh}th percentile", - description="{freq} number of days with mean daily temperature above the 90th percentile. " + long_name="Number of days with mean temperature above the 90th percentile", + description="{freq} number of days with mean temperature above the 90th percentile. " "A {tas_per_window} day(s) window, centered on each calendar day in the {tas_per_period} period, " "is used to compute the 90th percentile.", + abstract="Number of days with mean temperature above the 90th percentile.", cell_methods="time: sum over days", compute=indices.tg90p, ) @@ -865,10 +881,11 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tg10p", units="days", standard_name="days_with_air_temperature_below_threshold", - long_name="Number of days when Tmean < {tas_per_thresh}th percentile", - description="{freq} number of days with mean daily temperature below the 10th percentile. " + long_name="Number of days with mean temperature below the 10th percentile", + description="{freq} number of days with mean temperature below the 10th percentile. " "A {tas_per_window} day(s) window, centered on each calendar day in the {tas_per_period} period, " "is used to compute the 10th percentile.", + abstract="Number of days with mean temperature below the 10th percentile.", cell_methods="time: sum over days", compute=indices.tg10p, ) @@ -878,10 +895,11 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tx90p", units="days", standard_name="days_with_air_temperature_above_threshold", - long_name="Number of days when Tmax > 90th percentile", - description="{freq} number of days with maximum daily temperature above the 90th percentile. " + long_name="Number of days with maximum temperature above the 90th percentile", + description="{freq} number of days with maximum temperature above the 90th percentile. " "A {tasmax_per_window} day(s) window, centered on each calendar day in the {tasmax_per_period} period, " "is used to compute the 90th percentile.", + abstract="Number of days with maximum temperature above the 90th percentile.", cell_methods="time: sum over days", compute=indices.tx90p, ) @@ -891,10 +909,11 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tx10p", units="days", standard_name="days_with_air_temperature_below_threshold", - long_name="Number of days when Tmax < 10th percentile", - description="{freq} number of days with maximum daily temperature below the 10th percentile. " + long_name="Number of days with maximum temperature below the 10th percentile", + description="{freq} number of days with maximum temperature below the 10th percentile. " "A {tasmax_per_window} day(s) window, centered on each calendar day in the {tasmax_per_period} period, " "is used to compute the 10th percentile.", + abstract="Number of days with maximum temperature below the 10th percentile.", cell_methods="time: sum over days", compute=indices.tx10p, ) @@ -904,10 +923,11 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tn90p", units="days", standard_name="days_with_air_temperature_above_threshold", - long_name="Number of days when Tmin > 90th percentile", - description="{freq} number of days with minimum daily temperature above the 90th percentile. " + long_name="Number of days with minimum temperature above the 90th percentile", + description="{freq} number of days with minimum temperature above the 90th percentile. " "A {tasmin_per_window} day(s) window, centered on each calendar day in the {tasmin_per_period} period, " "is used to compute the 90th percentile.", + abstract="Number of days with minimum temperature above the 90th percentile.", cell_methods="time: sum over days", compute=indices.tn90p, ) @@ -917,10 +937,11 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tn10p", units="days", standard_name="days_with_air_temperature_below_threshold", - long_name="Number of days when Tmin < 10th percentile", - description="{freq} number of days with minimum daily temperature below the 10th percentile. " + long_name="Number of days with minimum temperature below the 10th percentile", + description="{freq} number of days with minimum temperature below the 10th percentile. " "A {tasmin_per_window} day(s) window, centered on each calendar day in the {tasmin_per_period} period, " "is used to compute the 10th percentile.", + abstract="Number of days with minimum temperature below the 10th percentile.", cell_methods="time: sum over days", compute=indices.tn10p, ) @@ -929,11 +950,13 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): degree_days_exceedance_date = Temp( title="Degree day exceedance date", identifier="degree_days_exceedance_date", - long_name="Day of year when cumulative degree days exceed threshold.", units="", + long_name="Day of year when cumulative degree days exceed threshold.", standard_name="day_of_year", - description="Day of year when the integral of degree days (tmean {op} {thresh})" - " exceeds {sum_thresh}, the cumulative sum starts on {after_date}.", + description="Day of year when the integral of degree days (tmean {op} {thresh}) exceeds {sum_thresh}, " + "with the cumulative sum starting from {after_date}.", + abstract="The day of the year when the sum of degree days exceeds a threshold. " + "Degree days are calculated above or below a given temperature threshold.", cell_methods="", compute=indices.degree_days_exceedance_date, ) @@ -942,13 +965,15 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): warm_spell_duration_index = Temp( title="Warm spell duration index", identifier="warm_spell_duration_index", - long_name="Number of days part of a percentile-defined warm spell", - description="{freq} number of days with at least {window} consecutive days " - "where the daily maximum temperature is above the {tasmax_per_thresh}th " - "percentile(s). A {tasmax_per_window} day(s) window, centred on each calendar day in the " - "{tasmax_per_period} period, is used to compute the {tasmax_per_thresh}th percentile(s).", units="days", + long_name="Number of days part of a percentile-defined warm spell", standard_name="number_of_days_with_air_temperature_above_threshold", + description="{freq} number of days with at least {window} consecutive days where the daily maximum temperature is " + "above the {tasmax_per_thresh}th percentile(s). A {tasmax_per_window} day(s) window, centred on each calendar day " + "in the {tasmax_per_period} period, is used to compute the {tasmax_per_thresh}th percentile(s).", + abstract="Number of days in in series with minimum duration where the daily maximum temperature exceeds a given " + "percentile. The percentile threshold of temperatures should be calculated with a moving window of a given number " + "of days.", cell_methods="time: sum over days", compute=indices.warm_spell_duration_index, ) @@ -957,10 +982,11 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): maximum_consecutive_warm_days = Temp( title="Maximum consecutive warm days", identifier="maximum_consecutive_warm_days", - long_name="Maximum consecutive warm days", - description="{freq} longest spell of consecutive days with Tmax above {thresh}.", units="days", + long_name="Maximum number of consecutive warm days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", + description="{freq} longest spell of consecutive days with Tmax above {thresh}.", + abstract="Maximum number of consecutive days where the daily maximum temperature exceeds a certain threshold.", cell_methods="time: maximum over days", compute=indices.maximum_consecutive_tx_days, ) From fa6d22aad9d25598a5271a34f08aea75f6e413d6 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 18 Aug 2022 17:57:19 -0400 Subject: [PATCH 032/106] add a relevant reference --- xclim/indices/_threshold.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/xclim/indices/_threshold.py b/xclim/indices/_threshold.py index a1848822b..f3bd89c1e 100644 --- a/xclim/indices/_threshold.py +++ b/xclim/indices/_threshold.py @@ -715,6 +715,11 @@ def growing_season_length( # If working in the Southern Hemisphere, one can use: >>> gsl_sh = growing_season_length(tas, mid_date="01-01", freq="AS-JUL") + + References + ---------- + :cite:cts:`project_team_eca&d_algorithm_2013` + """ thresh = convert_units_to(thresh, tas) cond = tas >= thresh From 88a3f122d162b9456aba701529d3ccede8f9e3cf Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 18 Aug 2022 18:01:28 -0400 Subject: [PATCH 033/106] Adjust tests for new indicator descriptions --- xclim/testing/tests/test_formatting.py | 8 +++++++- xclim/testing/tests/test_temperature.py | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/xclim/testing/tests/test_formatting.py b/xclim/testing/tests/test_formatting.py index adb592802..da16f81ca 100644 --- a/xclim/testing/tests/test_formatting.py +++ b/xclim/testing/tests/test_formatting.py @@ -32,7 +32,13 @@ def test_indicator_docstring(): ) assert doc[6] == "Keywords : health,." assert doc[12] == " Default : `ds.tasmin`. [Required units : [temperature]]" - assert doc[35] == " Number of heat wave events (heat_wave_events)" + assert ( + doc[35] + == " Number of heat wave events (heat_wave_events), with additional attributes: **description**: " + "{freq} number of heat wave events within a given period. A heat wave occurs when daily " + "minimum and maximum temperatures exceed {thresh_tasmin} and {thresh_tasmax}, respectively, " + "over at least {window} days." + ) doc = degree_days_exceedance_date.__doc__.split("\n") assert doc[20] == " Default : >. " diff --git a/xclim/testing/tests/test_temperature.py b/xclim/testing/tests/test_temperature.py index 607ac9c46..99374df7f 100644 --- a/xclim/testing/tests/test_temperature.py +++ b/xclim/testing/tests/test_temperature.py @@ -1332,7 +1332,7 @@ def test_freezethaw_spell_frequency(): ) np.testing.assert_array_equal(out.isel(location=-1), [1, 0, 1, 1]) - assert out.attrs["long_name"] == "Frequency of freeze-thaw spells" + assert out.attrs["long_name"] == "Frequency of daily freeze-thaw spells" assert out.attrs["description"] in [ # FIXME: Section formatting shifts variable names to all lowercase. "Annual number of freeze-thaw spells (Tmax > 0 degC and Tmin <= 0 degC) " @@ -1357,7 +1357,7 @@ def test_freezethaw_spell_mean_length(): ) np.testing.assert_array_equal(out.isel(location=-1), [2, 0, 2, 2]) - assert out.attrs["long_name"] == "Average length of freeze-thaw spells" + assert out.attrs["long_name"] == "Average length of daily freeze-thaw spells" assert out.attrs["description"] in [ # FIXME: Section formatting shifts variable names to all lowercase. "Annual average length of freeze-thaw spells (Tmax > 0 degC and Tmin <= 0 degC) " From 6af62f7b66c73ce896399858e0f6b3c4aa0422e3 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 18 Aug 2022 18:14:50 -0400 Subject: [PATCH 034/106] Add missing indicator formatter params, correct "unkown" to "unknown" --- xclim/core/formatting.py | 35 +++++++++++++++----------- xclim/indicators/atmos/_temperature.py | 2 +- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/xclim/core/formatting.py b/xclim/core/formatting.py index 8eeebcb08..f46659086 100644 --- a/xclim/core/formatting.py +++ b/xclim/core/formatting.py @@ -20,18 +20,23 @@ from xclim.core.utils import InputKind, PercentileDataArray DEFAULT_FORMAT_PARAMS = { - "tasmin_per_thresh": "{unkown}", - "tasmin_per_window": "{unkown}", - "tasmin_per_period": "{unkown}", - "tas_per_thresh": "{unkown}", - "tas_per_window": "{unkown}", - "tas_per_period": "{unkown}", - "tasmax_per_thresh": "{unkown}", - "tasmax_per_window": "{unkown}", - "tasmax_per_period": "{unkown}", - "pr_per_thresh": "{unkown}", - "pr_per_window": "{unkown}", - "pr_per_period": "{unkown}", + "tasmin_per_thresh": "{unknown}", + "tasmin_per_window": "{unknown}", + "tasmin_per_period": "{unknown}", + "tas_per_thresh": "{unknown}", + "tas_per_window": "{unknown}", + "tas_per_period": "{unknown}", + "tasmax_per_thresh": "{unknown}", + "tasmax_per_window": "{unknown}", + "tasmax_per_period": "{unknown}", + "pr_per_thresh": "{unknown}", + "pr_per_window": "{unknown}", + "pr_per_period": "{unknown}", + # FIXME: The following params can be found in indices._multivariate + "tasmax_per": "{unknown}", + "tasmin_per": "{unknown}", + "tas_per": "{unknown}", + "pr_per": "{unknown}", } @@ -53,7 +58,8 @@ def __init__( mapping : Mapping[str, Sequence[str]] A mapping from values to their possible variations. modifiers : Sequence[str] - The list of modifiers, must be the as long as the longest value of `mapping`. Cannot include reserved modifier 'r'. + The list of modifiers, must be the as long as the longest value of `mapping`. + Cannot include reserved modifier 'r'. """ super().__init__() if "r" in modifiers: @@ -427,8 +433,7 @@ def _call_and_add_history(*args, **kwargs): def gen_call_string(funcname: str, *args, **kwargs): """Generate a signature string for use in the history attribute. - DataArrays and Dataset are replaced with their name, while Nones, floats, - ints and strings are printed directly. + DataArrays and Dataset are replaced with their name, while Nones, floats, ints and strings are printed directly. All other objects have their type printed between < >. Arguments given through positional arguments are printed positionnally and those diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 725c318eb..9c046f469 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -440,7 +440,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "is below the {tasmin_per}th percentile. A cold spell occurs when the daily minimum temperature is below a given " "percentile for at least {window} consecutive days.", abstract="Number of days part of a percentile-defined cold spell. A cold spell occurs when the daily minimum " - "temperature is below a given percentile for at least {window} consecutive days.", + "temperature is below a given percentile for aa given number of consecutive days.", cell_methods="", compute=indices.cold_spell_duration_index, ) From 26546319bd1da6836d835ef5a4ea77a535526245 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 18 Aug 2022 18:18:40 -0400 Subject: [PATCH 035/106] fix test that used unkown --- xclim/testing/tests/test_temperature.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xclim/testing/tests/test_temperature.py b/xclim/testing/tests/test_temperature.py index 99374df7f..0b924db40 100644 --- a/xclim/testing/tests/test_temperature.py +++ b/xclim/testing/tests/test_temperature.py @@ -1273,9 +1273,9 @@ def test_wsdi__default_percentiles_params(): del tx90.attrs["climatology_bounds"] res = atmos.warm_spell_duration_index(tasmax, tx90, freq="YS") # THEN - assert "{unkown} day(s) window" in res.attrs["description"] - assert "{unkown} period" in res.attrs["description"] - assert "{unkown}th percentile(s)" in res.attrs["description"] + assert "{unknown} day(s) window" in res.attrs["description"] + assert "{unknown} period" in res.attrs["description"] + assert "{unknown}th percentile(s)" in res.attrs["description"] def test_maximum_consecutive_warm_days(): From e4178aed2095d3f959acbb557aa5fa92637f0f68 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 19 Aug 2022 10:27:30 -0400 Subject: [PATCH 036/106] update HISTORY.rst --- HISTORY.rst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index ef995415f..f8b20b99b 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -15,8 +15,8 @@ New features and enhancements Breaking changes ^^^^^^^^^^^^^^^^ * `scipy` has been temporarily pinned below version 1.9 until lmoments3 tests can be rewritten to account for the new API. (:issue:`1142`, :pull:`1143`). -* English indicator metadata has been adjusted to remove frequencies and other automatically formatted fields in the `long_name` of indicators. (:issue:`936`, :pull:`1123`). -* French indicator metadata translations are now more uniform and follow agreed-upon grammar conventions. (:issue:`936`, :pull:`1123`). +* English indicator metadata has been adjusted to remove frequencies and other variable-sourced fields in the `long_name` of indicators. English indicators now have an explicit `title` and `abstract`. (:issue:`936`, :pull:`1123`). +* French indicator metadata translations are now more uniform and follow agreed-upon grammar conventions, removing variable-sourced fields in `long_name_fr`. (:issue:`936`, :pull:`1123`). Bug fixes ^^^^^^^^^ @@ -25,7 +25,6 @@ Bug fixes * Fixed the signature and docstring of ``heat_index`` by changing ``tasmax`` to ``tas``. (:issue:`1126`, :pull:`1128`). * Fixed a formatting issue with virtual indicator modules (`_gen_returns_section`) that was creating malformed `Returns` sections in `sphinx`-generated documentation. (:pull:`1131`). - Internal changes ^^^^^^^^^^^^^^^^ * Marked a test (``test_release_notes_file_not_implemented``) that can only pass when source files are available so that it can easily be skipped on conda-forge build tests. (:issue:`1116`, :pull:`1117`). From f499d538705ef0fabbf154734578281f7bcddde6 Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 22 Aug 2022 08:51:17 -0400 Subject: [PATCH 037/106] Apply suggestions from code review Co-authored-by: Pascal Bourgault --- xclim/data/fr.json | 92 +++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index dbfaca640..843a56014 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -231,9 +231,9 @@ }, "SPI": { "long_name": "Indice de précipitation standardisé (SPI)", - "description": "Précipitations sur une fenêtre mobile de {window} {freq:nom}, normalisées tel que la moyenne de SPI est 0 pour les données de calibration. L'unité de la fenêtre 'X' est l'unité de temps déterminée par la fréquence de rééchantillonage", + "description": "Précipitation sur une fenêtre mobile de {window} {freq:nom}, normalisée telle que la moyenne de SPI est 0 pour les données de calibration. L'unité de la fenêtre 'X' est l'unité de temps déterminée par la fréquence de ré-échantillonage", "title": "Indice de précipitation standardisé (SPI)", - "abstract": "Précipitations sur une fenêtre mobile, normalisée telles que la moyenne de SPI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de ré-échantillonnage." + "abstract": "Précipitation sur une fenêtre mobile, normalisée telle que la moyenne de SPI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de ré-échantillonnage." }, "SPEI": { "long_name": "Indice de précipitation évapotranspiration standardisé (SPEI)", @@ -248,46 +248,46 @@ "abstract": "L'indice de sécheresse fait partie du système canadien des Indices Forêt-Météo. C'est un code numérique estimant la teneur en humidité moyenne de couches organiques." }, "TN_DAYS_ABOVE": { - "long_name": "Nombre de jours avec température minimale quotidienne au-dessus d'un seuil donné", + "long_name": "Nombre de jours ayant une température minimale quotidienne au-dessus d'un seuil donné", "description": "Nombre {freq:m} de jours où la température minimale quotidienne est au-dessus de {thresh}.", - "title": "Nombre de jours avec température minimale quotidienne au-dessus d'un seuil donné", + "title": "Nombre de jours ayant une température minimale quotidienne au-dessus d'un seuil donné", "abstract": "Nombre de jours où la température minimale quotidienne est au-dessus d'un seuil donné." }, "TN_DAYS_BELOW": { - "long_name": "Nombre de jours avec température minimale quotidienne sous un seuil donné", + "long_name": "Nombre de jours ayant une température minimale quotidienne sous un seuil donné", "description": "Nombre {freq:m} de jours où la température minimale quotidienne est sous {thresh}.", - "title": "Nombre de jours avec température minimale quotidienne sous d'un seuil donné", + "title": "Nombre de jours ayant une température minimale quotidienne sous un seuil donné", "abstract": "Nombre de jours où la température minimale quotidienne est sous un seuil donné." }, "TG_DAYS_ABOVE": { - "long_name": "Nombre de jours avec température moyenne quotidienne au-dessus d'un seuil donné", + "long_name": "Nombre de jours ayant une température moyenne quotidienne au-dessus d'un seuil donné", "description": "Nombre {freq:m} de jours où la température quotidienne moyenne est au-dessus de {thresh}.", - "title": "Nombre de jours avec température moyenne quotidienne au-dessus d'un seuil donné", + "title": "Nombre de jours ayant une température moyenne quotidienne au-dessus d'un seuil donné", "abstract": "Nombre de jours où la température quotidienne moyenne est au-dessus d'un seuil donné." }, "TG_DAYS_BELOW": { - "long_name": "Nombre de jours avec température moyenne quotidienne sous un seuil donné", + "long_name": "Nombre de jours ayant une température moyenne quotidienne sous un seuil donné", "description": "Nombre {freq:m} de jours où la température quotidienne moyenne est sous {thresh}.", - "title": "Nombre de jours avec température moyenne quotidienne sous d'un seuil donné", + "title": "Nombre de jours ayant une température moyenne quotidienne sous un seuil donné", "abstract": "Nombre de jours où la température quotidienne moyenne est sous un seuil donné." }, "TX_DAYS_ABOVE": { - "long_name": "Nombre de jours avec température maximale quotidienne au-dessus d'un seuil donné", + "long_name": "Nombre de jours ayant une température maximale quotidienne au-dessus d'un seuil donné", "description": "Nombre {freq:m} de jours où la température maximale quotidienne est au-dessus de {thresh}.", - "title": "Nombre de jours avec température maximale quotidienne au-dessus d'un seuil donné", + "title": "Nombre de jours ayant une température maximale quotidienne au-dessus d'un seuil donné", "abstract": "Nombre de jours où la température maximale quotidienne est au-dessus d'un seuil donné." }, "TX_DAYS_BELOW": { - "long_name": "Nombre de jours avec température maximale quotidienne sous un seuil donné", + "long_name": "Nombre de jours ayant une température maximale quotidienne sous un seuil donné", "description": "Nombre {freq:m} de jours où la température maximale quotidienne est sous {thresh}.", - "title": "Nombre de jours avec température maximale quotidienne sous d'un seuil donné", + "title": "Nombre de jours ayant une température maximale quotidienne sous un seuil donné", "abstract": "Nombre de jours où la température maximale quotidienne est sous un seuil donné." }, "TX_TN_DAYS_ABOVE": { - "long_name": "Nombre de jours où les températures minimales et maximales quotidiennes dépassent des seuils donnés.", + "long_name": "Nombre de jours ayant des températures minimale et maximale quotidiennes au-dessus de seuils donnés.", "description": "Nombre {freq:m} de jours où la température maximale quotidienne excède {thresh_tasmax} et la température minimale quotidienne excède {thresh_tasmin}.", - "title": "Nombre de jours où les températures minimales et maximales quotidiennes dépassent les seuils.", - "abstract": "Nombre de jours où les températures maximales et minimales quotidiennes sont au-dessus de seuils donnés." + "title": "Nombre de jours ayant des températures minimale et maximale quotidiennes au-dessus de seuils donnés.", + "abstract": "Nombre de jours où les températures maximale et minimale quotidiennes sont au-dessus de seuils donnés." }, "HEAT_WAVE_FREQUENCY": { "long_name": "Nombre de vagues de chaleur", @@ -302,20 +302,20 @@ "abstract": "Durée totale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_MAX_LENGTH": { - "long_name": "Longueur maximale des vagues de chaleur", - "description": "Longueur maximale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", + "long_name": "Durée maximale des vagues de chaleur", + "description": "Durée maximale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Longueur maximale des vagues de chaleur", - "abstract": "Longueur maximale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." + "abstract": "Durée maximale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_INDEX": { "long_name": "Nombre de jours de vague de chaleur", "description": "Nombre {freq:m} de jours de vague de chaleur. Une vague de chaleur se produit lorsque la température maximale quotidienne excède {thresh} durant au moins {window} jours.", "title": "Indice de vague de chaleur", - "abstract": "Nombre de jours de vagues de chaleur. Une vague de chaleur se produit lorsque la température maximale quotidienne excèdent un seuil donné durant un certain nombre de jours." + "abstract": "Nombre de jours de vagues de chaleur. Une vague de chaleur se produit lorsque la température maximale quotidienne excède un seuil donné durant un certain nombre de jours." }, "TG": { "long_name": "Moyenne des températures maximales et minimales quotidennes", - "description": "température quotidienne moyenne estimée par la médiane des températures maximales et minimales.", + "description": "Température quotidienne moyenne estimée par la moyenne des températures maximale et minimale", "title": "Température moyenne", "abstract": "La température quotidienne en assumant une distribution symétrique des températures (Tg = (Tx + Tn) / 2)." }, @@ -338,16 +338,16 @@ "abstract": "Moyenne de la température moyenne quotidienne." }, "TG10P": { - "long_name": "Nombre de jours où la température quotidienne est sous du 10e centile", - "description": "Nombre {freq:m} de jours où la température est sous du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température quotidienne est sous du 10e centile", - "abstract": "Nombre de jours où la température quotidienne est sous du 10e centile." + "long_name": "Nombre de jours ayant une température moyenne quotidienne sous le 10ᵉ centile", + "description": "Nombre {freq:m} de jours où la température moyenne est sous le {per_base_thresh}ᵉ centile. Le {per_base_thresh}ᵉ centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "title": "Nombre de jours ayant une température moyenne quotidienne sous le 10ᵉ centile", + "abstract": "Nombre de jours où la température moyenne quotidienne est sous le 10ᵉ centile." }, "TG90P": { - "long_name": "Nombre de jours où la température quotidienne est au-dessus du 90e centile", - "description": "Nombre {freq:m} de jours où la température est au-dessus du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température quotidienne est au-dessus du 90e centile", - "abstract": "Nombre de jours où la température quotidienne est au-dessus du 90e centile." + "long_name": "Nombre de jours ayant une température moyenne quotidienne au-dessus du 90ᵉ centile", + "description": "Nombre {freq:m} de jours où la température est au-dessus du {per_base_thresh}ᵉ centile. Le {per_base_thresh}ᵉ centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "title": "Nombre de jours ayant une température moyenne quotidienne au-dessus du 90ᵉ centile", + "abstract": "Nombre de jours où la température moyenne quotidienne est au-dessus du 90ᵉ centile." }, "TN_MIN": { "long_name": "Minimum de la température minimale quotidienne", @@ -368,16 +368,16 @@ "abstract": "Moyenne de la température minimale quotidienne." }, "TN10P": { - "long_name": "Nombre de jours où la température minimale est sous du 10e centile", - "description": "Nombre {freq:m} de jours où la température minimale est sous du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température minimale est sous du 10e centile", - "abstract": "Nombre de jours où la température minimale est sous du 10e centile." + "long_name": "Nombre de jours ayant une température minimale sous le 10ᵉ centile", + "description": "Nombre {freq:m} de jours où la température minimale est sous le {per_base_thresh}ᵉ centile. Le {per_base_thresh}ᵉ centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "title": "Nombre de jours ayant une température minimale sous le 10ᵉ centile", + "abstract": "Nombre de jours où la température minimale est sous le 10ᵉ centile." }, "TN90P": { - "long_name": "Nombre de jours où la température minimale est au-dessus du 90e centile", - "description": "Nombre {freq:m} de jours où la température minimale est au-dessus du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température minimale est au-dessus du 90e centile", - "abstract": "Nombre de jours où la température minimale est au-dessus du 90e centile." + "long_name": "Nombre de jours ayant une température minimale au-dessus du 90ᵉ centile", + "description": "Nombre {freq:m} de jours où la température minimale est au-dessus du {per_base_thresh}ᵉ centile. Le {per_base_thresh}ᵉ centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "title": "Nombre de jours ayant une température minimale au-dessus du 90ᵉ centile", + "abstract": "Nombre de jours où la température minimale est au-dessus du 90ᵉ centile." }, "TX_MIN": { "long_name": "Minimum de la température maximale quotidienne", @@ -398,16 +398,16 @@ "abstract": "Moyenne de la température maximale quotidienne." }, "TX10P": { - "long_name": "Nombre de jours où la température maximale est sous du 10e centile", - "description": "Nombre {freq:m} de jours où la température maximale est en dessous du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température maximale est sous du 10e centile", - "abstract": "Nombre de jours où la température maximale est sous du 10e centile." + "long_name": "Nombre de jours ayant une température maximale sous le 10ᵉ centile", + "description": "Nombre {freq:m} de jours où la température maximale est en dessous du {per_base_thresh}ᵉ centile. Le {per_base_thresh}ᵉ centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "title": "Nombre de jours ayant une température maximale sous le 10ᵉ centile", + "abstract": "Nombre de jours où la température maximale est sous le 10ᵉ centile." }, "TX90P": { - "long_name": "Nombre de jours où la température maximale est au-dessus du 90e centile", - "description": "Nombre {freq:m} de jours où la température maximale est au-dessus du {per_base_thresh}e centile. Le {per_base_thresh}e centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", - "title": "Nombre de jours où la température maximale est au-dessus du 90e centile", - "abstract": "Nombre de jours où la température maximale est au-dessus du 90e centile." + "long_name": "Nombre de jours ayant une température maximale au-dessus du 90ᵉ centile", + "description": "Nombre {freq:m} de jours où la température maximale est au-dessus du {per_base_thresh}ᵉ centile. Le {per_base_thresh}ᵉ centile est calculé à partir d'une fenêtre de {per_window} jours centrée sur chaque jour du calendrier à l'intérieur d'une période de référence.", + "title": "Nombre de jours ayant la température maximale au-dessus du 90ᵉ centile", + "abstract": "Nombre de jours où la température maximale est au-dessus du 90ᵉ centile." }, "DTRMAX": { "long_name": "Amplitude diurne maximale de la température", From 0fe28c017830549a87bb2612e8c7001497311162 Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 22 Aug 2022 08:51:44 -0400 Subject: [PATCH 038/106] Update xclim/data/fr.json Co-authored-by: Pascal Bourgault --- xclim/data/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 843a56014..b2fe79bd0 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -304,7 +304,7 @@ "HEAT_WAVE_MAX_LENGTH": { "long_name": "Durée maximale des vagues de chaleur", "description": "Durée maximale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", - "title": "Longueur maximale des vagues de chaleur", + "title": "Durée maximale des vagues de chaleur", "abstract": "Durée maximale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_INDEX": { From 4e7209746ef3158cbe2f69f283cb2f58235626b4 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 22 Aug 2022 11:38:46 -0400 Subject: [PATCH 039/106] Address comments from @dompaq --- xclim/data/fr.json | 74 +++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index b2fe79bd0..33db02235 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -231,15 +231,15 @@ }, "SPI": { "long_name": "Indice de précipitation standardisé (SPI)", - "description": "Précipitation sur une fenêtre mobile de {window} {freq:nom}, normalisée telle que la moyenne de SPI est 0 pour les données de calibration. L'unité de la fenêtre 'X' est l'unité de temps déterminée par la fréquence de ré-échantillonage", + "description": "Précipitation sur une fenêtre mobile de {window} {freq:nom}, normalisée telle que la moyenne de SPI est 0 pour les données de calibration. L'unité de la fenêtre 'X' est l'unité de temps déterminée par la fréquence de rééchantillonage", "title": "Indice de précipitation standardisé (SPI)", - "abstract": "Précipitation sur une fenêtre mobile, normalisée telle que la moyenne de SPI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de ré-échantillonnage." + "abstract": "Précipitation sur une fenêtre mobile, normalisée telle que la moyenne de SPI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de rééchantillonnage." }, "SPEI": { "long_name": "Indice de précipitation évapotranspiration standardisé (SPEI)", - "description": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile de {window} {freq:nom}, normalisé tel que la moyenne de SPEI est 0 pour les données de calibration. L'unité de fenêtre `X` est l'unité de temps determinée par la fréquence de ré-échantillonnage {freq}.", + "description": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile de {window} {freq:nom}, normalisé tel que la moyenne de SPEI est 0 pour les données de calibration. L'unité de fenêtre `X` est l'unité de temps determinée par la fréquence de rééchantillonnage {freq}.", "title": "Indice de précipitation évapotranspiration standardisé (SPEI)", - "abstract": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile, normalisé tel que la moyenne de SPEI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de ré-échantillonnage." + "abstract": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile, normalisé tel que la moyenne de SPEI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de rééchantillonnage." }, "DC": { "long_name": "Indice de sécheresse", @@ -512,11 +512,11 @@ "description": "Température moyenne du mois le plus chaud avec un facteur d'échelle basé sur la latitude : Moyenne de température du mois le plus chaud * ({lat_factor} - latitude).", "title": "Indice de latitude-température", "comment": "Formule originale prise de Jackson, D. I., & Cherry, N. J. (1988)", - "abstract": "indice climatique basé sur la température moyenne du mois le plus chaud et un coefficient basé sur la latitude pour tenir compte de la durée plus longue du jour favorisant les conditions de croissance. Développé spécifiquement pour la viticulture." + "abstract": "Indice climatique basé sur la température moyenne du mois le plus chaud et un coefficient basé sur la latitude pour tenir compte de la durée plus longue du jour favorisant les conditions de croissance. Développé spécifiquement pour la viticulture." }, "FRESHET_START": { "long_name": "Premier jour de dépassement constant du seuil de température", - "description": "jour de l'année du début de la crue printanière, défini comme le premier jour où un seuil de température de {thresh} est dépassé pendant au moins {window} jours.", + "description": "Jour de l'année du début de la crue printanière, défini comme le premier jour où un seuil de température de {thresh} est dépassé pendant au moins {window} jours.", "title": "Jour de l'année du début de la crue nivale", "abstract": "Premier jour où la température excède un certain seuil depuis un certain nombre de jours consécutifs." }, @@ -708,7 +708,7 @@ "description": "Magnitude de la vitesse du vent calculée à partir des deux composantes uas et vas." }, "WIND_SPEED_FROM_VECTOR.sfcWindfromdir": { - "long_name": "Vent près de la surface en provenance d'une direction", + "long_name": "Vent près de la surface en provenance d'une certaine direction", "description": "Direction de provenance du vent calculée à partir des deux composantes uas et vas. Les vents du nord ont une direction de 360° et les vents de moins de {calm_wind_thresh} ont une direction de 0°." }, "WIND_VECTOR_FROM_SPEED": { @@ -732,26 +732,26 @@ "HURS_FROMDEWPOINT": { "long_name": "Humidité relative", "description": "Calculée à partir de la température et du point de rosée à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", - "title": "Humidité relative à partir de la température et du point de rosée", - "abstract": "Calcul de l'humidité relative à partir de la température et du point de rosée à l'aide de la pression de vapeur saturante." + "title": "Humidité relative calculée à partir de la température et du point de rosée", + "abstract": "Calcul de l'humidité relative calculée à partir de la température et du point de rosée à l'aide de la pression de vapeur saturante." }, "HURS": { "long_name": "Humidité relative", "description": "Calculée à partir de la température, de l'humidité spécifique et de la pression à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", - "title": "Humidité relative à partir de la température, l'humidité spécifique et de la pression", - "abstract": "Calcul de l'humidité relative à partir de la température, de l'humidité spécifique et de la pression à l'aide de la pression de vapeur saturante." + "title": "Humidité relative calculée à partir de la température, l'humidité spécifique et de la pression", + "abstract": "Calcul de l'humidité relative calculée à partir de la température, de l'humidité spécifique et de la pression à l'aide de la pression de vapeur saturante." }, "HUSS": { "long_name": "Humidité spécifique", "description": "Calculée à partir de la température, de l'humidité relative et de la pression à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", - "title": "Humidité spécifique à partir de la température, l'humidité relative et de la pression", - "abstract": "Calcul de l'humidité spécifique à partir de la température, de l'humidité relative et de la pression à l'aide de la pression de vapeur saturante." + "title": "Humidité spécifique calculée à partir de la température, l'humidité relative et de la pression", + "abstract": "Calcul de l'humidité spécifique calculée à partir de la température, de l'humidité relative et de la pression à l'aide de la pression de vapeur saturante." }, "HUSS_FROMDEWPOINT": { "long_name": "Humidité spécifique", "description": "Calculée à partir de la température du point de rosée et de la pression à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", - "title": "Humidité spécifique à partir de la température du point de rosée et de la pression", - "abstract": "Calcul de l'humidité spécifique à partir de la température du point de rosée et de la pression à l'aide de la pression de vapeur saturante." + "title": "Humidité spécifique calculée à partir de la température du point de rosée et de la pression", + "abstract": "Calcul de l'humidité spécifique calculée à partir de la température du point de rosée et de la pression à l'aide de la pression de vapeur saturante." }, "FIRST_DAY_BELOW": { "long_name": "Premier jour de l'année avec une température sous un seuil", @@ -874,28 +874,28 @@ "abstract": "Nombre de jours avec précipitation au-dessus d'un seuil et températures sous un seuil." }, "DAYS_OVER_PRECIP_THRESH": { - "title": "Nombre de jours avec précipitation où la précipitation est au-dessus un centile donné", - "abstract": "Nombre de jours d'une période où la précipitation est au-dessus un centile donné, calculé sur une période donné et un seuil fixe.", + "title": "Nombre de jours avec précipitation où la précipitation est au-dessus d'un centile donné", + "abstract": "Nombre de jours d'une période où la précipitation est au-dessus d'un centile donné, calculé sur une période donné et un seuil fixe.", "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period}. Seuls les jours avec au moins {thresh} sont comptés.", "long_name": "Nombre de jours avec un flux de précipitations supérieur au seuil de base." }, "DAYS_OVER_PRECIP_DOY_THRESH": { - "title": "Nombre de jours avec précipitation où la précipitation est au-dessus un centile quotidien donné", - "abstract": "Nombre de jours d'une période où la précipitation est au-dessus un centile quotidien donné et d'un seuil fixe.", + "title": "Nombre de jours avec précipitation où la précipitation est au-dessus d'un centile quotidien donné", + "abstract": "Nombre de jours d'une période où la précipitation est au-dessus d'un centile quotidien donné et d'un seuil fixe.", "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien. Seuls les jours avec au moins {thresh} sont comptés. Le {pr_per_thresh}e centile est calculé sur une fenêtre glissante de {pr_per_window} jour(s) de la période {pr_per_period}.", - "long_name": "Nombre de jours avec précipitation où la précipitation est au-dessus un centile quotidien donné" + "long_name": "Nombre de jours avec précipitation où la précipitation est au-dessus d'un centile quotidien donné" }, "FRACTION_OVER_PRECIP_THRESH": { "title": "Fraction des jours avec précipitation où la précipitation est au-dessus d'un centile quotidien.", "abstract": "Fraction des jours avec précipitation d'une période où la précipitation est au-dessus d'un centile quotidien. La référence est le nombre de jours où la précipitation est au-dessus d'un seuil fixe.", - "description": "Fraction {freq:f} des jours avec précipitation où la précipitation est au-dessus d'un centile quotidien. La référence est le nombre jours où la précipitation est au-dessus d'un seuil fixe.", + "description": "Fraction {freq:f} des jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien. La référence est le nombre jours où la précipitation est au-dessus d'un seuil fixe.", "long_name": "Fraction des jours avec précipitation où la précipitation est au-dessus d'un centile quotidien." }, "FRACTION_OVER_PRECIP_DOY_THRESH": { - "title": "Fraction de jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien", + "title": "Fraction de jours avec précipitation où la précipitation est au-dessus d'un centile quotidien", "abstract": "Fraction de jours d'une période où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien et d'un seuil fixe.", "description": "Fraction {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien. Seuls les jours avec au moins {thresh} sont comptés. Le {pr_per_thresh}e centile est calculé sur une fenêtre glissante de {pr_per_window} jour(s) de la période {pr_per_period}.", - "long_name": "Fraction de jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien" + "long_name": "Fraction de jours avec précipitation où la précipitation est au-dessus d'un centile quotidien" }, "LIQUID_PRECIP_RATIO": { "title": "Fraction liquide de la précipitation totale", @@ -948,7 +948,7 @@ "WIND_CHILL": { "title": "Facteur éolien", "abstract": "Le facteur éolien est un indice qui équivaut à la sensation du froid par un individu moyen. Il est calculé à partir de la température et de la vitesse du vent à 10 m. Tel que définit par Environnement et Changement Climatique Canada, une seconde formule est utilisée pour les vents faibles. La formule standard est sinon la même qu'utilisée aux États-Unis.", - "description": "L'indice de refroiddissement éolien, équivalent à la température ressentie due au vent froid par un individu moyen.", + "description": "L'indice de refroiddissement éolien, équivalent à la température ressentie due au vent par un individu moyen.", "long_name": "Indice de facteur éolien" }, "HUMIDEX": { @@ -983,38 +983,38 @@ }, "DRY_SPELL_FREQUENCY": { "title": "Fréquence des périodes sèches", - "abstract": "Fréquence des périodes sèches de `N` jours et plus, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donné sont inférieurs à un seuil donné.", + "abstract": "Fréquence des périodes sèches de `N` jours et plus, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donné sont inférieures à un seuil donné.", "description": "Fréquence {freq:f} des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}.", "long_name": "Fréquence des périodes sèches" }, "DRY_SPELL_TOTAL_LENGTH": { - "title": "Durée totale en jours des périodes séches", - "abstract": "Durée totale en jours des périodes séches de `N` jours et plus, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donné sont inférieures à un seuil donné.", - "description": "Durée totale {freq:f} en jours des périodes séches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}.", - "long_name": "Durée totale en jours des périodes séches" + "title": "Durée totale en jours des périodes sèches", + "abstract": "Durée totale en jours des périodes sèches de `N` jours et plus, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donné sont inférieures à un seuil donné.", + "description": "Durée totale {freq:f} en jours des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}.", + "long_name": "Durée totale en jours des périodes sèches" }, "COLD_AND_DRY_DAYS": { "title": "Nombre de jours froide et secs", - "abstract": "Nombre de jours où la température est en dessous un centile donné et les précipitations en dessous un centile donné.", - "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et les précipitations en dessous du {pr_per_thresh}e centile.", + "abstract": "Nombre de jours où la température et la précipitation sont en dessous de centiles donnés.", + "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation en dessous du {pr_per_thresh}e centile.", "long_name": "Nombre {freq:m} de jours froids et secs" }, "WARM_AND_DRY_DAYS": { "title": "Nombre de jours chauds et secs", - "abstract": "Nombre de jours où la température est au-dessus du un centile donné et les précipitations en dessous un centile donné.", - "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et les précipitations en dessous du {pr_per_thresh}e centile.", + "abstract": "Nombre de jours où la température est au-dessus d'un centile donné et la précipitation en dessous d'un centile donné.", + "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation en dessous du {pr_per_thresh}e centile.", "long_name": "Nombre {freq:m} de jours chauds et secs" }, "WARM_AND_WET_DAYS": { "title": "Nombre de jours chauds avec précipitation", - "abstract": "Nombre de jours où la température est au-dessus du un centile donné et les précipitations au-dessus du un centile donné.", - "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et les précipitations au-dessus du {pr_per_thresh}e centile.", + "abstract": "Nombre de jours où la température et la précipitation sont au-dessus de centiles donnés.", + "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile.", "long_name": "Nombre {freq:m} de jours chauds avec précipitation" }, "COLD_AND_WET_DAYS": { "title": "Nombre de jours froids avec précipitation", - "abstract": "Nombre de jours où la température est en dessous un centile donné et les précipitations au-dessus du un centile donné.", - "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et les précipitations au-dessus du {pr_per_thresh}e centile.", + "abstract": "Nombre de jours où la température est en dessous d'un centile donné et la précipitation au-dessus d'un centile donné.", + "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile.", "long_name": "Nombre {freq:m} de jours froids avec précipitation" }, "CALM_DAYS": { From 092a44dbe2004ce00538b9a22cca1238390ffcc7 Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 22 Aug 2022 17:27:20 -0400 Subject: [PATCH 040/106] Apply suggestions from code review Co-authored-by: juliettelavoie --- xclim/data/fr.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 33db02235..4fc717930 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -522,7 +522,7 @@ }, "FROST_SEASON_LENGTH": { "long_name": "Durée de la saison de gel", - "description": "Nombre {freq} de jours entre la première occurrence d'au moins {window} jours consécutifs avec une température minimale journalière inférieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs avec une température minimale journalière supérieure au point de congélation après {mid_date}.", + "description": "Nombre {freq} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale journalière inférieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale journalière supérieure au point de congélation après {mid_date}.", "title": "Durée de la saison de gel", "abstract": "Durée de la saison de gel, définie comme la période pendant laquelle la température minimale quotidnne est inférieure à 0°C sans fenêtre de dégel de plusieurs jours, le dégel se produisant après une date calendaire médiane." }, @@ -542,13 +542,13 @@ "long_name": "Durée maximale des périodes de gel", "description": "Durée maximale {freq:f} des périodes où la température minimale quotidienne est sous {thresh}.", "title": "Durée maximale des périodes de gel", - "abstract": "Durée maximale des périodes consécutives où la température minimale quotidienne est sous 0°C." + "abstract": "Durée maximale des périodes consécutives où la température minimale quotidienne est sous un seuil donné." }, "FROST_FREE_SEASON_LENGTH": { "long_name": "Durée de la saison sans gel", - "description": "Nombre {freq} de jours entre la première occurrence d'au moins {window} jours consécutifs avec une température minimale journalière supérieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs avec une température minimale journalière inférieure au point de congélation après {mid_date}.", + "description": "Nombre {freq} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quoditienne supérieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne inférieure au point de congélation après {mid_date}.", "title": "Durée de la saison sans gel", - "abstract": "Durée de la saison sans gel, définie comme la période pendant laquelle la température minimale quotidnne est supérieure à 0°C sans fenêtre de gel de plusieurs jours, le gel se produisant après une date calendaire médiane." + "abstract": "Durée de la saison sans gel, définie comme la période pendant laquelle la température minimale quotidienne est supérieure à 0°C sans fenêtre de gel de plusieurs jours, le gel se produisant après une date calendaire médiane." }, "FROST_FREE_SEASON_START": { "long_name": "Premier jour de dépassement constant du seuil de température", @@ -638,7 +638,7 @@ "long_name": "Nombre de périodes chaudes", "description": "Nombre {freq} de périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède {thresh_tasmax} durant au moins {window} jours.", "title": "Fréquences des périodes chaudes", - "abstract": "Nombre de périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède un seuil spécifique durant un minimum de jours." + "abstract": "Nombre de périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède un seuil spécifique durant un minimum de jours donné." }, "LAST_SPRING_FROST": { "long_name": "Jour de l'année du dernier gel printanier", @@ -660,15 +660,15 @@ }, "GROWING_SEASON_END": { "long_name": "Jour de l'année de la fin de la saison de croissance", - "description": "Jour de l'année du début de la saison de croissance, défini comme le premier jour de température constante supérieure ou égale au seuil de {thresh} après une série de {window} jours inférieurs à la température seuil, survenant après {mid_date}.", + "description": "Jour de l'année du début de la saison de croissance, défini comme le premier jour après {mid_date} ayant une température supérieure ou égale à {thresh} après une série de {window} jours ayant une température inférieure à {thresh}.", "title": "Fin de la saison de croissance", - "abstract": "Le premier jour où la température est inférieure à un certain seuil pendant un certain nombre de jours consécutifs après une date de calendrier spécifique." + "abstract": "Le premier jour où la température est inférieure à un certain seuil pendant un certain nombre de jours consécutifs après une date de calendrier donnée." }, "FROST_FREE_SEASON_END": { "long_name": "Jour de l'année de la fin de la saison sans gel", "description": "Jour de l'année de la fin de la saison sans gel. La saison sans gel est définie comme l'intervalle entre la première série de {window} jours où la température quotidienne est au-dessus de {thresh} et la première série (après le {mid_date}) de {window} jours où elle est sous {thresh}.", "title": "Fin de la saison sans gel", - "abstract": "Premier jour où la température est inférieure à un certain seuil donné depuis un certain nombre de jours consécutifs." + "abstract": "Premier jour où la température est inférieure à un seuil donné depuis un certain nombre de jours consécutifs." }, "FWI": { "description": "L'IFM est formé de six composantes qui tiennent compte des effets de la teneur en eau des combustibles et des conditions météorologiques sur le comportement du feu.", @@ -755,7 +755,7 @@ }, "FIRST_DAY_BELOW": { "long_name": "Premier jour de l'année avec une température sous un seuil", - "description": "Premier jour de l'année avec une température sous {thresh} pour au moins {window} jours après {after_date}.", + "description": "Premier jour de l'année après {after_date} ayant une température sous {thresh} pour au moins {window} jours .", "title": "Premier jour de l'année de températures sous un seuil", "abstract": "Calcule le premier jour d'une période où la température est inférieure à un certain seuil pendant un nombre de jours, après une date de calendrier donnée." }, @@ -905,7 +905,7 @@ }, "WARM_SPELL_DURATION_INDEX": { "title": "Indice de durée des vagues de chaleur", - "abstract": "Nombre de jours de la série avec durée minimale où la température maximale quotidienne dépasse un percentile donné. Le seuil percentile des températures doit être calculé avec une fenêtre mobile d'un nombre de jours donné.", + "abstract": "Nombre de jours de la série avec durée minimale où la température maximale quotidienne dépasse un centile donné. Le seuil de centile des températures doit être calculé avec une fenêtre mobile d'un nombre de jours donné.", "description": "Nombre de jours avec au moins {window} jours consécutifs où la température maximale quotidienne est supérieure au(x) {tasmax_per_thresh}e centile(s). Une fenêtre de {tasmax_per_window} jour(s), centrée sur chaque jour du calendrier de la période {tasmax_per_period}, est utilisée pour calculer le(s) {tasmax_per_thresh}e(s) centile(s).", "long_name": "Nombre de jours faisant partie d'une vague de chaleur définie par un centile" }, @@ -923,8 +923,8 @@ }, "CORN_HEAT_UNITS": { "title": "Unités thermiques maïs", - "abstract": "Indice basé sur la température utilisé pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température minimale quotidienne et maximale excèdent des seuils donnés.", - "description": "Indice basé sur la température utilisé pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température minimale quotidienne et maximale excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement.", + "abstract": "Indice basé sur la température utilisée pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température minimale quotidienne et la température maximale quotidienne excèdent des seuils donnés.", + "description": "Indice basé sur la température utilisée pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température minimale quotidienne et et la température maximale quotidienne excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement.", "long_name": "Unités thermiques maïs" }, "FREEZETHAW_SPELL_FREQUENCY": { From dd62c25ea1ce2515113a4d1ac014aa985d7a2ec5 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 24 Aug 2022 09:57:01 -0400 Subject: [PATCH 041/106] temperatures should be singular --- xclim/data/fr.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 4fc717930..56573fe1f 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -291,21 +291,21 @@ }, "HEAT_WAVE_FREQUENCY": { "long_name": "Nombre de vagues de chaleur", - "description": "Nombre {freq:m} de vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", + "description": "Nombre {freq:m} de vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Fréquence des vagues de chaleur", - "abstract": "Nombre de vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." + "abstract": "Nombre de vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_TOTAL_LENGTH": { "long_name": "Durée totale des vagues de chaleur", - "description": "Durée totale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", + "description": "Durée totale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Durée totale des vagues de chaleur", - "abstract": "Durée totale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." + "abstract": "Durée totale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_MAX_LENGTH": { "long_name": "Durée maximale des vagues de chaleur", - "description": "Durée maximale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", + "description": "Durée maximale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Durée maximale des vagues de chaleur", - "abstract": "Durée maximale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimales et maximales quotidiennes excèdent des seuils donnés durant un certain nombre de jours." + "abstract": "Durée maximale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_INDEX": { "long_name": "Nombre de jours de vague de chaleur", @@ -314,7 +314,7 @@ "abstract": "Nombre de jours de vagues de chaleur. Une vague de chaleur se produit lorsque la température maximale quotidienne excède un seuil donné durant un certain nombre de jours." }, "TG": { - "long_name": "Moyenne des températures maximales et minimales quotidennes", + "long_name": "Moyenne des températures maximale et minimale quotidennes", "description": "Température quotidienne moyenne estimée par la moyenne des températures maximale et minimale", "title": "Température moyenne", "abstract": "La température quotidienne en assumant une distribution symétrique des températures (Tg = (Tx + Tn) / 2)." From 3db42240a09e66fa7a5d11eb81ac1a6916ac4f03 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 24 Aug 2022 10:01:50 -0400 Subject: [PATCH 042/106] calendar date --- xclim/data/fr.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 56573fe1f..c737d0c4e 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -524,7 +524,7 @@ "long_name": "Durée de la saison de gel", "description": "Nombre {freq} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale journalière inférieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale journalière supérieure au point de congélation après {mid_date}.", "title": "Durée de la saison de gel", - "abstract": "Durée de la saison de gel, définie comme la période pendant laquelle la température minimale quotidnne est inférieure à 0°C sans fenêtre de dégel de plusieurs jours, le dégel se produisant après une date calendaire médiane." + "abstract": "Durée de la saison de gel, définie comme la période pendant laquelle la température minimale quotidnne est inférieure à 0°C sans fenêtre de dégel de plusieurs jours, le dégel se produisant après une date du calendrier médiane." }, "FROST_DAYS": { "long_name": "Nombre de jours de gel", @@ -548,7 +548,7 @@ "long_name": "Durée de la saison sans gel", "description": "Nombre {freq} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quoditienne supérieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne inférieure au point de congélation après {mid_date}.", "title": "Durée de la saison sans gel", - "abstract": "Durée de la saison sans gel, définie comme la période pendant laquelle la température minimale quotidienne est supérieure à 0°C sans fenêtre de gel de plusieurs jours, le gel se produisant après une date calendaire médiane." + "abstract": "Durée de la saison sans gel, définie comme la période pendant laquelle la température minimale quotidienne est supérieure à 0°C sans fenêtre de gel de plusieurs jours, le gel se produisant après une date du calendrier médiane." }, "FROST_FREE_SEASON_START": { "long_name": "Premier jour de dépassement constant du seuil de température", From a64e7363448183f2a847436de30d7c404b34c898 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 24 Aug 2022 10:04:55 -0400 Subject: [PATCH 043/106] typo fix --- xclim/data/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index c737d0c4e..9d9b6ff44 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -524,7 +524,7 @@ "long_name": "Durée de la saison de gel", "description": "Nombre {freq} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale journalière inférieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale journalière supérieure au point de congélation après {mid_date}.", "title": "Durée de la saison de gel", - "abstract": "Durée de la saison de gel, définie comme la période pendant laquelle la température minimale quotidnne est inférieure à 0°C sans fenêtre de dégel de plusieurs jours, le dégel se produisant après une date du calendrier médiane." + "abstract": "Durée de la saison de gel, définie comme la période pendant laquelle la température minimale quotidienne est inférieure à 0°C sans fenêtre de dégel de plusieurs jours, le dégel se produisant après une date du calendrier médiane." }, "FROST_DAYS": { "long_name": "Nombre de jours de gel", From 018618a68ae3b3991bfc392c0fa6a8c387cc010f Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 24 Aug 2022 14:04:22 -0400 Subject: [PATCH 044/106] Apply suggestions from code review Co-authored-by: RondeauG <38501935+RondeauG@users.noreply.github.com> Co-authored-by: juliettelavoie --- xclim/data/fr.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 9d9b6ff44..1da83adc8 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -183,7 +183,7 @@ }, "WETDAY_PROP": { "long_name": "Proportion de jours avec précipitation (précip >= {thresh})", - "description": "Propotion {freq:m} de jours où les précipitations sont au-dessus de {thresh}.", + "description": "Proportion {freq:m} de jours où les précipitations sont au-dessus de {thresh}.", "title": "Proportion de jours avec précipitation", "abstract": "Proportion de jours où les précipitations sont au-dessus d'un seuil." }, @@ -237,7 +237,7 @@ }, "SPEI": { "long_name": "Indice de précipitation évapotranspiration standardisé (SPEI)", - "description": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile de {window} {freq:nom}, normalisé tel que la moyenne de SPEI est 0 pour les données de calibration. L'unité de fenêtre `X` est l'unité de temps determinée par la fréquence de rééchantillonnage {freq}.", + "description": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile de {window} {freq:nom}, normalisé tel que la moyenne de SPEI est 0 pour les données de calibration. L'unité de la fenêtre `X` est l'unité de temps determinée par la fréquence de rééchantillonnage {freq}.", "title": "Indice de précipitation évapotranspiration standardisé (SPEI)", "abstract": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile, normalisé tel que la moyenne de SPEI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de rééchantillonnage." }, @@ -495,7 +495,7 @@ }, "BIOLOGICALLY_EFFECTIVE_DEGREE_DAYS": { "long_name": "Degrés-jours biologiquement actifs", - "description": "Accumulation des degrés-jours borné par Tmin > {thresh_tasmin} et Tmax-Tmin < {max_daily_degree_days}. Les degrés jours quotidiens sont corrigés selon Tmax-Tmin et selon un coefficient de durée du jour dépendent de la latitude.", + "description": "Cumul des degrés-jours borné par Tmin > {thresh_tasmin} et Tmax-Tmin < {max_daily_degree_days}. Les degrés jours quotidiens sont corrigés selon Tmax-Tmin et selon un coefficient de durée du jour dépendant de la latitude.", "title": "Degrés-jours biologiquement actifs", "comment": "Formule originale prise de Gladstones 1992.", "abstract": "Indice basé sur une relation non linéaire entre la température et les processus physiologiques. Il intègre une borne supérieure du cumul, un coefficient lié à la durée du jour et une correction liée à l'écart journalier des températures." @@ -515,7 +515,7 @@ "abstract": "Indice climatique basé sur la température moyenne du mois le plus chaud et un coefficient basé sur la latitude pour tenir compte de la durée plus longue du jour favorisant les conditions de croissance. Développé spécifiquement pour la viticulture." }, "FRESHET_START": { - "long_name": "Premier jour de dépassement constant du seuil de température", + "long_name": "Premier jour ayant un dépassement constant du seuil de température", "description": "Jour de l'année du début de la crue printanière, défini comme le premier jour où un seuil de température de {thresh} est dépassé pendant au moins {window} jours.", "title": "Jour de l'année du début de la crue nivale", "abstract": "Premier jour où la température excède un certain seuil depuis un certain nombre de jours consécutifs." @@ -551,7 +551,7 @@ "abstract": "Durée de la saison sans gel, définie comme la période pendant laquelle la température minimale quotidienne est supérieure à 0°C sans fenêtre de gel de plusieurs jours, le gel se produisant après une date du calendrier médiane." }, "FROST_FREE_SEASON_START": { - "long_name": "Premier jour de dépassement constant du seuil de température", + "long_name": "Premier jour ayant un dépassement constant du seuil de température", "description": "Jour de l'année du début de la saison sans gel, défini comme le {window}e jour consécutif où la température excède {thresh}.", "title": "Jour de l'année du début de la saison sans gel", "abstract": "Premier jour où la température excède un certain seuil donné depuis un certain nombre de jours consécutifs." @@ -563,7 +563,7 @@ "abstract": "Nombre de jours entre la première occurrence d'une série de jours avec une température moyenne quotidienne supérieure à un seuil et la première occurrence d'une série de jours avec une température moyenne quotidienne inférieure à ce même seuil, survenant après une date de calendrier donnée." }, "GROWING_SEASON_START": { - "long_name": "Nième jour consécutif où la température excède un seuil", + "long_name": "Premier jour ayant un dépassement constant du seuil de température", "description": "Jour de l'année du début de la saison de croissance, défini comme le premier jour de température constante supérieure ou égale au seuil de {thresh} après une série de {window} jours inférieurs à la température seuil.", "title": "Jour de l'année du début de la saison de croissance", "abstract": "Premier jour où la température excède un certain seuil depuis un certain nombre de jours consécutifs." @@ -587,10 +587,10 @@ "abstract": "Mesure des oscillations du débit relatif au débit moyen, quantifiant la fréquence et la rapidité des changements de débits." }, "FREQ_ANALYSIS": { - "long_name": "Période de retour du montant de débit", + "long_name": "Période de retour du débit", "description": "Analyse de fréquence de débit du courant pour le {mode} {indexer} du flux de {window} jours, estimé avec la distribution {dist:f}.", "title": "Période de retour", - "abstract": "Analyse de fréquence de débit du courant selon un mode et une distribution." + "abstract": "Analyse fréquentielle des débits selon un mode et une distribution." }, "STATS": { "long_name": "Statistique du flux quotidien", From 5bd03d06121512dd098208212f4037a6ae7d8298 Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 24 Aug 2022 16:34:44 -0400 Subject: [PATCH 045/106] Apply suggestions from code review Co-authored-by: RondeauG <38501935+RondeauG@users.noreply.github.com> --- xclim/data/fr.json | 48 +++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 1da83adc8..da6c161a2 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -243,7 +243,7 @@ }, "DC": { "long_name": "Indice de sécheresse", - "description": "Code numérique estimant la teneur en humidité moyenne de couches organiques.", + "description": "Code numérique estimant la teneur en humidité moyenne des couches organiques.", "title": "Indice de sécheresse quotidien", "abstract": "L'indice de sécheresse fait partie du système canadien des Indices Forêt-Météo. C'est un code numérique estimant la teneur en humidité moyenne de couches organiques." }, @@ -593,7 +593,7 @@ "abstract": "Analyse fréquentielle des débits selon un mode et une distribution." }, "STATS": { - "long_name": "Statistique du flux quotidien", + "long_name": "Statistique des débits quotidiens", "description": "{op} du {indexer} {freq:m} du flux quotidien.", "title": "Calcul de statistiques sur des sous-périodes.", "abstract": "" @@ -642,9 +642,9 @@ }, "LAST_SPRING_FROST": { "long_name": "Jour de l'année du dernier gel printanier", - "description": "Jour de l'année du dernier gel printanier, defini comme le dernier jour où la température quotidienne moyenne reste sous {thresh} durant au moins {window} jours avant une certaine date ({before_date}).", + "description": "Jour de l'année du dernier gel printanier, défini comme le dernier jour où la température quotidienne moyenne reste sous {thresh} durant au moins {window} jours avant une certaine date ({before_date}).", "title": "Jour de l'année du dernier gel printanier", - "abstract": "Dernier jour où la température est inférieur à un seuil donné durant un certain nombre de jours, limité par une date de calendrier finale." + "abstract": "Dernier jour où la température est inférieure à un seuil donné durant un certain nombre de jours, limité par une date de calendrier finale." }, "HOT_SPELL_MAX_LENGTH": { "long_name": "Longueur maximale des périodes chaudes", @@ -653,7 +653,7 @@ "abstract": "Longueur maximale des périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède un seuil spécifique durant un minimum de jours." }, "CONSECUTIVE_FROST_FREE_DAYS": { - "long_name": "Nombre maximal de jours consécutifs avec Tmin supérieure à 0°C", + "long_name": "Nombre maximal de jours consécutifs avec Tmin supérieur à 0°C", "description": "Nombre maximal {freq} de jours consécutifs où la température minimale quotidienne excède ou est égale à {thresh}.", "title": "Nombre maximal de jours consécutifs sans gel", "abstract": "Nombre maximal de jours consécutifs sans gel où la température minimale quotidienne est au-dessus ou égale à 0°C." @@ -712,16 +712,16 @@ "description": "Direction de provenance du vent calculée à partir des deux composantes uas et vas. Les vents du nord ont une direction de 360° et les vents de moins de {calm_wind_thresh} ont une direction de 0°." }, "WIND_VECTOR_FROM_SPEED": { - "title": "Vitesse cartésienne du vent à partir de la magnitude et direction de provenance.", - "abstract": "Calcul des deux composantes ouest-est et nord-sud du vent à partir de la magnitude et la direction de provenance de sa vitesse." + "title": "Vitesse cartésienne du vent à partir de la magnitude et de la direction.", + "abstract": "Calcul des deux composantes ouest-est et nord-sud du vent à partir de la magnitude et de la direction." }, "WIND_VECTOR_FROM_SPEED.uas": { "long_name": "Vent d'ouest près de la surface", - "description": "Vitesse d'ouest du vent de surface calculé à partir de la norme de sa vitesse et de sa direction de provenance." + "description": "Vitesse du vent d'ouest près de la surface calculé à partir de la vitesse et de la direction du vent." }, "WIND_VECTOR_FROM_SPEED.vas": { "long_name": "Vent du sud près de la surface", - "description": "Vitesse du sud du vent de surface calculé à partir de la norme de sa vitesse et de sa direction de provenance." + "description": "Vitesse du vent du sud près de la surface calculé à partir de la vitesse et de la direction du vent." }, "E_SAT": { "long_name": "Pression de vapeur saturante", @@ -731,38 +731,38 @@ }, "HURS_FROMDEWPOINT": { "long_name": "Humidité relative", - "description": "Calculée à partir de la température et du point de rosée à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", + "description": "Humidité relative calculée à partir de la température et du point de rosée à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", "title": "Humidité relative calculée à partir de la température et du point de rosée", - "abstract": "Calcul de l'humidité relative calculée à partir de la température et du point de rosée à l'aide de la pression de vapeur saturante." + "abstract": "Humidité relative calculée à partir de la température et du point de rosée à l'aide de la pression de vapeur saturante." }, "HURS": { "long_name": "Humidité relative", - "description": "Calculée à partir de la température, de l'humidité spécifique et de la pression à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", - "title": "Humidité relative calculée à partir de la température, l'humidité spécifique et de la pression", - "abstract": "Calcul de l'humidité relative calculée à partir de la température, de l'humidité spécifique et de la pression à l'aide de la pression de vapeur saturante." + "description": "Humidité relative calculée à partir de la température, de l'humidité spécifique et de la pression à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", + "title": "Humidité relative calculée à partir de la température, de l'humidité spécifique et de la pression", + "abstract": "Humidité relative calculée à partir de la température, de l'humidité spécifique et de la pression à l'aide de la pression de vapeur saturante." }, "HUSS": { "long_name": "Humidité spécifique", - "description": "Calculée à partir de la température, de l'humidité relative et de la pression à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", - "title": "Humidité spécifique calculée à partir de la température, l'humidité relative et de la pression", - "abstract": "Calcul de l'humidité spécifique calculée à partir de la température, de l'humidité relative et de la pression à l'aide de la pression de vapeur saturante." + "description": "Humidité spécifique calculée à partir de la température, de l'humidité relative et de la pression à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", + "title": "Humidité spécifique calculée à partir de la température, de l'humidité relative et de la pression", + "abstract": "Humidité spécifique calculée à partir de la température, de l'humidité relative et de la pression à l'aide de la pression de vapeur saturante." }, "HUSS_FROMDEWPOINT": { "long_name": "Humidité spécifique", - "description": "Calculée à partir de la température du point de rosée et de la pression à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", + "description": "Humidité spécifique calculée à partir de la température du point de rosée et de la pression à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", "title": "Humidité spécifique calculée à partir de la température du point de rosée et de la pression", - "abstract": "Calcul de l'humidité spécifique calculée à partir de la température du point de rosée et de la pression à l'aide de la pression de vapeur saturante." + "abstract": "Humidité spécifique calculée à partir de la température du point de rosée et de la pression à l'aide de la pression de vapeur saturante." }, "FIRST_DAY_BELOW": { "long_name": "Premier jour de l'année avec une température sous un seuil", - "description": "Premier jour de l'année après {after_date} ayant une température sous {thresh} pour au moins {window} jours .", - "title": "Premier jour de l'année de températures sous un seuil", + "description": "Premier jour de l'année après {after_date} ayant une température sous {thresh} pour au moins {window} jours.", + "title": "Premier jour de l'année avec une température sous un seuil", "abstract": "Calcule le premier jour d'une période où la température est inférieure à un certain seuil pendant un nombre de jours, après une date de calendrier donnée." }, "FIRST_DAY_ABOVE": { "long_name": "Premier jour de l'année avec une température au-dessus d'un seuil", "description": "Premier jour de l'année avec une température au-dessus de {thresh} pour au moins {window} jours après {after_date}.", - "title": "Premier jour de l'année de températures au-dessus d'un seuil", + "title": "Premier jour de l'année avec un température au-dessus d'un seuil", "abstract": "Calcule le premier jour d'une période où la température est supérieure à un certain seuil pendant un nombre de jours, après une date de calendrier donnée." }, "DEGREE_DAYS_EXCEEDANCE_DATE": { @@ -875,7 +875,7 @@ }, "DAYS_OVER_PRECIP_THRESH": { "title": "Nombre de jours avec précipitation où la précipitation est au-dessus d'un centile donné", - "abstract": "Nombre de jours d'une période où la précipitation est au-dessus d'un centile donné, calculé sur une période donné et un seuil fixe.", + "abstract": "Nombre de jours d'une période où la précipitation est au-dessus d'un centile donné, calculé sur une période donnée et un seuil fixe.", "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period}. Seuls les jours avec au moins {thresh} sont comptés.", "long_name": "Nombre de jours avec un flux de précipitations supérieur au seuil de base." }, @@ -994,7 +994,7 @@ "long_name": "Durée totale en jours des périodes sèches" }, "COLD_AND_DRY_DAYS": { - "title": "Nombre de jours froide et secs", + "title": "Nombre de jours froids et secs", "abstract": "Nombre de jours où la température et la précipitation sont en dessous de centiles donnés.", "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation en dessous du {pr_per_thresh}e centile.", "long_name": "Nombre {freq:m} de jours froids et secs" From 721b807986832ac7a93862dfc720095c3d752118 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 24 Aug 2022 16:32:11 -0400 Subject: [PATCH 046/106] fix GROWING_SEASON_END description, missing accents and punctuation, and bad grammar --- xclim/data/fr.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index da6c161a2..330f02c79 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -231,15 +231,15 @@ }, "SPI": { "long_name": "Indice de précipitation standardisé (SPI)", - "description": "Précipitation sur une fenêtre mobile de {window} {freq:nom}, normalisée telle que la moyenne de SPI est 0 pour les données de calibration. L'unité de la fenêtre 'X' est l'unité de temps déterminée par la fréquence de rééchantillonage", + "description": "Précipitation sur une fenêtre mobile de {window} {freq:nom}, normalisée telle que la moyenne du SPI est 0 pour les données de calibration. L'unité de la fenêtre 'X' est l'unité de temps déterminée par la fréquence de rééchantillonage,", "title": "Indice de précipitation standardisé (SPI)", - "abstract": "Précipitation sur une fenêtre mobile, normalisée telle que la moyenne de SPI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de rééchantillonnage." + "abstract": "Précipitation sur une fenêtre mobile, normalisée telle que la moyenne du SPI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de rééchantillonnage." }, "SPEI": { "long_name": "Indice de précipitation évapotranspiration standardisé (SPEI)", - "description": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile de {window} {freq:nom}, normalisé tel que la moyenne de SPEI est 0 pour les données de calibration. L'unité de la fenêtre `X` est l'unité de temps determinée par la fréquence de rééchantillonnage {freq}.", + "description": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile de {window} {freq:nom}, normalisé tel que la moyenne du SPEI est 0 pour les données de calibration. L'unité de la fenêtre `X` est l'unité de temps determinée par la fréquence de rééchantillonnage {freq}.", "title": "Indice de précipitation évapotranspiration standardisé (SPEI)", - "abstract": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile, normalisé tel que la moyenne de SPEI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de rééchantillonnage." + "abstract": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile, normalisé tel que la moyenne du SPEI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de rééchantillonnage." }, "DC": { "long_name": "Indice de sécheresse", @@ -435,9 +435,9 @@ }, "COLD_SPELL_DURATION_INDEX": { "long_name": "Indice de durée des vagues de froid", - "description": "{freq} nombre de jours avec au moins {window} jours consécutifs où la température minimale quotidienne est inférieure au(x) {tasmin_per_thresh} centile. Une vague de froid se produit lorsque la température minimale quotidienne est inférieure à un percentile donné pendant au moins {window} jours consécutifs.", + "description": "{freq} nombre de jours avec au moins {window} jours consécutifs où la température minimale quotidienne est inférieure au(x) {tasmin_per_thresh}ᵉ centile. Une vague de froid se produit lorsque la température minimale quotidienne est inférieure à un centile donné pendant au moins {window} jours consécutifs.", "title": "Indice de durée des vagues de froid", - "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est inférieure à un percentile donné pendant au moins {window} jours consécutifs." + "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est inférieure à un centile donné pendant au moins {window} jours consécutifs." }, "COLD_SPELL_FREQUENCY": { "long_name": "Fréquence des vagues de froid", @@ -660,7 +660,7 @@ }, "GROWING_SEASON_END": { "long_name": "Jour de l'année de la fin de la saison de croissance", - "description": "Jour de l'année du début de la saison de croissance, défini comme le premier jour après {mid_date} ayant une température supérieure ou égale à {thresh} après une série de {window} jours ayant une température inférieure à {thresh}.", + "description": "Jour de l'année de la fin de la saison de croissance, défini comme le premier jour après {mid_date} ayant une température supérieure ou égale à {thresh} après une série de {window} jours ayant une température inférieure à {thresh}.", "title": "Fin de la saison de croissance", "abstract": "Le premier jour où la température est inférieure à un certain seuil pendant un certain nombre de jours consécutifs après une date de calendrier donnée." }, @@ -930,19 +930,19 @@ "FREEZETHAW_SPELL_FREQUENCY": { "title": "Fréquence des événements de gel-dégel quotidien", "abstract": "Nombre de périodes de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", - "description": "Fréquence {freq:f} des événements de gel-dégel quotidiens (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consecutif(s)).", + "description": "Fréquence {freq:f} des événements de gel-dégel quotidiens (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", "long_name": "Fréquence {freq:f} des événements de gel-dégel quotidien" }, "FREEZETHAW_SPELL_MAX_LENGTH": { "title": "Durée maximale des séries des événements de gel-dégel quotidien", "abstract": "Durée maximale des périodes de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", - "description": "Durée maximale {freq:f} des séries des événements de gel-dégel quotidiens (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consecutif(s)).", + "description": "Durée maximale {freq:f} des séries des événements de gel-dégel quotidiens (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", "long_name": "Durée maximale {freq:f} des séries des événements de gel-dégel quotidien" }, "FREEZETHAW_SPELL_MEAN_LENGTH": { "title": "Durée moyenne des séries des événements de gel-dégel quotidien", "abstract": "Durée moyenne des périodes de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", - "description": "Durée moyenne {freq:f} des séries des événements de gel-dégel quotidien (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consecutif(s)).", + "description": "Durée moyenne {freq:f} des séries des événements de gel-dégel quotidien (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", "long_name": "Durée moyenne {freq:f} des séries des événements de gel-dégel quotidien" }, "WIND_CHILL": { From d11ad689a599b366fc91327c193d026cdb1c84a1 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 24 Aug 2022 16:33:58 -0400 Subject: [PATCH 047/106] =?UTF-8?q?r=C3=A9frig=C3=A9r=C3=A9s=20->=20climat?= =?UTF-8?q?is=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xclim/data/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 330f02c79..d3b792463 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -467,7 +467,7 @@ "long_name": "Degrés-jours de climatisation", "description": "Cumul {freq:m} des degrés-jours de climatisation (Température au-dessus de {thresh}).", "title": "Degrés-jours de climatisation", - "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est au-dessus d'un seuil donné et que les immeubles doivent être réfrigérés." + "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est au-dessus d'un seuil donné et que les immeubles doivent être climatisés." }, "HEATING_DEGREE_DAYS": { "long_name": "Degrés-jours de chauffage", From 9ad3dff826a7b4c932d96b38e75135f6ea25bde8 Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 24 Aug 2022 16:38:00 -0400 Subject: [PATCH 048/106] Update xclim/data/fr.json Co-authored-by: juliettelavoie --- xclim/data/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index d3b792463..816d3b159 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -905,7 +905,7 @@ }, "WARM_SPELL_DURATION_INDEX": { "title": "Indice de durée des vagues de chaleur", - "abstract": "Nombre de jours de la série avec durée minimale où la température maximale quotidienne dépasse un centile donné. Le seuil de centile des températures doit être calculé avec une fenêtre mobile d'un nombre de jours donné.", + "abstract": "Nombre de jours consécutifs plus grand qu'un nombre de jour minimal donnée et ayant une température maximale quotidienne plus grande qu'un centile donné. Le seuil de centile des températures doit être calculé avec une fenêtre mobile d'un nombre de jours donné.", "description": "Nombre de jours avec au moins {window} jours consécutifs où la température maximale quotidienne est supérieure au(x) {tasmax_per_thresh}e centile(s). Une fenêtre de {tasmax_per_window} jour(s), centrée sur chaque jour du calendrier de la période {tasmax_per_period}, est utilisée pour calculer le(s) {tasmax_per_thresh}e(s) centile(s).", "long_name": "Nombre de jours faisant partie d'une vague de chaleur définie par un centile" }, From 6464d597d5c79ac859aca600372bcc2bc14a2c26 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 24 Aug 2022 16:45:14 -0400 Subject: [PATCH 049/106] CONSECUTIVE_FROST_DAYS fixes, add croissance to EFFECTIVE_GROWING_DEGREE_DAYS --- xclim/data/fr.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 816d3b159..f7ea2f34d 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -501,9 +501,9 @@ "abstract": "Indice basé sur une relation non linéaire entre la température et les processus physiologiques. Il intègre une borne supérieure du cumul, un coefficient lié à la durée du jour et une correction liée à l'écart journalier des températures." }, "EFFECTIVE_GROWING_DEGREE_DAYS": { - "long_name": "Degrés-jours effectives", + "long_name": "Degrés-jours de croissance effectifs", "description": "Accumulation des degrés-jours borné par (Tmax + Tmin)/2 > {thresh} et des dates de début et fin de la saison de croissance generés dynamiquement.", - "title": "Degrés-jours effectives", + "title": "Degrés-jours effectifs", "comment": "Formule originale prise de Bootsma et al. 2005.", "abstract": "Indice de degrés-jours de croissance basés sur un début et une fin dynamiques de la saison de croissance." }, @@ -539,9 +539,9 @@ "abstract": "Nombre de jours où la température maximale quotidienne est sous 0°C." }, "CONSECUTIVE_FROST_DAYS": { - "long_name": "Durée maximale des périodes de gel", + "long_name": "Nombre maximal de jours de gel consécutifs", "description": "Durée maximale {freq:f} des périodes où la température minimale quotidienne est sous {thresh}.", - "title": "Durée maximale des périodes de gel", + "title": "Nombre maximal de jours de gel consécutifs", "abstract": "Durée maximale des périodes consécutives où la température minimale quotidienne est sous un seuil donné." }, "FROST_FREE_SEASON_LENGTH": { From 9632bff06e96268e673e59381152bef1c418b9c1 Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 24 Aug 2022 16:58:03 -0400 Subject: [PATCH 050/106] Update xclim/data/fr.json Co-authored-by: RondeauG <38501935+RondeauG@users.noreply.github.com> --- xclim/data/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index f7ea2f34d..ec42e9a7c 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -503,7 +503,7 @@ "EFFECTIVE_GROWING_DEGREE_DAYS": { "long_name": "Degrés-jours de croissance effectifs", "description": "Accumulation des degrés-jours borné par (Tmax + Tmin)/2 > {thresh} et des dates de début et fin de la saison de croissance generés dynamiquement.", - "title": "Degrés-jours effectifs", + "title": "Degrés-jours de croissance effectifs", "comment": "Formule originale prise de Bootsma et al. 2005.", "abstract": "Indice de degrés-jours de croissance basés sur un début et une fin dynamiques de la saison de croissance." }, From 1fc05daab230687f9c4fd4aeebf982dcfdce9d8b Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 24 Aug 2022 17:09:08 -0400 Subject: [PATCH 051/106] Apply suggestions from code review Co-authored-by: Pascal Bourgault --- xclim/data/fr.json | 2 +- xclim/indicators/land/_streamflow.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index ec42e9a7c..b2be86887 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -582,7 +582,7 @@ }, "RB_FLASHINESS_INDEX": { "long_name": "Indice Richards-Baker de torrentialité", - "description": "{freq} de R-B indice, un indice mesurant le caractère torrentiel d'un débit de rivière.", + "description": "Indice R-B {freq}, un indice mesurant le caractère torrentiel d'un débit de rivière.", "title": "Indice Richards-Baker de torrentialité", "abstract": "Mesure des oscillations du débit relatif au débit moyen, quantifiant la fréquence et la rapidité des changements de débits." }, diff --git a/xclim/indicators/land/_streamflow.py b/xclim/indicators/land/_streamflow.py index 6fbef469c..b3c59284a 100644 --- a/xclim/indicators/land/_streamflow.py +++ b/xclim/indicators/land/_streamflow.py @@ -99,7 +99,7 @@ def cfcheck(self, **das): identifier="stats", var_name="q{indexer}{op:r}", long_name="Daily flow statistics", - description="{freq} {op} of {indexer} daily flow", + description="{freq} {op} of daily flow ({indexer})", units="m^3 s-1", compute=declare_units(da=None)(generic.select_resample_op), ) From c7887b6abb868dafa150c3e6d0693e49b826459d Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 24 Aug 2022 17:09:51 -0400 Subject: [PATCH 052/106] Update xclim/data/fr.json Co-authored-by: Pascal Bourgault --- xclim/data/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index b2be86887..b21c9f907 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -594,7 +594,7 @@ }, "STATS": { "long_name": "Statistique des débits quotidiens", - "description": "{op} du {indexer} {freq:m} du flux quotidien.", + "description": "{op} {freq:f} des débits quotidiens ({indexer}).", "title": "Calcul de statistiques sur des sous-périodes.", "abstract": "" }, From ee0a61afbdb0924eafdf9ca8fea7ff0138df6b46 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 30 Aug 2022 10:26:50 -0400 Subject: [PATCH 053/106] Addressed French indicator translation comments --- xclim/data/fr.json | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index b21c9f907..4829561bf 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -588,7 +588,7 @@ }, "FREQ_ANALYSIS": { "long_name": "Période de retour du débit", - "description": "Analyse de fréquence de débit du courant pour le {mode} {indexer} du flux de {window} jours, estimé avec la distribution {dist:f}.", + "description": "Analyse fréquentielle de type {dist:f} des débits moyens sur {window} jours, pour le {mode} {indexer}.", "title": "Période de retour", "abstract": "Analyse fréquentielle des débits selon un mode et une distribution." }, @@ -705,11 +705,11 @@ }, "WIND_SPEED_FROM_VECTOR.sfcWind": { "long_name": "Vitesse du vent près de la surface", - "description": "Magnitude de la vitesse du vent calculée à partir des deux composantes uas et vas." + "description": "Magnitude de la vitesse du vent près de la surface calculée à partir des deux variables composantes ('uas' et 'vas')." }, "WIND_SPEED_FROM_VECTOR.sfcWindfromdir": { - "long_name": "Vent près de la surface en provenance d'une certaine direction", - "description": "Direction de provenance du vent calculée à partir des deux composantes uas et vas. Les vents du nord ont une direction de 360° et les vents de moins de {calm_wind_thresh} ont une direction de 0°." + "long_name": "Direction de provenance du vent près de la surface", + "description": "Direction de provenance du vent près de la surface calculée à partir des deux variables composantes ('uas' et 'vas'). Les vents du nord ont une direction de 360° et les vents de moins de {calm_wind_thresh} ont une direction de 0°." }, "WIND_VECTOR_FROM_SPEED": { "title": "Vitesse cartésienne du vent à partir de la magnitude et de la direction.", @@ -928,22 +928,22 @@ "long_name": "Unités thermiques maïs" }, "FREEZETHAW_SPELL_FREQUENCY": { - "title": "Fréquence des événements de gel-dégel quotidien", - "abstract": "Nombre de périodes de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", - "description": "Fréquence {freq:f} des événements de gel-dégel quotidiens (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", - "long_name": "Fréquence {freq:f} des événements de gel-dégel quotidien" + "title": "Fréquence des périodes d'événements consécutifs de gel-dégel", + "abstract": "Fréquence des périodes d'événements consécutifs de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", + "description": "Fréquence {freq:f} périodes d'événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", + "long_name": "Fréquence {freq:f} périodes d'événements consécutifs de gel-dégel" }, "FREEZETHAW_SPELL_MAX_LENGTH": { - "title": "Durée maximale des séries des événements de gel-dégel quotidien", - "abstract": "Durée maximale des périodes de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", - "description": "Durée maximale {freq:f} des séries des événements de gel-dégel quotidiens (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", - "long_name": "Durée maximale {freq:f} des séries des événements de gel-dégel quotidien" + "title": "Durée maximale des périodes d'événements consécutifs de gel-dégel", + "abstract": "Durée maximale des périodes d'événements consécutifs de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", + "description": "Durée maximale {freq:f} des périodes d'événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", + "long_name": "Durée maximale {freq:f} des périodes d'événements consécutifs de gel-dégel" }, "FREEZETHAW_SPELL_MEAN_LENGTH": { - "title": "Durée moyenne des séries des événements de gel-dégel quotidien", - "abstract": "Durée moyenne des périodes de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", - "description": "Durée moyenne {freq:f} des séries des événements de gel-dégel quotidien (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", - "long_name": "Durée moyenne {freq:f} des séries des événements de gel-dégel quotidien" + "title": "Durée moyenne des périodes d'événements consécutifs de gel-dégel", + "abstract": "Durée moyenne des périodes d'événements consécutifs de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", + "description": "Durée moyenne {freq:f} des spériodes d'événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", + "long_name": "Durée moyenne {freq:f} des périodes d'événements consécutifs de gel-dégel" }, "WIND_CHILL": { "title": "Facteur éolien", @@ -983,13 +983,13 @@ }, "DRY_SPELL_FREQUENCY": { "title": "Fréquence des périodes sèches", - "abstract": "Fréquence des périodes sèches de `N` jours et plus, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donné sont inférieures à un seuil donné.", + "abstract": "Fréquence des périodes sèches d'une durée minimale donnée, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donné sont inférieures à un seuil donné.", "description": "Fréquence {freq:f} des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}.", "long_name": "Fréquence des périodes sèches" }, "DRY_SPELL_TOTAL_LENGTH": { "title": "Durée totale en jours des périodes sèches", - "abstract": "Durée totale en jours des périodes sèches de `N` jours et plus, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donné sont inférieures à un seuil donné.", + "abstract": "Durée totale en jours des périodes sèches d'une durée minimale donnée, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donné sont inférieures à un seuil donné.", "description": "Durée totale {freq:f} en jours des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}.", "long_name": "Durée totale en jours des périodes sèches" }, @@ -1006,16 +1006,16 @@ "long_name": "Nombre {freq:m} de jours chauds et secs" }, "WARM_AND_WET_DAYS": { - "title": "Nombre de jours chauds avec précipitation", + "title": "Nombre de jours chauds et humide", "abstract": "Nombre de jours où la température et la précipitation sont au-dessus de centiles donnés.", "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile.", - "long_name": "Nombre {freq:m} de jours chauds avec précipitation" + "long_name": "Nombre {freq:m} de jours chauds et humides" }, "COLD_AND_WET_DAYS": { - "title": "Nombre de jours froids avec précipitation", + "title": "Nombre de jours froids et humide", "abstract": "Nombre de jours où la température est en dessous d'un centile donné et la précipitation au-dessus d'un centile donné.", "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile.", - "long_name": "Nombre {freq:m} de jours froids avec précipitation" + "long_name": "Nombre {freq:m} de jours froids et humides" }, "CALM_DAYS": { "title": "Nombre de jours de vent calme", From 25c351deaac82e3ec536d9b045e3a88b04593bc4 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 30 Aug 2022 15:30:48 -0400 Subject: [PATCH 054/106] fix test --- xclim/testing/tests/test_formatting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xclim/testing/tests/test_formatting.py b/xclim/testing/tests/test_formatting.py index da16f81ca..e271286e8 100644 --- a/xclim/testing/tests/test_formatting.py +++ b/xclim/testing/tests/test_formatting.py @@ -33,7 +33,7 @@ def test_indicator_docstring(): assert doc[6] == "Keywords : health,." assert doc[12] == " Default : `ds.tasmin`. [Required units : [temperature]]" assert ( - doc[35] + doc[38] == " Number of heat wave events (heat_wave_events), with additional attributes: **description**: " "{freq} number of heat wave events within a given period. A heat wave occurs when daily " "minimum and maximum temperatures exceed {thresh_tasmin} and {thresh_tasmax}, respectively, " From 2fb1b466df8fafc3156df322cca87f922d2c5142 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 31 Aug 2022 10:19:23 -0400 Subject: [PATCH 055/106] Remove deprecated types import --- xclim/core/utils.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/xclim/core/utils.py b/xclim/core/utils.py index d3fa239ea..0d0fec901 100644 --- a/xclim/core/utils.py +++ b/xclim/core/utils.py @@ -18,7 +18,6 @@ from inspect import Parameter, _empty # noqa from io import StringIO from pathlib import Path -from types import FunctionType from typing import Callable, Mapping, NewType, Sequence import numpy as np @@ -47,14 +46,12 @@ } -def wrapped_partial( - func: FunctionType, suggested: dict | None = None, **fixed -) -> Callable: +def wrapped_partial(func: Callable, suggested: dict | None = None, **fixed) -> Callable: """Wrap a function, updating its signature but keeping its docstring. Parameters ---------- - func: FunctionType + func: Callable The function to be wrapped suggested : dict, optional Keyword arguments that should have new default values but still appear in the signature. @@ -97,14 +94,14 @@ def wrapped_partial( # TODO Reconsider the utility of this -def walk_map(d: dict, func: FunctionType) -> dict: +def walk_map(d: dict, func: Callable) -> dict: """Apply a function recursively to values of dictionary. Parameters ---------- d: dict Input dictionary, possibly nested. - func: FunctionType + func: Callable Function to apply to dictionary values. Returns From ddefbc48e609926eb6c4177a5d31f0bb41bc68b4 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 31 Aug 2022 12:32:20 -0400 Subject: [PATCH 056/106] Address first round of comments from EmilieBresson --- xclim/data/fr.json | 88 +++++++++++++------------- xclim/indicators/atmos/_temperature.py | 2 +- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 4829561bf..0fbb42eec 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -163,9 +163,9 @@ "abstract": "Maximum de la somme mobile des précipitations quotidiennes pour une période donnée." }, "MAX_PR_INTENSITY": { - "long_name": "Intensité maximale de précipitation durant une fenêtre mobile temporelle", - "description": "Intensité maximale {freq:f} de précipitation sur une fenêtre mobile de {window} h.", - "title": "Intensité de précipitation maximale durant une fenêtre mobile temporelle donnée", + "long_name": "Intensité maximale de précipitation horaire durant une fenêtre mobile temporelle", + "description": "Intensité maximale {freq:f} de précipitation horaire durant une fenêtre mobile de {window} h.", + "title": "Intensité maximale de précipitation horaire durant une fenêtre mobile temporelle donnée", "keywords": "courbes IDF", "abstract": "Maximum de l'intensité de précipitation horaire durant une fenêtre mobile temporelle donnée." }, @@ -177,19 +177,19 @@ }, "WETDAYS": { "long_name": "Nombre de jours avec précipitation", - "description": "Nombre {freq:m} de jours où les précipitations sont au-dessus de {thresh}.", + "description": "Nombre {freq:m} de jours où la précipitation est au-dessus de {thresh}.", "title": "Jours mouillés", - "abstract": "Nombre de jours où les précipitations sont au-dessus d'un seuil." + "abstract": "Nombre de jours où la précipitation est au-dessus d'un seuil." }, "WETDAY_PROP": { "long_name": "Proportion de jours avec précipitation (précip >= {thresh})", "description": "Proportion {freq:m} de jours où les précipitations sont au-dessus de {thresh}.", "title": "Proportion de jours avec précipitation", - "abstract": "Proportion de jours où les précipitations sont au-dessus d'un seuil." + "abstract": "Proportion de jours où la précipitation est au-dessus d'un seuil." }, "CDD": { "long_name": "Durée maximale d'une période sèche", - "description": "Nombre {freq:m} maximal de jours consécutifs où les précipitations sont sous {thresh}.", + "description": "Nombre {freq:m} maximal de jours consécutifs où la précipitation est sous {thresh}.", "title": "Nombre maximal de jours secs consécutifs", "abstract": "Période la plus longue où la précipitation est sous un seuil." }, @@ -200,9 +200,9 @@ "abstract": "Période la plus longue où la précipitation est au-dessus d'un seuil." }, "SDII": { - "long_name": "Indice simple de l'intensité des précipitations", + "long_name": "Indice simple de l'intensité des précipitations (SDII)", "description": "Indice simple d'intensité des précipitations {freq:m} [SDII]. Moyenne {freq:f} de la précipitation quotidienne pour les jours où la précipitation est au-dessus de {thresh}.", - "title": "Indice simple de l'intensité des précipitations", + "title": "Indice simple de l'intensité des précipitations (SDII)", "abstract": "Moyenne de la précipitation quotidienne pour les jours où la précipitation est au-dessus d'un seuil." }, "PRCPTOT": { @@ -219,7 +219,7 @@ }, "LIQUIDPRCPTOT": { "long_name": "Précipitation liquide totale", - "description": "Précipitation liquide totale {freq:f}, estimée comme la précipitation lorsque la température moyenne est >= {thresh}.", + "description": "Précipitation liquide totale {freq:f}, estimée comme la précipitation lorsque la température moyenne est au-dessus de {thresh}.", "title": "Précipitation liquide accumulée totale", "abstract": "Précipitation liquide accumulée totale. Les précipitations sont considérées liquides lorsque la température quotidienne moyenne est au-dessus de 0°C." }, @@ -227,7 +227,7 @@ "long_name": "Précipitation solide totale", "description": "Précipitation solide totale {freq:f}, estimée comme la précipitation lorsque la température moyenne est < {thresh}.", "title": "Précipitation solide accumulée totale", - "abstract": "Précipitation solide accumulée totale. Les précipitations sont considérées solides lorsque la température quotidienne moyenne est sous 0°C." + "abstract": "Précipitation solide accumulée totale. La précipitation est considéré solide lorsque la température quotidienne moyenne est sous 0°C." }, "SPI": { "long_name": "Indice de précipitation standardisé (SPI)", @@ -315,9 +315,9 @@ }, "TG": { "long_name": "Moyenne des températures maximale et minimale quotidennes", - "description": "Température quotidienne moyenne estimée par la moyenne des températures maximale et minimale", + "description": "Température moyenne quotidienne moyenne estimée par la moyenne des températures maximale et minimale quotidiennnes.", "title": "Température moyenne", - "abstract": "La température quotidienne en assumant une distribution symétrique des températures (Tg = (Tx + Tn) / 2)." + "abstract": "La température moyenne quotidienne en assumant une distribution symétrique des températures maximale et minmale quotidiennes (Tg = (Tx + Tn) / 2)." }, "TG_MIN": { "long_name": "Minimum de la température moyenne quotidienne", @@ -437,7 +437,7 @@ "long_name": "Indice de durée des vagues de froid", "description": "{freq} nombre de jours avec au moins {window} jours consécutifs où la température minimale quotidienne est inférieure au(x) {tasmin_per_thresh}ᵉ centile. Une vague de froid se produit lorsque la température minimale quotidienne est inférieure à un centile donné pendant au moins {window} jours consécutifs.", "title": "Indice de durée des vagues de froid", - "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est inférieure à un centile donné pendant au moins {window} jours consécutifs." + "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous un centile donné pendant au moins {window} jours consécutifs." }, "COLD_SPELL_FREQUENCY": { "long_name": "Fréquence des vagues de froid", @@ -461,41 +461,41 @@ "long_name": "Nombre de jours avec un cycle de gel-dégel", "description": "Nombre {freq:m} de jours avec un gel-dégel quotidien (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin}).", "title": "Cycles de gel-dégel", - "abstract": "Le nombre de jours où Tmax est au-dessus d'un seuil donné et Tmin en dessous d'un seuil donné, habituellement 0°C pour les deux." + "abstract": "Le nombre de jours où la température maximale quotidienne est au-dessus d'un seuil donné et la température minimale quotidienne est sous un seuil donné, habituellement 0°C pour les deux." }, "COOLING_DEGREE_DAYS": { "long_name": "Degrés-jours de climatisation", - "description": "Cumul {freq:m} des degrés-jours de climatisation (Température au-dessus de {thresh}).", + "description": "Cumul {freq:m} des degrés-jours de climatisation (température moyenne quotidienne au-dessus de {thresh}).", "title": "Degrés-jours de climatisation", - "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est au-dessus d'un seuil donné et que les immeubles doivent être climatisés." + "abstract": "Cumul des degrés-jours pour les jours où la température moyenne quotidienne est au-dessus d'un seuil donné et que les immeubles doivent être climatisés." }, "HEATING_DEGREE_DAYS": { "long_name": "Degrés-jours de chauffage", - "description": "Cumul {freq:m} des degrés-jours de chauffage (Température en dessous de {thresh}).", + "description": "Cumul {freq:m} des degrés-jours de chauffage (température moyenne quotidienne sous {thresh}).", "title": "Degrés-jours de chauffage", "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est sous un seuil donné et que les immeubles doivent être chauffés." }, "GROWING_DEGREE_DAYS": { "long_name": "Degrés-jours de croissance", - "description": "Cumul {freq} des degrés-jours de croissance (Température au-dessus de {thresh}).", + "description": "Cumul {freq} des degrés-jours de croissance (température moyenne quotidienne au-dessus de {thresh}).", "title": "Degrés-jours de croissance", - "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est au-dessus d'un seuil donné." + "abstract": "Cumul des degrés-jours pour les jours où la température moyenne quotidienne est au-dessus d'un seuil donné." }, "FREEZING_DEGREE_DAYS": { "long_name": "Degrés-jours de gel", - "description": "Cumul {freq:m} des degrés-jours de gel (Température en dessous de {thresh}).", + "description": "Cumul {freq:m} des degrés-jours de gel (température moyenne quotidienne sous {thresh}).", "title": "Degrés-jours de gel", - "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est sous un seuil donné, habituellement 0°C." + "abstract": "Cumul des degrés-jours pour les jours où la température moyenne quotidienne est sous un seuil donné, habituellement 0°C." }, "THAWING_DEGREE_DAYS": { "long_name": "Degrés-jours de dégel", - "description": "Cumul {freq} des degrés-jours de dégel (Température au-dessus de {thresh}).", + "description": "Cumul {freq} des degrés-jours de dégel (température moyenne quotidienne au-dessus de {thresh}).", "title": "Degrés-jours de dégel", - "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est au-dessus d'un seuil donné, habituellement 0°C." + "abstract": "Cumul des degrés-jours pour les jours où la température moyenne quotidienne est au-dessus d'un seuil donné, habituellement 0°C." }, "BIOLOGICALLY_EFFECTIVE_DEGREE_DAYS": { "long_name": "Degrés-jours biologiquement actifs", - "description": "Cumul des degrés-jours borné par Tmin > {thresh_tasmin} et Tmax-Tmin < {max_daily_degree_days}. Les degrés jours quotidiens sont corrigés selon Tmax-Tmin et selon un coefficient de durée du jour dépendant de la latitude.", + "description": "Cumul des degrés-jours borné par la température minimale quotidienne sous {thresh_tasmin} et la différence entre les températures maximale et minimale quotiennes sous {max_daily_degree_days} . Les degrés jours quotidiens sont corrigés selon la différence entre les températures maximale et minimale quotiennes et selon un coefficient de durée du jour dépendant de la latitude.", "title": "Degrés-jours biologiquement actifs", "comment": "Formule originale prise de Gladstones 1992.", "abstract": "Indice basé sur une relation non linéaire entre la température et les processus physiologiques. Il intègre une borne supérieure du cumul, un coefficient lié à la durée du jour et une correction liée à l'écart journalier des températures." @@ -516,13 +516,13 @@ }, "FRESHET_START": { "long_name": "Premier jour ayant un dépassement constant du seuil de température", - "description": "Jour de l'année du début de la crue printanière, défini comme le premier jour où un seuil de température de {thresh} est dépassé pendant au moins {window} jours.", + "description": "Jour de l'année du début de la crue printanière, défini comme le premier jour où un seuil de température moyenne quotidienne de {thresh} est dépassé pendant au moins {window} jours.", "title": "Jour de l'année du début de la crue nivale", - "abstract": "Premier jour où la température excède un certain seuil depuis un certain nombre de jours consécutifs." + "abstract": "Premier jour où la température moyenne quotidienne excède un certain seuil depuis un certain nombre de jours consécutifs." }, "FROST_SEASON_LENGTH": { "long_name": "Durée de la saison de gel", - "description": "Nombre {freq} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale journalière inférieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale journalière supérieure au point de congélation après {mid_date}.", + "description": "Nombre {freq} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne inférieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne supérieure au point de congélation après {mid_date}.", "title": "Durée de la saison de gel", "abstract": "Durée de la saison de gel, définie comme la période pendant laquelle la température minimale quotidienne est inférieure à 0°C sans fenêtre de dégel de plusieurs jours, le dégel se produisant après une date du calendrier médiane." }, @@ -548,7 +548,7 @@ "long_name": "Durée de la saison sans gel", "description": "Nombre {freq} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quoditienne supérieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne inférieure au point de congélation après {mid_date}.", "title": "Durée de la saison sans gel", - "abstract": "Durée de la saison sans gel, définie comme la période pendant laquelle la température minimale quotidienne est supérieure à 0°C sans fenêtre de gel de plusieurs jours, le gel se produisant après une date du calendrier médiane." + "abstract": "Durée de la saison sans gel, définie comme la période pendant laquelle la température minimale quotidienne est au-dessus de 0°C sans fenêtre de gel de plusieurs jours, le gel se produisant après une date du calendrier médiane." }, "FROST_FREE_SEASON_START": { "long_name": "Premier jour ayant un dépassement constant du seuil de température", @@ -558,7 +558,7 @@ }, "GROWING_SEASON_LENGTH": { "long_name": "Durée de la saison de croissance", - "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs où la température quotidienne moyenne dépasse {thresh} et la première occurrence d'au moins {window} jours consécutifs où la température est sous {thresh} après le {mid_date}.", + "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs où la température moyenne quotidienne dépasse {thresh} et la première occurrence d'au moins {window} jours consécutifs où la température est sous {thresh} après le {mid_date}.", "title": "Durée de la saison de croissance", "abstract": "Nombre de jours entre la première occurrence d'une série de jours avec une température moyenne quotidienne supérieure à un seuil et la première occurrence d'une série de jours avec une température moyenne quotidienne inférieure à ce même seuil, survenant après une date de calendrier donnée." }, @@ -754,22 +754,22 @@ "abstract": "Humidité spécifique calculée à partir de la température du point de rosée et de la pression à l'aide de la pression de vapeur saturante." }, "FIRST_DAY_BELOW": { - "long_name": "Premier jour de l'année avec une température sous un seuil", - "description": "Premier jour de l'année après {after_date} ayant une température sous {thresh} pour au moins {window} jours.", - "title": "Premier jour de l'année avec une température sous un seuil", - "abstract": "Calcule le premier jour d'une période où la température est inférieure à un certain seuil pendant un nombre de jours, après une date de calendrier donnée." + "long_name": "Premier jour de l'année avec une température quotidienne sous un seuil", + "description": "Premier jour de l'année après {after_date} ayant une température quotidienne sous {thresh} pour au moins {window} jours.", + "title": "Premier jour de l'année avec une température quotidienne sous un seuil", + "abstract": "Calcule le premier jour d'une période où la température moyenne quotidienne est sous un seuil donné pendant un nombre de jours, après une date de calendrier donnée." }, "FIRST_DAY_ABOVE": { - "long_name": "Premier jour de l'année avec une température au-dessus d'un seuil", - "description": "Premier jour de l'année avec une température au-dessus de {thresh} pour au moins {window} jours après {after_date}.", - "title": "Premier jour de l'année avec un température au-dessus d'un seuil", - "abstract": "Calcule le premier jour d'une période où la température est supérieure à un certain seuil pendant un nombre de jours, après une date de calendrier donnée." + "long_name": "Premier jour de l'année avec une température quotidienne au-dessus d'un seuil", + "description": "Premier jour de l'année avec une température quotidienne au-dessus de {thresh} pour au moins {window} jours après {after_date}.", + "title": "Premier jour de l'année avec un température quotidienne au-dessus d'un seuil", + "abstract": "Calcule le premier jour d'une période où la température quotidienne est supérieure à un certain seuil pendant un nombre de jours, après une date de calendrier donnée." }, "DEGREE_DAYS_EXCEEDANCE_DATE": { - "long_name": "Premier jour de l'année où la somme des degrés-jours excède un seuil", - "description": "Premier jour de l'année où la somme des degrés-jours (Tmoy {op} {thresh}) excède {sum_thresh}, avec la somme cumulative à partir de {start_date}.", + "long_name": "Premier jour de l'année où la somme des degrés-jours est au-dessus d'un seuil donné", + "description": "Premier jour de l'année où la somme des degrés-jours (température moyenne quotidienne {op} {thresh}) est au-dessus de {sum_thresh}, avec la somme cumulative à partir de {start_date}.", "title": "Jour du dépassement des degrés-jours", - "abstract": "Jour de l'année où la somme des degrés-jours excède un seuil. Les degrés-jours sont calculés au-dessus ou au-dessous d'un seuil de température donné." + "abstract": "Jour de l'année où la somme des degrés-jours est au-dessus d'un seuil donné. Les degrés-jours sont calculés au-dessus ou au-dessous d'un seuil de température donné." }, "PRSN": { "long_name": "Précipitation solide", @@ -778,10 +778,10 @@ "abstract": "Précipitation solide estimée à partir de la précipitation totale et de la température selon une méthode et un seuil de température donnés." }, "SNOW_DEPTH": { - "long_name": "Profondeur de neige quotidienne moyenne", - "description": "Profondeur de neige quotidienne moyenne.", + "long_name": "Épaisseur de neige moyenne quotidiennee", + "description": "Épaisseur de neige moyenne quotidienne.", "title": "Moyenne de la profondeur de neige", - "abstract": "Profondeur de neige quotidienne moyenne." + "abstract": "Épaisseur de neige moyenne quotidienne." }, "PRLP": { "long_name": "Précipitation liquide", diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 749e0d310..ca84f6c63 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -965,7 +965,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="", long_name="Day of year when cumulative degree days exceed threshold.", standard_name="day_of_year", - description="Day of year when the integral of degree days (tmean {op} {thresh}) exceeds {sum_thresh}, " + description="Day of year when the integral of degree days (mean temperature {op} {thresh}) exceeds {sum_thresh}, " "with the cumulative sum starting from {after_date}.", abstract="The day of the year when the sum of degree days exceeds a threshold. " "Degree days are calculated above or below a given temperature threshold.", From 16d65548dd637695523c1e957005e5409abfbdc3 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 31 Aug 2022 13:10:34 -0400 Subject: [PATCH 057/106] fix {freq} typos --- xclim/data/fr.json | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 0fbb42eec..6103caaaa 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -237,7 +237,7 @@ }, "SPEI": { "long_name": "Indice de précipitation évapotranspiration standardisé (SPEI)", - "description": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile de {window} {freq:nom}, normalisé tel que la moyenne du SPEI est 0 pour les données de calibration. L'unité de la fenêtre `X` est l'unité de temps determinée par la fréquence de rééchantillonnage {freq}.", + "description": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile de {window} {freq:nom}, normalisé tel que la moyenne du SPEI est 0 pour les données de calibration. L'unité de la fenêtre `X` est l'unité de temps determinée par la fréquence de rééchantillonnage {freq:f}.", "title": "Indice de précipitation évapotranspiration standardisé (SPEI)", "abstract": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile, normalisé tel que la moyenne du SPEI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de rééchantillonnage." }, @@ -435,7 +435,7 @@ }, "COLD_SPELL_DURATION_INDEX": { "long_name": "Indice de durée des vagues de froid", - "description": "{freq} nombre de jours avec au moins {window} jours consécutifs où la température minimale quotidienne est inférieure au(x) {tasmin_per_thresh}ᵉ centile. Une vague de froid se produit lorsque la température minimale quotidienne est inférieure à un centile donné pendant au moins {window} jours consécutifs.", + "description": "{freq:m} nombre de jours avec au moins {window} jours consécutifs où la température minimale quotidienne est inférieure au(x) {tasmin_per_thresh}ᵉ centile. Une vague de froid se produit lorsque la température minimale quotidienne est inférieure à un centile donné pendant au moins {window} jours consécutifs.", "title": "Indice de durée des vagues de froid", "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous un centile donné pendant au moins {window} jours consécutifs." }, @@ -477,7 +477,7 @@ }, "GROWING_DEGREE_DAYS": { "long_name": "Degrés-jours de croissance", - "description": "Cumul {freq} des degrés-jours de croissance (température moyenne quotidienne au-dessus de {thresh}).", + "description": "Cumul {freq:m} des degrés-jours de croissance (température moyenne quotidienne au-dessus de {thresh}).", "title": "Degrés-jours de croissance", "abstract": "Cumul des degrés-jours pour les jours où la température moyenne quotidienne est au-dessus d'un seuil donné." }, @@ -489,7 +489,7 @@ }, "THAWING_DEGREE_DAYS": { "long_name": "Degrés-jours de dégel", - "description": "Cumul {freq} des degrés-jours de dégel (température moyenne quotidienne au-dessus de {thresh}).", + "description": "Cumul {freq:m} des degrés-jours de dégel (température moyenne quotidienne au-dessus de {thresh}).", "title": "Degrés-jours de dégel", "abstract": "Cumul des degrés-jours pour les jours où la température moyenne quotidienne est au-dessus d'un seuil donné, habituellement 0°C." }, @@ -522,7 +522,7 @@ }, "FROST_SEASON_LENGTH": { "long_name": "Durée de la saison de gel", - "description": "Nombre {freq} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne inférieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne supérieure au point de congélation après {mid_date}.", + "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne inférieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne supérieure au point de congélation après {mid_date}.", "title": "Durée de la saison de gel", "abstract": "Durée de la saison de gel, définie comme la période pendant laquelle la température minimale quotidienne est inférieure à 0°C sans fenêtre de dégel de plusieurs jours, le dégel se produisant après une date du calendrier médiane." }, @@ -546,7 +546,7 @@ }, "FROST_FREE_SEASON_LENGTH": { "long_name": "Durée de la saison sans gel", - "description": "Nombre {freq} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quoditienne supérieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne inférieure au point de congélation après {mid_date}.", + "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quoditienne supérieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne inférieure au point de congélation après {mid_date}.", "title": "Durée de la saison sans gel", "abstract": "Durée de la saison sans gel, définie comme la période pendant laquelle la température minimale quotidienne est au-dessus de 0°C sans fenêtre de gel de plusieurs jours, le gel se produisant après une date du calendrier médiane." }, @@ -582,7 +582,7 @@ }, "RB_FLASHINESS_INDEX": { "long_name": "Indice Richards-Baker de torrentialité", - "description": "Indice R-B {freq}, un indice mesurant le caractère torrentiel d'un débit de rivière.", + "description": "Indice R-B {freq:m}, un indice mesurant le caractère torrentiel d'un débit de rivière.", "title": "Indice Richards-Baker de torrentialité", "abstract": "Mesure des oscillations du débit relatif au débit moyen, quantifiant la fréquence et la rapidité des changements de débits." }, @@ -630,13 +630,13 @@ }, "DRY_DAYS": { "long_name": "Nombre de jours secs", - "description": "Nombre {freq} de jours où la précipitation quotidienne est sous {thresh}.", + "description": "Nombre {freq:m} de jours où la précipitation quotidienne est sous {thresh}.", "title": "Nombre de jours secs", "abstract": "Nombre de jours où la précipitation quotidienne est sous un seuil." }, "HOT_SPELL_FREQUENCY": { "long_name": "Nombre de périodes chaudes", - "description": "Nombre {freq} de périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède {thresh_tasmax} durant au moins {window} jours.", + "description": "Nombre {freq:m} de périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède {thresh_tasmax} durant au moins {window} jours.", "title": "Fréquences des périodes chaudes", "abstract": "Nombre de périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède un seuil spécifique durant un minimum de jours donné." }, @@ -654,7 +654,7 @@ }, "CONSECUTIVE_FROST_FREE_DAYS": { "long_name": "Nombre maximal de jours consécutifs avec Tmin supérieur à 0°C", - "description": "Nombre maximal {freq} de jours consécutifs où la température minimale quotidienne excède ou est égale à {thresh}.", + "description": "Nombre maximal {freq:m} de jours consécutifs où la température minimale quotidienne excède ou est égale à {thresh}.", "title": "Nombre maximal de jours consécutifs sans gel", "abstract": "Nombre maximal de jours consécutifs sans gel où la température minimale quotidienne est au-dessus ou égale à 0°C." }, @@ -931,19 +931,19 @@ "title": "Fréquence des périodes d'événements consécutifs de gel-dégel", "abstract": "Fréquence des périodes d'événements consécutifs de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", "description": "Fréquence {freq:f} périodes d'événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", - "long_name": "Fréquence {freq:f} périodes d'événements consécutifs de gel-dégel" + "long_name": "Fréquence périodes d'événements consécutifs de gel-dégel" }, "FREEZETHAW_SPELL_MAX_LENGTH": { "title": "Durée maximale des périodes d'événements consécutifs de gel-dégel", "abstract": "Durée maximale des périodes d'événements consécutifs de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", "description": "Durée maximale {freq:f} des périodes d'événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", - "long_name": "Durée maximale {freq:f} des périodes d'événements consécutifs de gel-dégel" + "long_name": "Durée maximale des périodes d'événements consécutifs de gel-dégel" }, "FREEZETHAW_SPELL_MEAN_LENGTH": { "title": "Durée moyenne des périodes d'événements consécutifs de gel-dégel", "abstract": "Durée moyenne des périodes d'événements consécutifs de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", "description": "Durée moyenne {freq:f} des spériodes d'événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", - "long_name": "Durée moyenne {freq:f} des périodes d'événements consécutifs de gel-dégel" + "long_name": "Durée moyenne des périodes d'événements consécutifs de gel-dégel" }, "WIND_CHILL": { "title": "Facteur éolien", @@ -997,37 +997,37 @@ "title": "Nombre de jours froids et secs", "abstract": "Nombre de jours où la température et la précipitation sont en dessous de centiles donnés.", "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation en dessous du {pr_per_thresh}e centile.", - "long_name": "Nombre {freq:m} de jours froids et secs" + "long_name": "Nombre de jours froids et secs" }, "WARM_AND_DRY_DAYS": { "title": "Nombre de jours chauds et secs", "abstract": "Nombre de jours où la température est au-dessus d'un centile donné et la précipitation en dessous d'un centile donné.", "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation en dessous du {pr_per_thresh}e centile.", - "long_name": "Nombre {freq:m} de jours chauds et secs" + "long_name": "Nombre de jours chauds et secs" }, "WARM_AND_WET_DAYS": { "title": "Nombre de jours chauds et humide", "abstract": "Nombre de jours où la température et la précipitation sont au-dessus de centiles donnés.", "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile.", - "long_name": "Nombre {freq:m} de jours chauds et humides" + "long_name": "Nombre de jours chauds et humides" }, "COLD_AND_WET_DAYS": { "title": "Nombre de jours froids et humide", "abstract": "Nombre de jours où la température est en dessous d'un centile donné et la précipitation au-dessus d'un centile donné.", "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile.", - "long_name": "Nombre {freq:m} de jours froids et humides" + "long_name": "Nombre de jours froids et humides" }, "CALM_DAYS": { "title": "Nombre de jours de vent calme", "abstract": "Nombre de jours où la vitesse du vent de surface est en dessous d'un seuil.", "description": "Nombre {freq:m} de jours où la vitesse du vent de surface < {thresh}.", - "long_name": "Nombre {freq:m} de jours où la vitesse du vent de surface est sous un seuil" + "long_name": "Nombre de jours où la vitesse du vent de surface est sous un seuil" }, "WINDY_DAYS": { "title": "Nombre de jours venteux", "abstract": "Nombre de jours où la vitesse du vent de surface est au-dessus d'un seuil.", "description": "Nombre {freq:m} de jours où la vitesse du vent de surface >= {thresh}.", - "long_name": "Nombre {freq:m} de jours où la vitesse du vent de surface est au-dessus d'un seuil" + "long_name": "Nombre de jours où la vitesse du vent de surface est au-dessus d'un seuil" }, "JETSTREAM_METRIC_WOOLLINGS": { "title": "Force et latitude du courant-jet", From 7a15f2fae8ebbb3bcbcc6e1c144f42defff15b41 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 31 Aug 2022 15:38:15 -0400 Subject: [PATCH 058/106] Comments addressed, some English metadata adjustments, some notes added about potential breaking changes --- xclim/data/fr.json | 96 ++++++++++++------------- xclim/indicators/atmos/_temperature.py | 3 +- xclim/indicators/land/_streamflow.py | 16 ++--- xclim/indices/_threshold.py | 3 + xclim/testing/tests/test_temperature.py | 6 +- 5 files changed, 66 insertions(+), 58 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 6103caaaa..644a54a95 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -213,9 +213,9 @@ }, "WET_PRCPTOT": { "long_name": "Précipitation totale lors de jours avec précipitation", - "description": "Précipitation totale {freq:f} lorsque la précipitation quotidienne excède {thresh}.", + "description": "Précipitation totale {freq:f} lorsque la précipitation quotidienne est au-dessus {thresh}.", "title": "Précipitation accumulée totale lors de jours avec précipitation", - "abstract": "Précipitation accumulée totale lors de jours avec précipitation. Un jour est considéré avec précipitation si la précipitation est supérieure ou égale à un seuil donné." + "abstract": "Précipitation accumulée totale lors de jours avec précipitation. Un jour est considéré avec précipitation si la précipitation est au-dessus ou égale à un seuil donné." }, "LIQUIDPRCPTOT": { "long_name": "Précipitation liquide totale", @@ -285,7 +285,7 @@ }, "TX_TN_DAYS_ABOVE": { "long_name": "Nombre de jours ayant des températures minimale et maximale quotidiennes au-dessus de seuils donnés.", - "description": "Nombre {freq:m} de jours où la température maximale quotidienne excède {thresh_tasmax} et la température minimale quotidienne excède {thresh_tasmin}.", + "description": "Nombre {freq:m} de jours où la température maximale quotidienne est au-dessus {thresh_tasmax} et la température minimale quotidienne est au-dessus {thresh_tasmin}.", "title": "Nombre de jours ayant des températures minimale et maximale quotidiennes au-dessus de seuils donnés.", "abstract": "Nombre de jours où les températures maximale et minimale quotidiennes sont au-dessus de seuils donnés." }, @@ -435,7 +435,7 @@ }, "COLD_SPELL_DURATION_INDEX": { "long_name": "Indice de durée des vagues de froid", - "description": "{freq:m} nombre de jours avec au moins {window} jours consécutifs où la température minimale quotidienne est inférieure au(x) {tasmin_per_thresh}ᵉ centile. Une vague de froid se produit lorsque la température minimale quotidienne est inférieure à un centile donné pendant au moins {window} jours consécutifs.", + "description": "{freq:m} nombre de jours avec au moins {window} jours consécutifs où la température minimale quotidienne est sous le {tasmin_per_thresh}ᵉ centile. Une vague de froid se produit lorsque la température minimale quotidienne est sous un centile donné pendant au moins {window} jours consécutifs.", "title": "Indice de durée des vagues de froid", "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous un centile donné pendant au moins {window} jours consécutifs." }, @@ -518,11 +518,11 @@ "long_name": "Premier jour ayant un dépassement constant du seuil de température", "description": "Jour de l'année du début de la crue printanière, défini comme le premier jour où un seuil de température moyenne quotidienne de {thresh} est dépassé pendant au moins {window} jours.", "title": "Jour de l'année du début de la crue nivale", - "abstract": "Premier jour où la température moyenne quotidienne excède un certain seuil depuis un certain nombre de jours consécutifs." + "abstract": "Premier jour où la température moyenne quotidienne est au-dessus d'un certain seuil depuis un certain nombre de jours consécutifs." }, "FROST_SEASON_LENGTH": { "long_name": "Durée de la saison de gel", - "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne inférieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne supérieure au point de congélation après {mid_date}.", + "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne inférieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne au-dessus ou égale au point de congélation après {mid_date}.", "title": "Durée de la saison de gel", "abstract": "Durée de la saison de gel, définie comme la période pendant laquelle la température minimale quotidienne est inférieure à 0°C sans fenêtre de dégel de plusieurs jours, le dégel se produisant après une date du calendrier médiane." }, @@ -552,27 +552,27 @@ }, "FROST_FREE_SEASON_START": { "long_name": "Premier jour ayant un dépassement constant du seuil de température", - "description": "Jour de l'année du début de la saison sans gel, défini comme le {window}e jour consécutif où la température excède {thresh}.", + "description": "Jour de l'année du début de la saison sans gel, défini comme le {window}e jour consécutif où la température minimale quotidienne est au-dessus {thresh}.", "title": "Jour de l'année du début de la saison sans gel", - "abstract": "Premier jour où la température excède un certain seuil donné depuis un certain nombre de jours consécutifs." + "abstract": "Premier jour où la température minimale quotidienne est au-dessus un seuil donné depuis un certain nombre de jours consécutifs." }, "GROWING_SEASON_LENGTH": { "long_name": "Durée de la saison de croissance", "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs où la température moyenne quotidienne dépasse {thresh} et la première occurrence d'au moins {window} jours consécutifs où la température est sous {thresh} après le {mid_date}.", "title": "Durée de la saison de croissance", - "abstract": "Nombre de jours entre la première occurrence d'une série de jours avec une température moyenne quotidienne supérieure à un seuil et la première occurrence d'une série de jours avec une température moyenne quotidienne inférieure à ce même seuil, survenant après une date de calendrier donnée." + "abstract": "Nombre de jours entre la première occurrence d'une série de jours avec une température moyenne quotidienne au-dessus d'un seuil et la première occurrence d'une série de jours avec une température moyenne quotidienne sous ce même seuil, survenant après une date de calendrier donnée." }, "GROWING_SEASON_START": { "long_name": "Premier jour ayant un dépassement constant du seuil de température", - "description": "Jour de l'année du début de la saison de croissance, défini comme le premier jour de température constante supérieure ou égale au seuil de {thresh} après une série de {window} jours inférieurs à la température seuil.", + "description": "Jour de l'année du début de la saison de croissance, défini comme le premier jour de température constante est au-dessus ou égale au seuil de {thresh} après une série de {window} jours inférieurs à la température seuil.", "title": "Jour de l'année du début de la saison de croissance", - "abstract": "Premier jour où la température excède un certain seuil depuis un certain nombre de jours consécutifs." + "abstract": "Premier jour où la température moyenne quotidienne est au-dessus d'un seuil donné depuis un certain nombre de jours consécutifs." }, "TROPICAL_NIGHTS": { "long_name": "Nombre de nuits tropicales", - "description": "Nombre {freq:m} de nuits tropicales : définies comme des jours avec une température minimale au-dessus de {thresh}.", + "description": "Nombre {freq:m} de nuits tropicales : définies comme des jours avec une température minimale quotidienne au-dessus de {thresh}.", "title": "Nombre de nuits tropicales", - "abstract": "Nombre de jours où la température minimale est au-dessus d'un seuil donné." + "abstract": "Nombre de jours où la température minimale quotidienne est au-dessus d'un seuil donné." }, "BASE_FLOW_INDEX": { "long_name": "Flux de base", @@ -605,15 +605,15 @@ "abstract": "" }, "DOY_QMAX": { - "long_name": "Jour de l'année du maximum le long d'un période de temps", - "description": "Jour de l'année du maximum le long de {indexer}.", - "title": "Jour de l'année du maximum", + "long_name": "Jour de l'année du maximum du débit le long d'un période de temps", + "description": "Jour de l'année du maximum du débit de le long de {indexer}.", + "title": "Jour de l'année du maximum du débit", "abstract": "" }, "DOY_QMIN": { - "long_name": "Jour de l'année du minimum le long d'un période de temps'", - "description": "Jour de l'année du minimum le long de {indexer}.", - "title": "Jour de l'année du minimum", + "long_name": "Jour de l'année du minimum du débit le long d'un période de temps'", + "description": "Jour de l'année du minimum du débit le long de {indexer}.", + "title": "Jour de l'année du minimum du débit", "abstract": "" }, "SEA_ICE_AREA": { @@ -626,7 +626,7 @@ "long_name": "Étendue de banquise", "description": "L'aire totale de toutes les régions où la concentration de glace de mer est d'au moins {thresh}.", "title": "Étendue de la banquise", - "abstract": "Mesure de l'étendue de toutes les régions où la concentration de glace de mer excède un seuil." + "abstract": "Mesure de l'étendue de toutes les régions où la concentration de glace de mer est au-dessus ou égale à un seuil." }, "DRY_DAYS": { "long_name": "Nombre de jours secs", @@ -636,39 +636,39 @@ }, "HOT_SPELL_FREQUENCY": { "long_name": "Nombre de périodes chaudes", - "description": "Nombre {freq:m} de périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède {thresh_tasmax} durant au moins {window} jours.", + "description": "Nombre {freq:m} de périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne est au-dessus de {thresh_tasmax} durant au moins {window} jours.", "title": "Fréquences des périodes chaudes", - "abstract": "Nombre de périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède un seuil spécifique durant un minimum de jours donné." + "abstract": "Nombre de périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne est au-dessus d'un seuil spécifique durant un minimum de jours donné." }, "LAST_SPRING_FROST": { "long_name": "Jour de l'année du dernier gel printanier", - "description": "Jour de l'année du dernier gel printanier, défini comme le dernier jour où la température quotidienne moyenne reste sous {thresh} durant au moins {window} jours avant une certaine date ({before_date}).", + "description": "Jour de l'année du dernier gel printanier, défini comme le dernier jour où la température minimale quotidienne reste sous {thresh} durant au moins {window} jours avant une certaine date ({before_date}).", "title": "Jour de l'année du dernier gel printanier", - "abstract": "Dernier jour où la température est inférieure à un seuil donné durant un certain nombre de jours, limité par une date de calendrier finale." + "abstract": "Dernier jour où la température minimale quotidienne reste sous un seuil donné durant un certain nombre de jours, limité par une date de calendrier finale." }, "HOT_SPELL_MAX_LENGTH": { "long_name": "Longueur maximale des périodes chaudes", - "description": "Longueur maximale {freq:f} des périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède {thresh_tasmax} durant au moins {window} jours.", + "description": "Longueur maximale {freq:f} des périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne est au-dessus de {thresh_tasmax} durant au moins {window} jours.", "title": "Longueur maximale des périodes chaudes", - "abstract": "Longueur maximale des périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne excède un seuil spécifique durant un minimum de jours." + "abstract": "Longueur maximale des périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne est au-dessus d'un seuil spécifique durant un minimum de jours." }, "CONSECUTIVE_FROST_FREE_DAYS": { - "long_name": "Nombre maximal de jours consécutifs avec Tmin supérieur à 0°C", - "description": "Nombre maximal {freq:m} de jours consécutifs où la température minimale quotidienne excède ou est égale à {thresh}.", + "long_name": "Nombre maximal de jours consécutifs avec température minimale supérieur à 0°C", + "description": "Nombre maximal {freq:m} de jours consécutifs où la température minimale quotidienne est au-dessus ou égale à {thresh}.", "title": "Nombre maximal de jours consécutifs sans gel", "abstract": "Nombre maximal de jours consécutifs sans gel où la température minimale quotidienne est au-dessus ou égale à 0°C." }, "GROWING_SEASON_END": { "long_name": "Jour de l'année de la fin de la saison de croissance", - "description": "Jour de l'année de la fin de la saison de croissance, défini comme le premier jour après {mid_date} ayant une température supérieure ou égale à {thresh} après une série de {window} jours ayant une température inférieure à {thresh}.", + "description": "Jour de l'année de la fin de la saison de croissance, défini comme le premier jour après {mid_date} ayant une température moyenne quotidienne au-dessus ou égale à {thresh} après une série de {window} jours ayant une température moyenne quotidienne sous {thresh}.", "title": "Fin de la saison de croissance", - "abstract": "Le premier jour où la température est inférieure à un certain seuil pendant un certain nombre de jours consécutifs après une date de calendrier donnée." + "abstract": "Le premier jour où la température moyenne quotidienne est sous un seuil donné pendant un certain nombre de jours consécutifs après une date de calendrier donnée." }, "FROST_FREE_SEASON_END": { "long_name": "Jour de l'année de la fin de la saison sans gel", - "description": "Jour de l'année de la fin de la saison sans gel. La saison sans gel est définie comme l'intervalle entre la première série de {window} jours où la température quotidienne est au-dessus de {thresh} et la première série (après le {mid_date}) de {window} jours où elle est sous {thresh}.", + "description": "Jour de l'année de la fin de la saison sans gel. La saison sans gel est définie comme l'intervalle entre la première série de {window} jours où la température minimale quotidienne est sous {thresh} et la première série (après le {mid_date}) de {window} jours où elle est sous {thresh}.", "title": "Fin de la saison sans gel", - "abstract": "Premier jour où la température est inférieure à un seuil donné depuis un certain nombre de jours consécutifs." + "abstract": "Premier jour où la température minimale quotidienne est sous un seuil donné depuis un certain nombre de jours consécutifs." }, "FWI": { "description": "L'IFM est formé de six composantes qui tiennent compte des effets de la teneur en eau des combustibles et des conditions météorologiques sur le comportement du feu.", @@ -763,7 +763,7 @@ "long_name": "Premier jour de l'année avec une température quotidienne au-dessus d'un seuil", "description": "Premier jour de l'année avec une température quotidienne au-dessus de {thresh} pour au moins {window} jours après {after_date}.", "title": "Premier jour de l'année avec un température quotidienne au-dessus d'un seuil", - "abstract": "Calcule le premier jour d'une période où la température quotidienne est supérieure à un certain seuil pendant un nombre de jours, après une date de calendrier donnée." + "abstract": "Calcule le premier jour d'une période où la température quotidienne est au-dessus d'un seuil donné pendant un nombre de jours, après une date de calendrier donnée." }, "DEGREE_DAYS_EXCEEDANCE_DATE": { "long_name": "Premier jour de l'année où la somme des degrés-jours est au-dessus d'un seuil donné", @@ -791,15 +791,15 @@ }, "LAST_SNOWFALL": { "long_name": "Date de la dernière neige", - "description": "Dernier jour {freq:m} où la précipitation solide excède {thresh}.", + "description": "Dernier jour {freq:m} où la précipitation solide est au-dessus de {thresh}.", "title": "Dernier jour avec une précipitation solide au-dessus d'un seuil", - "abstract": "Dernier jour d'une période où la précipitation solide excède un certain seuil." + "abstract": "Dernier jour d'une période où la précipitation solide est au-dessus d'un certain seuil." }, "FIRST_SNOWFALL": { "long_name": "Date de la première neige", - "description": "Premier jour {freq:m} où la précipitation solide excède {thresh}.", + "description": "Premier jour {freq:m} où la précipitation solide est au-dessus de {thresh}.", "title": "Premier jour avec une précipitation solide au-dessus d'un seuil", - "abstract": "Premier jour d'une période où la précipitation solide excède un certain seuil." + "abstract": "Premier jour d'une période où la précipitation solide est au-dessus d'un certain seuil." }, "DAYS_WITH_SNOW": { "long_name": "Nombre de jours où la précipitation solide se trouve entre une borne inférieure et supérieure.", @@ -809,15 +809,15 @@ }, "SNOW_COVER_DURATION": { "long_name": "Nombre de jour où la profondeur de neige est au-dessus d'un seuil", - "description": "Nombre {freq:m} de jours où la profondeur de neige est supérieure ou égale à {thresh}.", + "description": "Nombre {freq:m} de jours où la profondeur de neige est au-dessus ou égale à {thresh}.", "title": "Durée du couvert de neige", - "abstract": "Nombre de jours pendant lesquels la profondeur de neige est supérieure ou égale à un seuil." + "abstract": "Nombre de jours pendant lesquels la profondeur de neige est au-dessus ou égale à un seuil donné." }, "CONTINUOUS_SNOW_COVER_START": { "long_name": "Date d'établissement du couvert de neige", - "description": "Première date à laquelle la profondeur de neige est supérieure à {thresh} pendant au moins {window} jours.", + "description": "Première date à laquelle la profondeur de neige est au-dessus ou égale à {thresh} pendant au moins {window} jours.", "title": "Date du début du couvert de neige", - "abstract": "Première date à partir de laquelle la profondeur de neige est supérieure ou égale à un seuil pendant un nombre de jours consécutifs." + "abstract": "Première date à partir de laquelle la profondeur de neige est au-dessus ou égale à un seuil pendant un nombre de jours consécutifs." }, "CONTINUOUS_SNOW_COVER_END": { "long_name": "Date de disparition du couvert de neige", @@ -857,15 +857,15 @@ }, "BLOWING_SNOW": { "long_name": "Jours de poudrerie", - "description": "Nombre {freq:m} de jours avec accumulation de neige supérieure ou égale à {snd_thresh} au cours des {window} jours précédents et vents supérieurs à {sfcwind_thresh}.", + "description": "Nombre {freq:m} de jours avec accumulation de neige au-dessus ou égale à {snd_thresh} au cours des {window} jours précédents et vents supérieurs à {sfcwind_thresh}.", "title": "Nombre de jours de poudrerie", - "abstract": "Nombre de jours avec des chutes de neige, une épaisseur de neige et une vitesse du vent supérieures à des seuils donnés pendant une période de jours." + "abstract": "Nombre de jours avec des chutes de neige, une épaisseur de neige et une vitesse du vent au-dessus ou égales à des seuils donnés pendant une période de jours." }, "WINTER_STORM": { "long_name": "Jours avec forte accumulation de neige", - "description": "Nombre de jours où l'accumulation de neige est supérieure à {thresh}.", + "description": "Nombre de jours où l'accumulation de neige est au-dessus ou égale à {thresh}.", "title": "Jours avec accumulation de neige supérieure à un seuil", - "abstract": "Nombre de jours où l'accumulation de neige est supérieure à un seuil." + "abstract": "Nombre de jours où l'accumulation de neige est au-dessus ou égale à un seuil donné." }, "HIGH_PRECIP_LOW_TEMP": { "long_name": "Jours avec des précipitations au dessus d'un seuil et des températures sous un seuil", @@ -906,13 +906,13 @@ "WARM_SPELL_DURATION_INDEX": { "title": "Indice de durée des vagues de chaleur", "abstract": "Nombre de jours consécutifs plus grand qu'un nombre de jour minimal donnée et ayant une température maximale quotidienne plus grande qu'un centile donné. Le seuil de centile des températures doit être calculé avec une fenêtre mobile d'un nombre de jours donné.", - "description": "Nombre de jours avec au moins {window} jours consécutifs où la température maximale quotidienne est supérieure au(x) {tasmax_per_thresh}e centile(s). Une fenêtre de {tasmax_per_window} jour(s), centrée sur chaque jour du calendrier de la période {tasmax_per_period}, est utilisée pour calculer le(s) {tasmax_per_thresh}e(s) centile(s).", + "description": "Nombre de jours avec au moins {window} jours consécutifs où la température maximale quotidienne est au-dessus ou égale au(x) {tasmax_per_thresh}e centile(s). Une fenêtre de {tasmax_per_window} jour(s), centrée sur chaque jour du calendrier de la période {tasmax_per_period}, est utilisée pour calculer le(s) {tasmax_per_thresh}e(s) centile(s).", "long_name": "Nombre de jours faisant partie d'une vague de chaleur définie par un centile" }, "MAXIMUM_CONSECUTIVE_WARM_DAYS": { "title": "Nombre maximal de jours chauds consécutifs", - "abstract": "Nombre maximal de jours consécutifs où la température maximale quotidienne excède un certain seuil.", - "description": "Nombre {freq:m} maximal de jours chauds consécutifs (Tmax > {thresh}).", + "abstract": "Nombre maximal de jours consécutifs où la température maximale quotidienne est au-dessus d'un certain seuil donné.", + "description": "Nombre {freq:m} maximal de jours chauds consécutifs (température maximale quotidienne > {thresh}).", "long_name": "Nombre maximal de jours chauds consécutifs" }, "FIRE_SEASON": { diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index ca84f6c63..053c0356b 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -729,7 +729,6 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): compute=indices.first_day_above, ) - ice_days = TempWithIndexing( title="Ice days", identifier="ice_days", @@ -752,6 +751,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): abstract="Maximum number of consecutive days where the daily minimum temperature is below 0°C", cell_methods="time: maximum over days", compute=indices.maximum_consecutive_frost_days, + parameters={"thresh": {"default": "0 degC"}}, ) frost_free_season_length = Temp( @@ -811,6 +811,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "or equal to 0°C", cell_methods="time: maximum over days", compute=indices.maximum_consecutive_frost_free_days, + parameters={"thresh": {"default": "0 degC"}}, ) growing_season_start = Temp( diff --git a/xclim/indicators/land/_streamflow.py b/xclim/indicators/land/_streamflow.py index b3c59284a..019ef26dc 100644 --- a/xclim/indicators/land/_streamflow.py +++ b/xclim/indicators/land/_streamflow.py @@ -99,7 +99,7 @@ def cfcheck(self, **das): identifier="stats", var_name="q{indexer}{op:r}", long_name="Daily flow statistics", - description="{freq} {op} of daily flow ({indexer})", + description="{freq} {op} of daily flow ({indexer}).", units="m^3 s-1", compute=declare_units(da=None)(generic.select_resample_op), ) @@ -111,18 +111,18 @@ def cfcheck(self, **das): units="", standard_name="{dist} parameters", long_name="Distribution parameters", - description="Parameters of the {dist} distribution", + description="Parameters of the {dist} distribution.", cell_methods="time: fit", compute=declare_units(da=None)(_fit), ) doy_qmax = Streamflow( - title="Day of year of the maximum.", + title="Day of year of the maximum streamflow", identifier="doy_qmax", var_name="q{indexer}_doy_qmax", - long_name="Day of the year of the maximum over time period", - description="Day of the year of the maximum over {indexer}", + long_name="Day of the year of the maximum streamflow over time period", + description="Day of the year of the maximum streamflow over {indexer}.", units="", compute=declare_units(da=None)(generic.select_resample_op), parameters=dict(op=generic.doymax), @@ -130,11 +130,11 @@ def cfcheck(self, **das): doy_qmin = Streamflow( - title="Day of year of the minimum.", + title="Day of year of the minimum streamflow", identifier="doy_qmin", var_name="q{indexer}_doy_qmin", - long_name="Day of the year of the minimum over time period", - description="Day of the year of the minimum over {indexer}", + long_name="Day of the year of the minimum streamflow over time period", + description="Day of the year of the minimum streamflow over {indexer}.", units="", compute=declare_units(da=None)(generic.select_resample_op), parameters=dict(op=generic.doymin), diff --git a/xclim/indices/_threshold.py b/xclim/indices/_threshold.py index e78ca4bc7..e549f998a 100644 --- a/xclim/indices/_threshold.py +++ b/xclim/indices/_threshold.py @@ -981,6 +981,7 @@ def frost_free_season_length( return to_agg_units(out, tasmin, "count") +# FIXME: `tas` should instead be `tasmin` if we want to follow expected definitions. @declare_units(tas="[temperature]", thresh="[temperature]") def last_spring_frost( tas: xarray.DataArray, @@ -1027,6 +1028,7 @@ def last_spring_frost( return out +# FIXME: should first_day_X indices accept tas instead of tasmin? This indicator should be relevant for any temperature @declare_units(tasmin="[temperature]", thresh="[temperature]") def first_day_below( tasmin: xarray.DataArray, @@ -1077,6 +1079,7 @@ def first_day_below( return out +# FIXME: should first_day_X indices accept tas instead of tasmin? This indicator should be relevant for any temperature @declare_units(tasmin="[temperature]", thresh="[temperature]") def first_day_above( tasmin: xarray.DataArray, diff --git a/xclim/testing/tests/test_temperature.py b/xclim/testing/tests/test_temperature.py index 0b924db40..631b018d9 100644 --- a/xclim/testing/tests/test_temperature.py +++ b/xclim/testing/tests/test_temperature.py @@ -1224,7 +1224,11 @@ def test_degree_days_exceedance_date(): sum_thresh="200 K days", ) np.testing.assert_array_equal(out, np.array([[153, 136, 9, 6]]).T) - assert "tmean > 4 degc" in out.attrs["description"] + assert ( + "Day of year when the integral of degree days (mean temperature > 4 degc) " + "exceeds 200 k days, with the cumulative sum starting from none." + in out.attrs["description"] + ) with set_options(check_missing="skip"): out = atmos.degree_days_exceedance_date( From 7f66ac16ff03fcad2009a35926f7b788003314c5 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 31 Aug 2022 15:52:11 -0400 Subject: [PATCH 059/106] add warning to last_spring_frost about default options --- xclim/indices/_threshold.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/xclim/indices/_threshold.py b/xclim/indices/_threshold.py index e549f998a..afcd57768 100644 --- a/xclim/indices/_threshold.py +++ b/xclim/indices/_threshold.py @@ -995,6 +995,10 @@ def last_spring_frost( Returns last day of period where a temperature is inferior to a threshold over a given number of days and limited to a final calendar date. + Warnings + -------- + The default `before_date` and `freq` call parameters are valid for the northern hemisphere. + Parameters ---------- tas : xarray.DataArray @@ -1044,7 +1048,7 @@ def first_day_below( Warnings -------- - The default `freq` is valid for the northern hemisphere. + The default `after_date` and `freq` call parameters are valid for the northern hemisphere. Parameters ---------- From 86e224a1e088ff2f9e56a2ac96b3ed0a09dd7da8 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 31 Aug 2022 16:48:47 -0400 Subject: [PATCH 060/106] mark parameters for many indicators as default (parametrizable) --- xclim/indicators/atmos/_temperature.py | 54 +++++++++++++++++--------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 053c0356b..222a64419 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -99,7 +99,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): abstract="The number of days with minimum temperature above a given threshold.", cell_methods="time: sum over days", compute=indices.tn_days_above, - parameters=dict(op=">"), + parameters={"op": {"default": ">"}}, ) tn_days_below = TempWithIndexing( @@ -112,7 +112,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): abstract="The number of days with minimum temperature below a given threshold.", cell_methods="time: sum over days", compute=indices.tn_days_below, - parameters=dict(op="<"), + parameters={"op": {"default": "<"}}, ) tg_days_above = TempWithIndexing( @@ -125,7 +125,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): abstract="The number of days with mean temperature above a given threshold.", cell_methods="time: sum over days", compute=indices.tg_days_above, - parameters=dict(op=">"), + parameters={"op": {"default": ">"}}, ) tg_days_below = TempWithIndexing( @@ -138,7 +138,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): abstract="The number of days with mean temperature below a given threshold.", cell_methods="time: sum over days", compute=indices.tg_days_below, - parameters=dict(op="<"), + parameters={"op": {"default": "<"}}, ) tx_days_above = TempWithIndexing( @@ -151,7 +151,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): abstract="The number of days with maximum temperature above a given threshold.", cell_methods="time: sum over days", compute=indices.tx_days_above, - parameters=dict(op=">"), + parameters={"op": {"default": ">"}}, ) tx_days_below = TempWithIndexing( @@ -164,7 +164,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): abstract="The number of days with maximum temperature below a given threshold.", cell_methods="time: sum over days", compute=indices.tx_days_below, - parameters=dict(op="<"), + parameters={"op": {"default": "<"}}, ) tx_tn_days_above = TempWithIndexing( @@ -392,7 +392,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): cell_methods="time range within days time: mean over days", abstract="The average difference between the daily maximum and minimum temperatures.", compute=indices.daily_temperature_range, - parameters=dict(op="mean"), + parameters={"op": "mean"}, ) max_daily_temperature_range = TempWithIndexing( @@ -405,7 +405,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): cell_methods="time range within days time: max over days", abstract="The maximum difference between the daily maximum and minimum temperatures.", compute=indices.daily_temperature_range, - parameters=dict(op="max"), + parameters={"op": "max"}, ) daily_temperature_range_variability = TempWithIndexing( @@ -508,8 +508,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "window": 1, "thresh_tasmax": {"default": "0 degC"}, "thresh_tasmin": {"default": "0 degC"}, - "op_tasmax": ">", - "op_tasmin": "<=", + "op_tasmax": {"default": ">"}, + "op_tasmin": {"default": "<="}, }, ) @@ -530,8 +530,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "op": "count", "thresh_tasmax": {"default": "0 degC"}, "thresh_tasmin": {"default": "0 degC"}, - "op_tasmax": ">", - "op_tasmin": "<=", + "op_tasmax": {"default": ">"}, + "op_tasmin": {"default": "<="}, }, ) @@ -574,8 +574,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "op": "max", "thresh_tasmax": {"default": "0 degC"}, "thresh_tasmin": {"default": "0 degC"}, - "op_tasmax": ">", - "op_tasmin": "<=", + "op_tasmax": {"default": ">"}, + "op_tasmin": {"default": "<="}, }, ) @@ -686,7 +686,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "without a thawing window of days, with the thaw occurring after a median calendar date", cell_methods="time: sum over days", compute=indices.frost_season_length, - parameters=dict(thresh="0 degC"), + parameters={"thresh": {"default": "0 degC"}}, ) last_spring_frost = Temp( @@ -701,6 +701,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "limited by a final calendar date.", cell_methods="", compute=indices.last_spring_frost, + parameters={"before_date": {"default": "07-01"}}, ) first_day_below = Temp( @@ -714,6 +715,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "given number of days, after a given calendar date.", cell_methods="", compute=indices.first_day_below, + parameters={"after_date": {"default": "07-01"}}, ) first_day_above = Temp( @@ -727,6 +729,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "given number of days, after a given calendar date.", cell_methods="", compute=indices.first_day_above, + parameters={"before_date": {"default": "07-01"}}, ) ice_days = TempWithIndexing( @@ -1036,7 +1039,12 @@ def cfcheck(self, tas, snd=None): cell_methods="", var_name="hi", compute=indices.huglin_index, - parameters=dict(method="jones"), + parameters={ + "lat": {"kind": InputKind.VARIABLE}, + "method": {"default": "jones"}, + "start_date": {"default": "04-01"}, + "end_date": {"default": "10-01"}, + }, ) @@ -1054,7 +1062,12 @@ def cfcheck(self, tas, snd=None): cell_methods="", var_name="bedd", compute=indices.biologically_effective_degree_days, - parameters={"method": "gladstones", "lat": {"kind": InputKind.VARIABLE}}, + parameters={ + "lat": {"kind": InputKind.VARIABLE}, + "method": {"default": "gladstones"}, + "start_date": {"default": "04-01"}, + "end_date": {"default": "11-01"}, + }, ) @@ -1076,6 +1089,11 @@ def cfcheck(self, tas, snd=None): cell_methods="", var_name="egdd", compute=indices.effective_growing_degree_days, + parameters={ + "method": {"default": "bootsma"}, + "thresh": {"default": "5 degC"}, + "after_date": {"default": "07-01"}, + }, ) @@ -1095,5 +1113,5 @@ def cfcheck(self, tas, snd=None): allowed_periods=["A"], var_name="lti", compute=indices.latitude_temperature_index, - parameters={"lat_factor": 60, "lat": {"kind": InputKind.VARIABLE}}, + parameters={"lat": {"kind": InputKind.VARIABLE}, "lat_factor": 60}, ) From c4c7a98c4acf4595ca2be553110d5187c27eb91e Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 31 Aug 2022 17:44:16 -0400 Subject: [PATCH 061/106] 2nd round of comments from EmilieBresson --- xclim/data/fr.json | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 644a54a95..d485dab7e 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -516,9 +516,9 @@ }, "FRESHET_START": { "long_name": "Premier jour ayant un dépassement constant du seuil de température", - "description": "Jour de l'année du début de la crue printanière, défini comme le premier jour où un seuil de température moyenne quotidienne de {thresh} est dépassé pendant au moins {window} jours.", + "description": "Jour de l'année du début de la crue printanière, défini comme le premier jour la température moyenne quotidienne est au-dessus de {thresh} pendant au moins {window} jours.", "title": "Jour de l'année du début de la crue nivale", - "abstract": "Premier jour où la température moyenne quotidienne est au-dessus d'un certain seuil depuis un certain nombre de jours consécutifs." + "abstract": "Premier jour où la température moyenne quotidienne est au-dessus d'un seuil donné depuis un certain nombre de jours consécutifs." }, "FROST_SEASON_LENGTH": { "long_name": "Durée de la saison de gel", @@ -790,16 +790,16 @@ "abstract": "Précipitation liquide estimée à partir de la précipitation totale et de la température selon une méthode et un seuil de température donnés." }, "LAST_SNOWFALL": { - "long_name": "Date de la dernière neige", + "long_name": "Date de la dernière chute de neige", "description": "Dernier jour {freq:m} où la précipitation solide est au-dessus de {thresh}.", - "title": "Dernier jour avec une précipitation solide au-dessus d'un seuil", - "abstract": "Dernier jour d'une période où la précipitation solide est au-dessus d'un certain seuil." + "title": "Dernier jour avec une précipitation solide au-dessus d'un seuil donné", + "abstract": "Dernier jour d'une période où la précipitation solide est au-dessus d'un certain seuil donné." }, "FIRST_SNOWFALL": { - "long_name": "Date de la première neige", + "long_name": "Date de la première chute de neige", "description": "Premier jour {freq:m} où la précipitation solide est au-dessus de {thresh}.", - "title": "Premier jour avec une précipitation solide au-dessus d'un seuil", - "abstract": "Premier jour d'une période où la précipitation solide est au-dessus d'un certain seuil." + "title": "Premier jour avec une précipitation solide au-dessus d'un seuil donné", + "abstract": "Premier jour d'une période où la précipitation solide est au-dessus d'un certain seuil donné." }, "DAYS_WITH_SNOW": { "long_name": "Nombre de jours où la précipitation solide se trouve entre une borne inférieure et supérieure.", @@ -808,22 +808,22 @@ "abstract": "Nombre de jours où la neige est entre une borne inférieure et supérieure." }, "SNOW_COVER_DURATION": { - "long_name": "Nombre de jour où la profondeur de neige est au-dessus d'un seuil", - "description": "Nombre {freq:m} de jours où la profondeur de neige est au-dessus ou égale à {thresh}.", + "long_name": "Nombre de jour où l'épaisseur de neige est au-dessus d'un seuil", + "description": "Nombre {freq:m} de jours où l'épaisseur de neige est au-dessus ou égale à {thresh}.", "title": "Durée du couvert de neige", - "abstract": "Nombre de jours pendant lesquels la profondeur de neige est au-dessus ou égale à un seuil donné." + "abstract": "Nombre de jours pendant lesquels l'épaisseur de neige est au-dessus ou égale à un seuil donné." }, "CONTINUOUS_SNOW_COVER_START": { - "long_name": "Date d'établissement du couvert de neige", - "description": "Première date à laquelle la profondeur de neige est au-dessus ou égale à {thresh} pendant au moins {window} jours.", + "long_name": "Date du début du couvert de neige continu", + "description": "Première date à laquelle l'épaisseur de neige est au-dessus ou égale à {thresh} pendant au moins {window} jours consécutifs.", "title": "Date du début du couvert de neige", - "abstract": "Première date à partir de laquelle la profondeur de neige est au-dessus ou égale à un seuil pendant un nombre de jours consécutifs." + "abstract": "Première date à partir de laquelle l'épaisseur de neige est au-dessus ou égale à un seuil donné pendant un nombre de jours consécutifs." }, "CONTINUOUS_SNOW_COVER_END": { - "long_name": "Date de disparition du couvert de neige", - "description": "Première date à laquelle la profondeur de neige passe sous {thresh} pendant au moins {window} jours suite à l'établissement du couvert de neige.", + "long_name": "Date de fin du couvert de neige continu", + "description": "Première date à laquelle l'épaisseur de neige passe sous {thresh} pendant au moins {window} jours suite à l'établissement du couvert de neige.", "title": "Date du fin du couvert de neige", - "abstract": "Première date à partir de laquelle la profondeur de neige est inférieure à un seuil pendant un nombre de jours consécutifs suite à l'établissement du couvert de neige." + "abstract": "Première date à partir de laquelle l'épaisseur de neige est inférieure à un seuil pendant un nombre de jours consécutifs suite à l'établissement du couvert de neige." }, "SND_MAX_DOY": { "long_name": "Date de la profondeur de neige maximale", @@ -1019,15 +1019,15 @@ }, "CALM_DAYS": { "title": "Nombre de jours de vent calme", - "abstract": "Nombre de jours où la vitesse du vent de surface est en dessous d'un seuil.", - "description": "Nombre {freq:m} de jours où la vitesse du vent de surface < {thresh}.", - "long_name": "Nombre de jours où la vitesse du vent de surface est sous un seuil" + "abstract": "Nombre de jours où la vitesse du vent de surface est sous un seuil donné.", + "description": "Nombre {freq:m} de jours où la vitesse du vent de surface est sous {thresh}.", + "long_name": "Nombre de jours où la vitesse du vent de surface est sous un seuil donné" }, "WINDY_DAYS": { "title": "Nombre de jours venteux", - "abstract": "Nombre de jours où la vitesse du vent de surface est au-dessus d'un seuil.", - "description": "Nombre {freq:m} de jours où la vitesse du vent de surface >= {thresh}.", - "long_name": "Nombre de jours où la vitesse du vent de surface est au-dessus d'un seuil" + "abstract": "Nombre de jours où la vitesse du vent de surface est au-dessus ou égale à un seuil donné.", + "description": "Nombre {freq:m} de jours où la vitesse du vent de surface est au-deesus ou égale à {thresh}.", + "long_name": "Nombre de jours où la vitesse du vent de surface est au-dessus ou égale à un seuil donné" }, "JETSTREAM_METRIC_WOOLLINGS": { "title": "Force et latitude du courant-jet", From 0da0f57d667b87e92db5b2572cbf3c4c97b2a364 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 31 Aug 2022 18:02:38 -0400 Subject: [PATCH 062/106] fix wrong parameter passed to indicator --- xclim/indicators/atmos/_temperature.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 222a64419..9dc6e817b 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -729,7 +729,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "given number of days, after a given calendar date.", cell_methods="", compute=indices.first_day_above, - parameters={"before_date": {"default": "07-01"}}, + parameters={"after_date": {"default": "07-01"}}, ) ice_days = TempWithIndexing( From 741db93f6159db1316b0c0ed73591379e56ba5c7 Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 1 Sep 2022 12:12:05 -0400 Subject: [PATCH 063/106] address comments relevant to snow indices, given thresholds --- xclim/data/fr.json | 48 +++++++++++++++++----------------- xclim/indicators/land/_snow.py | 12 ++++----- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index d485dab7e..c81f8500a 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -146,9 +146,9 @@ }, "RAIN_FRZGR": { "long_name": "Nombre de jours de pluie sur sol gelé", - "description": "Nombre {freq:m} de jours avec plus de {thresh} de pluie suivant sept jours consécutifs où la température était sous 0°C. Les précipitations sont considérées comme de la pluie lorsque la température moyenne est au-dessus de 0°C.", + "description": "Nombre {freq:m} de jours avec plus de {thresh} de pluie suivant sept (7) jours consécutifs où la température était sous 0°C. Les précipitations sont considérées comme de la pluie lorsque la température moyenne est au-dessus de 0°C.", "title": "Nombre de jours de pluie sur sol gelé", - "abstract": "Nombre de jours avec pluie au-dessus d'un certain seuil après 7 jours consécutifs où la température était sous 0°C. Les précipitations sont considérées comme de la pluie lorsque la température moyenne est au-dessus de 0°C." + "abstract": "Nombre de jours avec pluie au-dessus d'un seuil donné après 7 jours consécutifs où la température était sous 0°C. Les précipitations sont considérées comme de la pluie lorsque la température moyenne est au-dessus de 0°C." }, "RX1DAY": { "long_name": "Précipitation quotidienne maximale", @@ -179,31 +179,31 @@ "long_name": "Nombre de jours avec précipitation", "description": "Nombre {freq:m} de jours où la précipitation est au-dessus de {thresh}.", "title": "Jours mouillés", - "abstract": "Nombre de jours où la précipitation est au-dessus d'un seuil." + "abstract": "Nombre de jours où la précipitation est au-dessus d'un seuil donné." }, "WETDAY_PROP": { "long_name": "Proportion de jours avec précipitation (précip >= {thresh})", "description": "Proportion {freq:m} de jours où les précipitations sont au-dessus de {thresh}.", "title": "Proportion de jours avec précipitation", - "abstract": "Proportion de jours où la précipitation est au-dessus d'un seuil." + "abstract": "Proportion de jours où la précipitation est au-dessus d'un seuil donné." }, "CDD": { "long_name": "Durée maximale d'une période sèche", "description": "Nombre {freq:m} maximal de jours consécutifs où la précipitation est sous {thresh}.", "title": "Nombre maximal de jours secs consécutifs", - "abstract": "Période la plus longue où la précipitation est sous un seuil." + "abstract": "Période la plus longue où la précipitation est sous un seuil donné." }, "CWD": { "long_name": "Durée maximale d'une période pluvieuse", "description": "Nombre {freq:m} maximal de jours consécutifs où les précipitations sont au-dessus de {thresh}.", "title": "Durée de période pluvieuse", - "abstract": "Période la plus longue où la précipitation est au-dessus d'un seuil." + "abstract": "Période la plus longue où la précipitation est au-dessus d'un seuil donné." }, "SDII": { "long_name": "Indice simple de l'intensité des précipitations (SDII)", "description": "Indice simple d'intensité des précipitations {freq:m} [SDII]. Moyenne {freq:f} de la précipitation quotidienne pour les jours où la précipitation est au-dessus de {thresh}.", "title": "Indice simple de l'intensité des précipitations (SDII)", - "abstract": "Moyenne de la précipitation quotidienne pour les jours où la précipitation est au-dessus d'un seuil." + "abstract": "Moyenne de la précipitation quotidienne pour les jours où la précipitation est au-dessus d'un seuil donné." }, "PRCPTOT": { "long_name": "Précipitation totale", @@ -564,7 +564,7 @@ }, "GROWING_SEASON_START": { "long_name": "Premier jour ayant un dépassement constant du seuil de température", - "description": "Jour de l'année du début de la saison de croissance, défini comme le premier jour de température constante est au-dessus ou égale au seuil de {thresh} après une série de {window} jours inférieurs à la température seuil.", + "description": "Jour de l’année marquant le début de la saison de croissance, défini comme le premier jour de la première série de {window} jours ayant une température au-dessus ou égale à {thresh}", "title": "Jour de l'année du début de la saison de croissance", "abstract": "Premier jour où la température moyenne quotidienne est au-dessus d'un seuil donné depuis un certain nombre de jours consécutifs." }, @@ -626,13 +626,13 @@ "long_name": "Étendue de banquise", "description": "L'aire totale de toutes les régions où la concentration de glace de mer est d'au moins {thresh}.", "title": "Étendue de la banquise", - "abstract": "Mesure de l'étendue de toutes les régions où la concentration de glace de mer est au-dessus ou égale à un seuil." + "abstract": "Mesure de l'étendue de toutes les régions où la concentration de glace de mer est au-dessus ou égale à un seuil donné." }, "DRY_DAYS": { "long_name": "Nombre de jours secs", "description": "Nombre {freq:m} de jours où la précipitation quotidienne est sous {thresh}.", "title": "Nombre de jours secs", - "abstract": "Nombre de jours où la précipitation quotidienne est sous un seuil." + "abstract": "Nombre de jours où la précipitation quotidienne est sous un seuil donné." }, "HOT_SPELL_FREQUENCY": { "long_name": "Nombre de périodes chaudes", @@ -793,13 +793,13 @@ "long_name": "Date de la dernière chute de neige", "description": "Dernier jour {freq:m} où la précipitation solide est au-dessus de {thresh}.", "title": "Dernier jour avec une précipitation solide au-dessus d'un seuil donné", - "abstract": "Dernier jour d'une période où la précipitation solide est au-dessus d'un certain seuil donné." + "abstract": "Dernier jour d'une période où la précipitation solide est au-dessus d'un seuil donné." }, "FIRST_SNOWFALL": { "long_name": "Date de la première chute de neige", "description": "Premier jour {freq:m} où la précipitation solide est au-dessus de {thresh}.", "title": "Premier jour avec une précipitation solide au-dessus d'un seuil donné", - "abstract": "Premier jour d'une période où la précipitation solide est au-dessus d'un certain seuil donné." + "abstract": "Premier jour d'une période où la précipitation solide est au-dessus d'un seuil donné." }, "DAYS_WITH_SNOW": { "long_name": "Nombre de jours où la précipitation solide se trouve entre une borne inférieure et supérieure.", @@ -821,15 +821,15 @@ }, "CONTINUOUS_SNOW_COVER_END": { "long_name": "Date de fin du couvert de neige continu", - "description": "Première date à laquelle l'épaisseur de neige passe sous {thresh} pendant au moins {window} jours suite à l'établissement du couvert de neige.", + "description": "Première date à laquelle l'épaisseur de neige passe sous {thresh} pendant au moins {window} jours consécutifs suite à l'établissementau début du couvert de neige.", "title": "Date du fin du couvert de neige", - "abstract": "Première date à partir de laquelle l'épaisseur de neige est inférieure à un seuil pendant un nombre de jours consécutifs suite à l'établissement du couvert de neige." + "abstract": "Première date à partir de laquelle l'épaisseur de neige est sous à un seuil donné pendant un nombre de jours consécutifs suite au début du couvert de neige." }, "SND_MAX_DOY": { - "long_name": "Date de la profondeur de neige maximale", - "description": "Date {freq:f} à laquelle la profondeur de neige atteint sa valeur maximale.", - "title": "Date où la profondeur de neige est maximale", - "abstract": "Jour de l'année où la profondeur de neige atteint sa valeur maximale." + "long_name": "Date de l'épaisseur de neige maximale", + "description": "Date {freq:f} à laquelle l'épaisseur de neige atteint sa valeur maximale.", + "title": "Date où l'épaisseur de neige est maximale", + "abstract": "Jour de l'année où l'épaisseur de neige atteint sa valeur maximale." }, "SNOW_MELT_WE_MAX": { "long_name": "Fonte de neige maximale", @@ -838,16 +838,16 @@ "abstract": "Équivalent en eau de la fonte de neige maximale." }, "SNW_MAX": { - "long_name": "Quantité de neige maximale", - "description": "Quantité maximale {freq:f} de neige.", - "title": "Quantité de neige maximale", + "long_name": "Équivalent en eau de la neige maximale", + "description": "Équivalent en eau maximale {freq:f} de la neige.", + "title": "Équivalent en eau de la neige maximale", "abstract": "Maximum de la quantité de neige quotidienne." }, "SNW_MAX_DOY": { "long_name": "Date de la quantité de neige maximale", "description": "Date {freq:f} à laquelle la quantité de neige atteint sa valeur maximale.", "title": "Date où la quantité de neige est maximale", - "abstract": "Jour de l'année où la quantité de neige atteint sa valeur maximale." + "abstract": "Jour de l'année où l'équivalent en eau de la neige quotidien atteint sa valeur maximale." }, "MELT_AND_PRECIP_MAX": { "long_name": "Maximum des apports en eau incluant la fonte de neige et les précipitations", @@ -871,7 +871,7 @@ "long_name": "Jours avec des précipitations au dessus d'un seuil et des températures sous un seuil", "description": "Nombre {freq:m} de jours avec précipitation plus grande ou égale à {pr_thresh} et température inférieure à {tas_thresh}.", "title": "Jours avec précipitations et températures froides", - "abstract": "Nombre de jours avec précipitation au-dessus d'un seuil et températures sous un seuil." + "abstract": "Nombre de jours avec précipitation au-dessus d'un seuil et températures sous un seuil donné." }, "DAYS_OVER_PRECIP_THRESH": { "title": "Nombre de jours avec précipitation où la précipitation est au-dessus d'un centile donné", @@ -911,7 +911,7 @@ }, "MAXIMUM_CONSECUTIVE_WARM_DAYS": { "title": "Nombre maximal de jours chauds consécutifs", - "abstract": "Nombre maximal de jours consécutifs où la température maximale quotidienne est au-dessus d'un certain seuil donné.", + "abstract": "Nombre maximal de jours consécutifs où la température maximale quotidienne est au-dessus d'un seuil donné.", "description": "Nombre {freq:m} maximal de jours chauds consécutifs (température maximale quotidienne > {thresh}).", "long_name": "Nombre maximal de jours chauds consécutifs" }, diff --git a/xclim/indicators/land/_snow.py b/xclim/indicators/land/_snow.py index bf0ce2afb..07c807690 100644 --- a/xclim/indicators/land/_snow.py +++ b/xclim/indicators/land/_snow.py @@ -91,9 +91,9 @@ class SnowWithIndexing(ResamplingIndicatorWithIndexing): identifier="snw_max", standard_name="surface_snow_amount", var_name="{freq}_snw_max", - long_name="Maximum snow amount", - description="The {freq} maximum snow amount on the surface.", - abstract="The maximum snow amount on the surface.", + long_name="Maximum snow water equivalent amount", + description="The {freq} maximum snow water equivalent amount on the surface.", + abstract="The maximum snow water equivalent amount on the surface.", units="kg m-2", compute=xci.snw_max, ) @@ -103,9 +103,9 @@ class SnowWithIndexing(ResamplingIndicatorWithIndexing): identifier="snw_max_doy", standard_name="day_of_year", var_name="{freq}_snw_max_doy", - long_name="Day of year of maximum daily snow amount", - description="The {freq} day of year when snow amount on the surface reaches its maximum.", - abstract="The day of year when snow amount on the surface reaches its maximum.", + long_name="Day of year of maximum daily snow water equivalent amount", + description="The {freq} day of year when snow water equivalent amount on the surface reaches its maximum.", + abstract="The day of year when snow water equivalent amount on the surface reaches its maximum.", units="", compute=xci.snw_max_doy, ) From 6c3a284158d6c098947f2ee9c169c159dad1207d Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 1 Sep 2022 12:12:25 -0400 Subject: [PATCH 064/106] fix growing season indices docstring and metadata, numpy docstring demand 4 space indentation between object and descriptions --- xclim/indicators/atmos/_temperature.py | 12 +- xclim/indices/_threshold.py | 316 ++++++++++++------------- 2 files changed, 164 insertions(+), 164 deletions(-) diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 9dc6e817b..ed758ca11 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -823,9 +823,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="", standard_name="day_of_year", long_name="Day of year of growing season start", - description="Day of year of start of growing season, defined as the first day of consistent superior or equal to " - "threshold temperature of {thresh} after a run of {window} days inferior to threshold temperature.", - abstract="The first day when the temperature exceeds a certain threshold for a certain number of consecutive days.", + description="Day of the year marking the beginning of the growing season, defined as the first day of the first " + "series of {window} days with a temperature above or equal to {thresh}.", + abstract="The first day when the temperature exceeds a certain threshold for a given number of consecutive days.", cell_methods="", compute=indices.growing_season_start, parameters={"thresh": {"default": "5.0 degC"}}, @@ -845,7 +845,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "threshold, occurring after a given calendar date.", cell_methods="", compute=indices.growing_season_length, - parameters={"thresh": {"default": "5.0 degC"}}, + parameters={"thresh": {"default": "5.0 degC"}, "mid_date": {"default": "07-01"}}, ) growing_season_end = Temp( @@ -858,10 +858,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "temperature of {thresh} after a run of {window} days superior to threshold temperature, occurring after " "{mid_date}.", abstract="The first day when the temperature is below a certain threshold for a certain number of consecutive days " - "after a specific calendar date.", + "after a given calendar date.", cell_methods="", compute=indices.growing_season_end, - parameters={"thresh": {"default": "5.0 degC"}}, + parameters={"thresh": {"default": "5.0 degC"}, "mid_date": {"default": "07-01"}}, ) tropical_nights = TempWithIndexing( diff --git a/xclim/indices/_threshold.py b/xclim/indices/_threshold.py index afcd57768..555656822 100644 --- a/xclim/indices/_threshold.py +++ b/xclim/indices/_threshold.py @@ -91,16 +91,16 @@ def calm_days( Parameters ---------- sfcWind : xarray.DataArray - Daily windspeed. + Daily windspeed. thresh : str - Threshold average near-surface wind speed on which to base evaluation. + Threshold average near-surface wind speed on which to base evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [time] - Number of days with average near-surface wind speed below threshold. + Number of days with average near-surface wind speed below threshold. Notes ----- @@ -132,18 +132,18 @@ def cold_spell_days( Parameters ---------- tas : xarray.DataArray - Mean daily temperature. + Mean daily temperature. thresh : str - Threshold temperature below which a cold spell begins. + Threshold temperature below which a cold spell begins. window : int - Minimum number of days with temperature below threshold to qualify as a cold spell. + Minimum number of days with temperature below threshold to qualify as a cold spell. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [time] - Cold spell days. + Cold spell days. Notes ----- @@ -180,18 +180,18 @@ def cold_spell_frequency( Parameters ---------- tas : xarray.DataArray - Mean daily temperature. + Mean daily temperature. thresh : str - Threshold temperature below which a cold spell begins. + Threshold temperature below which a cold spell begins. window : int - Minimum number of days with temperature below threshold to qualify as a cold spell. + Minimum number of days with temperature below threshold to qualify as a cold spell. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [dimensionless] - Cold spell frequency. + Cold spell frequency. """ t = convert_units_to(thresh, tas) @@ -219,20 +219,20 @@ def continuous_snow_cover_end( Parameters ---------- snd : xarray.DataArray - Surface snow thickness. + Surface snow thickness. thresh : str - Threshold snow thickness. + Threshold snow thickness. window : int - Minimum number of days with snow depth below threshold. + Minimum number of days with snow depth below threshold. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [dimensionless] - First day after the start of the continuous snow cover when the snow depth goes below a threshold - for a minimum duration. - If there is no such day, return np.nan. + First day after the start of the continuous snow cover when the snow depth + goes below a threshold for a minimum duration. + If there is no such day, return np.nan. References ---------- @@ -265,13 +265,13 @@ def continuous_snow_cover_start( Parameters ---------- snd : xarray.DataArray - Surface snow thickness. + Surface snow thickness. thresh : str - Threshold snow thickness. + Threshold snow thickness. window : int - Minimum number of days with snow depth above or equal to threshold. + Minimum number of days with snow depth above or equal to threshold. freq : str - Resampling frequency. + Resampling frequency. Returns ------- @@ -311,16 +311,16 @@ def daily_pr_intensity( Parameters ---------- pr : xarray.DataArray - Daily precipitation. + Daily precipitation. thresh : str - Precipitation value over which a day is considered wet. + Precipitation value over which a day is considered wet. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [precipitation] - The average precipitation over wet days for each period + The average precipitation over wet days for each period Notes ----- @@ -371,16 +371,16 @@ def dry_days( Parameters ---------- pr : xarray.DataArray - Daily precipitation. + Daily precipitation. thresh : str - Threshold temperature on which to base evaluation. + Threshold temperature on which to base evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [time] - Number of days with daily precipitation below threshold. + Number of days with daily precipitation below threshold. Notes ----- @@ -451,16 +451,16 @@ def cooling_degree_days( Parameters ---------- tas : xarray.DataArray - Mean daily temperature. + Mean daily temperature. thresh : str - Temperature threshold above which air is cooled. + Temperature threshold above which air is cooled. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [time][temperature] - Cooling degree days + Cooling degree days Notes ----- @@ -492,18 +492,18 @@ def freshet_start( Parameters ---------- tas : xarray.DataArray - Mean daily temperature. + Mean daily temperature. thresh : str - Threshold temperature on which to base evaluation. + Threshold temperature on which to base evaluation. window : int - Minimum number of days with temperature above threshold needed for evaluation. + Minimum number of days with temperature above threshold needed for evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [dimensionless] - Day of the year when temperature exceeds threshold over a given number of days for the first time. If there is + Day of the year when temperature exceeds threshold over a given number of days for the first time. If there is no such day, return np.nan. Notes @@ -531,21 +531,21 @@ def growing_degree_days( ) -> xarray.DataArray: r"""Growing degree-days over threshold temperature value. - The sum of degree-days over the threshold temperature. + The sum of growing degree-days over the threshold temperature. Parameters ---------- tas : xarray.DataArray - Mean daily temperature. + Mean daily temperature. thresh : str - Threshold temperature on which to base evaluation. + Threshold temperature on which to base evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [time][temperature] - The sum of growing degree-days above a given threshold. + The sum of growing degree-days above a given threshold. Notes ----- @@ -568,18 +568,18 @@ def growing_season_start( r"""Start of the growing season. Day of the year of the start of a sequence of days with mean temperatures consistently above or equal to a - threshold, after a period with mean temperatures consistently above the same threshold. + threshold. Parameters ---------- tas : xarray.DataArray - Mean daily temperature. + Mean daily temperature. thresh : str - Threshold temperature on which to base evaluation. + Threshold temperature on which to base evaluation. window : int - Minimum number of days with temperature above threshold needed for evaluation. + Minimum number of days with temperature above threshold needed for evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- @@ -616,21 +616,21 @@ def growing_season_end( ) -> xarray.DataArray: r"""End of the growing season. - Day of the year of the start of a sequence of days with mean temperatures consistently below a threshold, after a - period with mean temperatures consistently above the same threshold. + Day of the year of the start of a sequence of days with mean temperatures consistently below a threshold, + occurring after a given calendar date. Parameters ---------- tas : xarray.DataArray - Mean daily temperature. + Mean daily temperature. thresh : str - Threshold temperature on which to base evaluation. + Threshold temperature on which to base evaluation. mid_date : str - Date of the year after which to look for the end of the season. Should have the format '%m-%d'. + Date of the year after which to look for the end of the season. Should have the format '%m-%d'. window : int - Minimum number of days with temperature below threshold needed for evaluation. + Minimum number of days with temperature below threshold needed for evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- @@ -675,20 +675,20 @@ def growing_season_length( Parameters ---------- tas : xarray.DataArray - Mean daily temperature. + Mean daily temperature. thresh : str - Threshold temperature on which to base evaluation. + Threshold temperature on which to base evaluation. window : int - Minimum number of days with temperature above threshold to mark the beginning and end of growing season. + Minimum number of days with temperature above threshold to mark the beginning and end of growing season. mid_date : str - Date of the year after which to look for the end of the season. Should have the format '%m-%d'. + Date of the year after which to look for the end of the season. Should have the format '%m-%d'. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [time] - Growing season length. + Growing season length. Notes ----- @@ -755,21 +755,21 @@ def frost_season_length( Parameters ---------- tasmin : xarray.DataArray - Minimum daily temperature. + Minimum daily temperature. window : int - Minimum number of days with temperature below threshold to mark the beginning and end of frost season. + Minimum number of days with temperature below threshold to mark the beginning and end of frost season. mid_date : str, optional - Date the must be included in the season. It is the earliest the end of the season can be. - If None, there is no limit. + Date the must be included in the season. It is the earliest the end of the season can be. + If None, there is no limit. thresh : str - Threshold temperature on which to base evaluation. + Threshold temperature on which to base evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [time] - Frost season length. + Frost season length. Notes ----- @@ -824,20 +824,20 @@ def frost_free_season_start( Parameters ---------- tasmin : xarray.DataArray - Minimum daily temperature. + Minimum daily temperature. thresh : str - Threshold temperature on which to base evaluation. + Threshold temperature on which to base evaluation. window : int - Minimum number of days with temperature above threshold needed for evaluation. + Minimum number of days with temperature above threshold needed for evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [dimensionless] - Day of the year when minimum temperature is superior to a threshold - over a given number of days for the first time. - If there is no such day or if a frost free season is not detected, returns np.nan. + Day of the year when minimum temperature is superior to a threshold + over a given number of days for the first time. + If there is no such day or if a frost free season is not detected, returns np.nan. Notes ----- @@ -874,22 +874,22 @@ def frost_free_season_end( Parameters ---------- tasmin : xarray.DataArray - Minimum daily temperature. + Minimum daily temperature. thresh : str - Threshold temperature on which to base evaluation. + Threshold temperature on which to base evaluation. mid_date : str - Date of the year after which to look for the end of the season. Should have the format '%m-%d'. + Date of the year after which to look for the end of the season. Should have the format '%m-%d'. window : int - Minimum number of days with temperature below threshold needed for evaluation. + Minimum number of days with temperature below threshold needed for evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [dimensionless] - Day of the year when minimum temperature is inferior to a threshold over a given number of days for the first time. - If there is no such day or if a frost free season is not detected, returns np.nan. - If the frost free season does not end within the time period, returns the last day of the period. + Day of the year when minimum temperature is inferior to a threshold over a given number of days for the first time. + If there is no such day or if a frost free season is not detected, returns np.nan. + If the frost free season does not end within the time period, returns the last day of the period. """ thresh = convert_units_to(thresh, tasmin) cond = tasmin >= thresh @@ -922,26 +922,26 @@ def frost_free_season_length( Warnings -------- - The default `freq` is valid for the northern hemisphere. + The default `mid_date` and `freq` call parameters are valid for the northern hemisphere. Parameters ---------- tasmin : xarray.DataArray - Minimum daily temperature. + Minimum daily temperature. window : int - Minimum number of days with temperature above threshold to mark the beginning and end of frost free season. + Minimum number of days with temperature above threshold to mark the beginning and end of frost free season. mid_date : str, optional - Date the must be included in the season. It is the earliest the end of the season can be. - If None, there is no limit. + Date the must be included in the season. It is the earliest the end of the season can be. + If None, there is no limit. thresh : str - Threshold temperature on which to base evaluation. + Threshold temperature on which to base evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [time] - Frost free season length. + Frost free season length. Notes ----- @@ -1002,21 +1002,21 @@ def last_spring_frost( Parameters ---------- tas : xarray.DataArray - Mean daily temperature. + Mean daily temperature. thresh : str - Threshold temperature on which to base evaluation. + Threshold temperature on which to base evaluation. before_date : str, - Date of the year before which to look for the final frost event. Should have the format '%m-%d'. + Date of the year before which to look for the final frost event. Should have the format '%m-%d'. window : int - Minimum number of days with temperature below threshold needed for evaluation. + Minimum number of days with temperature below threshold needed for evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [dimensionless] - Day of the year when temperature is inferior to a threshold over a given number of days for the first time. - If there is no such day, returns np.nan. + Day of the year when temperature is inferior to a threshold over a given number of days for the first time. + If there is no such day, returns np.nan. """ thresh = convert_units_to(thresh, tas) cond = tas < thresh @@ -1053,21 +1053,21 @@ def first_day_below( Parameters ---------- tasmin : xarray.DataArray - Minimum daily temperature. + Minimum daily temperature. thresh : str - Threshold temperature on which to base evaluation. + Threshold temperature on which to base evaluation. after_date : str - Date of the year after which to look for the first frost event. Should have the format '%m-%d'. + Date of the year after which to look for the first frost event. Should have the format '%m-%d'. window : int - Minimum number of days with temperature below threshold needed for evaluation. + Minimum number of days with temperature below threshold needed for evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [dimensionless] - Day of the year when minimum temperature is inferior to a threshold over a given number of days for the first time. - If there is no such day, returns np.nan. + Day of the year when minimum temperature is inferior to a threshold over a given number of days for the first time. + If there is no such day, returns np.nan. """ thresh = convert_units_to(thresh, tasmin) cond = tasmin < thresh @@ -1104,21 +1104,21 @@ def first_day_above( Parameters ---------- tasmin : xarray.DataArray - Minimum daily temperature. + Minimum daily temperature. thresh : str - Threshold temperature on which to base evaluation. + Threshold temperature on which to base evaluation. after_date : str - Date of the year after which to look for the first event. Should have the format '%m-%d'. + Date of the year after which to look for the first event. Should have the format '%m-%d'. window : int - Minimum number of days with temperature above threshold needed for evaluation. + Minimum number of days with temperature above threshold needed for evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [dimensionless] - Day of the year when minimum temperature is superior to a threshold over a given number of days for the first time. - If there is no such day, returns np.nan. + Day of the year when minimum temperature is superior to a threshold over a given number of days for the first time. + If there is no such day, returns np.nan. """ thresh = convert_units_to(thresh, tasmin) cond = tasmin > thresh @@ -1151,17 +1151,17 @@ def first_snowfall( Parameters ---------- prsn : xarray.DataArray - Solid precipitation flux. + Solid precipitation flux. thresh : str - Threshold precipitation flux on which to base evaluation. + Threshold precipitation flux on which to base evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [dimensionless] - First day of the year when the solid precipitation is superior to a threshold. - If there is no such day, returns np.nan. + First day of the year when the solid precipitation is superior to a threshold. + If there is no such day, returns np.nan. References ---------- @@ -1197,17 +1197,17 @@ def last_snowfall( Parameters ---------- prsn : xarray.DataArray - Solid precipitation flux. + Solid precipitation flux. thresh : str - Threshold precipitation flux on which to base evaluation. + Threshold precipitation flux on which to base evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [dimensionless] - Last day of the year when the solid precipitation is superior to a threshold. - If there is no such day, returns np.nan. + Last day of the year when the solid precipitation is superior to a threshold. + If there is no such day, returns np.nan. References ---------- @@ -1240,14 +1240,14 @@ def days_with_snow( Parameters ---------- prsn : xr.DataArray - Solid precipitation flux. + Solid precipitation flux. low : float - Minimum threshold solid precipitation flux. + Minimum threshold solid precipitation flux. high : float - Maximum threshold solid precipitation flux. + Maximum threshold solid precipitation flux. freq : str - Resampling frequency defining the periods as defined in - https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#resampling. + Resampling frequency defining the periods as defined in + https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#resampling. Returns ------- @@ -1278,18 +1278,18 @@ def heat_wave_index( Parameters ---------- tasmax : xarray.DataArray - Maximum daily temperature. + Maximum daily temperature. thresh : str - Threshold temperature on which to designate a heatwave. + Threshold temperature on which to designate a heatwave. window : int - Minimum number of days with temperature above threshold to qualify as a heatwave. + Minimum number of days with temperature above threshold to qualify as a heatwave. freq : str - Resampling frequency. + Resampling frequency. Returns ------- DataArray, [time] - Heat wave index. + Heat wave index. """ thresh = convert_units_to(thresh, tasmax) over = tasmax > thresh @@ -1310,16 +1310,16 @@ def heating_degree_days( Parameters ---------- tas : xarray.DataArray - Mean daily temperature. + Mean daily temperature. thresh : str - Threshold temperature on which to base evaluation. + Threshold temperature on which to base evaluation. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [time][temperature] - Heating degree days index. + Heating degree days index. Notes ----- @@ -1358,18 +1358,18 @@ def hot_spell_max_length( Parameters ---------- tasmax : xarray.DataArray - Maximum daily temperature. + Maximum daily temperature. thresh_tasmax : str - The maximum temperature threshold needed to trigger a heatwave event. + The maximum temperature threshold needed to trigger a heatwave event. window : int - Minimum number of days with temperatures above thresholds to qualify as a heatwave. + Minimum number of days with temperatures above thresholds to qualify as a heatwave. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [time] - Maximum length of continuous hot days at the wanted frequency. + Maximum length of continuous hot days at the wanted frequency. Notes ----- @@ -1408,13 +1408,13 @@ def hot_spell_frequency( Parameters ---------- tasmax : xarray.DataArray - Maximum daily temperature. + Maximum daily temperature. thresh_tasmax : str - The maximum temperature threshold needed to trigger a heatwave event. + The maximum temperature threshold needed to trigger a heatwave event. window : int - Minimum number of days with temperatures above thresholds to qualify as a heatwave. + Minimum number of days with temperatures above thresholds to qualify as a heatwave. freq : str - Resampling frequency. + Resampling frequency. Returns ------- @@ -1459,16 +1459,16 @@ def snow_cover_duration( Parameters ---------- snd : xarray.DataArray - Surface snow thickness. + Surface snow thickness. thresh : str - Threshold snow thickness. + Threshold snow thickness. freq : str - Resampling frequency. + Resampling frequency. Returns ------- xarray.DataArray, [time] - Number of days where snow depth is greater than or equal to threshold. + Number of days where snow depth is greater than or equal to threshold. """ thresh = convert_units_to(thresh, snd) out = threshold_count(snd, ">=", thresh, freq) @@ -1489,18 +1489,18 @@ def tn_days_above( Parameters ---------- tasmin : xarray.DataArray - Minimum daily temperature. + Minimum daily temperature. thresh : str - Threshold temperature on which to base evaluation. + Threshold temperature on which to base evaluation. freq : str - Resampling frequency. + Resampling frequency. op : {">", ">=", "gt", "ge"} - Comparison operation. Default: ">". + Comparison operation. Default: ">". Returns ------- xarray.DataArray, [time] - Number of days where tasmin > threshold. + Number of days where tasmin > threshold. Notes ----- From c9e42cce18b4af37a9393cd6f493c1ab2fa14477 Mon Sep 17 00:00:00 2001 From: Travis Logan Date: Thu, 1 Sep 2022 16:37:13 -0400 Subject: [PATCH 065/106] Apply suggestions from code review --- xclim/indicators/atmos/_conversion.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xclim/indicators/atmos/_conversion.py b/xclim/indicators/atmos/_conversion.py index 3fb6acb77..c43b842fa 100644 --- a/xclim/indicators/atmos/_conversion.py +++ b/xclim/indicators/atmos/_conversion.py @@ -312,11 +312,11 @@ def cfcheck(self, **das): long_name="Water budget", description=( "Precipitation minus potential evapotranspiration as a measure of an approximated surface water budget, " - "where the potential evapotranspiration, calculated with the {method} method." + "where the potential evapotranspiration is calculated with the {method} method." ), abstract=( "Precipitation minus potential evapotranspiration as a measure of an approximated surface water budget, " - "where the potential evapotranspiration, calculated with a given method." + "where the potential evapotranspiration is calculated with a given method." ), compute=indices.water_budget, ) From 2119a32ed6820a6a31b03cf9d3779fbd7873e184 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 12 Sep 2022 10:54:41 -0400 Subject: [PATCH 066/106] Address comments received through personal communication --- xclim/data/fr.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index c81f8500a..ef6c65b07 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -297,9 +297,9 @@ }, "HEAT_WAVE_TOTAL_LENGTH": { "long_name": "Durée totale des vagues de chaleur", - "description": "Durée totale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", + "description": "Durée totale {freq:f} des vagues de chaleur en somme des jours. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Durée totale des vagues de chaleur", - "abstract": "Durée totale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent des seuils donnés durant un certain nombre de jours." + "abstract": "Durée totale des vagues de chaleur en somme des jours. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_MAX_LENGTH": { "long_name": "Durée maximale des vagues de chaleur", @@ -317,7 +317,7 @@ "long_name": "Moyenne des températures maximale et minimale quotidennes", "description": "Température moyenne quotidienne moyenne estimée par la moyenne des températures maximale et minimale quotidiennnes.", "title": "Température moyenne", - "abstract": "La température moyenne quotidienne en assumant une distribution symétrique des températures maximale et minmale quotidiennes (Tg = (Tx + Tn) / 2)." + "abstract": "La température moyenne quotidienne en supposant une distribution symétrique des températures maximale et minimale quotidiennes (Tg = (Tx + Tn) / 2)." }, "TG_MIN": { "long_name": "Minimum de la température moyenne quotidienne", @@ -430,7 +430,7 @@ "ETR": { "long_name": "Amplitude des températures extrêmes", "description": "Calcul {freq:m} de l'intervalle entre le maximum de la température maximale quotidienne et le minimum de la température minimale quotidienne.", - "title": "Intervalle des températures extrêmes", + "title": "Amplitude des températures extrêmes", "abstract": "Le maximum de la température maximale moins le minimum de la température minimale." }, "COLD_SPELL_DURATION_INDEX": { From e3ecd7a30930a6a149acce8eb8abbd2d71bdd0c5 Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 30 Sep 2022 11:48:27 -0400 Subject: [PATCH 067/106] oops --- xclim/indicators/atmos/_temperature.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 1e924e43c..7f7ab7be4 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -721,7 +721,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "given number of days, after a given calendar date.", cell_methods="", compute=indices.first_day_temperature_below, - input=dict(tas="tasmin") + input=dict(tas="tasmin"), parameters={"after_date": {"default": "07-01"}}, _version_deprecated="0.39.0", ) From 35bae40c3624f0c37d23e0b71d19f37de552358d Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 3 Oct 2022 17:36:37 -0400 Subject: [PATCH 068/106] add huglin index translation, minor typo fixes --- xclim/data/fr.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index af7da492d..82e37a1e8 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -181,7 +181,7 @@ "title": "Jours mouillés", "abstract": "Nombre de jours où la précipitation est au-dessus d'un seuil donné." }, - "WETDAY_PROP": { + "WETDAYS_PROP": { "long_name": "Proportion de jours avec précipitation (précip >= {thresh})", "description": "Proportion {freq:m} de jours où les précipitations sont au-dessus de {thresh}.", "title": "Proportion de jours avec précipitation", @@ -509,11 +509,17 @@ }, "LATITUDE_TEMPERATURE_INDEX": { "long_name": "Indice latitude-température", - "description": "Température moyenne du mois le plus chaud avec un facteur d'échelle basé sur la latitude : Moyenne de température du mois le plus chaud * ({lat_factor} - latitude).", + "description": "Température moyenne du mois le plus chaud avec un facteur d'échelle basé sur la latitude : Moyenne de température du mois le plus chaud * ({lat_factor} - latitude).", "title": "Indice de latitude-température", "comment": "Formule originale prise de Jackson, D. I., & Cherry, N. J. (1988)", "abstract": "Indice climatique basé sur la température moyenne du mois le plus chaud et un coefficient basé sur la latitude pour tenir compte de la durée plus longue du jour favorisant les conditions de croissance. Développé spécifiquement pour la viticulture." }, + "HUGLIN_INDEX": { + "long_name": "Indice héliothermique de Huglin", + "description": "Indice de sommation de chaleur pour l'estimation de l'adéquation agroclimatique, développé spécifiquement pour la viticulture. Calculé avec la formule {méthode} (Somme de ((Tmin + Tmax)/2 - {thresh}) * k), où le coefficient (`k`) est une longueur de jour basée sur la latitude pour les jours typiquement compris entre le 1er avril et le 30 septembre.", + "title": "Indice héliothermique de Huglin", + "abstract": "Indice de sommation de chaleur pour l'estimation de l'adéquation agroclimatique, développé spécifiquement pour la viticulture. Il prend en compte les Tmin et Tmax quotidiennes avec un seuil de base donné, généralement entre le 1er avril et le 30 septembre, et intègre un calcul de coefficient de longueur de jour pour les latitudes plus élevées. Métrique initialement publiée dans Huglin (1978). Le coefficient de longueur du jour est basé sur Hall & Jones (2010)." + }, "FRESHET_START": { "long_name": "Premier jour ayant un dépassement constant du seuil de température", "description": "Jour de l'année du début de la crue printanière, défini comme le premier jour la température moyenne quotidienne est au-dessus de {thresh} pendant au moins {window} jours.", From 39046db1649e7b0fea65d1117ea9701c79b67e03 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 5 Oct 2022 16:41:09 -0400 Subject: [PATCH 069/106] fix freezethaw indicator metadata and translations --- xclim/data/fr.json | 20 ++++++------ xclim/indicators/atmos/_temperature.py | 44 ++++++++++++++------------ 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 82e37a1e8..8093d31e6 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -177,15 +177,15 @@ }, "WETDAYS": { "long_name": "Nombre de jours avec précipitation", - "description": "Nombre {freq:m} de jours où la précipitation est au-dessus de {thresh}.", + "description": "Nombre {freq:m} de jours où la précipitation est au-dessus ou égale à {thresh}.", "title": "Jours mouillés", - "abstract": "Nombre de jours où la précipitation est au-dessus d'un seuil donné." + "abstract": "Nombre de jours où la précipitation est au-dessus ou égale à un seuil donné." }, "WETDAYS_PROP": { - "long_name": "Proportion de jours avec précipitation (précip >= {thresh})", - "description": "Proportion {freq:m} de jours où les précipitations sont au-dessus de {thresh}.", + "long_name": "Proportion de jours avec précipitation", + "description": "Proportion {freq:m} de jours où les précipitations sont au-dessus ou égale à {thresh}.", "title": "Proportion de jours avec précipitation", - "abstract": "Proportion de jours où la précipitation est au-dessus d'un seuil donné." + "abstract": "Proportion de jours où la précipitation est au-dessus ou égale à un seuil donné." }, "CDD": { "long_name": "Durée maximale d'une période sèche", @@ -459,9 +459,9 @@ }, "DLYFRZTHW": { "long_name": "Nombre de jours avec un cycle de gel-dégel", - "description": "Nombre {freq:m} de jours avec un gel-dégel quotidien (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin}).", + "description": "Nombre {freq} de jours avec un cycle diurne de gel-dégel, où les températures maximales quotidiennes sont au-dessus de {thresh_tasmax} et les températures minimales quotidiennes sont en dessous ou égales à {thresh_tasmin}).", "title": "Cycles de gel-dégel", - "abstract": "Le nombre de jours où la température maximale quotidienne est au-dessus d'un seuil donné et la température minimale quotidienne est sous un seuil donné, habituellement 0°C pour les deux." + "abstract": "Le nombre de jours avec un cycle de gel-dégel. Un cycle de gel-dégel est défini comme un jour où la température maximale quotidienne est au-dessus d'un seuil donné et où la température minimale quotidienne est égale ou en dessous d'un seuil, généralement 0°C pour les deux.." }, "COOLING_DEGREE_DAYS": { "long_name": "Degrés-jours de climatisation", @@ -971,19 +971,19 @@ }, "FREEZETHAW_SPELL_FREQUENCY": { "title": "Fréquence des périodes d'événements consécutifs de gel-dégel", - "abstract": "Fréquence des périodes d'événements consécutifs de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", + "abstract": "Fréquence des périodes d'événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux..", "description": "Fréquence {freq:f} périodes d'événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", "long_name": "Fréquence périodes d'événements consécutifs de gel-dégel" }, "FREEZETHAW_SPELL_MAX_LENGTH": { "title": "Durée maximale des périodes d'événements consécutifs de gel-dégel", - "abstract": "Durée maximale des périodes d'événements consécutifs de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", + "abstract": "Durée maximale des périodes d'événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux..", "description": "Durée maximale {freq:f} des périodes d'événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", "long_name": "Durée maximale des périodes d'événements consécutifs de gel-dégel" }, "FREEZETHAW_SPELL_MEAN_LENGTH": { "title": "Durée moyenne des périodes d'événements consécutifs de gel-dégel", - "abstract": "Durée moyenne des périodes d'événements consécutifs de gel-dégel. Ces périodes sont des séries de jours consécutifs où la température minimale quotidienne est sous un seuil et la température maximale quotidienne au-dessus d'un autre. En général, ces deux seuils sont 0°C.", + "abstract": "Durée moyenne des périodes d'événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux..", "description": "Durée moyenne {freq:f} des spériodes d'événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", "long_name": "Durée moyenne des périodes d'événements consécutifs de gel-dégel" }, diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 7f7ab7be4..abca9e2b4 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -502,11 +502,11 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="dlyfrzthw", units="days", long_name="Number of days with a freeze-thaw cycle", - # FIXME: Section formatting will shift variable names to all lowercase. - description="{freq} number of days with a diurnal freeze-thaw cycle (Tmax > {thresh_tasmax} and Tmin <= " - "{thresh_tasmin}).", - abstract="The number of days with a freeze-thaw cycle. A freeze-thaw cycle is defined as a day where Tmax is above " - "a given threshold and Tmin is below a given threshold, usually 0°C for both.", + description="{freq} number of days with a diurnal freeze-thaw cycle, where maximum daily temperatures are above " + "{thresh_tasmax} and minimum daily temperatures are at or below {thresh_tasmin}).", + abstract="The number of days with a freeze-thaw cycle. A freeze-thaw cycle is defined as a day where maximum daily " + "temperature is above a given threshold and minimum daily temperature is at or below a given threshold, " + "usually 0°C for both.", cell_methods="", compute=indices.multiday_temperature_swing, parameters={ @@ -525,11 +525,11 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="freezethaw_spell_frequency", units="days", long_name="Frequency of daily freeze-thaw spells", - # FIXME: Section formatting will shift variable names to all lowercase. - description="{freq} number of freeze-thaw spells (Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}) " - "for at least {window} consecutive day(s).", + description="{freq} number of freeze-thaw spells, where maximum daily temperatures are above {thresh_tasmax} " + "and minimum daily temperatures are at or below {thresh_tasmin}) for at least {window} consecutive day(s).", abstract="Frequency of daily freeze-thaw spells. A freeze-thaw spell is defined as a number of consecutive days " - "where Tmax is above a given threshold and Tmin is below a given threshold, usually 0°C for both.", + "where maximum daily temperatures are above a given threshold and minimum daily temperatures are at or below a " + "given threshold, usually 0°C for both.", cell_methods="", compute=indices.multiday_temperature_swing, parameters={ @@ -547,11 +547,12 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="freezethaw_spell_mean_length", units="days", long_name="Average length of daily freeze-thaw spells", - # FIXME: Section formatting will shift variable names to all lowercase. - description="{freq} average length of freeze-thaw spells (Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}) " - "for at least {window} consecutive day(s).", + description="{freq} average length of freeze-thaw spells, where maximum daily temperatures are above " + "{thresh_tasmax} and minimum daily temperatures are at or below {thresh_tasmin}) for at least {window} consecutive " + "day(s).", abstract="Average length of daily freeze-thaw spells. A freeze-thaw spell is defined as a number of consecutive " - "days where Tmax is above a given threshold and Tmin is below a given threshold, usually 0°C for both.", + "days where maximum daily temperatures are above a given threshold and minimum daily temperatures are at or below " + "a given threshold, usually 0°C for both.", cell_methods="", compute=indices.multiday_temperature_swing, parameters={ @@ -569,11 +570,12 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="freezethaw_spell_max_length", units="days", long_name="Maximal length of freeze-thaw spells", - # FIXME: Section formatting will shift variable names to all lowercase. - description="{freq} maximal length of freeze-thaw spells (Tmax > {thresh_tasmax} and Tmin <= {thresh_tasmin}) " - "for at least {window} consecutive day(s).", + description="{freq} maximal length of freeze-thaw spells, where maximum daily temperatures are above " + "{thresh_tasmax} and minimum daily temperatures are at or below {thresh_tasmin} for at least {window} consecutive " + "day(s).", abstract="Maximal length of daily freeze-thaw spells. A freeze-thaw spell is defined as a number of consecutive " - "days where Tmax is above a given threshold and Tmin is below a threshold, usually 0°C for both.", + "days where maximum daily temperatures are above a given threshold and minimum daily temperatures are at or below " + "a threshold, usually 0°C for both.", cell_methods="", compute=indices.multiday_temperature_swing, parameters={ @@ -593,8 +595,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): standard_name="integral_of_air_temperature_excess_wrt_time", long_name="Cooling degree days", description="{freq} cumulative cooling degree days (mean temperature above {thresh}).", - abstract="The cumulative degree days for days when the average temperature is above a given threshold and buildings must " - "be air conditioned.", + abstract="The cumulative degree days for days when the average temperature is above a given threshold and " + "buildings must be air conditioned.", cell_methods="time: sum over days", compute=indices.cooling_degree_days, parameters={"thresh": {"default": "18.0 degC"}}, @@ -607,8 +609,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): standard_name="integral_of_air_temperature_deficit_wrt_time", long_name="Heating degree days", description="{freq} cumulative heating degree days (mean temperature below {thresh}).", - abstract="The cumulative degree days for days when the average temperature is below a given threshold and buildings must " - "be heated.", + abstract="The cumulative degree days for days when the average temperature is below a given threshold and " + "buildings must be heated.", cell_methods="time: sum over days", compute=indices.heating_degree_days, parameters={"thresh": {"default": "17.0 degC"}}, From eaacaaaff1eed228a0b5c64c3da32c546e8e5299 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Wed, 5 Oct 2022 17:11:35 -0400 Subject: [PATCH 070/106] Address review comments and fix typos --- xclim/data/fr.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 8093d31e6..92a445740 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -581,9 +581,9 @@ "abstract": "Nombre de jours où la température minimale quotidienne est au-dessus d'un seuil donné." }, "BASE_FLOW_INDEX": { - "long_name": "Flux de base", + "long_name": "Écoulement de base", "description": "Minimum de la moyenne mobile sur 7 jours du flux moyen divisé par le flux moyen.", - "title": "Flux de base", + "title": "Écoulement de base", "abstract": "Minimum de la moyenne mobile sur 7 jours du flux moyen divisé par le flux moyen." }, "RB_FLASHINESS_INDEX": { @@ -737,9 +737,9 @@ }, "HURS_FROMDEWPOINT": { "long_name": "Humidité relative", - "description": "Humidité relative calculée à partir de la température et du point de rosée à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", - "title": "Humidité relative calculée à partir de la température et du point de rosée", - "abstract": "Humidité relative calculée à partir de la température et du point de rosée à l'aide de la pression de vapeur saturante." + "description": "Humidité relative calculée à partir de la température du point de rosée à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", + "title": "Humidité relative calculée à partir de la température du point de rosée", + "abstract": "Humidité relative calculée à partir de la température du point de rosée à l'aide de la pression de vapeur saturante." }, "HURS": { "long_name": "Humidité relative", @@ -820,7 +820,7 @@ "abstract": "Précipitation solide estimée à partir de la précipitation totale et de la température selon une méthode et un seuil de température donnés." }, "SNOW_DEPTH": { - "long_name": "Épaisseur de neige moyenne quotidiennee", + "long_name": "Épaisseur de neige moyenne quotidienne", "description": "Épaisseur de neige moyenne quotidienne.", "title": "Moyenne de la profondeur de neige", "abstract": "Épaisseur de neige moyenne quotidienne." @@ -947,7 +947,7 @@ }, "WARM_SPELL_DURATION_INDEX": { "title": "Indice de durée des vagues de chaleur", - "abstract": "Nombre de jours consécutifs plus grand qu'un nombre de jour minimal donnée et ayant une température maximale quotidienne plus grande qu'un centile donné. Le seuil de centile des températures doit être calculé avec une fenêtre mobile d'un nombre de jours donné.", + "abstract": "Nombre de jours consécutifs plus grand qu'un nombre de jours minimal donnée et ayant une température maximale quotidienne plus grande qu'un centile donné. Le seuil de centile des températures doit être calculé avec une fenêtre mobile d'un nombre de jours donné.", "description": "Nombre de jours avec au moins {window} jours consécutifs où la température maximale quotidienne est au-dessus ou égale au(x) {tasmax_per_thresh}e centile(s). Une fenêtre de {tasmax_per_window} jour(s), centrée sur chaque jour du calendrier de la période {tasmax_per_period}, est utilisée pour calculer le(s) {tasmax_per_thresh}e(s) centile(s).", "long_name": "Nombre de jours faisant partie d'une vague de chaleur définie par un centile" }, @@ -1025,7 +1025,7 @@ }, "DRY_SPELL_FREQUENCY": { "title": "Fréquence des périodes sèches", - "abstract": "Fréquence des périodes sèches d'une durée minimale donnée, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donné sont inférieures à un seuil donné.", + "abstract": "Fréquence des périodes sèches d'une durée minimale donnée, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donnée sont inférieures à un seuil donné.", "description": "Fréquence {freq:f} des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}.", "long_name": "Fréquence des périodes sèches" }, @@ -1068,7 +1068,7 @@ "WINDY_DAYS": { "title": "Nombre de jours venteux", "abstract": "Nombre de jours où la vitesse du vent de surface est au-dessus ou égale à un seuil donné.", - "description": "Nombre {freq:m} de jours où la vitesse du vent de surface est au-deesus ou égale à {thresh}.", + "description": "Nombre {freq:m} de jours où la vitesse du vent de surface est au-dessus ou égale à {thresh}.", "long_name": "Nombre de jours où la vitesse du vent de surface est au-dessus ou égale à un seuil donné" }, "JETSTREAM_METRIC_WOOLLINGS": { From f7141788f909640044525a8aad3ebc012396bc9b Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 6 Oct 2022 11:37:40 -0400 Subject: [PATCH 071/106] Address final review comments --- xclim/data/fr.json | 28 ++++++++++++++-------------- xclim/indicators/atmos/_synoptic.py | 5 ++--- xclim/indices/_synoptic.py | 3 ++- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 92a445740..e2b3a0c79 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -47,7 +47,7 @@ "hivernale", "hivernaux", "hivernales", - "hivers" + "hiver" ], "MAM": [ "printanier", @@ -61,14 +61,14 @@ "estivale", "estivaux", "estivales", - "étés" + "été" ], "SON": [ "automnal", "automnale", "automnaux", "automnales", - "automnes" + "automne" ], "norm": [ "normal", @@ -611,14 +611,14 @@ "abstract": "" }, "DOY_QMAX": { - "long_name": "Jour de l'année du maximum du débit le long d'un période de temps", - "description": "Jour de l'année du maximum du débit de le long de {indexer}.", + "long_name": "Jour de l'année du maximum du débit", + "description": "Jour de l'année du maximum du débit en {indexer:nom}.", "title": "Jour de l'année du maximum du débit", "abstract": "" }, "DOY_QMIN": { - "long_name": "Jour de l'année du minimum du débit le long d'un période de temps'", - "description": "Jour de l'année du minimum du débit le long de {indexer}.", + "long_name": "Jour de l'année du minimum du débit", + "description": "Jour de l'année du minimum du débit en {indexer:nom}.", "title": "Jour de l'année du minimum du débit", "abstract": "" }, @@ -1048,16 +1048,16 @@ "long_name": "Nombre de jours chauds et secs" }, "WARM_AND_WET_DAYS": { - "title": "Nombre de jours chauds et humide", + "title": "Nombre de jours chauds et pluvieux", "abstract": "Nombre de jours où la température et la précipitation sont au-dessus de centiles donnés.", "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile.", - "long_name": "Nombre de jours chauds et humides" + "long_name": "Nombre de jours chauds et pluvieux" }, "COLD_AND_WET_DAYS": { - "title": "Nombre de jours froids et humide", + "title": "Nombre de jours froids et pluvieux", "abstract": "Nombre de jours où la température est en dessous d'un centile donné et la précipitation au-dessus d'un centile donné.", "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile.", - "long_name": "Nombre de jours froids et humides" + "long_name": "Nombre de jours froids et pluvieux" }, "CALM_DAYS": { "title": "Nombre de jours de vent calme", @@ -1073,10 +1073,10 @@ }, "JETSTREAM_METRIC_WOOLLINGS": { "title": "Force et latitude du courant-jet", - "abstract": "Latitude et magnitude du maximum de la vitesse du vent zonal entre 15 à 75°N et -60 à 0°E.", + "abstract": "Latitude et magnitude du maximum de la vitesse du vent zonal entre 15 à 75°N et -60 à 0°E. Le vent est lissé par un fenêtrage de Lanczos.", "description": [ - "Latitude quotidienne du maximum du vent zonal lissé", - "Magnitude quotidienne du maximum du vent zonal lissé" + "Latitude quotidienne du maximum du vent zonal lissé par un fenêtrage de Lanczos.", + "Magnitude quotidienne du maximum du vent zonal lissé par un fenêtrage de Lanczos." ], "long_name": [ "Latitude du maximum du vent zonal", diff --git a/xclim/indicators/atmos/_synoptic.py b/xclim/indicators/atmos/_synoptic.py index 91d4ce0a4..b4aeb065c 100644 --- a/xclim/indicators/atmos/_synoptic.py +++ b/xclim/indicators/atmos/_synoptic.py @@ -23,9 +23,8 @@ class JetStream(Indicator): "Maximum strength of smoothed zonal wind speed", ], description=[ - "Daily latitude of maximum smoothed zonal wind speed.", - "Daily maximum strength of smoothed zonal wind speed.", + "Daily latitude of maximum Lanczos smoothed zonal wind speed.", + "Daily maximum strength of Lanczos smoothed zonal wind speed.", ], - abstract="Latitude and magnitude of maximum zonal wind speed between 15 to 75°N and -60 to 0°E.", compute=indices.jetstream_metric_woollings, ) diff --git a/xclim/indices/_synoptic.py b/xclim/indices/_synoptic.py index f99743ad7..c40d52dda 100644 --- a/xclim/indices/_synoptic.py +++ b/xclim/indices/_synoptic.py @@ -26,7 +26,8 @@ def jetstream_metric_woollings( """Strength and latitude of jetstream. Identify latitude and strength of maximum smoothed zonal wind speed in the region from 15 to 75°N and -60 to 0°E, - using the formula outlined in :cite:p:`woollings_variability_2010`. + using the formula outlined in :cite:p:`woollings_variability_2010`. Wind is smoothened using a Lanczos filter + approach. Warnings -------- From 0490ad24e241ef32df17c538d500b3c47e0c518e Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 6 Oct 2022 11:46:16 -0400 Subject: [PATCH 072/106] Adjust freezethaw spell expected descriptions, adjust test structure --- xclim/indicators/atmos/_temperature.py | 4 +- xclim/testing/tests/test_temperature.py | 193 ++++++++++++------------ 2 files changed, 96 insertions(+), 101 deletions(-) diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index abca9e2b4..5b94afcd4 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -526,7 +526,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="days", long_name="Frequency of daily freeze-thaw spells", description="{freq} number of freeze-thaw spells, where maximum daily temperatures are above {thresh_tasmax} " - "and minimum daily temperatures are at or below {thresh_tasmin}) for at least {window} consecutive day(s).", + "and minimum daily temperatures are at or below {thresh_tasmin} for at least {window} consecutive day(s).", abstract="Frequency of daily freeze-thaw spells. A freeze-thaw spell is defined as a number of consecutive days " "where maximum daily temperatures are above a given threshold and minimum daily temperatures are at or below a " "given threshold, usually 0°C for both.", @@ -548,7 +548,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="days", long_name="Average length of daily freeze-thaw spells", description="{freq} average length of freeze-thaw spells, where maximum daily temperatures are above " - "{thresh_tasmax} and minimum daily temperatures are at or below {thresh_tasmin}) for at least {window} consecutive " + "{thresh_tasmax} and minimum daily temperatures are at or below {thresh_tasmin} for at least {window} consecutive " "day(s).", abstract="Average length of daily freeze-thaw spells. A freeze-thaw spell is defined as a number of consecutive " "days where maximum daily temperatures are above a given threshold and minimum daily temperatures are at or below " diff --git a/xclim/testing/tests/test_temperature.py b/xclim/testing/tests/test_temperature.py index 631b018d9..333e30e83 100644 --- a/xclim/testing/tests/test_temperature.py +++ b/xclim/testing/tests/test_temperature.py @@ -1242,44 +1242,43 @@ def test_degree_days_exceedance_date(): np.testing.assert_array_equal(out, np.array([[np.nan, 280, 241, 244]]).T) -def test_warm_spell_duration_index(): - tasmax = open_dataset("ERA5/daily_surface_cancities_1990-1993.nc").tasmax - tx90 = percentile_doy(tasmax, window=5, per=90) +class TestWarmSpellDurationIndex: + def test_warm_spell_duration_index(self): + tasmax = open_dataset("ERA5/daily_surface_cancities_1990-1993.nc").tasmax + tx90 = percentile_doy(tasmax, window=5, per=90) - out = atmos.warm_spell_duration_index( - tasmax=tasmax, tasmax_per=tx90, window=3, freq="AS-JUL" - ) - np.testing.assert_array_equal( - out.isel(location=0, percentiles=0), np.array([np.nan, 3, 0, 0, np.nan]) - ) - assert "Annual number of days with at least 3 consecutive days" in out.description + out = atmos.warm_spell_duration_index( + tasmax=tasmax, tasmax_per=tx90, window=3, freq="AS-JUL" + ) + np.testing.assert_array_equal( + out.isel(location=0, percentiles=0), np.array([np.nan, 3, 0, 0, np.nan]) + ) + assert "Annual number of days with at least 3 consecutive days" in out.description + def test_wsdi_custom_percentiles_parameters(self): + # GIVEN + tasmax = open_dataset("ERA5/daily_surface_cancities_1990-1993.nc").tasmax + tasmax_per = tasmax.sel(time=slice("01-01-1990", "31-12-1991")) + # WHEN + tx90 = percentile_doy(tasmax_per, per=[42, 24], window=2) + out = atmos.warm_spell_duration_index(tasmax, tx90, freq="YS") + # THEN + assert "[42 24]th" in out.attrs["description"] + assert "2 day(s) window" in out.attrs["description"] + assert "['1990-01-01', '1991-12-31']" in out.attrs["description"] -def test_wsdi__custom_percentiles_params(): - # GIVEN - tasmax = open_dataset("ERA5/daily_surface_cancities_1990-1993.nc").tasmax - tasmax_per = tasmax.sel(time=slice("01-01-1990", "31-12-1991")) - # WHEN - tx90 = percentile_doy(tasmax_per, per=[42, 24], window=2) - out = atmos.warm_spell_duration_index(tasmax, tx90, freq="YS") - # THEN - assert "[42 24]th" in out.attrs["description"] - assert "2 day(s) window" in out.attrs["description"] - assert "['1990-01-01', '1991-12-31']" in out.attrs["description"] - - -def test_wsdi__default_percentiles_params(): - # GIVEN - tasmax = open_dataset("ERA5/daily_surface_cancities_1990-1993.nc").tasmax - tasmax_per = tasmax.sel(time=slice("01-01-1990", "31-12-1991")) - # WHEN - tx90 = percentile_doy(tasmax_per, per=[42, 24], window=2) - del tx90.attrs["climatology_bounds"] - res = atmos.warm_spell_duration_index(tasmax, tx90, freq="YS") - # THEN - assert "{unknown} day(s) window" in res.attrs["description"] - assert "{unknown} period" in res.attrs["description"] - assert "{unknown}th percentile(s)" in res.attrs["description"] + def test_wsdi_default_percentiles_parameters(self): + # GIVEN + tasmax = open_dataset("ERA5/daily_surface_cancities_1990-1993.nc").tasmax + tasmax_per = tasmax.sel(time=slice("01-01-1990", "31-12-1991")) + # WHEN + tx90 = percentile_doy(tasmax_per, per=[42, 24], window=2) + del tx90.attrs["climatology_bounds"] + res = atmos.warm_spell_duration_index(tasmax, tx90, freq="YS") + # THEN + assert "{unknown} day(s) window" in res.attrs["description"] + assert "{unknown} period" in res.attrs["description"] + assert "{unknown}th percentile(s)" in res.attrs["description"] def test_maximum_consecutive_warm_days(): @@ -1319,76 +1318,72 @@ def test_corn_heat_units(): ) -def test_freezethaw_spell_frequency(): - ds = open_dataset("ERA5/daily_surface_cancities_1990-1993.nc") +class TestFreezeThawSpell: + def test_freezethaw_spell_frequency(self): + ds = open_dataset("ERA5/daily_surface_cancities_1990-1993.nc") - out = atmos.freezethaw_spell_frequency( - tasmin=ds.tasmin, tasmax=ds.tasmax, freq="YS" - ) - np.testing.assert_array_equal(out.isel(location=0), [32, 38, 37, 30]) - - # At location -1, year 2 has no spells of length >=2 - out = atmos.freezethaw_spell_frequency( - tasmin=convert_units_to(ds.tasmin, "degF"), - tasmax=ds.tasmax, - window=2, - freq="YS", - ) - np.testing.assert_array_equal(out.isel(location=-1), [1, 0, 1, 1]) + out = atmos.freezethaw_spell_frequency( + tasmin=ds.tasmin, tasmax=ds.tasmax, freq="YS" + ) + np.testing.assert_array_equal(out.isel(location=0), [32, 38, 37, 30]) - assert out.attrs["long_name"] == "Frequency of daily freeze-thaw spells" - assert out.attrs["description"] in [ - # FIXME: Section formatting shifts variable names to all lowercase. - "Annual number of freeze-thaw spells (Tmax > 0 degC and Tmin <= 0 degC) " - "for at least 2 consecutive day(s).".lower().capitalize() - ] + # At location -1, year 2 has no spells of length >=2 + out = atmos.freezethaw_spell_frequency( + tasmin=convert_units_to(ds.tasmin, "degF"), + tasmax=ds.tasmax, + window=2, + freq="YS", + ) + np.testing.assert_array_equal(out.isel(location=-1), [1, 0, 1, 1]) + assert out.attrs["long_name"] == "Frequency of daily freeze-thaw spells" + assert out.attrs["description"] in [ + "Annual number of freeze-thaw spells, where maximum daily temperatures are above 0 degc and minimum daily " + "temperatures are at or below 0 degc for at least 2 consecutive day(s)" + ] -def test_freezethaw_spell_mean_length(): - ds = open_dataset("ERA5/daily_surface_cancities_1990-1993.nc") + def test_freezethaw_spell_mean_length(self): + ds = open_dataset("ERA5/daily_surface_cancities_1990-1993.nc") - out = atmos.freezethaw_spell_mean_length( - tasmin=ds.tasmin, tasmax=ds.tasmax, freq="YS" - ) - np.testing.assert_allclose(out.isel(location=0), [2.09375, 2, 1.8648648, 1.7666666]) - - # At location -1, year 2 has no spells of length >=2 - out = atmos.freezethaw_spell_mean_length( - tasmin=convert_units_to(ds.tasmin, "degF"), - tasmax=ds.tasmax, - window=2, - freq="YS", - ) - np.testing.assert_array_equal(out.isel(location=-1), [2, 0, 2, 2]) + out = atmos.freezethaw_spell_mean_length( + tasmin=ds.tasmin, tasmax=ds.tasmax, freq="YS" + ) + np.testing.assert_allclose(out.isel(location=0), [2.09375, 2, 1.8648648, 1.7666666]) - assert out.attrs["long_name"] == "Average length of daily freeze-thaw spells" - assert out.attrs["description"] in [ - # FIXME: Section formatting shifts variable names to all lowercase. - "Annual average length of freeze-thaw spells (Tmax > 0 degC and Tmin <= 0 degC) " - "for at least 2 consecutive day(s).".lower().capitalize() - ] + # At location -1, year 2 has no spells of length >=2 + out = atmos.freezethaw_spell_mean_length( + tasmin=convert_units_to(ds.tasmin, "degF"), + tasmax=ds.tasmax, + window=2, + freq="YS", + ) + np.testing.assert_array_equal(out.isel(location=-1), [2, 0, 2, 2]) + assert out.attrs["long_name"] == "Average length of daily freeze-thaw spells" + assert out.attrs["description"] in [ + "Annual average length of freeze-thaw spells, where maximum daily temperatures are above 0 degc and " + "minimum daily temperatures are at or below 0 degc for at least 2 consecutive day(s)." + ] -def test_freezethaw_spell_max_length(): - ds = open_dataset("ERA5/daily_surface_cancities_1990-1993.nc") + def test_freezethaw_spell_max_length(self): + ds = open_dataset("ERA5/daily_surface_cancities_1990-1993.nc") - out = atmos.freezethaw_spell_max_length( - tasmin=ds.tasmin, tasmax=ds.tasmax, freq="YS" - ) - np.testing.assert_array_equal(out.isel(location=0), [12, 7, 7, 4]) - - # At location -1, year 2 has no spells of length >=2 - out = atmos.freezethaw_spell_max_length( - tasmin=convert_units_to(ds.tasmin, "degF"), - tasmax=ds.tasmax, - window=2, - freq="YS", - ) - np.testing.assert_array_equal(out.isel(location=-1), [2, 0, 2, 2]) - - assert out.attrs["long_name"] == "Maximal length of freeze-thaw spells" - assert out.attrs["description"] in [ - # FIXME: Section formatting shifts variable names to all lowercase. - "Annual maximal length of freeze-thaw spells (Tmax > 0 degC and Tmin <= 0 degC) " - "for at least 2 consecutive day(s).".lower().capitalize() - ] + out = atmos.freezethaw_spell_max_length( + tasmin=ds.tasmin, tasmax=ds.tasmax, freq="YS" + ) + np.testing.assert_array_equal(out.isel(location=0), [12, 7, 7, 4]) + + # At location -1, year 2 has no spells of length >=2 + out = atmos.freezethaw_spell_max_length( + tasmin=convert_units_to(ds.tasmin, "degF"), + tasmax=ds.tasmax, + window=2, + freq="YS", + ) + np.testing.assert_array_equal(out.isel(location=-1), [2, 0, 2, 2]) + + assert out.attrs["long_name"] == "Maximal length of freeze-thaw spells" + assert out.attrs["description"] in [ + "Annual maximal length of freeze-thaw spells, where maximum daily temperatures are above 0 degc and " + "minimum daily temperatures are at or below 0 degc for at least 2 consecutive day(s)." + ] From 8fe3d8bea369323df82f4eab4ec81875f4d689b1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 6 Oct 2022 15:48:21 +0000 Subject: [PATCH 073/106] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- xclim/testing/tests/test_temperature.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/xclim/testing/tests/test_temperature.py b/xclim/testing/tests/test_temperature.py index 333e30e83..2cdb6e604 100644 --- a/xclim/testing/tests/test_temperature.py +++ b/xclim/testing/tests/test_temperature.py @@ -1253,7 +1253,9 @@ def test_warm_spell_duration_index(self): np.testing.assert_array_equal( out.isel(location=0, percentiles=0), np.array([np.nan, 3, 0, 0, np.nan]) ) - assert "Annual number of days with at least 3 consecutive days" in out.description + assert ( + "Annual number of days with at least 3 consecutive days" in out.description + ) def test_wsdi_custom_percentiles_parameters(self): # GIVEN @@ -1348,7 +1350,9 @@ def test_freezethaw_spell_mean_length(self): out = atmos.freezethaw_spell_mean_length( tasmin=ds.tasmin, tasmax=ds.tasmax, freq="YS" ) - np.testing.assert_allclose(out.isel(location=0), [2.09375, 2, 1.8648648, 1.7666666]) + np.testing.assert_allclose( + out.isel(location=0), [2.09375, 2, 1.8648648, 1.7666666] + ) # At location -1, year 2 has no spells of length >=2 out = atmos.freezethaw_spell_mean_length( From a9f2c54ee71785b14520b3e264dad147d04fc81a Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 6 Oct 2022 12:46:03 -0400 Subject: [PATCH 074/106] typo fix --- xclim/testing/tests/test_temperature.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xclim/testing/tests/test_temperature.py b/xclim/testing/tests/test_temperature.py index 2cdb6e604..75fe5d664 100644 --- a/xclim/testing/tests/test_temperature.py +++ b/xclim/testing/tests/test_temperature.py @@ -1341,7 +1341,7 @@ def test_freezethaw_spell_frequency(self): assert out.attrs["long_name"] == "Frequency of daily freeze-thaw spells" assert out.attrs["description"] in [ "Annual number of freeze-thaw spells, where maximum daily temperatures are above 0 degc and minimum daily " - "temperatures are at or below 0 degc for at least 2 consecutive day(s)" + "temperatures are at or below 0 degc for at least 2 consecutive day(s)." ] def test_freezethaw_spell_mean_length(self): From 6139ab63141de2dd7fa2b0021f03c03f2f94358b Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 6 Oct 2022 15:58:12 -0400 Subject: [PATCH 075/106] Apply suggestions from code review Co-authored-by: juliettelavoie --- xclim/data/fr.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index e2b3a0c79..d79a9981b 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -213,7 +213,7 @@ }, "WET_PRCPTOT": { "long_name": "Précipitation totale lors de jours avec précipitation", - "description": "Précipitation totale {freq:f} lorsque la précipitation quotidienne est au-dessus {thresh}.", + "description": "Précipitation totale {freq:f} lorsque la précipitation quotidienne est au-dessus de {thresh}.", "title": "Précipitation accumulée totale lors de jours avec précipitation", "abstract": "Précipitation accumulée totale lors de jours avec précipitation. Un jour est considéré avec précipitation si la précipitation est au-dessus ou égale à un seuil donné." }, @@ -225,7 +225,7 @@ }, "SOLIDPRCPTOT": { "long_name": "Précipitation solide totale", - "description": "Précipitation solide totale {freq:f}, estimée comme la précipitation lorsque la température moyenne est < {thresh}.", + "description": "Précipitation solide totale {freq:f}, estimée comme la précipitation lorsque la température moyenne est en dessous de {thresh}.", "title": "Précipitation solide accumulée totale", "abstract": "Précipitation solide accumulée totale. La précipitation est considéré solide lorsque la température quotidienne moyenne est sous 0°C." }, @@ -297,9 +297,9 @@ }, "HEAT_WAVE_TOTAL_LENGTH": { "long_name": "Durée totale des vagues de chaleur", - "description": "Durée totale {freq:f} des vagues de chaleur en somme des jours. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", + "description": "Durée totale {freq:f} des vagues de chaleur en somme de jours. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Durée totale des vagues de chaleur", - "abstract": "Durée totale des vagues de chaleur en somme des jours. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent des seuils donnés durant un certain nombre de jours." + "abstract": "Durée totale des vagues de chaleur en somme de jours. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_MAX_LENGTH": { "long_name": "Durée maximale des vagues de chaleur", @@ -659,7 +659,7 @@ "abstract": "Longueur maximale des périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne est au-dessus d'un seuil spécifique durant un minimum de jours." }, "CONSECUTIVE_FROST_FREE_DAYS": { - "long_name": "Nombre maximal de jours consécutifs avec température minimale supérieur à 0°C", + "long_name": "Nombre maximal de jours consécutifs ayant une température minimale supérieure à 0°C", "description": "Nombre maximal {freq:m} de jours consécutifs où la température minimale quotidienne est au-dessus ou égale à {thresh}.", "title": "Nombre maximal de jours consécutifs sans gel", "abstract": "Nombre maximal de jours consécutifs sans gel où la température minimale quotidienne est au-dessus ou égale à 0°C." @@ -811,7 +811,7 @@ "long_name": "Premier jour de l'année où la somme des degrés-jours est au-dessus d'un seuil donné", "description": "Premier jour de l'année où la somme des degrés-jours (température moyenne quotidienne {op} {thresh}) est au-dessus de {sum_thresh}, avec la somme cumulative à partir de {start_date}.", "title": "Jour du dépassement des degrés-jours", - "abstract": "Jour de l'année où la somme des degrés-jours est au-dessus d'un seuil donné. Les degrés-jours sont calculés au-dessus ou au-dessous d'un seuil de température donné." + "abstract": "Jour de l'année où la somme des degrés-jours est au-dessus d'un seuil donné. Les degrés-jours sont calculés au-dessus ou en dessous d'un seuil de température donné." }, "PRSN": { "long_name": "Précipitation solide", @@ -863,7 +863,7 @@ }, "CONTINUOUS_SNOW_COVER_END": { "long_name": "Date de fin du couvert de neige continu", - "description": "Première date à laquelle l'épaisseur de neige passe sous {thresh} pendant au moins {window} jours consécutifs suite à l'établissementau début du couvert de neige.", + "description": "Première date à laquelle l'épaisseur de neige passe sous {thresh} pendant au moins {window} jours consécutifs suite à l'établissement du couvert de neige.", "title": "Date du fin du couvert de neige", "abstract": "Première date à partir de laquelle l'épaisseur de neige est sous à un seuil donné pendant un nombre de jours consécutifs suite au début du couvert de neige." }, @@ -889,7 +889,7 @@ "long_name": "Date de la quantité de neige maximale", "description": "Date {freq:f} à laquelle la quantité de neige atteint sa valeur maximale.", "title": "Date où la quantité de neige est maximale", - "abstract": "Jour de l'année où l'équivalent en eau de la neige quotidien atteint sa valeur maximale." + "abstract": "Jour de l'année où l'équivalent en eau de la neige quotidienne atteint sa valeur maximale." }, "MELT_AND_PRECIP_MAX": { "long_name": "Maximum des apports en eau incluant la fonte de neige et les précipitations", From 20106accf1aa638ccf96ac8ef06560c875958191 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 6 Oct 2022 16:04:52 -0400 Subject: [PATCH 076/106] d' -> des --- xclim/data/fr.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index d79a9981b..50d9c40fd 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -970,22 +970,22 @@ "long_name": "Unités thermiques maïs" }, "FREEZETHAW_SPELL_FREQUENCY": { - "title": "Fréquence des périodes d'événements consécutifs de gel-dégel", - "abstract": "Fréquence des périodes d'événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux..", - "description": "Fréquence {freq:f} périodes d'événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", - "long_name": "Fréquence périodes d'événements consécutifs de gel-dégel" + "title": "Fréquence des périodes des événements consécutifs de gel-dégel", + "abstract": "Fréquence des périodes des événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux..", + "description": "Fréquence {freq:f} périodes des événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", + "long_name": "Fréquence périodes des événements consécutifs de gel-dégel" }, "FREEZETHAW_SPELL_MAX_LENGTH": { - "title": "Durée maximale des périodes d'événements consécutifs de gel-dégel", - "abstract": "Durée maximale des périodes d'événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux..", - "description": "Durée maximale {freq:f} des périodes d'événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", - "long_name": "Durée maximale des périodes d'événements consécutifs de gel-dégel" + "title": "Durée maximale des périodes des événements consécutifs de gel-dégel", + "abstract": "Durée maximale des périodes des événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux..", + "description": "Durée maximale {freq:f} des périodes des événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", + "long_name": "Durée maximale des périodes des événements consécutifs de gel-dégel" }, "FREEZETHAW_SPELL_MEAN_LENGTH": { - "title": "Durée moyenne des périodes d'événements consécutifs de gel-dégel", - "abstract": "Durée moyenne des périodes d'événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux..", - "description": "Durée moyenne {freq:f} des spériodes d'événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", - "long_name": "Durée moyenne des périodes d'événements consécutifs de gel-dégel" + "title": "Durée moyenne des périodes des événements consécutifs de gel-dégel", + "abstract": "Durée moyenne des périodes des événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux..", + "description": "Durée moyenne {freq:f} des spériodes des événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", + "long_name": "Durée moyenne des périodes des événements consécutifs de gel-dégel" }, "WIND_CHILL": { "title": "Facteur éolien", From 575ebc2917b4291b7d3bf0306d78fb6c96c511f2 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 7 Oct 2022 11:52:10 -0400 Subject: [PATCH 077/106] deprecate freshet_start indice, wrap freshet_start indicator using first_day_temperature_above with default values, update metadata descriptions, adjust tests --- xclim/data/fr.json | 6 +-- xclim/indicators/atmos/_temperature.py | 10 +++-- xclim/indices/_threshold.py | 62 +++++++++----------------- xclim/testing/tests/test_indices.py | 6 ++- 4 files changed, 36 insertions(+), 48 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 50d9c40fd..306754ce7 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -521,10 +521,10 @@ "abstract": "Indice de sommation de chaleur pour l'estimation de l'adéquation agroclimatique, développé spécifiquement pour la viticulture. Il prend en compte les Tmin et Tmax quotidiennes avec un seuil de base donné, généralement entre le 1er avril et le 30 septembre, et intègre un calcul de coefficient de longueur de jour pour les latitudes plus élevées. Métrique initialement publiée dans Huglin (1978). Le coefficient de longueur du jour est basé sur Hall & Jones (2010)." }, "FRESHET_START": { - "long_name": "Premier jour ayant un dépassement constant du seuil de température", + "long_name": "Jour de l'année du début de la crue printanière", "description": "Jour de l'année du début de la crue printanière, défini comme le premier jour la température moyenne quotidienne est au-dessus de {thresh} pendant au moins {window} jours.", - "title": "Jour de l'année du début de la crue nivale", - "abstract": "Premier jour où la température moyenne quotidienne est au-dessus d'un seuil donné depuis un certain nombre de jours consécutifs." + "title": "Jour de l'année du début de la crue printanière", + "abstract": "Jour de l'année du début de la crue printanière, défini comme le premier jour où la température moyenne quotidienne est au-dessus d'un seuil donné depuis un certain nombre de jours consécutifs." }, "FROST_SEASON_LENGTH": { "long_name": "Durée de la saison de gel", diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 5b94afcd4..7ac024b22 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -662,11 +662,13 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="freshet_start", units="", standard_name="day_of_year", - long_name="First day consistently exceeding threshold temperature", - description="Day of year of spring freshet start, defined as the first day a temperature threshold of {thresh} " + long_name="Day of year of the spring freshet start", + description="Day of year of the spring freshet start, defined as the first day a temperature threshold of {thresh} " "is exceeded for at least {window} days.", - abstract="First day when the temperature exceeds a certain threshold for a given number of consecutive days", - compute=indices.freshet_start, + abstract="Day of year of the spring freshet start, defined as the first day when the temperature exceeds a certain " + "threshold for a given number of consecutive days.", + compute=indices.first_day_temperature_above, + parameters={"thresh": {"default": "0 degC"}, "window": {"default": 5}}, ) frost_days = TempWithIndexing( diff --git a/xclim/indices/_threshold.py b/xclim/indices/_threshold.py index e6ec08a37..e947b894e 100644 --- a/xclim/indices/_threshold.py +++ b/xclim/indices/_threshold.py @@ -481,48 +481,18 @@ def cooling_degree_days( return out -@declare_units(tas="[temperature]", thresh="[temperature]") def freshet_start( - tas: xarray.DataArray, thresh: str = "0 degC", window: int = 5, freq: str = "YS" -) -> xarray.DataArray: - r"""First day consistently exceeding threshold temperature. - - Returns first day of period where a temperature threshold is exceeded over a given number of days. - - Parameters - ---------- - tas : xarray.DataArray - Mean daily temperature. - thresh : str - Threshold temperature on which to base evaluation. - window : int - Minimum number of days with temperature above threshold needed for evaluation. - freq : str - Resampling frequency. - - Returns - ------- - xarray.DataArray, [dimensionless] - Day of the year when temperature exceeds threshold over a given number of days for the first time. If there is - no such day, return np.nan. - - Notes - ----- - Let :math:`x_i` be the daily mean temperature at day of the year :math:`i` for values of :math:`i` going from 1 - to 365 or 366. The start date of the freshet is given by the smallest index :math:`i` for which - - .. math:: - - \prod_{j=i}^{i+w} [x_j > thresh] + tas: xarray.DataArray, thresh="0 degC", window: int = 5, **kwargs +) -> xarray.DataArray: # noqa: D103 + warnings.warn( + "The `freshet_start` indice is being deprecated in favour of `first_day_temperature_above` " + "with `thresh='0 degC'` and `window=5`. " + "This indice will be removed in `xclim>=0.40.0`. Please update your scripts accordingly.", + DeprecationWarning, + stacklevel=3, + ) - is true, where :math:`w` is the number of days the temperature threshold should be exceeded, and :math:`[P]` is - 1 if :math:`P` is true, and 0 if false. - """ - thresh = convert_units_to(thresh, tas) - over = tas > thresh - out = over.resample(time=freq).map(rl.first_run, window=window, coord="dayofyear") - out.attrs.update(units="", is_dayofyear=np.int32(1), calendar=get_calendar(tas)) - return out + return first_day_temperature_above(tas=tas, thresh=thresh, window=window, **kwargs) @declare_units(tas="[temperature]", thresh="[temperature]") @@ -1152,6 +1122,18 @@ def first_day_temperature_above( xarray.DataArray, [dimensionless] Day of the year when temperature is superior to a threshold over a given number of days for the first time. If there is no such day, returns np.nan. + + Notes + ----- + Let :math:`x_i` be the daily mean|max|min temperature at day of the year :math:`i` for values of :math:`i` going + from 1 to 365 or 366. The first day above temperature threshold is given by the smallest index :math:`i` for which + + .. math:: + + \prod_{j=i}^{i+w} [x_j > thresh] + + is true, where :math:`w` is the number of days the temperature threshold should be exceeded, and :math:`[P]` is + 1 if :math:`P` is true, and 0 if false. """ return first_day_threshold_reached( tas, diff --git a/xclim/testing/tests/test_indices.py b/xclim/testing/tests/test_indices.py index bfe32ff7f..059b090fc 100644 --- a/xclim/testing/tests/test_indices.py +++ b/xclim/testing/tests/test_indices.py @@ -807,7 +807,11 @@ def test_simple(self, tas_series): tg[i : i + w + 1] += 6 # Second valid condition, should be ignored. tg = tas_series(tg + K2C, start="1/1/2000") - out = xci.freshet_start(tg, window=w) + + # Check for DeprecationWarning + with pytest.warns(DeprecationWarning): + out = xci.freshet_start(tg, window=w) + assert out[0] == tg.indexes["time"][30].dayofyear for attr in ["units", "is_dayofyear", "calendar"]: assert attr in out.attrs.keys() From eae8e5b68aa4851b86042bc6f53ae46d2211f837 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 7 Oct 2022 12:41:40 -0400 Subject: [PATCH 078/106] Integrate operators into hot_spell_max_length, hot_spell_frequency, cold_spell_days, cold_spell_frequency, heat_wave_index, warm_day_frequency (indice), warm_night_frequency (indice), dry_days, wetdays, and wetdays_prop. --- xclim/indicators/atmos/_precip.py | 3 ++ xclim/indicators/atmos/_temperature.py | 5 ++ xclim/indices/_threshold.py | 71 +++++++++++++++++++------- 3 files changed, 61 insertions(+), 18 deletions(-) diff --git a/xclim/indicators/atmos/_precip.py b/xclim/indicators/atmos/_precip.py index f9b72b71a..de413a00a 100644 --- a/xclim/indicators/atmos/_precip.py +++ b/xclim/indicators/atmos/_precip.py @@ -149,6 +149,7 @@ class HrPrecip(Hourly): abstract="The number of days with daily precipitation at or above a given threshold.", cell_methods="time: sum over days", compute=indices.wetdays, + parameters={"op": {"default": ">="}}, ) wetdays_prop = PrecipWithIndexing( @@ -160,6 +161,7 @@ class HrPrecip(Hourly): abstract="The proportion of days with daily precipitation at or above a given threshold.", cell_methods="time: sum over days", compute=indices.wetdays_prop, + parameters={"op": {"default": ">="}}, ) dry_days = PrecipWithIndexing( @@ -172,6 +174,7 @@ class HrPrecip(Hourly): abstract="The number of days with daily precipitation under a given threshold.", cell_methods="time: sum over days", compute=indices.dry_days, + parameters={"op": {"default": "<"}}, ) maximum_consecutive_wet_days = Precip( diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 5b94afcd4..54c164f9b 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -247,6 +247,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "temperatures exceed given thresholds for a number of days.", cell_methods="", compute=indices.heat_wave_index, + parameters={"op": {"default": ">"}}, ) @@ -263,6 +264,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): cell_methods="", keywords="health,", compute=indices.hot_spell_frequency, + parameters={"op": {"default": ">"}}, ) hot_spell_max_length = Temp( @@ -278,6 +280,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): cell_methods="", keywords="health,", compute=indices.hot_spell_max_length, + parameters={"op": {"default": ">"}}, ) tg_mean = TempWithIndexing( @@ -467,6 +470,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "consecutive days with mean daily temperature below a given threshold.", cell_methods="", compute=indices.cold_spell_days, + parameters={"op": {"default": "<"}}, ) cold_spell_frequency = Temp( @@ -481,6 +485,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "mean daily temperature below a given threshold.", cell_methods="", compute=indices.cold_spell_frequency, + parameters={"op": {"default": "<"}}, ) cool_night_index = Temp( diff --git a/xclim/indices/_threshold.py b/xclim/indices/_threshold.py index e6ec08a37..94f088358 100644 --- a/xclim/indices/_threshold.py +++ b/xclim/indices/_threshold.py @@ -125,6 +125,7 @@ def cold_spell_days( thresh: str = "-10 degC", window: int = 5, freq: str = "AS-JUL", + op: str = "<", ) -> xarray.DataArray: r"""Cold spell days. @@ -141,6 +142,8 @@ def cold_spell_days( Minimum number of days with temperature below threshold to qualify as a cold spell. freq : str Resampling frequency. + op : {"<", "<=", "lt", "le"} + Comparison operation. Default: "<". Returns ------- @@ -159,7 +162,7 @@ def cold_spell_days( where :math:`[P]` is 1 if :math:`P` is true, and 0 if false. """ t = convert_units_to(thresh, tas) - over = tas < t + over = compare(tas, op, t, constrain=("<", "<=")) group = over.resample(time=freq) out = group.map(rl.windowed_run_count, window=window, dim="time") @@ -172,6 +175,7 @@ def cold_spell_frequency( thresh: str = "-10 degC", window: int = 5, freq: str = "AS-JUL", + op: str = "<", ) -> xarray.DataArray: r"""Cold spell frequency. @@ -188,6 +192,8 @@ def cold_spell_frequency( Minimum number of days with temperature below threshold to qualify as a cold spell. freq : str Resampling frequency. + op : {"<", "<=", "lt", "le"} + Comparison operation. Default: "<". Returns ------- @@ -196,7 +202,7 @@ def cold_spell_frequency( """ t = convert_units_to(thresh, tas) - over = tas < t + over = compare(tas, op, t, constrain=("<", "<=")) group = over.resample(time=freq) out = group.map(rl.windowed_run_events, window=window, dim="time") @@ -363,7 +369,10 @@ def daily_pr_intensity( @declare_units(pr="[precipitation]", thresh="[precipitation]") def dry_days( - pr: xarray.DataArray, thresh: str = "0.2 mm/d", freq: str = "YS" + pr: xarray.DataArray, + thresh: str = "0.2 mm/d", + freq: str = "YS", + op: str = "<", ) -> xarray.DataArray: r"""Dry days. @@ -377,6 +386,8 @@ def dry_days( Threshold temperature on which to base evaluation. freq : str Resampling frequency. + op : {"<", "<=", "lt", "le"} + Comparison operation. Default: "<". Returns ------- @@ -393,7 +404,7 @@ def dry_days( \sum PR_{ij} < Threshold [mm/day] """ thresh = convert_units_to(thresh, pr) - out = threshold_count(pr, "<", thresh, freq) + out = threshold_count(pr, op, thresh, freq, constrain=("<", "<=")) out = to_agg_units(out, pr, "count") return out @@ -1300,6 +1311,7 @@ def heat_wave_index( thresh: str = "25.0 degC", window: int = 5, freq: str = "YS", + op: str = ">", ) -> xarray.DataArray: """Heat wave index. @@ -1315,6 +1327,8 @@ def heat_wave_index( Minimum number of days with temperature above threshold to qualify as a heatwave. freq : str Resampling frequency. + op : {">", ">=", "gt", "ge"} + Comparison operation. Default: ">". Returns ------- @@ -1322,7 +1336,7 @@ def heat_wave_index( Heat wave index. """ thresh = convert_units_to(thresh, tasmax) - over = tasmax > thresh + over = compare(tasmax, op, thresh, constrain=(">", ">=")) group = over.resample(time=freq) out = group.map(rl.windowed_run_count, window=window, dim="time") @@ -1376,6 +1390,7 @@ def hot_spell_max_length( thresh_tasmax: str = "30 degC", window: int = 1, freq: str = "YS", + op: str = ">", ) -> xarray.DataArray: r"""Longest hot spell. @@ -1394,6 +1409,8 @@ def hot_spell_max_length( Minimum number of days with temperatures above thresholds to qualify as a heatwave. freq : str Resampling frequency. + op : {">", ">=", "gt", "ge"} + Comparison operation. Default: ">". Returns ------- @@ -1407,7 +1424,8 @@ def hot_spell_max_length( characterize the occurrence of hot weather events that can result in adverse health outcomes for Canadian communities :cite:p:`casati_regional_2013`. - In :cite:t:`robinson_definition_2001`, the parameters would be `thresh_tasmin=27.22, thresh_tasmax=39.44, window=2` (81F, 103F). + In :cite:t:`robinson_definition_2001`, the parameters would be + `thresh_tasmin=27.22, thresh_tasmax=39.44, window=2` (81F, 103F). References ---------- @@ -1415,7 +1433,7 @@ def hot_spell_max_length( """ thresh_tasmax = convert_units_to(thresh_tasmax, tasmax) - cond = tasmax > thresh_tasmax + cond = compare(tasmax, thresh_tasmax, op, constrain=(">", ">=")) group = cond.resample(time=freq) max_l = group.map(rl.longest_run, dim="time") out = max_l.where(max_l >= window, 0) @@ -1428,6 +1446,7 @@ def hot_spell_frequency( thresh_tasmax: str = "30 degC", window: int = 3, freq: str = "YS", + op: str = ">", ) -> xarray.DataArray: """Hot spell frequency. @@ -1444,6 +1463,8 @@ def hot_spell_frequency( Minimum number of days with temperatures above thresholds to qualify as a heatwave. freq : str Resampling frequency. + op : {">", ">=", "gt", "ge"} + Comparison operation. Default: ">". Returns ------- @@ -1465,7 +1486,7 @@ def hot_spell_frequency( """ thresh_tasmax = convert_units_to(thresh_tasmax, tasmax) - cond = tasmax > thresh_tasmax + cond = compare(tasmax, thresh_tasmax, op, constrain=(">", ">=")) group = cond.resample(time=freq) out = group.map(rl.windowed_run_events, window=window, dim="time") out.attrs["units"] = "" @@ -1752,11 +1773,11 @@ def tx_days_below( @declare_units(tasmax="[temperature]", thresh="[temperature]") def warm_day_frequency( - tasmax: xarray.DataArray, thresh: str = "30 degC", freq: str = "YS" + tasmax: xarray.DataArray, thresh: str = "30 degC", freq: str = "YS", op: str = ">" ) -> xarray.DataArray: """Frequency of extreme warm days. - Return the number of days with tasmax > thresh per period + Return the number of days with tasmax exceeding threshold per period. Parameters ---------- @@ -1766,6 +1787,8 @@ def warm_day_frequency( Threshold temperature on which to base evaluation. freq : str Resampling frequency. + op : {">", ">=", "gt", "ge"} + Comparison operation. Default: ">". Returns ------- @@ -1782,17 +1805,17 @@ def warm_day_frequency( TN_{ij} > Threshold [℃] """ thresh = convert_units_to(thresh, tasmax) - events = threshold_count(tasmax, ">", thresh, freq) + events = threshold_count(tasmax, op, thresh, freq, constrain=(">", ">=")) return to_agg_units(events, tasmax, "count") @declare_units(tasmin="[temperature]", thresh="[temperature]") def warm_night_frequency( - tasmin: xarray.DataArray, thresh: str = "22 degC", freq: str = "YS" + tasmin: xarray.DataArray, thresh: str = "22 degC", freq: str = "YS", op: str = ">" ) -> xarray.DataArray: """Frequency of extreme warm nights. - Return the number of days with tasmin > thresh per period + Return the number of days with tasmin exceeding threshold per period. Parameters ---------- @@ -1802,6 +1825,8 @@ def warm_night_frequency( Threshold temperature on which to base evaluation. freq : str Resampling frequency. + op : {">", ">=", "gt", "ge"} + Comparison operation. Default: ">". Returns ------- @@ -1809,13 +1834,16 @@ def warm_night_frequency( Number of days with tasmin > threshold per period. """ thresh = convert_units_to(thresh, tasmin) - events = threshold_count(tasmin, ">", thresh, freq) + events = threshold_count(tasmin, op, thresh, freq, constrain=(">", ">=")) return to_agg_units(events, tasmin, "count") @declare_units(pr="[precipitation]", thresh="[precipitation]") def wetdays( - pr: xarray.DataArray, thresh: str = "1.0 mm/day", freq: str = "YS" + pr: xarray.DataArray, + thresh: str = "1.0 mm/day", + freq: str = "YS", + op: str = ">=", ) -> xarray.DataArray: """Wet days. @@ -1829,6 +1857,8 @@ def wetdays( Precipitation value over which a day is considered wet. freq : str Resampling frequency. + op : {">", ">=", "gt", "ge"} + Comparison operation. Default: ">=". Returns ------- @@ -1846,13 +1876,16 @@ def wetdays( """ thresh = convert_units_to(thresh, pr, "hydro") - wd = threshold_count(pr, ">=", thresh, freq) + wd = threshold_count(pr, op, thresh, freq, constrain=(">", ">=")) return to_agg_units(wd, pr, "count") @declare_units(pr="[precipitation]", thresh="[precipitation]") def wetdays_prop( - pr: xarray.DataArray, thresh: str = "1.0 mm/day", freq: str = "YS" + pr: xarray.DataArray, + thresh: str = "1.0 mm/day", + freq: str = "YS", + op: str = ">=", ) -> xarray.DataArray: """Proportion of wet days. @@ -1866,6 +1899,8 @@ def wetdays_prop( Precipitation value over which a day is considered wet. freq : str Resampling frequency. + op : {">", ">=", "gt", "ge"} + Comparison operation. Default: ">=". Returns ------- @@ -1883,7 +1918,7 @@ def wetdays_prop( """ thresh = convert_units_to(thresh, pr, "hydro") - wd = compare(pr, ">=", thresh) + wd = threshold_count(pr, op, thresh, freq, constrain=(">", ">=")) fwd = wd.resample(time=freq).mean(dim="time").assign_attrs(units="1") return fwd From 80f5249123604b7fee82cd91641841e8e3ee726c Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 7 Oct 2022 13:46:54 -0400 Subject: [PATCH 079/106] typo fixes --- xclim/indices/_threshold.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xclim/indices/_threshold.py b/xclim/indices/_threshold.py index 94f088358..cbb0fcacd 100644 --- a/xclim/indices/_threshold.py +++ b/xclim/indices/_threshold.py @@ -1433,7 +1433,7 @@ def hot_spell_max_length( """ thresh_tasmax = convert_units_to(thresh_tasmax, tasmax) - cond = compare(tasmax, thresh_tasmax, op, constrain=(">", ">=")) + cond = compare(tasmax, op, thresh_tasmax, constrain=(">", ">=")) group = cond.resample(time=freq) max_l = group.map(rl.longest_run, dim="time") out = max_l.where(max_l >= window, 0) @@ -1486,7 +1486,7 @@ def hot_spell_frequency( """ thresh_tasmax = convert_units_to(thresh_tasmax, tasmax) - cond = compare(tasmax, thresh_tasmax, op, constrain=(">", ">=")) + cond = compare(tasmax, op, thresh_tasmax, constrain=(">", ">=")) group = cond.resample(time=freq) out = group.map(rl.windowed_run_events, window=window, dim="time") out.attrs["units"] = "" @@ -1918,7 +1918,7 @@ def wetdays_prop( """ thresh = convert_units_to(thresh, pr, "hydro") - wd = threshold_count(pr, op, thresh, freq, constrain=(">", ">=")) + wd = compare(pr, op, thresh, constrain=(">", ">=")) fwd = wd.resample(time=freq).mean(dim="time").assign_attrs(units="1") return fwd From 2a121ea93190e7d5ad73909c5a801ac69d9246c6 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 7 Oct 2022 14:00:11 -0400 Subject: [PATCH 080/106] update HISTORY.rst --- HISTORY.rst | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 700a3e131..bbf2de132 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -17,10 +17,10 @@ New indicators Breaking changes ^^^^^^^^^^^^^^^^ -* Indices that accept `lat` or `lon` coordinates in their call signatures will now use `cf-xarray` accessors to gather these variables in the event that they are not explicitly supplied. (:pull:`1180`). This affects the following +* Indices that accept `lat` or `lon` coordinates in their call signatures will now use `cf-xarray` accessors to gather these variables in the event that they are not explicitly supplied. (:pull:`1180`). This affects the following: - ``huglin_index``, ``biologically_effective_degree_days``, ``cool_night_index``, ``latitude_temperature_index``, ``water_budget``, ``potential_evapotranspiration`` * ``cool_night_index`` now optionally accepts ``lat: str = "north" | "south"`` for calculating CNI over DataArrays lacking a latitude coordinate. (:pull:`1180`). -* The offset value in ``standardized_precipitation_evapotranspiration_index`` is changed to better reproduce results in the reference library ``monocongo/climate_indices``. +* The offset value in ``standardized_precipitation_evapotranspiration_index`` is changed to better reproduce results in the reference library ``monocongo/climate_indices``. (:issue:`1141`, :pull:`1183`). * The ``first_day_below`` and ``first_day_above`` indices are now deprecated in order to clearly communicate the variables they act upon (:issue:`1175`, :pull:`1186`). The suggested migrations are as follows: - ``xclim.indices.first_day_above`` -> ``xclim.indices.first_day_temperature_above`` - ``xclim.indices.first_day_below`` -> ``xclim.indices.first_day_temperature_below`` @@ -29,6 +29,7 @@ Breaking changes - ``xclim.atmos.first_day_below`` -> ``xclim.indices.first_day_{tn|tg|tx}_below`` * English indicator metadata has been adjusted to remove frequencies and other variable-sourced fields in the `long_name` of indicators. English indicators now have an explicit `title` and `abstract`. (:issue:`936`, :pull:`1123`). * French indicator metadata translations are now more uniform and follow agreed-upon grammar conventions, removing variable-sourced fields in `long_name_fr`. (:issue:`936`, :pull:`1123`). +* The ``freshet_start`` indice is now deprecated in favour of ``first_day_temperature_above`` with `thresh='0 degC', window=5`. The `freshet_start` indicator is now based on ``first_day_temperature_above``, but is otherwise unaffected. (:issue:`1195`, :pull:`1196`). Bug fixes ^^^^^^^^^ From 3d032a01020cb7cafe583beee638c00c7aed6c97 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 7 Oct 2022 14:07:00 -0400 Subject: [PATCH 081/106] revert unnecessary default parameters --- xclim/indicators/atmos/_precip.py | 3 --- xclim/indicators/atmos/_temperature.py | 5 ----- 2 files changed, 8 deletions(-) diff --git a/xclim/indicators/atmos/_precip.py b/xclim/indicators/atmos/_precip.py index de413a00a..f9b72b71a 100644 --- a/xclim/indicators/atmos/_precip.py +++ b/xclim/indicators/atmos/_precip.py @@ -149,7 +149,6 @@ class HrPrecip(Hourly): abstract="The number of days with daily precipitation at or above a given threshold.", cell_methods="time: sum over days", compute=indices.wetdays, - parameters={"op": {"default": ">="}}, ) wetdays_prop = PrecipWithIndexing( @@ -161,7 +160,6 @@ class HrPrecip(Hourly): abstract="The proportion of days with daily precipitation at or above a given threshold.", cell_methods="time: sum over days", compute=indices.wetdays_prop, - parameters={"op": {"default": ">="}}, ) dry_days = PrecipWithIndexing( @@ -174,7 +172,6 @@ class HrPrecip(Hourly): abstract="The number of days with daily precipitation under a given threshold.", cell_methods="time: sum over days", compute=indices.dry_days, - parameters={"op": {"default": "<"}}, ) maximum_consecutive_wet_days = Precip( diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 54c164f9b..5b94afcd4 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -247,7 +247,6 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "temperatures exceed given thresholds for a number of days.", cell_methods="", compute=indices.heat_wave_index, - parameters={"op": {"default": ">"}}, ) @@ -264,7 +263,6 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): cell_methods="", keywords="health,", compute=indices.hot_spell_frequency, - parameters={"op": {"default": ">"}}, ) hot_spell_max_length = Temp( @@ -280,7 +278,6 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): cell_methods="", keywords="health,", compute=indices.hot_spell_max_length, - parameters={"op": {"default": ">"}}, ) tg_mean = TempWithIndexing( @@ -470,7 +467,6 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "consecutive days with mean daily temperature below a given threshold.", cell_methods="", compute=indices.cold_spell_days, - parameters={"op": {"default": "<"}}, ) cold_spell_frequency = Temp( @@ -485,7 +481,6 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): "mean daily temperature below a given threshold.", cell_methods="", compute=indices.cold_spell_frequency, - parameters={"op": {"default": "<"}}, ) cool_night_index = Temp( From 7f0fdc9ac4f735b385f279a199cf1fc11b22b8e8 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 7 Oct 2022 14:12:37 -0400 Subject: [PATCH 082/106] update HISTORY.rst --- HISTORY.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/HISTORY.rst b/HISTORY.rst index 700a3e131..f31258fd7 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -29,6 +29,8 @@ Breaking changes - ``xclim.atmos.first_day_below`` -> ``xclim.indices.first_day_{tn|tg|tx}_below`` * English indicator metadata has been adjusted to remove frequencies and other variable-sourced fields in the `long_name` of indicators. English indicators now have an explicit `title` and `abstract`. (:issue:`936`, :pull:`1123`). * French indicator metadata translations are now more uniform and follow agreed-upon grammar conventions, removing variable-sourced fields in `long_name_fr`. (:issue:`936`, :pull:`1123`). +* Call signatures for several indices/indicators have been modified to optionally accept `op` for manually setting threshold comparison operators (:issue:`1194`, :pull:`1197`). The affected indices and indicators as follows: + - ``hot_spell_max_length``, ``hot_spell_frequency``, ``cold_spell_days``, ``cold_spell_frequency``, ``heat_wave_index``, ``warm_day_frequency`` (indice only), ``warm_night_frequency`` (indice only), ``dry_days``, ``wetdays``, ``wetdays_prop``. Bug fixes ^^^^^^^^^ From 8f7756a53880cd9798fb153a790bd19942ae9a03 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 7 Oct 2022 14:41:59 -0400 Subject: [PATCH 083/106] update tests --- xclim/testing/tests/test_indices.py | 52 ++++++++++++++++++----------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/xclim/testing/tests/test_indices.py b/xclim/testing/tests/test_indices.py index bfe32ff7f..966b5a71a 100644 --- a/xclim/testing/tests/test_indices.py +++ b/xclim/testing/tests/test_indices.py @@ -1147,35 +1147,43 @@ def test_1d( class TestHotSpellFrequency: @pytest.mark.parametrize( - "thresh_tasmax,window,expected", + "thresh_tasmax,window,op,expected", [ - ("30 C", 3, 2), # Some HS - ("30 C", 4, 1), # One long HS - ("10 C", 3, 1), # No HS - ("40 C", 5, 0), # Windowed + ("30 C", 3, ">", 2), # Some HS + ("30 C", 4, ">", 1), # One long HS + ("29 C", 3, ">", 2), # Two HS + ("29 C", 3, ">=", 1), # One long HS + ("10 C", 3, ">", 1), # No HS + ("40 C", 5, ">", 0), # Windowed ], ) - def test_1d(self, tasmax_series, thresh_tasmax, window, expected): + def test_1d(self, tasmax_series, thresh_tasmax, window, op, expected): tx = tasmax_series(np.asarray([29, 31, 31, 31, 29, 31, 31, 31, 31, 31]) + K2C) - hsf = xci.hot_spell_frequency(tx, thresh_tasmax=thresh_tasmax, window=window) + hsf = xci.hot_spell_frequency( + tx, thresh_tasmax=thresh_tasmax, window=window, op=op + ) np.testing.assert_allclose(hsf.values, expected) class TestHotSpellMaxLength: @pytest.mark.parametrize( - "thresh_tasmax,window,expected", + "thresh_tasmax,window,op,expected", [ - ("30 C", 3, 5), # Some HS - ("10 C", 3, 10), # One long HS - ("40 C", 3, 0), # No HS - ("30 C", 5, 5), # Windowed + ("30 C", 3, ">", 5), # Some HS + ("10 C", 3, ">", 10), # One long HS + ("29 C", 3, ">", 5), # Two HS + ("29 C", 3, ">=", 9), # One long HS, minus a day + ("40 C", 3, ">", 0), # No HS + ("30 C", 5, ">", 5), # Windowed ], ) - def test_1d(self, tasmax_series, thresh_tasmax, window, expected): - tx = tasmax_series(np.asarray([29, 31, 31, 31, 29, 31, 31, 31, 31, 31]) + K2C) + def test_1d(self, tasmax_series, thresh_tasmax, window, op, expected): + tx = tasmax_series(np.asarray([28, 31, 31, 31, 29, 31, 31, 31, 31, 31]) + K2C) - hsml = xci.hot_spell_max_length(tx, thresh_tasmax=thresh_tasmax, window=window) + hsml = xci.hot_spell_max_length( + tx, thresh_tasmax=thresh_tasmax, window=window, op=op + ) np.testing.assert_allclose(hsml.values, expected) @@ -2989,26 +2997,32 @@ def test_simple(self, pr_series, prc_series): class TestWetDays: def test_simple(self, pr_series): a = np.zeros(365) - a[:6] += [4, 5.5, 6, 6, 2, 7] # 4 above 5 in Jan - a[100:105] += [1, 6, 7, 2, 1] # 2 above 5 in Mar + a[:7] += [4, 5.5, 6, 6, 2, 7, 5] # 4 above 5 and 1 at 5 in Jan + a[100:106] += [1, 6, 7, 5, 2, 1] # 2 above 5 and 1 at 5 in Mar pr = pr_series(a) pr.attrs["units"] = "mm/day" out = xci.wetdays(pr, thresh="5 mm/day", freq="M") + np.testing.assert_allclose(out, [5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0]) + + out = xci.wetdays(pr, thresh="5 mm/day", freq="M", op=">") np.testing.assert_allclose(out, [4, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0]) class TestWetDaysProp: def test_simple(self, pr_series): a = np.zeros(365) - a[:6] += [4, 5.5, 6, 6, 2, 7] # 4 above 5 in Jan - a[100:105] += [1, 6, 7, 2, 1] # 2 above 5 in Mar + a[:7] += [4, 5.5, 6, 6, 2, 7, 5] # 4 above 5 and 1 at 5 in Jan + a[100:106] += [1, 6, 7, 5, 2, 1] # 2 above 5 and 1 at 5 in Mar pr = pr_series(a) pr.attrs["units"] = "mm/day" out = xci.wetdays_prop(pr, thresh="5 mm/day", freq="M") + np.testing.assert_allclose(out, [5 / 31, 0, 0, 3 / 31, 0, 0, 0, 0, 0, 0, 0, 0]) + + out = xci.wetdays_prop(pr, thresh="5 mm/day", freq="M", op=">") np.testing.assert_allclose(out, [4 / 31, 0, 0, 2 / 31, 0, 0, 0, 0, 0, 0, 0, 0]) From b093a97695fcd0509d48c8a027c75be09d17832d Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 13 Oct 2022 12:14:57 -0400 Subject: [PATCH 084/106] remove now-unnecessary fields from params_formatter --- xclim/core/formatting.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/xclim/core/formatting.py b/xclim/core/formatting.py index cf12b3b4d..9c3441134 100644 --- a/xclim/core/formatting.py +++ b/xclim/core/formatting.py @@ -32,11 +32,6 @@ "pr_per_thresh": "{unknown}", "pr_per_window": "{unknown}", "pr_per_period": "{unknown}", - # FIXME: The following params can be found in indices._multivariate - "tasmax_per": "{unknown}", - "tasmin_per": "{unknown}", - "tas_per": "{unknown}", - "pr_per": "{unknown}", } From 2b3462586745c7cc62594a500155563783ba75d6 Mon Sep 17 00:00:00 2001 From: Trevor James Smith <10819524+Zeitsperre@users.noreply.github.com> Date: Thu, 13 Oct 2022 12:56:37 -0400 Subject: [PATCH 085/106] synchronize csdi and wsdi --- xclim/indicators/atmos/_temperature.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 7ac024b22..83d4bafc2 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -447,10 +447,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): standard_name="cold_spell_duration_index", long_name="Number of days part of a percentile-defined cold spell", description="{freq} number of days with at least {window} consecutive days where the daily minimum temperature " - "is below the {tasmin_per}th percentile. A cold spell occurs when the daily minimum temperature is below a given " - "percentile for at least {window} consecutive days.", + "is below the {tasmin_per_thresh}th percentile. A {tasmin_per_window} day(s) window, centred on each calendar day " + "in the {tasmin_per_period} period, is used to compute the {tasmin_per_thresh}th percentile(s).", abstract="Number of days part of a percentile-defined cold spell. A cold spell occurs when the daily minimum " - "temperature is below a given percentile for aa given number of consecutive days.", + "temperature is below a given percentile for a given number of consecutive days.", cell_methods="", compute=indices.cold_spell_duration_index, ) @@ -1090,9 +1090,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): description="{freq} number of days with at least {window} consecutive days where the daily maximum temperature is " "above the {tasmax_per_thresh}th percentile(s). A {tasmax_per_window} day(s) window, centred on each calendar day " "in the {tasmax_per_period} period, is used to compute the {tasmax_per_thresh}th percentile(s).", - abstract="Number of days in in series with minimum duration where the daily maximum temperature exceeds a given " - "percentile. The percentile threshold of temperatures should be calculated with a moving window of a given number " - "of days.", + abstract="Number of days part of a percentile-defined warm spell. A warm spell occurs when the daily maximum " + "temperature is above a given percentile for a given number of consecutive days.", cell_methods="time: sum over days", compute=indices.warm_spell_duration_index, ) From 67f0d4733f8c3ef3664f69676219c0fef749ed4b Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 24 Oct 2022 13:52:33 -0400 Subject: [PATCH 086/106] conversion with long_name keys --- xclim/data/fr.json | 20 ++++++++++---------- xclim/indicators/atmos/_conversion.py | 20 ++++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 306754ce7..5a7ff94d7 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -730,31 +730,31 @@ "description": "Vitesse du vent du sud près de la surface calculé à partir de la vitesse et de la direction du vent." }, "E_SAT": { - "long_name": "Pression de vapeur saturante", + "long_name": "Pression de vapeur saturante (méthode \"{method}\")", "description": "Pression de vapeur saturante calculée à partir de la température en suivant la méthode {method}.", "title": "Pression de vapeur saturante (e_sat)", "abstract": "Calcul de la pression de vapeur saturante à partir de la température, selon une méthode donnée. Si ice_thresh est donné, le calcul se fait en référence à la glace pour les températures sous ce seuil." }, "HURS_FROMDEWPOINT": { - "long_name": "Humidité relative", + "long_name": "Humidité relative (méthode \"{method}\")", "description": "Humidité relative calculée à partir de la température du point de rosée à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", "title": "Humidité relative calculée à partir de la température du point de rosée", "abstract": "Humidité relative calculée à partir de la température du point de rosée à l'aide de la pression de vapeur saturante." }, "HURS": { - "long_name": "Humidité relative", + "long_name": "Humidité relative (méthode \"{method}\")", "description": "Humidité relative calculée à partir de la température, de l'humidité spécifique et de la pression à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", "title": "Humidité relative calculée à partir de la température, de l'humidité spécifique et de la pression", "abstract": "Humidité relative calculée à partir de la température, de l'humidité spécifique et de la pression à l'aide de la pression de vapeur saturante." }, "HUSS": { - "long_name": "Humidité spécifique", + "long_name": "Humidité spécifique (méthode \"{method}\")", "description": "Humidité spécifique calculée à partir de la température, de l'humidité relative et de la pression à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", "title": "Humidité spécifique calculée à partir de la température, de l'humidité relative et de la pression", "abstract": "Humidité spécifique calculée à partir de la température, de l'humidité relative et de la pression à l'aide de la pression de vapeur saturante." }, "HUSS_FROMDEWPOINT": { - "long_name": "Humidité spécifique", + "long_name": "Humidité spécifique (méthode \"{method}\")", "description": "Humidité spécifique calculée à partir de la température du point de rosée et de la pression à l'aide de la pression de vapeur saturante, laquelle fut calculée en suivant la méthode {method}.", "title": "Humidité spécifique calculée à partir de la température du point de rosée et de la pression", "abstract": "Humidité spécifique calculée à partir de la température du point de rosée et de la pression à l'aide de la pression de vapeur saturante." @@ -814,7 +814,7 @@ "abstract": "Jour de l'année où la somme des degrés-jours est au-dessus d'un seuil donné. Les degrés-jours sont calculés au-dessus ou en dessous d'un seuil de température donné." }, "PRSN": { - "long_name": "Précipitation solide", + "long_name": "Précipitation solide (méthode \"{methode}\" avec une température égale ou inférieure à {thresh})", "description": "Précipitation solide estimée à partir de la précipitation totale et de la température selon la méthode {method} et le seuil de température {thresh}.", "title": "Approximation de la neige", "abstract": "Précipitation solide estimée à partir de la précipitation totale et de la température selon une méthode et un seuil de température donnés." @@ -826,7 +826,7 @@ "abstract": "Épaisseur de neige moyenne quotidienne." }, "PRLP": { - "long_name": "Précipitation liquide", + "long_name": "Précipitation liquide (méthode \"{methode}\" avec une température égale ou inférieure à {thresh})", "description": "Précipitation liquide estimée à partir de la précipitation totale et de la température selon la méthode {method} et le seuil de température {thresh}.", "title": "Approximation de la pluie", "abstract": "Précipitation liquide estimée à partir de la précipitation totale et de la température selon une méthode et un seuil de température donnés." @@ -967,7 +967,7 @@ "title": "Unités thermiques maïs", "abstract": "Indice basé sur la température utilisée pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température minimale quotidienne et la température maximale quotidienne excèdent des seuils donnés.", "description": "Indice basé sur la température utilisée pour estimer le développement des cultures de maïs. La croissance du maïs se produit lorsque la température minimale quotidienne et et la température maximale quotidienne excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement.", - "long_name": "Unités thermiques maïs" + "long_name": "Unités thermiques maïs (Tmin > {thresh_tasmin} et Tmax > {thresh_tasmax})" }, "FREEZETHAW_SPELL_FREQUENCY": { "title": "Fréquence des périodes des événements consécutifs de gel-dégel", @@ -1009,13 +1009,13 @@ "title": "Évapotranspiration potentielle", "abstract": "Le potentiel d'évaporation de l'eau du sol et de transpiration par les plantes si l'approvisionnement en eau est suffisant, avec une méthode donnée.", "description": "Le potentiel d'évaporation de l'eau du sol et de transpiration par les plantes si l'approvisionnement en eau est suffisant, avec la méthode de {method}.", - "long_name": "Évapotranspiration potentielle" + "long_name": "Évapotranspiration potentielle (méthode \"{methode}\")" }, "WATER_BUDGET_FROM_TAS": { "title": "Bilan hydrique", "abstract": "Précipitations moins l'évapotranspiration potentielle en tant que mesure approximative d'un bilan hydrique de surface, où l'évapotranspiration potentielle est calculée avec une méthode donnée.", "description": "Précipitations moins l'évapotranspiration potentielle en tant que mesure approximative d'un bilan hydrique de surface, où l'évapotranspiration potentielle est calculée avec la méthode {method}.", - "long_name": "Bilan hydrique" + "long_name": "Bilan hydrique (méthode \"{methode}\")" }, "WATER_BUDGET": { "title": "Bilan hydrique", diff --git a/xclim/indicators/atmos/_conversion.py b/xclim/indicators/atmos/_conversion.py index d87b49bcb..fdf3cf339 100644 --- a/xclim/indicators/atmos/_conversion.py +++ b/xclim/indicators/atmos/_conversion.py @@ -126,7 +126,7 @@ def cfcheck(self, **das): title="Saturation vapour pressure (e_sat)", identifier="e_sat", units="Pa", - long_name="Saturation vapour pressure", + long_name='Saturation vapour pressure ("{method}" method)', description=lambda **kws: ( "The saturation vapour pressure was calculated from a temperature according to the {method} method." ) @@ -146,7 +146,7 @@ def cfcheck(self, **das): identifier="hurs_fromdewpoint", units="%", var_name="hurs", - long_name="Relative humidity", + long_name='Relative humidity ("{method}" method)', standard_name="relative_humidity", description=lambda **kws: ( "Computed from temperature, and dew point temperature through the " @@ -174,7 +174,7 @@ def cfcheck(self, **das): identifier="hurs", units="%", var_name="hurs", - long_name="Relative Humidity", + long_name='Relative Humidity ("{method}" method)', standard_name="relative_humidity", description=lambda **kws: ( "Computed from temperature, specific humidity and pressure through the saturation vapour pressure, " @@ -202,7 +202,7 @@ def cfcheck(self, **das): identifier="huss", units="", var_name="huss", - long_name="Specific Humidity", + long_name='Specific Humidity ("{method}" method)', standard_name="specific_humidity", description=lambda **kws: ( "Computed from temperature, relative humidity and pressure through the saturation vapour pressure, " @@ -223,7 +223,7 @@ def cfcheck(self, **das): title="Specific humidity from dew point temperature and pressure", identifier="huss_fromdewpoint", units="", - long_name="Specific humidity", + long_name='Specific humidity ("{method}" method)', standard_name="specific_humidity", description=( "Computed from dewpoint temperature and pressure through the saturation " @@ -239,7 +239,7 @@ def cfcheck(self, **das): identifier="prsn", units="kg m-2 s-1", standard_name="solid_precipitation_flux", - long_name="Solid precipitation", + long_name='Solid precipitation ("{method}" method with temperature at or below {thresh})', description=( "Solid precipitation estimated from total precipitation and temperature" " with method {method} and threshold temperature {thresh}." @@ -255,7 +255,7 @@ def cfcheck(self, **das): identifier="prlp", units="kg m-2 s-1", standard_name="precipitation_flux", - long_name="Liquid precipitation", + long_name='Liquid precipitation ("{method}" method with temperature at or above {thresh})', description=( "Liquid precipitation estimated from total precipitation and temperature" " with method {method} and threshold temperature {thresh}." @@ -295,7 +295,7 @@ def cfcheck(self, **das): var_name="evspsblpot", units="kg m-2 s-1", standard_name="water_potential_evapotranspiration_flux", - long_name="Potential evapotranspiration", + long_name='Potential evapotranspiration ("{method}" method)', description=( "The potential for water evaporation from soil and transpiration by plants if the water " "supply is sufficient, calculated with the {method} method." @@ -311,7 +311,7 @@ def cfcheck(self, **das): title="Water budget", identifier="water_budget_from_tas", units="kg m-2 s-1", - long_name="Water budget", + long_name='Water budget ("{method}" method)', description=( "Precipitation minus potential evapotranspiration as a measure of an approximated surface water budget, " "where the potential evapotranspiration is calculated with the {method} method." @@ -343,7 +343,7 @@ def cfcheck(self, **das): title=" Corn heat units", identifier="corn_heat_units", units="", - long_name="Corn heat units", + long_name="Corn heat units (Tmin > {thresh_tasmin} and Tmax > {thresh_tasmax})", description="Temperature-based index used to estimate the development of corn crops. " "Corn growth occurs when the minimum and maximum daily temperatures both exceed " "{thresh_tasmin} and {thresh_tasmax}, respectively.", From 3ec2d5f2dc3e01ddff7af1c735ae5b8c650f3c54 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 24 Oct 2022 15:33:28 -0400 Subject: [PATCH 087/106] rainfrzgr with long_name keys --- xclim/data/fr.json | 4 ++-- xclim/indicators/atmos/_precip.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 5a7ff94d7..30c145140 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -145,10 +145,10 @@ ] }, "RAIN_FRZGR": { - "long_name": "Nombre de jours de pluie sur sol gelé", + "long_name": "Nombre de jours de pluie sur sol gelé (température > 0℃ and précipitation > {thresh})", "description": "Nombre {freq:m} de jours avec plus de {thresh} de pluie suivant sept (7) jours consécutifs où la température était sous 0°C. Les précipitations sont considérées comme de la pluie lorsque la température moyenne est au-dessus de 0°C.", "title": "Nombre de jours de pluie sur sol gelé", - "abstract": "Nombre de jours avec pluie au-dessus d'un seuil donné après 7 jours consécutifs où la température était sous 0°C. Les précipitations sont considérées comme de la pluie lorsque la température moyenne est au-dessus de 0°C." + "abstract": "Nombre de jours avec pluie au-dessus d'un seuil donné après sept (7) jours consécutifs où la température était sous 0°C. Les précipitations sont considérées comme de la pluie lorsque la température moyenne est au-dessus de 0°C." }, "RX1DAY": { "long_name": "Précipitation quotidienne maximale", diff --git a/xclim/indicators/atmos/_precip.py b/xclim/indicators/atmos/_precip.py index f9b72b71a..81ddb4735 100644 --- a/xclim/indicators/atmos/_precip.py +++ b/xclim/indicators/atmos/_precip.py @@ -105,7 +105,7 @@ class HrPrecip(Hourly): identifier="rain_frzgr", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_above_threshold", - long_name="Number of rain on frozen ground days", + long_name="Number of rain on frozen ground days (mean daily temperature > 0℃ and precipitation > {thresh})", description="{freq} number of days with rain above {thresh} after a series of seven days with average daily " "temperature below 0℃. Precipitation is assumed to be rain when the daily average temperature is above 0℃.", abstract="The number of days with rain above a given threshold after a series of seven days with average daily " From b27808e19f48a1637bce7af2e512bb3c246a1e44 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 28 Oct 2022 12:36:50 -0400 Subject: [PATCH 088/106] precipitation indicators with long_name keys --- xclim/data/fr.json | 72 +++++++++++------------ xclim/indicators/atmos/_precip.py | 94 ++++++++++++++++++------------- 2 files changed, 90 insertions(+), 76 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 30c145140..1baeafe59 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -145,7 +145,7 @@ ] }, "RAIN_FRZGR": { - "long_name": "Nombre de jours de pluie sur sol gelé (température > 0℃ and précipitation > {thresh})", + "long_name": "Nombre de jours de pluie sur sol gelé (température > 0℃ et précipitation > {thresh})", "description": "Nombre {freq:m} de jours avec plus de {thresh} de pluie suivant sept (7) jours consécutifs où la température était sous 0°C. Les précipitations sont considérées comme de la pluie lorsque la température moyenne est au-dessus de 0°C.", "title": "Nombre de jours de pluie sur sol gelé", "abstract": "Nombre de jours avec pluie au-dessus d'un seuil donné après sept (7) jours consécutifs où la température était sous 0°C. Les précipitations sont considérées comme de la pluie lorsque la température moyenne est au-dessus de 0°C." @@ -163,46 +163,46 @@ "abstract": "Maximum de la somme mobile des précipitations quotidiennes pour une période donnée." }, "MAX_PR_INTENSITY": { - "long_name": "Intensité maximale de précipitation horaire durant une fenêtre mobile temporelle", + "long_name": "Intensité maximale de précipitation horaire durant une fenêtre mobile temporelle de {window} h", "description": "Intensité maximale {freq:f} de précipitation horaire durant une fenêtre mobile de {window} h.", "title": "Intensité maximale de précipitation horaire durant une fenêtre mobile temporelle donnée", "keywords": "courbes IDF", "abstract": "Maximum de l'intensité de précipitation horaire durant une fenêtre mobile temporelle donnée." }, "RPRCTOT": { - "long_name": "Proportion convective de la précipitation totale", + "long_name": "Proportion convective de la précipitation totale pour les jours avec une précipitation d'au moins {thresh}", "description": "Proportion de la précipitation totale {freq:f} due à la précipitation convective pour les jours avec une précipitation d'au moins {thresh}.", "title": "Proportion convective de la précipitation totale.", "abstract": "Proportion de la précipitation totale due aux processus de convections. Seuls les jours avec un flux minimum de précipitation sont considérés." }, "WETDAYS": { - "long_name": "Nombre de jours avec précipitation", + "long_name": "Nombre de jours où la précipitation est au-dessus ou égale à {thresh}", "description": "Nombre {freq:m} de jours où la précipitation est au-dessus ou égale à {thresh}.", "title": "Jours mouillés", "abstract": "Nombre de jours où la précipitation est au-dessus ou égale à un seuil donné." }, "WETDAYS_PROP": { - "long_name": "Proportion de jours avec précipitation", + "long_name": "Proportion de jours où les précipitations sont au-dessus ou égale à {thresh}", "description": "Proportion {freq:m} de jours où les précipitations sont au-dessus ou égale à {thresh}.", "title": "Proportion de jours avec précipitation", "abstract": "Proportion de jours où la précipitation est au-dessus ou égale à un seuil donné." }, "CDD": { - "long_name": "Durée maximale d'une période sèche", + "long_name": "Durée maximale d'une période où la précipitation est sous {thresh}", "description": "Nombre {freq:m} maximal de jours consécutifs où la précipitation est sous {thresh}.", "title": "Nombre maximal de jours secs consécutifs", "abstract": "Période la plus longue où la précipitation est sous un seuil donné." }, "CWD": { - "long_name": "Durée maximale d'une période pluvieuse", + "long_name": "Durée maximale d'une période où les précipitations sont au-dessus de {thresh}", "description": "Nombre {freq:m} maximal de jours consécutifs où les précipitations sont au-dessus de {thresh}.", "title": "Durée de période pluvieuse", "abstract": "Période la plus longue où la précipitation est au-dessus d'un seuil donné." }, "SDII": { - "long_name": "Indice simple de l'intensité des précipitations (SDII)", + "long_name": "Moyenne de la précipitation quotidienne pour les jours où la précipitation est au-dessus de {thresh}. [Indice simple de l'intensité des précipitations: SDII]", "description": "Indice simple d'intensité des précipitations {freq:m} [SDII]. Moyenne {freq:f} de la précipitation quotidienne pour les jours où la précipitation est au-dessus de {thresh}.", - "title": "Indice simple de l'intensité des précipitations (SDII)", + "title": "Indice simple de l'intensité des précipitations [SDII]", "abstract": "Moyenne de la précipitation quotidienne pour les jours où la précipitation est au-dessus d'un seuil donné." }, "PRCPTOT": { @@ -212,22 +212,22 @@ "abstract": "Précipitation accumulée totale. Si la température quotidienne moyenne est donnée, le paramètre phase peut-être utilisé pour restreindre le calcul aux précipitations d'une seule phase (liquide ou solide). Les précipitations sont considérées solides si la température quotidienne moyenne est sous 0°C (et vice-versa)." }, "WET_PRCPTOT": { - "long_name": "Précipitation totale lors de jours avec précipitation", + "long_name": "Précipitation totale lors de jours avec précipitation au-dessus de {thresh}", "description": "Précipitation totale {freq:f} lorsque la précipitation quotidienne est au-dessus de {thresh}.", "title": "Précipitation accumulée totale lors de jours avec précipitation", "abstract": "Précipitation accumulée totale lors de jours avec précipitation. Un jour est considéré avec précipitation si la précipitation est au-dessus ou égale à un seuil donné." }, "LIQUIDPRCPTOT": { - "long_name": "Précipitation liquide totale", + "long_name": "Précipitation totale lorsque la température moyenne est au-dessus de {thresh}", "description": "Précipitation liquide totale {freq:f}, estimée comme la précipitation lorsque la température moyenne est au-dessus de {thresh}.", "title": "Précipitation liquide accumulée totale", "abstract": "Précipitation liquide accumulée totale. Les précipitations sont considérées liquides lorsque la température quotidienne moyenne est au-dessus de 0°C." }, "SOLIDPRCPTOT": { - "long_name": "Précipitation solide totale", - "description": "Précipitation solide totale {freq:f}, estimée comme la précipitation lorsque la température moyenne est en dessous de {thresh}.", + "long_name": "Précipitation totale lorsque la température moyenne est sous ou égale à {thresh}", + "description": "Précipitation solide totale {freq:f}, estimée comme la précipitation lorsque la température moyenne est sous ou égale à {thresh}.", "title": "Précipitation solide accumulée totale", - "abstract": "Précipitation solide accumulée totale. La précipitation est considéré solide lorsque la température quotidienne moyenne est sous 0°C." + "abstract": "Précipitation solide accumulée totale. La précipitation est considéré solide lorsque la température quotidienne moyenne est sous ou égale à 0°C." }, "SPI": { "long_name": "Indice de précipitation standardisé (SPI)", @@ -237,7 +237,7 @@ }, "SPEI": { "long_name": "Indice de précipitation évapotranspiration standardisé (SPEI)", - "description": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile de {window} {freq:nom}, normalisé tel que la moyenne du SPEI est 0 pour les données de calibration. L'unité de la fenêtre `X` est l'unité de temps determinée par la fréquence de rééchantillonnage {freq:f}.", + "description": "Budget d'eau (précipitation moins évapotranspiration) sur une fenêtre mobile de {window} {freq:nom}, normalisé tel que la moyenne du SPEI est 0 pour les données de calibration. L'unité de la fenêtre `X` est l'unité de temps determinée par la fréquence de rééchantillonnage {freq:f}.", "title": "Indice de précipitation évapotranspiration standardisé (SPEI)", "abstract": "Budget d'eau (précipitation - évapotranspiration) sur une fenêtre mobile, normalisé tel que la moyenne du SPEI est 0 pour les données de calibration. L'unité de la fenêtre est l'unité de temps déterminée par la fréquence de rééchantillonnage." }, @@ -832,19 +832,19 @@ "abstract": "Précipitation liquide estimée à partir de la précipitation totale et de la température selon une méthode et un seuil de température donnés." }, "LAST_SNOWFALL": { - "long_name": "Date de la dernière chute de neige", + "long_name": "Date du dernier jour où la précipitation solide est au-dessus de {thresh}", "description": "Dernier jour {freq:m} où la précipitation solide est au-dessus de {thresh}.", "title": "Dernier jour avec une précipitation solide au-dessus d'un seuil donné", "abstract": "Dernier jour d'une période où la précipitation solide est au-dessus d'un seuil donné." }, "FIRST_SNOWFALL": { - "long_name": "Date de la première chute de neige", + "long_name": "Date du premier jour où la précipitation solide est au-dessus de {thresh}", "description": "Premier jour {freq:m} où la précipitation solide est au-dessus de {thresh}.", "title": "Premier jour avec une précipitation solide au-dessus d'un seuil donné", "abstract": "Premier jour d'une période où la précipitation solide est au-dessus d'un seuil donné." }, "DAYS_WITH_SNOW": { - "long_name": "Nombre de jours où la précipitation solide se trouve entre une borne inférieure et supérieure.", + "long_name": "Nombre de jours où la précipitation solide se trouve entre une borne de {low} et {high}", "description": "Nombre {freq:m} de jours où la précipitation solide est plus grande que {low} et plus petite ou égale à {high}.", "title": "Jours avec neige", "abstract": "Nombre de jours où la neige est entre une borne inférieure et supérieure." @@ -910,40 +910,40 @@ "abstract": "Nombre de jours où l'accumulation de neige est au-dessus ou égale à un seuil donné." }, "HIGH_PRECIP_LOW_TEMP": { - "long_name": "Jours avec des précipitations au dessus d'un seuil et des températures sous un seuil", + "long_name": "Jours avec des précipitations au dessus de {pr_thresh} et des températures sous {tas_thresh}", "description": "Nombre {freq:m} de jours avec précipitation plus grande ou égale à {pr_thresh} et température inférieure à {tas_thresh}.", "title": "Jours avec précipitations et températures froides", "abstract": "Nombre de jours avec précipitation au-dessus d'un seuil et températures sous un seuil donné." }, "DAYS_OVER_PRECIP_THRESH": { + "long_name": "Nombre de jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period}.", "title": "Nombre de jours avec précipitation où la précipitation est au-dessus d'un centile donné", "abstract": "Nombre de jours d'une période où la précipitation est au-dessus d'un centile donné, calculé sur une période donnée et un seuil fixe.", - "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period}. Seuls les jours avec au moins {thresh} sont comptés.", - "long_name": "Nombre de jours avec un flux de précipitations supérieur au seuil de base." + "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period}. Seuls les jours avec au moins {thresh} sont comptés." }, "DAYS_OVER_PRECIP_DOY_THRESH": { + "long_name": "Nombre de jours avec précipitation quotidien où la précipitation est au-dessus du {pr_per_thresh}e centile calculé sur la période {pr_per_period}", "title": "Nombre de jours avec précipitation où la précipitation est au-dessus d'un centile quotidien donné", "abstract": "Nombre de jours d'une période où la précipitation est au-dessus d'un centile quotidien donné et d'un seuil fixe.", - "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien. Seuls les jours avec au moins {thresh} sont comptés. Le {pr_per_thresh}e centile est calculé sur une fenêtre glissante de {pr_per_window} jour(s) de la période {pr_per_period}.", - "long_name": "Nombre de jours avec précipitation où la précipitation est au-dessus d'un centile quotidien donné" + "description": "Nombre {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien. Seuls les jours avec au moins {thresh} sont comptés. Le {pr_per_thresh}e centile est calculé sur une fenêtre glissante de {pr_per_window} jour(s) de la période {pr_per_period}." }, "FRACTION_OVER_PRECIP_THRESH": { + "long_name": "Fraction des jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien", "title": "Fraction des jours avec précipitation où la précipitation est au-dessus d'un centile quotidien.", "abstract": "Fraction des jours avec précipitation d'une période où la précipitation est au-dessus d'un centile quotidien. La référence est le nombre de jours où la précipitation est au-dessus d'un seuil fixe.", - "description": "Fraction {freq:f} des jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien. La référence est le nombre jours où la précipitation est au-dessus d'un seuil fixe.", - "long_name": "Fraction des jours avec précipitation où la précipitation est au-dessus d'un centile quotidien." + "description": "Fraction {freq:f} des jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien. La référence est le nombre jours où la précipitation est au-dessus d'un seuil fixe." }, "FRACTION_OVER_PRECIP_DOY_THRESH": { + "long_name": "Fraction de jours avec précipitation où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien", "title": "Fraction de jours avec précipitation où la précipitation est au-dessus d'un centile quotidien", - "abstract": "Fraction de jours d'une période où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien et d'un seuil fixe.", - "description": "Fraction {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien. Seuls les jours avec au moins {thresh} sont comptés. Le {pr_per_thresh}e centile est calculé sur une fenêtre glissante de {pr_per_window} jour(s) de la période {pr_per_period}.", - "long_name": "Fraction de jours avec précipitation où la précipitation est au-dessus d'un centile quotidien" + "abstract": "Fraction de jours d'une période où la précipitation quotidien est au-dessus du {pr_per_thresh}e centile quotidien et d'un seuil fixe.", + "description": "Fraction {freq:m} de jours où la précipitation est au-dessus du {pr_per_thresh}e centile quotidien. Seuls les jours avec au moins {thresh} sont comptés. Le {pr_per_thresh}e centile est calculé sur une fenêtre glissante de {pr_per_window} jour(s) de la période {pr_per_period}." }, "LIQUID_PRECIP_RATIO": { + "long_name": "Fraction liquide de la précipitation totale (température au-dessus de {thresh})", "title": "Fraction liquide de la précipitation totale", "abstract": "Le ratio entre la précipitation liquide et la précipitation totale. La précipitation liquide est approximée par la précipitation lorsque la température est au-dessus d'un seuil donné.", - "description": "Le ratio {freq:m} entre la précipitation liquide et la précipitation totale. La précipitation liquide est approximée par la précipitation lorsque la température est au-dessus de {thresh}.", - "long_name": "Fraction liquide de la précipitation totale" + "description": "Le ratio {freq:m} entre la précipitation liquide et la précipitation totale. La précipitation liquide est approximée par la précipitation lorsque la température est au-dessus de {thresh}." }, "WARM_SPELL_DURATION_INDEX": { "title": "Indice de durée des vagues de chaleur", @@ -1027,37 +1027,37 @@ "title": "Fréquence des périodes sèches", "abstract": "Fréquence des périodes sèches d'une durée minimale donnée, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donnée sont inférieures à un seuil donné.", "description": "Fréquence {freq:f} des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}.", - "long_name": "Fréquence des périodes sèches" + "long_name": "Fréquence des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}" }, "DRY_SPELL_TOTAL_LENGTH": { "title": "Durée totale en jours des périodes sèches", "abstract": "Durée totale en jours des périodes sèches d'une durée minimale donnée, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donné sont inférieures à un seuil donné.", "description": "Durée totale {freq:f} en jours des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}.", - "long_name": "Durée totale en jours des périodes sèches" + "long_name": "Durée totale en jours des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}" }, "COLD_AND_DRY_DAYS": { "title": "Nombre de jours froids et secs", "abstract": "Nombre de jours où la température et la précipitation sont en dessous de centiles donnés.", "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation en dessous du {pr_per_thresh}e centile.", - "long_name": "Nombre de jours froids et secs" + "long_name": "Nombre de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation en dessous du {pr_per_thresh}e centile" }, "WARM_AND_DRY_DAYS": { "title": "Nombre de jours chauds et secs", "abstract": "Nombre de jours où la température est au-dessus d'un centile donné et la précipitation en dessous d'un centile donné.", "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation en dessous du {pr_per_thresh}e centile.", - "long_name": "Nombre de jours chauds et secs" + "long_name": "Nombre de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation en dessous du {pr_per_thresh}e centile" }, "WARM_AND_WET_DAYS": { "title": "Nombre de jours chauds et pluvieux", "abstract": "Nombre de jours où la température et la précipitation sont au-dessus de centiles donnés.", "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile.", - "long_name": "Nombre de jours chauds et pluvieux" + "long_name": "Nombre de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile" }, "COLD_AND_WET_DAYS": { "title": "Nombre de jours froids et pluvieux", "abstract": "Nombre de jours où la température est en dessous d'un centile donné et la précipitation au-dessus d'un centile donné.", "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile.", - "long_name": "Nombre de jours froids et pluvieux" + "long_name": "Nombre de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile" }, "CALM_DAYS": { "title": "Nombre de jours de vent calme", diff --git a/xclim/indicators/atmos/_precip.py b/xclim/indicators/atmos/_precip.py index 81ddb4735..50229a532 100644 --- a/xclim/indicators/atmos/_precip.py +++ b/xclim/indicators/atmos/_precip.py @@ -132,8 +132,8 @@ class HrPrecip(Hourly): var_name="rx{window}day", units="mm", standard_name="lwe_thickness_of_precipitation_amount", - long_name="maximum n-day total precipitation", - description="{freq} maximum {window}-day total precipitation.", + long_name="maximum {window}-day total precipitation amount", + description="{freq} maximum {window}-day total precipitation amount.", abstract="Maximum of the moving sum of daily precipitation for a given period.", cell_methods="time: maximum over days", compute=indices.max_n_day_precipitation_amount, @@ -144,7 +144,7 @@ class HrPrecip(Hourly): identifier="wetdays", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_at_or_above_threshold", - long_name="Number of wet days", + long_name="Number of days with daily precipitation at or above {thresh})", description="{freq} number of days with daily precipitation at or above {thresh}.", abstract="The number of days with daily precipitation at or above a given threshold.", cell_methods="time: sum over days", @@ -155,7 +155,7 @@ class HrPrecip(Hourly): title="Proportion of wet days", identifier="wetdays_prop", units="1", - long_name="Proportion of wet days", + long_name="Proportion of days with precipitation at or above {thresh}", description="{freq} proportion of days with precipitation at or above {thresh}.", abstract="The proportion of days with daily precipitation at or above a given threshold.", cell_methods="time: sum over days", @@ -179,7 +179,7 @@ class HrPrecip(Hourly): identifier="cwd", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_at_or_above_threshold", - long_name="Maximum consecutive wet days", + long_name="Maximum consecutive days with daily precipitation at or above {thresh}", description="{freq} maximum number of consecutive days with daily precipitation at or above {thresh}.", abstract="The longest number of consecutive days where daily precipitation is at or above a given threshold.", cell_methods="time: sum over days", @@ -191,7 +191,7 @@ class HrPrecip(Hourly): identifier="cdd", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_below_threshold", - long_name="Maximum consecutive dry days", + long_name="Maximum consecutive days with daily precipitation below {thresh}", description="{freq} maximum number of consecutive days with daily precipitation below {thresh}.", abstract="The longest number of consecutive days where daily precipitation below a given threshold.", cell_methods="time: sum over days", @@ -203,9 +203,10 @@ class HrPrecip(Hourly): identifier="sdii", units="mm d-1", standard_name="lwe_thickness_of_precipitation_amount", - long_name="Average precipitation during wet days", - description="{freq} average precipitation for days with daily precipitation over {thresh}. " - "This indicator is also known as the 'Simple Daily Intensity Index' (SDII).", + long_name="Average precipitation during days with daily precipitation over {thresh} " + "(Simple Daily Intensity Index: SDII)", + description="{freq} Simple Daily Intensity Index (SDII) or " + "{freq} average precipitation for days with daily precipitation over {thresh}.", abstract="Average precipitation for days with daily precipitation above a given threshold.", cell_methods="", compute=indices.daily_pr_intensity, @@ -216,8 +217,8 @@ class HrPrecip(Hourly): identifier="max_pr_intensity", units="mm h-1", standard_name="precipitation", - long_name="Maximum precipitation intensity over time window", - description="{freq} maximum precipitation intensity over rolling {window}h window.", + long_name="Maximum precipitation intensity over rolling {window}h time window", + description="{freq} maximum precipitation intensity over rolling {window}h time window.", abstract="Maximum precipitation intensity over a given rolling time window.", cell_methods="time: max", compute=indices.max_pr_intensity, @@ -245,7 +246,7 @@ class HrPrecip(Hourly): identifier="wet_prcptot", units="mm", standard_name="lwe_thickness_of_precipitation_amount", - long_name="Total accumulated precipitation", + long_name="Total accumulated precipitation over days where precipitation exceeds {thresh}", description="{freq} total precipitation over wet days, defined as days where precipitation exceeds {thresh}.", abstract="Total accumulated precipitation on days with precipitation. " "A day is considered to have precipitation if the precipitation is greater than or equal to a given threshold.", @@ -260,10 +261,10 @@ class HrPrecip(Hourly): identifier="liquidprcptot", units="mm", standard_name="lwe_thickness_of_liquid_precipitation_amount", - long_name="Total accumulated liquid precipitation", - description="{freq} total {phase} precipitation, estimated as precipitation when temperature >= {thresh}.", + long_name="Total accumulated precipitation when temperature is above {thresh}", + description="{freq} total {phase} precipitation, estimated as precipitation when temperature is above {thresh}.", abstract="Total accumulated liquid precipitation. " - "Precipitation is considered liquid when the average daily temperature is at or above 0°C.", + "Precipitation is considered liquid when the average daily temperature is above 0°C.", cell_methods="time: sum over days", compute=indices.precip_accumulation, parameters={"tas": {"kind": InputKind.VARIABLE}, "phase": "liquid"}, @@ -275,9 +276,9 @@ class HrPrecip(Hourly): units="mm", standard_name="lwe_thickness_of_snowfall_amount", long_name="Total accumulated solid precipitation", - description="{freq} total solid precipitation, estimated as precipitation when temperature < {thresh}.", + description="{freq} total solid precipitation, estimated as precipitation when temperature at or below {thresh}.", abstract="Total accumulated solid precipitation. " - "Precipitation is considered solid when the average daily temperature is below 0°C.", + "Precipitation is considered solid when the average daily temperature is at or below 0°C.", cell_methods="time: sum over days", compute=indices.precip_accumulation, parameters={"tas": {"kind": InputKind.VARIABLE}, "phase": "solid"}, @@ -302,8 +303,8 @@ class HrPrecip(Hourly): identifier="spei", units="", standard_name="spei", - long_name="Standardized precipitation evapotranspiration index", - description="Water budget (precipitation - evapotranspiration) over a moving {window}-X window, normalized " + long_name="Standardized precipitation evapotranspiration index (SPEI)", + description="Water budget (precipitation minus evapotranspiration) over a moving {window}-X window, normalized " "such that SPEI averages to 0 for calibration data. The window unit `X` is the minimal time period defined by the " "resampling frequency {freq}.", abstract="Water budget (precipitation - evapotranspiration) over a moving window, normalized such that the " @@ -434,7 +435,7 @@ class HrPrecip(Hourly): title="Last day where solid precipitation flux exceeded a given threshold", identifier="last_snowfall", standard_name="day_of_year", - long_name="Date of last snowfall", + long_name="Date of last day where the solid precipitation flux exceeded {thresh}", description="{freq} last day where the solid precipitation flux exceeded {thresh}.", abstract="The last day where the solid precipitation flux exceeded a given threshold during a time period.", units="", @@ -445,7 +446,7 @@ class HrPrecip(Hourly): title="First day where solid precipitation flux exceeded a given threshold", identifier="first_snowfall", standard_name="day_of_year", - long_name="Date of first snowfall", + long_name="Date of first day where the solid precipitation flux exceeded {thresh}", description="{freq} first day where the solid precipitation flux exceeded {thresh}.", abstract="The first day where the solid precipitation flux exceeded a given threshold during a time period.", units="", @@ -455,18 +456,19 @@ class HrPrecip(Hourly): days_with_snow = PrecipWithIndexing( title="Days with snowfall", identifier="days_with_snow", - long_name="Number of days with solid precipitation flux between low and high thresholds", + long_name="Number of days with solid precipitation flux between {low} and {high} thresholds", description="{freq} number of days with solid precipitation flux larger than {low} and smaller or equal to {high}.", abstract="Number of days with snow between a lower and upper limit.", units="days", compute=indices.days_with_snow, ) +# FIXME: Are days_over_precip_thresh and days_over_precip_doy_thresh the same thing? days_over_precip_thresh = PrecipWithIndexing( title="Number of days with precipitation above a given percentile", identifier="days_over_precip_thresh", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_above_threshold", - long_name="Number of days with precipitation flux above base threshold", + long_name="Number of days with precipitation flux above the {pr_per_thresh}th percentile of {pr_per_period}", description="{freq} number of days with precipitation above the {pr_per_thresh}th percentile of {pr_per_period} " "period. Only days with at least {thresh} are counted.", abstract="Number of days in a period where precipitation is above a given percentile, " @@ -476,11 +478,12 @@ class HrPrecip(Hourly): compute=indices.days_over_precip_thresh, ) +# FIXME: Are days_over_precip_thresh and days_over_precip_doy_thresh the same thing? days_over_precip_doy_thresh = PrecipWithIndexing( title="Number of days with precipitation above a given daily percentile", identifier="days_over_precip_doy_thresh", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_above_daily_threshold", - long_name="Number of days with daily precipitation flux above base threshold", + long_name="Number of days with daily precipitation flux above the {pr_per_thresh}th percentile of {pr_per_period}", description="{freq} number of days with precipitation above the {pr_per_thresh}th daily percentile. Only days with " "at least {thresh} are counted. A {pr_per_window} day(s) window, centered on each calendar day in the " "{pr_per_period} period, is used to compute the {pr_per_thresh}th percentile(s).", @@ -493,7 +496,7 @@ class HrPrecip(Hourly): high_precip_low_temp = PrTasxWithIndexing( title="Days with precipitation and cold temperature", identifier="high_precip_low_temp", - long_name="Days with precipitation above a given threshold and temperature below a given threshold", + long_name="Days with precipitation at or above {pr_thresh} and temperature below {tas_thresh}", description="{freq} number of days with precipitation at or above {pr_thresh} and temperature below {tas_thresh}.", abstract="Number of days with precipitation above a given threshold and temperature below a given threshold.", units="days", @@ -506,7 +509,7 @@ class HrPrecip(Hourly): fraction_over_precip_doy_thresh = PrecipWithIndexing( title="", identifier="fraction_over_precip_doy_thresh", - long_name="Fraction of precipitation due to wet days with daily precipitation over a given percentile", + long_name="Fraction of precipitation due to days with daily precipitation above {pr_per_thresh}th daily percentile", description="{freq} fraction of total precipitation due to days with precipitation above {pr_per_thresh}th daily " "percentile. Only days with at least {thresh} are included in the total. A {pr_per_window} day(s) window, centered " "on each calendar day in the {pr_per_period} period, is used to compute the {pr_per_thresh}th percentile(s).", @@ -519,7 +522,7 @@ class HrPrecip(Hourly): # FIXME: Clarity needed in both French and English metadata fields fraction_over_precip_thresh = PrecipWithIndexing( identifier="fraction_over_precip_thresh", - long_name="Fraction of precipitation due to wet days with precipitation over a given percentile", + long_name="Fraction of precipitation due to days with precipitation above {pr_per_thresh}th daily percentile", description="{freq} fraction of total precipitation due to days with precipitation above {pr_per_thresh}th " "percentile of {pr_per_period} period. Only days with at least {thresh} are included in the total.", units="", @@ -530,7 +533,7 @@ class HrPrecip(Hourly): liquid_precip_ratio = PrTasxWithIndexing( title="Fraction of liquid to total precipitation", identifier="liquid_precip_ratio", - long_name="Fraction of liquid to total precipitation", + long_name="Fraction of liquid to total precipitation (temperature above {thresh})", description="The {freq} ratio of rainfall to total precipitation. Rainfall is estimated as precipitation on days " "where temperature is above {thresh}.", abstract="The ratio of total liquid precipitation over the total precipitation. Liquid precipitation is " @@ -544,7 +547,8 @@ class HrPrecip(Hourly): dry_spell_frequency = Precip( title="Dry spell frequency", identifier="dry_spell_frequency", - long_name="Dry spell frequency", + long_name="Number of dry periods of {window} day(s) or more, during which the {op} precipitation on a " + "window of {window} day(s) is below {thresh}.", description="The {freq} number of dry periods of {window} day(s) or more, during which the {op} precipitation on a " "window of {window} day(s) is below {thresh}.", abstract="The frequency of dry periods of `N` days or more, during which the accumulated or maximum precipitation " @@ -558,7 +562,8 @@ class HrPrecip(Hourly): dry_spell_total_length = Precip( title="Dry spell total length", identifier="dry_spell_total_length", - long_name="Dry spell total length", + long_name="Number of days in dry periods of {window} day(s) or more, during which the {op} " + "precipitation within windows of {window} day(s) is under {thresh}.", description="The {freq} number of days in dry periods of {window} day(s) or more, during which the {op} " "precipitation within windows of {window} day(s) is under {thresh}.", abstract="The total length of dry periods of `N` days or more, during which the accumulated or maximum " @@ -571,8 +576,9 @@ class HrPrecip(Hourly): rprctot = PrecipWithIndexing( title="Proportion of accumulated precipitation arising from convective processes", identifier="rprctot", - long_name="Proportion of accumulated precipitation arising from convective processes", - description="Proportion of accumulated precipitation arising from convective processes " + long_name="Proportion of accumulated precipitation arising from convective processes" + "with precipitation of at least {thresh}", + description="{freq} proportion of accumulated precipitation arising from convective processes " "with precipitation of at least {thresh}.", abstract="The proportion of total precipitation due to convective processes. " "Only days with surpassing a minimum precipitation flux are considered.", @@ -586,8 +592,10 @@ class HrPrecip(Hourly): title="Cold and dry days", identifier="cold_and_dry_days", units="days", - long_name="Number of cold and dry days", - description="{freq} number of days where tas < {tas_per_thresh}th percentile and pr < {pr_per_thresh}th percentile", + long_name="Number of days where temperature is below {tas_per_thresh}th percentile and " + "precipitation is below {pr_per_thresh}th percentile", + description="{freq} number of days where temperature is below {tas_per_thresh}th percentile and " + "precipitation is below {pr_per_thresh}th percentile.", abstract="Number of days with temperature below a given percentile and precipitation below a given percentile.", cell_methods="time: sum over days", compute=indices.cold_and_dry_days, @@ -597,8 +605,10 @@ class HrPrecip(Hourly): title="Warm and dry days", identifier="warm_and_dry_days", units="days", - long_name="Number of warm and dry days", - description="{freq} number of days where tas > {tas_per_thresh}th percentile and pr < {pr_per_thresh}th percentile", + long_name="Number of days where temperature is above {tas_per_thresh}th percentile and " + "precipitation is below {pr_per_thresh}th percentile", + description="{freq} number of days where temperature is above {tas_per_thresh}th percentile and " + "precipitation is below {pr_per_thresh}th percentile.", abstract="Number of days with temperature above a given percentile and precipitation below a given percentile.", cell_methods="time: sum over days", compute=indices.warm_and_dry_days, @@ -608,8 +618,10 @@ class HrPrecip(Hourly): title="Warm and wet days", identifier="warm_and_wet_days", units="days", - long_name="Number of warm and wet days", - description="{freq} number of days where tas > {tas_per_thresh}th percentile and pr > {pr_per_thresh}th percentile", + long_name="Number of days where temperature above {tas_per_thresh}th percentile and " + "precipitation above {pr_per_thresh}th percentile", + description="{freq} number of days where temperature is above {tas_per_thresh}th percentile and " + "precipitation is above {pr_per_thresh}th percentile.", abstract="Number of days with temperature above a given percentile and precipitation above a given percentile.", cell_methods="time: sum over days", compute=indices.warm_and_wet_days, @@ -619,8 +631,10 @@ class HrPrecip(Hourly): title="Cold and wet days", identifier="cold_and_wet_days", units="days", - long_name="Number of cold and wet days", - description="{freq} number of days where tas < {tas_per_thresh}th percentile and pr > {pr_per_thresh}th percentile", + long_name="Number of days where temperature is below {tas_per_thresh}th percentile and " + "precipitation is above {pr_per_thresh}th percentile", + description="{freq} number of days where temperature is below {tas_per_thresh}th percentile and " + "precipitation is above {pr_per_thresh}th percentile.", abstract="Number of days with temperature below a given percentile and precipitation above a given percentile.", cell_methods="time: sum over days", compute=indices.cold_and_wet_days, From 4c4000ece7e1ad8d4b8ec1805d9fa5d22854f41b Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 28 Oct 2022 12:43:00 -0400 Subject: [PATCH 089/106] wind indicators with long_name keys --- xclim/data/fr.json | 8 ++++---- xclim/indicators/atmos/_conversion.py | 6 +++--- xclim/indicators/atmos/_wind.py | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 1baeafe59..49ecb7f20 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -1063,13 +1063,13 @@ "title": "Nombre de jours de vent calme", "abstract": "Nombre de jours où la vitesse du vent de surface est sous un seuil donné.", "description": "Nombre {freq:m} de jours où la vitesse du vent de surface est sous {thresh}.", - "long_name": "Nombre de jours où la vitesse du vent de surface est sous un seuil donné" + "long_name": "Nombre de jours où la vitesse du vent de surface est sous {thresh}" }, "WINDY_DAYS": { "title": "Nombre de jours venteux", "abstract": "Nombre de jours où la vitesse du vent de surface est au-dessus ou égale à un seuil donné.", "description": "Nombre {freq:m} de jours où la vitesse du vent de surface est au-dessus ou égale à {thresh}.", - "long_name": "Nombre de jours où la vitesse du vent de surface est au-dessus ou égale à un seuil donné" + "long_name": "Nombre de jours où la vitesse du vent de surface est au-dessus ou égale à {thresh}" }, "JETSTREAM_METRIC_WOOLLINGS": { "title": "Force et latitude du courant-jet", @@ -1084,10 +1084,10 @@ ] }, "UTCI": { - "title": "Indice universel du climat thermique", + "title": "Indice universel du climat thermique [UTCI]", "abstract": "L'UTCI représente la température ressentie par rapport à un environnement de référence et est utilisé pour évaluer le stress thermique à l'extérieur.", "description": "L'UTCI représente la température ressentie par rapport à un environnement de référence et est utilisé pour évaluer le stress thermique à l'extérieur.", - "long_name": "Indice universel du climat thermique" + "long_name": "Indice universel du climat thermique [UTCI]" }, "MEAN_RADIANT_TEMPERATURE": { "title": "Température radiative moyenne", diff --git a/xclim/indicators/atmos/_conversion.py b/xclim/indicators/atmos/_conversion.py index fdf3cf339..733d0abfb 100644 --- a/xclim/indicators/atmos/_conversion.py +++ b/xclim/indicators/atmos/_conversion.py @@ -78,7 +78,7 @@ def cfcheck(self, **das): units="K", standard_name="air_temperature", long_name="Daily mean temperature", - description="Estimated mean temperature from maximum and minimum temperatures", + description="Estimated mean temperature from maximum and minimum temperatures.", cell_methods="time: mean within days", abstract="The average daily temperature assuming a symmetrical temperature distribution (Tg = (Tx + Tn) / 2).", compute=indices.tas, @@ -356,10 +356,10 @@ def cfcheck(self, **das): ) universal_thermal_climate_index = Converter( - title="Universal thermal climate index", + title="Universal Thermal Climate Index (UTCI)", identifier="utci", units="K", - long_name="Universal thermal climate index", + long_name="Universal Thermal Climate Index (UTCI)", description="UTCI is the equivalent temperature for the environment derived from a reference environment " "and is used to evaluate heat stress in outdoor spaces.", abstract="UTCI is the equivalent temperature for the environment derived from a reference environment " diff --git a/xclim/indicators/atmos/_wind.py b/xclim/indicators/atmos/_wind.py index 88ea27be0..3d37dab7c 100644 --- a/xclim/indicators/atmos/_wind.py +++ b/xclim/indicators/atmos/_wind.py @@ -17,8 +17,8 @@ class Wind(ResamplingIndicatorWithIndexing): identifier="calm_days", units="days", standard_name="number_of_days_with_sfcWind_below_threshold", - long_name="Number of days with surface wind speed below threshold", - description="{freq} number of days with surface wind speed < {thresh}.", + long_name="Number of days with surface wind speed below {thresh}", + description="{freq} number of days with surface wind speed below {thresh}.", abstract="Number of days with surface wind speed below threshold.", cell_methods="time: sum over days", compute=indices.calm_days, @@ -29,8 +29,8 @@ class Wind(ResamplingIndicatorWithIndexing): identifier="windy_days", units="days", standard_name="number_of_days_with_sfcWind_above_threshold", - long_name="Number of days with surface wind speed at or above threshold", - description="{freq} number of days with surface wind speed >= {thresh}.", + long_name="Number of days with surface wind speed at or above {thresh}", + description="{freq} number of days with surface wind speed at or above {thresh}.", abstract="Number of days with surface wind speed at or above threshold.", cell_methods="time: sum over days", compute=indices.windy_days, From 5ae4117d2c64d03a4d28e1ff13395b45934fc6ea Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 28 Oct 2022 12:45:13 -0400 Subject: [PATCH 090/106] sea_ice indicators with long_name keys --- xclim/data/fr.json | 4 ++-- xclim/indicators/seaIce/_seaice.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 49ecb7f20..2144d3f3d 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -623,13 +623,13 @@ "abstract": "" }, "SEA_ICE_AREA": { - "long_name": "Surface de la banquise", + "long_name": "Somme des surfaces recouvertes de glace de mer là où sa concentration est d'au moins {thresh}", "description": "La somme des surfaces recouvertes de glace de mer là où sa concentration est d'au moins {thresh}.", "title": "Surface de la banquise", "abstract": "Mesure de surface totale des océans couverte de glace de mer." }, "SEA_ICE_EXTENT": { - "long_name": "Étendue de banquise", + "long_name": "Aire totale de toutes les régions où la concentration de glace de mer est d'au moins {thresh}", "description": "L'aire totale de toutes les régions où la concentration de glace de mer est d'au moins {thresh}.", "title": "Étendue de la banquise", "abstract": "Mesure de l'étendue de toutes les régions où la concentration de glace de mer est au-dessus ou égale à un seuil donné." diff --git a/xclim/indicators/seaIce/_seaice.py b/xclim/indicators/seaIce/_seaice.py index 70665efdd..b000c1696 100644 --- a/xclim/indicators/seaIce/_seaice.py +++ b/xclim/indicators/seaIce/_seaice.py @@ -22,7 +22,7 @@ class SiconcAreacello(Indicator): identifier="sea_ice_extent", units="m2", standard_name="sea_ice_extent", - long_name="Sea ice extent", + long_name="Sum of ocean areas where sea ice concentration exceeds {thresh}", description="The sum of ocean areas where sea ice concentration exceeds {thresh}.", abstract="A measure of the extent of all areas where sea ice concentration exceeds a threshold.", cell_methods="lon: sum lat: sum", @@ -35,7 +35,7 @@ class SiconcAreacello(Indicator): identifier="sea_ice_area", units="m2", standard_name="sea_ice_area", - long_name="Sea ice area", + long_name="Sum of ice-covered areas where sea ice concentration exceeds {thresh}", description="The sum of ice-covered areas where sea ice concentration exceeds {thresh}.", abstract="A measure of total ocean surface covered by sea ice.", cell_methods="lon: sum lat: sum", From b3c934d1854bcc87fb3f2e70bba521b77e4d8809 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 28 Oct 2022 13:46:52 -0400 Subject: [PATCH 091/106] streamflow indicators with long_name keys --- xclim/data/fr.json | 4 ++-- xclim/indicators/land/_streamflow.py | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 2144d3f3d..f809f2dbf 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -611,13 +611,13 @@ "abstract": "" }, "DOY_QMAX": { - "long_name": "Jour de l'année du maximum du débit", + "long_name": "Jour de l'année du maximum du débit en {indexer:nom}", "description": "Jour de l'année du maximum du débit en {indexer:nom}.", "title": "Jour de l'année du maximum du débit", "abstract": "" }, "DOY_QMIN": { - "long_name": "Jour de l'année du minimum du débit", + "long_name": "Jour de l'année du minimum du débit en {indexer:nom}", "description": "Jour de l'année du minimum du débit en {indexer:nom}.", "title": "Jour de l'année du minimum du débit", "abstract": "" diff --git a/xclim/indicators/land/_streamflow.py b/xclim/indicators/land/_streamflow.py index 019ef26dc..31197c9e5 100644 --- a/xclim/indicators/land/_streamflow.py +++ b/xclim/indicators/land/_streamflow.py @@ -83,12 +83,12 @@ def cfcheck(self, **das): ) rb_flashiness_index = Streamflow( - title="Richards-Baker flashiness index", + title="Richards-Baker Flashiness Index", identifier="rb_flashiness_index", units="", var_name="rbi", - long_name="Richards-Baker flashiness index", - description="{freq} de R-B Index, an index measuring the flashiness of flow.", + long_name="Richards-Baker Flashiness Index", + description="{freq} of Richards-Baker Index, an index measuring the flashiness of flow.", abstract="Measurement of flow oscillations relative to average flow, " "quantifying the frequency and speed of flow changes.", compute=rb_flashiness_index, @@ -110,7 +110,7 @@ def cfcheck(self, **das): var_name="params", units="", standard_name="{dist} parameters", - long_name="Distribution parameters", + long_name="{dist} distribution parameters", description="Parameters of the {dist} distribution.", cell_methods="time: fit", compute=declare_units(da=None)(_fit), @@ -121,7 +121,7 @@ def cfcheck(self, **das): title="Day of year of the maximum streamflow", identifier="doy_qmax", var_name="q{indexer}_doy_qmax", - long_name="Day of the year of the maximum streamflow over time period", + long_name="Day of the year of the maximum streamflow over {indexer}", description="Day of the year of the maximum streamflow over {indexer}.", units="", compute=declare_units(da=None)(generic.select_resample_op), @@ -133,7 +133,7 @@ def cfcheck(self, **das): title="Day of year of the minimum streamflow", identifier="doy_qmin", var_name="q{indexer}_doy_qmin", - long_name="Day of the year of the minimum streamflow over time period", + long_name="Day of the year of the minimum streamflow over {indexer}", description="Day of the year of the minimum streamflow over {indexer}.", units="", compute=declare_units(da=None)(generic.select_resample_op), From b6e0031261756e50a1ac84d93de60ec7407d8b66 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 28 Oct 2022 15:33:32 -0400 Subject: [PATCH 092/106] temperature indicators with long_name keys - part 1 --- xclim/data/fr.json | 78 ++++++++++++------------ xclim/indicators/atmos/_temperature.py | 84 +++++++++++++++----------- 2 files changed, 88 insertions(+), 74 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index f809f2dbf..b39ae1ee1 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -248,67 +248,67 @@ "abstract": "L'indice de sécheresse fait partie du système canadien des Indices Forêt-Météo. C'est un code numérique estimant la teneur en humidité moyenne de couches organiques." }, "TN_DAYS_ABOVE": { - "long_name": "Nombre de jours ayant une température minimale quotidienne au-dessus d'un seuil donné", + "long_name": "Nombre de jours ayant une température minimale quotidienne au-dessus de {thresh}", "description": "Nombre {freq:m} de jours où la température minimale quotidienne est au-dessus de {thresh}.", "title": "Nombre de jours ayant une température minimale quotidienne au-dessus d'un seuil donné", "abstract": "Nombre de jours où la température minimale quotidienne est au-dessus d'un seuil donné." }, "TN_DAYS_BELOW": { - "long_name": "Nombre de jours ayant une température minimale quotidienne sous un seuil donné", + "long_name": "Nombre de jours ayant une température minimale quotidienne sous {thresh}", "description": "Nombre {freq:m} de jours où la température minimale quotidienne est sous {thresh}.", "title": "Nombre de jours ayant une température minimale quotidienne sous un seuil donné", "abstract": "Nombre de jours où la température minimale quotidienne est sous un seuil donné." }, "TG_DAYS_ABOVE": { - "long_name": "Nombre de jours ayant une température moyenne quotidienne au-dessus d'un seuil donné", + "long_name": "Nombre de jours ayant une température moyenne quotidienne au-dessus de {thresh}", "description": "Nombre {freq:m} de jours où la température quotidienne moyenne est au-dessus de {thresh}.", "title": "Nombre de jours ayant une température moyenne quotidienne au-dessus d'un seuil donné", "abstract": "Nombre de jours où la température quotidienne moyenne est au-dessus d'un seuil donné." }, "TG_DAYS_BELOW": { - "long_name": "Nombre de jours ayant une température moyenne quotidienne sous un seuil donné", + "long_name": "Nombre de jours ayant une température moyenne quotidienne sous {thresh}", "description": "Nombre {freq:m} de jours où la température quotidienne moyenne est sous {thresh}.", "title": "Nombre de jours ayant une température moyenne quotidienne sous un seuil donné", "abstract": "Nombre de jours où la température quotidienne moyenne est sous un seuil donné." }, "TX_DAYS_ABOVE": { - "long_name": "Nombre de jours ayant une température maximale quotidienne au-dessus d'un seuil donné", + "long_name": "Nombre de jours ayant une température maximale quotidienne au-dessus de {thresh}", "description": "Nombre {freq:m} de jours où la température maximale quotidienne est au-dessus de {thresh}.", "title": "Nombre de jours ayant une température maximale quotidienne au-dessus d'un seuil donné", "abstract": "Nombre de jours où la température maximale quotidienne est au-dessus d'un seuil donné." }, "TX_DAYS_BELOW": { - "long_name": "Nombre de jours ayant une température maximale quotidienne sous un seuil donné", + "long_name": "Nombre de jours ayant une température maximale quotidienne sous {thresh}", "description": "Nombre {freq:m} de jours où la température maximale quotidienne est sous {thresh}.", "title": "Nombre de jours ayant une température maximale quotidienne sous un seuil donné", "abstract": "Nombre de jours où la température maximale quotidienne est sous un seuil donné." }, "TX_TN_DAYS_ABOVE": { - "long_name": "Nombre de jours ayant des températures minimale et maximale quotidiennes au-dessus de seuils donnés.", + "long_name": "Nombre de jours ayant des températures minimales au-dessus {thresh_tasmin} et températures maximale quotidiennes au-dessus {thresh_tasmax}", "description": "Nombre {freq:m} de jours où la température maximale quotidienne est au-dessus {thresh_tasmax} et la température minimale quotidienne est au-dessus {thresh_tasmin}.", - "title": "Nombre de jours ayant des températures minimale et maximale quotidiennes au-dessus de seuils donnés.", + "title": "Nombre de jours ayant des températures minimale et maximale quotidiennes au-dessus de seuils donnés", "abstract": "Nombre de jours où les températures maximale et minimale quotidiennes sont au-dessus de seuils donnés." }, "HEAT_WAVE_FREQUENCY": { - "long_name": "Nombre de vagues de chaleur", + "long_name": "Nombre de séries d'au moins {window} jours consécutifs ayant des températures minimales quotidiennes au-dessus {thresh_tasmin} et températures maximales quotidiennes au-dessus {thresh_tasmax}", "description": "Nombre {freq:m} de vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Fréquence des vagues de chaleur", "abstract": "Nombre de vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, - "HEAT_WAVE_TOTAL_LENGTH": { - "long_name": "Durée totale des vagues de chaleur", - "description": "Durée totale {freq:f} des vagues de chaleur en somme de jours. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", - "title": "Durée totale des vagues de chaleur", - "abstract": "Durée totale des vagues de chaleur en somme de jours. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent des seuils donnés durant un certain nombre de jours." - }, "HEAT_WAVE_MAX_LENGTH": { - "long_name": "Durée maximale des vagues de chaleur", + "long_name": "Série la plus longue d'au moins {window} jours consécutifs ayant des températures minimales quotidiennes au-dessus {thresh_tasmin} et températures maximales quotidiennes au-dessus {thresh_tasmax}", "description": "Durée maximale {freq:f} des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", "title": "Durée maximale des vagues de chaleur", "abstract": "Durée maximale des vagues de chaleur. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, + "HEAT_WAVE_TOTAL_LENGTH": { + "long_name": "Durée totale des événements d'au moins {window} jours consécutifs ayant des températures minimales quotidiennes au-dessus {thresh_tasmin} et températures maximales quotidiennes au-dessus {thresh_tasmax}", + "description": "Durée totale {freq:f} des vagues de chaleur en somme de jours. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent {thresh_tasmin} et {thresh_tasmax}, respectivement, durant au moins {window} jours.", + "title": "Durée totale des vagues de chaleur", + "abstract": "Durée totale des vagues de chaleur en somme de jours. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent des seuils donnés durant un certain nombre de jours." + }, "HEAT_WAVE_INDEX": { - "long_name": "Nombre de jours de vague de chaleur", + "long_name": "Nombre total de jours constituant des événements d'au moins {window} jours consécutifs ayant une température maximale quotidienne au-dessus {thresh_tasmax}", "description": "Nombre {freq:m} de jours de vague de chaleur. Une vague de chaleur se produit lorsque la température maximale quotidienne excède {thresh} durant au moins {window} jours.", "title": "Indice de vague de chaleur", "abstract": "Nombre de jours de vagues de chaleur. Une vague de chaleur se produit lorsque la température maximale quotidienne excède un seuil donné durant un certain nombre de jours." @@ -423,7 +423,7 @@ }, "DTRVAR": { "long_name": "Variabilité de l'amplitude diurne de la température", - "description": "Variation interdiurne moyenne {freq:f} de l'amplitude diurne de la température (définie comme la variation quotidienne moyenne de l'amplitude diurne des températures quotidiennes pour une période donnée).", + "description": "Variation interdiurne moyenne {freq:f} de l'amplitude diurne de la température, définie comme la variation quotidienne moyenne de l'amplitude diurne des températures quotidiennes pour une période donnée.", "title": "Variation interdiurne moyenne de l'amplitude diurne de la température", "abstract": "Variation interdiurne moyenne de l'amplitude diurne de la température." }, @@ -434,19 +434,19 @@ "abstract": "Le maximum de la température maximale moins le minimum de la température minimale." }, "COLD_SPELL_DURATION_INDEX": { - "long_name": "Indice de durée des vagues de froid", + "long_name": "Nombre total de jours constituant des événements d'au moins {window} jours consécutifs où la température minimale quotidienne est en dessous du {tasmin_per_thresh}ᵉ percentile", "description": "{freq:m} nombre de jours avec au moins {window} jours consécutifs où la température minimale quotidienne est sous le {tasmin_per_thresh}ᵉ centile. Une vague de froid se produit lorsque la température minimale quotidienne est sous un centile donné pendant au moins {window} jours consécutifs.", - "title": "Indice de durée des vagues de froid", + "title": "Indice de durée des vagues de froid [CSDI]", "abstract": "Nombre de jours de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous un centile donné pendant au moins {window} jours consécutifs." }, "COLD_SPELL_FREQUENCY": { - "long_name": "Fréquence des vagues de froid", + "long_name": "Nombre total de séries d'au moins {window} jours consécutifs où la température quotidienne moyenne est sous {thresh}.", "description": "Nombre {freq:m} de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous {thresh} durant au moins {window} jours consécutifs.", "title": "Nombre de vagues de froid", "abstract": "Nombre de vagues de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous un seuil durant au moins un certain nombre de jours consécutifs." }, "COLD_SPELL_DAYS": { - "long_name": "Jours de vagues de froid", + "long_name": "Nombre total de jours constituant des événements d'au moins {window} jours consécutifs où la température quotidienne moyenne est sous {thresh}", "description": "Nombre {freq:m} de jours faisant partie d'une vague de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous {thresh} durant au moins {window} jours consécutifs.", "title": "Nombre de jours faisant partie d'une vague de froid", "abstract": "Nombre de jours faisant partie d'une vague de froid. Une vague de froid se produit lorsque la température minimale quotidienne est sous un seuil donné durant au moins un certain nombre de jours consécutifs." @@ -458,37 +458,37 @@ "abstract": "Indicateur des conditions nycthermiques de maturation, qui correspond à la valeur moyenne de la température minimale de l'air sur les 30 jours précédant la date de récolte potentielle." }, "DLYFRZTHW": { - "long_name": "Nombre de jours avec un cycle de gel-dégel", - "description": "Nombre {freq} de jours avec un cycle diurne de gel-dégel, où les températures maximales quotidiennes sont au-dessus de {thresh_tasmax} et les températures minimales quotidiennes sont en dessous ou égales à {thresh_tasmin}).", + "long_name": "Nombre de jours où les températures maximales quotidiennes sont au-dessus de {thresh_tasmax} et les températures minimales quotidiennes sont en dessous ou égales à {thresh_tasmin})", + "description": "Nombre {freq} de jours avec un cycle diurne de gel-dégel, où les températures maximales quotidiennes sont au-dessus de {thresh_tasmax} et les températures minimales quotidiennes sont en dessous ou égales à {thresh_tasmin}.", "title": "Cycles de gel-dégel", - "abstract": "Le nombre de jours avec un cycle de gel-dégel. Un cycle de gel-dégel est défini comme un jour où la température maximale quotidienne est au-dessus d'un seuil donné et où la température minimale quotidienne est égale ou en dessous d'un seuil, généralement 0°C pour les deux.." + "abstract": "Le nombre de jours avec un cycle de gel-dégel. Un cycle de gel-dégel est défini comme un jour où la température maximale quotidienne est au-dessus d'un seuil donné et où la température minimale quotidienne est en dessous ou égale à un seuil, généralement 0°C pour les deux.." }, "COOLING_DEGREE_DAYS": { - "long_name": "Degrés-jours de climatisation", + "long_name": "Somme cumulée des degrés de température pour la température moyenne quotidienne au-dessus de {thresh}", "description": "Cumul {freq:m} des degrés-jours de climatisation (température moyenne quotidienne au-dessus de {thresh}).", "title": "Degrés-jours de climatisation", "abstract": "Cumul des degrés-jours pour les jours où la température moyenne quotidienne est au-dessus d'un seuil donné et que les immeubles doivent être climatisés." }, "HEATING_DEGREE_DAYS": { - "long_name": "Degrés-jours de chauffage", + "long_name": "Somme cumulée des degrés de température pour la température moyenne quotidienne sous {thresh}", "description": "Cumul {freq:m} des degrés-jours de chauffage (température moyenne quotidienne sous {thresh}).", "title": "Degrés-jours de chauffage", "abstract": "Cumul des degrés-jours pour les jours où la température moyenne est sous un seuil donné et que les immeubles doivent être chauffés." }, "GROWING_DEGREE_DAYS": { - "long_name": "Degrés-jours de croissance", + "long_name": "Somme cumulée des degrés de température pour la température moyenne quotidienne au-dessus de {thresh}", "description": "Cumul {freq:m} des degrés-jours de croissance (température moyenne quotidienne au-dessus de {thresh}).", "title": "Degrés-jours de croissance", "abstract": "Cumul des degrés-jours pour les jours où la température moyenne quotidienne est au-dessus d'un seuil donné." }, "FREEZING_DEGREE_DAYS": { - "long_name": "Degrés-jours de gel", + "long_name": "Somme cumulée des degrés de température pour la température moyenne quotidienne sous {thresh}", "description": "Cumul {freq:m} des degrés-jours de gel (température moyenne quotidienne sous {thresh}).", "title": "Degrés-jours de gel", "abstract": "Cumul des degrés-jours pour les jours où la température moyenne quotidienne est sous un seuil donné, habituellement 0°C." }, "THAWING_DEGREE_DAYS": { - "long_name": "Degrés-jours de dégel", + "long_name": "Somme cumulée des degrés de température pour la température moyenne quotidienne au-dessus de {thresh}", "description": "Cumul {freq:m} des degrés-jours de dégel (température moyenne quotidienne au-dessus de {thresh}).", "title": "Degrés-jours de dégel", "abstract": "Cumul des degrés-jours pour les jours où la température moyenne quotidienne est au-dessus d'un seuil donné, habituellement 0°C." @@ -521,7 +521,7 @@ "abstract": "Indice de sommation de chaleur pour l'estimation de l'adéquation agroclimatique, développé spécifiquement pour la viticulture. Il prend en compte les Tmin et Tmax quotidiennes avec un seuil de base donné, généralement entre le 1er avril et le 30 septembre, et intègre un calcul de coefficient de longueur de jour pour les latitudes plus élevées. Métrique initialement publiée dans Huglin (1978). Le coefficient de longueur du jour est basé sur Hall & Jones (2010)." }, "FRESHET_START": { - "long_name": "Jour de l'année du début de la crue printanière", + "long_name": "Premier jour où le seuil de température de {thresh} est dépassé pendant au moins {windows} jours", "description": "Jour de l'année du début de la crue printanière, défini comme le premier jour la température moyenne quotidienne est au-dessus de {thresh} pendant au moins {window} jours.", "title": "Jour de l'année du début de la crue printanière", "abstract": "Jour de l'année du début de la crue printanière, défini comme le premier jour où la température moyenne quotidienne est au-dessus d'un seuil donné depuis un certain nombre de jours consécutifs." @@ -641,7 +641,7 @@ "abstract": "Nombre de jours où la précipitation quotidienne est sous un seuil donné." }, "HOT_SPELL_FREQUENCY": { - "long_name": "Nombre de périodes chaudes", + "long_name": "Nombre total de séries d'au moins {window} jours consécutifs ayant une température maximale quotidienne au-dessus de {thresh_tasmax}", "description": "Nombre {freq:m} de périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne est au-dessus de {thresh_tasmax} durant au moins {window} jours.", "title": "Fréquences des périodes chaudes", "abstract": "Nombre de périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne est au-dessus d'un seuil spécifique durant un minimum de jours donné." @@ -653,7 +653,7 @@ "abstract": "Dernier jour où la température minimale quotidienne reste sous un seuil donné durant un certain nombre de jours, limité par une date de calendrier finale." }, "HOT_SPELL_MAX_LENGTH": { - "long_name": "Longueur maximale des périodes chaudes", + "long_name": "Série la plus longue d'au moins {window} jours consécutifs ayant une température maximale quotidienne au-dessus de {thresh_tasmax}.", "description": "Longueur maximale {freq:f} des périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne est au-dessus de {thresh_tasmax} durant au moins {window} jours.", "title": "Longueur maximale des périodes chaudes", "abstract": "Longueur maximale des périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne est au-dessus d'un seuil spécifique durant un minimum de jours." @@ -972,20 +972,20 @@ "FREEZETHAW_SPELL_FREQUENCY": { "title": "Fréquence des périodes des événements consécutifs de gel-dégel", "abstract": "Fréquence des périodes des événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux..", - "description": "Fréquence {freq:f} périodes des événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", - "long_name": "Fréquence périodes des événements consécutifs de gel-dégel" + "description": "Fréquence {freq:f} périodes des événements consécutifs de gel-dégel (températures maximales au-dessus de {thresh_tasmax} et températures minimales en dessous ou égales à {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", + "long_name": "Fréquence des périodes où les températures maximales quotidiennes sont au-dessus de {thresh_tasmax} et les températures minimales quotidiennes sont égales ou en dessous de {thresh_tasmin} pendant au moins {window} jour(s) consécutif(s)" }, "FREEZETHAW_SPELL_MAX_LENGTH": { "title": "Durée maximale des périodes des événements consécutifs de gel-dégel", "abstract": "Durée maximale des périodes des événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux..", - "description": "Durée maximale {freq:f} des périodes des événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", - "long_name": "Durée maximale des périodes des événements consécutifs de gel-dégel" + "description": "Durée maximale {freq:f} des périodes des événements consécutifs de gel-dégel (températures maximales au-dessus de {thresh_tasmax} et températures minimales en dessous ou égales à {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", + "long_name": "Durée maximale des périodes où les températures maximales quotidiennes sont au-dessus de {thresh_tasmax} et les températures minimales quotidiennes sont égales ou en dessous de {thresh_tasmin} pendant au moins {window} jour(s) consécutif(s)" }, "FREEZETHAW_SPELL_MEAN_LENGTH": { "title": "Durée moyenne des périodes des événements consécutifs de gel-dégel", "abstract": "Durée moyenne des périodes des événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux..", - "description": "Durée moyenne {freq:f} des spériodes des événements consécutifs de gel-dégel (Tmax > {thresh_tasmax} et Tmin <= {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", - "long_name": "Durée moyenne des périodes des événements consécutifs de gel-dégel" + "description": "Durée moyenne {freq:f} des spériodes des événements consécutifs de gel-dégel (températures maximales au-dessus de {thresh_tasmax} et températures minimales en dessous ou égales à {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", + "long_name": "Durée moyenne des périodes où les températures maximales quotidiennes sont au-dessus de {thresh_tasmax} et les températures minimales quotidiennes sont égales ou en dessous de {thresh_tasmin} pendant au moins {window} jour(s) consécutif(s)" }, "WIND_CHILL": { "title": "Facteur éolien", diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 83d4bafc2..1216b2ff0 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -100,7 +100,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tn_days_above", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", - long_name="The number of days with minimum temperature above a given threshold", + long_name="The number of days with minimum temperature above {thresh}", description="{freq} number of days where daily minimum temperature exceeds {thresh}.", abstract="The number of days with minimum temperature above a given threshold.", cell_methods="time: sum over days", @@ -113,7 +113,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tn_days_below", units="days", standard_name="number_of_days_with_air_temperature_below_threshold", - long_name="The number of days with minimum temperature below a given threshold", + long_name="The number of days with minimum temperature below {thresh}", description="{freq} number of days where daily minimum temperature is below {thresh}.", abstract="The number of days with minimum temperature below a given threshold.", cell_methods="time: sum over days", @@ -126,7 +126,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tg_days_above", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", - long_name="The number of days with mean temperature above a given threshold", + long_name="The number of days with mean temperature above {thresh}", description="{freq} number of days where daily mean temperature exceeds {thresh}.", abstract="The number of days with mean temperature above a given threshold.", cell_methods="time: sum over days", @@ -139,7 +139,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tg_days_below", units="days", standard_name="number_of_days_with_air_temperature_below_threshold", - long_name="The number of days with mean temperature below a given threshold", + long_name="The number of days with mean temperature below {thresh}", description="{freq} number of days where daily mean temperature is below {thresh}.", abstract="The number of days with mean temperature below a given threshold.", cell_methods="time: sum over days", @@ -152,7 +152,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tx_days_above", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", - long_name="The number of days with maximum temperature above a given threshold", + long_name="The number of days with maximum temperature above {thresh}", description="{freq} number of days where daily maximum temperature exceeds {thresh}.", abstract="The number of days with maximum temperature above a given threshold.", cell_methods="time: sum over days", @@ -165,7 +165,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tx_days_below", units="days", standard_name="number_of_days_with_air_temperature_below_threshold", - long_name="The number of days with maximum temperature below a given threshold", + long_name="The number of days with maximum temperature below {thresh}", description="{freq} number of days where daily max temperature is below {thresh}.", abstract="The number of days with maximum temperature below a given threshold.", cell_methods="time: sum over days", @@ -178,7 +178,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tx_tn_days_above", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", - long_name="Number of days with daily minimum and daily maximum temperatures above given thresholds", + long_name="Number of days with daily minimum above {thresh_tasmin} " + "and daily maximum temperatures above {thresh_tasmax}", description="{freq} number of days where daily maximum temperature exceeds {thresh_tasmax} and minimum temperature " "exceeds {thresh_tasmin}.", abstract="Number of days with daily maximum and minimum temperatures above given thresholds.", @@ -192,7 +193,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="heat_wave_frequency", units="", standard_name="heat_wave_events", - long_name="Number of heat wave events", + long_name="Total number of series of at least {window} consecutive days with daily minimum temperature above " + "{thresh_tasmin} and daily maximum temperature above {thresh_tasmax}", description="{freq} number of heat wave events within a given period. A heat wave occurs when daily minimum and " "maximum temperatures exceed {thresh_tasmin} and {thresh_tasmax}, respectively, over at least {window} days.", abstract="Number of heat waves. A heat wave occurs when daily minimum and maximum temperatures exceed given " @@ -207,7 +209,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="heat_wave_max_length", units="days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", - long_name="Maximum length of heat wave events", + long_name="Longest series of at least {window} consecutive days with daily minimum temperature above " + "{thresh_tasmin} and daily maximum temperature above {thresh_tasmax}", description="{freq} maximum length of heat wave events occurring within a given period. " "A heat wave occurs when daily minimum and maximum temperatures exceed {thresh_tasmin} and {thresh_tasmax}, " "respectively, over at least {window} days.", @@ -223,7 +226,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="heat_wave_total_length", units="days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", - long_name="Total length of heat wave events", + long_name="Total length of events of at least {window} consecutive days with daily minimum temperature above " + "{thresh_tasmin} and daily maximum temperature above {thresh_tasmax}", description="{freq} total length of heat wave events occurring within a given period. " "A heat wave occurs when daily minimum and maximum temperatures exceed {thresh_tasmin} and {thresh_tasmax}, " "respectively, over at least {window} days.", @@ -240,7 +244,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="heat_wave_index", units="days", standard_name="heat_wave_index", - long_name="Number of days that constitute heatwave events", + long_name="Total number of days constituting events of at least {window} consecutive days " + "with daily maximum temperature above {thresh_tasmax}", description="{freq} total number of days that are part of a heatwave within a given period. " "A heat wave occurs when daily maximum temperatures exceed {thresh} over at least {window} days.", abstract="Number of days that constitute heatwave events. A heat wave occurs when daily minimum and maximum " @@ -255,7 +260,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="hot_spell_frequency", units="", standard_name="hot_spell_events", - long_name="Number of hot spell events", + long_name="Total number of series of at least {window} consecutive days " + "with daily maximum temperature above {thresh_tasmax}", description="{freq} number of hot spell events within a given period. A hot spell event occurs when the maximum " "daily temperature exceeds {thresh_tasmax} over at least {window} days.", abstract="Number of hot spells events within a given period. A hot spell occurs when the daily maximum temperature" @@ -270,7 +276,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="hot_spell_max_length", units="days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", - long_name="Maximum length of hot spell events", + long_name="Longest series of at least {window} consecutive days " + "with daily maximum temperature above {thresh_tasmax}", description="{freq} maximum length of hot spell events occurring within a given period. " "A hot spell event occurs when the maximum daily temperature exceeds {thresh_tasmax} over at least {window} days.", abstract="Maximum length of hot spells events within a given period. A hot spell occurs when the daily maximum " @@ -420,8 +427,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="K", standard_name="air_temperature", long_name="Mean diurnal temperature range variability", - description="{freq} mean diurnal temperature range variability (defined as the average day-to-day variation " - "in daily temperature range for the given time period).", + description="{freq} mean diurnal temperature range variability, defined as the average day-to-day variation " + "in daily temperature range for the given time period.", abstract="The average day-to-day variation in daily temperature range.", cell_methods="time range within days time: difference over days time: mean over days", compute=indices.daily_temperature_range_variability, @@ -433,19 +440,20 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="K", standard_name="air_temperature", long_name="Intra-period extreme temperature range", - description="{freq} range between the maximum of daily maximum temperature (tx_max) and the minimum of daily" - "minimum temperature (tn_min).", + description="{freq} range between the maximum of daily maximum temperature and the minimum of daily" + "minimum temperature.", abstract="The maximum of the maximum temperature minus the minimum of the minimum temperature.", compute=indices.extreme_temperature_range, ) cold_spell_duration_index = Temp( - title="Cold spell duration index", + title="Cold Spell Duration Index (CSDI)", identifier="cold_spell_duration_index", var_name="csdi_{window}", units="days", standard_name="cold_spell_duration_index", - long_name="Number of days part of a percentile-defined cold spell", + long_name="Total number of days constituting events of at least {window} consecutive days " + "where the daily minimum temperature is below the {tasmin_per_thresh}th percentile", description="{freq} number of days with at least {window} consecutive days where the daily minimum temperature " "is below the {tasmin_per_thresh}th percentile. A {tasmin_per_window} day(s) window, centred on each calendar day " "in the {tasmin_per_period} period, is used to compute the {tasmin_per_thresh}th percentile(s).", @@ -460,7 +468,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="cold_spell_days", units="days", standard_name="cold_spell_days", - long_name="Number of days part of a cold spell", + long_name="Total number of days constituting events of at least {window} consecutive days " + "where the mean daily temperature is below {thresh}", description="{freq} number of days that are part of a cold spell. A cold spell is defined as {window} or more " "consecutive days with mean daily temperature below {thresh}.", abstract="The number of days that are part of a cold spell. A cold spell is defined as a minimum number of " @@ -474,9 +483,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="cold_spell_frequency", units="", standard_name="cold_spell_frequency", - long_name="Number of cold spell events", + long_name="Total number of series of at least {window} consecutive days " + "where the mean daily temperature is below {thresh}", description="{freq} number cold spell events. A cold spell is defined as a minimum number of " - "consecutive days with mean daily temperature below a given threshold.", + "consecutive days with mean daily temperature below {thresh}.", abstract="The number of cold spell events. A cold spell is defined as a minimum number of consecutive days with " "mean daily temperature below a given threshold.", cell_methods="", @@ -501,9 +511,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): title="Daily freeze-thaw cycles", identifier="dlyfrzthw", units="days", - long_name="Number of days with a freeze-thaw cycle", + long_name="Number of days where maximum daily temperatures are above {thresh_tasmax} " + "and minimum daily temperatures are at or below {thresh_tasmin}", description="{freq} number of days with a diurnal freeze-thaw cycle, where maximum daily temperatures are above " - "{thresh_tasmax} and minimum daily temperatures are at or below {thresh_tasmin}).", + "{thresh_tasmax} and minimum daily temperatures are at or below {thresh_tasmin}.", abstract="The number of days with a freeze-thaw cycle. A freeze-thaw cycle is defined as a day where maximum daily " "temperature is above a given threshold and minimum daily temperature is at or below a given threshold, " "usually 0°C for both.", @@ -524,7 +535,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): title="Freeze-thaw spell frequency", identifier="freezethaw_spell_frequency", units="days", - long_name="Frequency of daily freeze-thaw spells", + long_name="Frequency of events where maximum daily temperatures are above {thresh_tasmax} " + "and minimum daily temperatures are at or below {thresh_tasmin} for at least {window} consecutive day(s).", description="{freq} number of freeze-thaw spells, where maximum daily temperatures are above {thresh_tasmax} " "and minimum daily temperatures are at or below {thresh_tasmin} for at least {window} consecutive day(s).", abstract="Frequency of daily freeze-thaw spells. A freeze-thaw spell is defined as a number of consecutive days " @@ -546,7 +558,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): title="Freeze-thaw spell mean length", identifier="freezethaw_spell_mean_length", units="days", - long_name="Average length of daily freeze-thaw spells", + long_name="Average length of events where maximum daily temperatures are above {thresh_tasmax} " + "and minimum daily temperatures are at or below {thresh_tasmin} for at least {window} consecutive day(s).", description="{freq} average length of freeze-thaw spells, where maximum daily temperatures are above " "{thresh_tasmax} and minimum daily temperatures are at or below {thresh_tasmin} for at least {window} consecutive " "day(s).", @@ -569,7 +582,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): title="Maximal length of freeze-thaw spells", identifier="freezethaw_spell_max_length", units="days", - long_name="Maximal length of freeze-thaw spells", + long_name="Maximal length of events where maximum daily temperatures are above {thresh_tasmax} " + "and minimum daily temperatures are at or below {thresh_tasmin} for at least {window} consecutive day(s).", description="{freq} maximal length of freeze-thaw spells, where maximum daily temperatures are above " "{thresh_tasmax} and minimum daily temperatures are at or below {thresh_tasmin} for at least {window} consecutive " "day(s).", @@ -593,9 +607,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="cooling_degree_days", units="K days", standard_name="integral_of_air_temperature_excess_wrt_time", - long_name="Cooling degree days", + long_name="Cumulative sum of temperature degrees for mean daily temperature above {thresh}", description="{freq} cumulative cooling degree days (mean temperature above {thresh}).", - abstract="The cumulative degree days for days when the average temperature is above a given threshold and " + abstract="The cumulative degree days for days when the mean daily temperature is above a given threshold and " "buildings must be air conditioned.", cell_methods="time: sum over days", compute=indices.cooling_degree_days, @@ -607,9 +621,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="heating_degree_days", units="K days", standard_name="integral_of_air_temperature_deficit_wrt_time", - long_name="Heating degree days", + long_name="Cumulative sum of temperature degrees for mean daily temperature below {thresh}", description="{freq} cumulative heating degree days (mean temperature below {thresh}).", - abstract="The cumulative degree days for days when the average temperature is below a given threshold and " + abstract="The cumulative degree days for days when the mean daily temperature is below a given threshold and " "buildings must be heated.", cell_methods="time: sum over days", compute=indices.heating_degree_days, @@ -621,7 +635,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="growing_degree_days", units="K days", standard_name="integral_of_air_temperature_excess_wrt_time", - long_name="Growing degree days", + long_name="Cumulative sum of temperature degrees for mean daily temperature above {thresh}", description="{freq} growing degree days (mean temperature above {thresh}).", abstract="The cumulative degree days for days when the average temperature is above a given threshold.", cell_methods="time: sum over days", @@ -634,7 +648,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="freezing_degree_days", units="K days", standard_name="integral_of_air_temperature_deficit_wrt_time", - long_name="Freezing degree days", + long_name="Cumulative sum of temperature degrees for mean daily temperature below {thresh}", description="{freq} freezing degree days (mean temperature below {thresh}).", abstract="The cumulative degree days for days when the average temperature is below a given threshold, " "typically 0°C.", @@ -648,7 +662,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="thawing_degree_days", units="K days", standard_name="integral_of_air_temperature_excess_wrt_time", - long_name="Thawing degree days", + long_name="Cumulative sum of temperature degrees for mean daily temperature above {thresh}", description="{freq} thawing degree days (mean temperature above {thresh}).", abstract="The cumulative degree days for days when the average temperature is above a given threshold, " "typically 0°C.", @@ -662,7 +676,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="freshet_start", units="", standard_name="day_of_year", - long_name="Day of year of the spring freshet start", + long_name="First day where temperature threshold of {thresh} is exceeded for at least {window} days", description="Day of year of the spring freshet start, defined as the first day a temperature threshold of {thresh} " "is exceeded for at least {window} days.", abstract="Day of year of the spring freshet start, defined as the first day when the temperature exceeds a certain " From 199e53a2824783174751c9abb5563eedf76772e0 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Fri, 28 Oct 2022 17:29:37 -0400 Subject: [PATCH 093/106] temperature indicators with long_name keys - part 2 --- xclim/data/fr.json | 54 ++++++++++----------- xclim/indicators/atmos/_temperature.py | 66 ++++++++++++++------------ 2 files changed, 63 insertions(+), 57 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index b39ae1ee1..ad4a9606f 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -527,37 +527,37 @@ "abstract": "Jour de l'année du début de la crue printanière, défini comme le premier jour où la température moyenne quotidienne est au-dessus d'un seuil donné depuis un certain nombre de jours consécutifs." }, "FROST_SEASON_LENGTH": { - "long_name": "Durée de la saison de gel", - "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne inférieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne au-dessus ou égale au point de congélation après {mid_date}.", + "long_name": "Nombre de jours entre la première occurrence d'au moins {fenêtre} jours consécutifs avec une température minimale quotidienne en dessous de {thresh} et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne au-dessus ou égale à {thresh} après {mid_date}", + "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne sous {thresh} et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne au-dessus ou égale à {thresh} après {mid_date}.", "title": "Durée de la saison de gel", "abstract": "Durée de la saison de gel, définie comme la période pendant laquelle la température minimale quotidienne est inférieure à 0°C sans fenêtre de dégel de plusieurs jours, le dégel se produisant après une date du calendrier médiane." }, "FROST_DAYS": { - "long_name": "Nombre de jours de gel", + "long_name": "Nombre de jours où la température minimale quotidienne est sous {thresh}", "description": "Nombre {freq:m} de jours où la température minimale quotidienne est sous {thresh}.", "title": "Nombre de jours de gel", "abstract": "Nombre de jours où la température minimale quotidienne est sous un seuil donné." }, "ICE_DAYS": { - "long_name": "Nombre de jours de glace", + "long_name": "Nombre de jours où la température maximale quotidienne est sous {thresh}.", "description": "Nombre {freq:m} de jours où la température maximale quotidienne est sous {thresh}.", "title": "Nombre de jours de glace", "abstract": "Nombre de jours où la température maximale quotidienne est sous 0°C." }, "CONSECUTIVE_FROST_DAYS": { - "long_name": "Nombre maximal de jours de gel consécutifs", + "long_name": "Nombre maximal de jours consécutifs où la température minimale quotidienne est en dessous de {thresh}", "description": "Durée maximale {freq:f} des périodes où la température minimale quotidienne est sous {thresh}.", "title": "Nombre maximal de jours de gel consécutifs", "abstract": "Durée maximale des périodes consécutives où la température minimale quotidienne est sous un seuil donné." }, "FROST_FREE_SEASON_LENGTH": { - "long_name": "Durée de la saison sans gel", - "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quoditienne supérieure au point de congélation et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne inférieure au point de congélation après {mid_date}.", + "long_name": "Nombre de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne au-dessus ou égale à {thresh} et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne sous {thresh} après {mid_date}", + "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne au-dessus ou égale à {thresh} et la première occurrence d'au moins {window} jours consécutifs ayant une température minimale quotidienne sous {thresh} après {mid_date}.", "title": "Durée de la saison sans gel", "abstract": "Durée de la saison sans gel, définie comme la période pendant laquelle la température minimale quotidienne est au-dessus de 0°C sans fenêtre de gel de plusieurs jours, le gel se produisant après une date du calendrier médiane." }, "FROST_FREE_SEASON_START": { - "long_name": "Premier jour ayant un dépassement constant du seuil de température", + "long_name": "Premier jour suivant une période de {window} jours ayant une température minimale quotidienne au-dessus ou égale à {thresh}", "description": "Jour de l'année du début de la saison sans gel, défini comme le {window}e jour consécutif où la température minimale quotidienne est au-dessus {thresh}.", "title": "Jour de l'année du début de la saison sans gel", "abstract": "Premier jour où la température minimale quotidienne est au-dessus un seuil donné depuis un certain nombre de jours consécutifs." @@ -566,11 +566,11 @@ "long_name": "Durée de la saison de croissance", "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs où la température moyenne quotidienne dépasse {thresh} et la première occurrence d'au moins {window} jours consécutifs où la température est sous {thresh} après le {mid_date}.", "title": "Durée de la saison de croissance", - "abstract": "Nombre de jours entre la première occurrence d'une série de jours avec une température moyenne quotidienne au-dessus d'un seuil et la première occurrence d'une série de jours avec une température moyenne quotidienne sous ce même seuil, survenant après une date de calendrier donnée." + "abstract": "Nombre de jours entre la première occurrence d'une série de jours ayant une température moyenne quotidienne au-dessus d'un seuil et la première occurrence d'une série de jours avec une température moyenne quotidienne sous ce même seuil, survenant après une date de calendrier donnée." }, "GROWING_SEASON_START": { - "long_name": "Premier jour ayant un dépassement constant du seuil de température", - "description": "Jour de l’année marquant le début de la saison de croissance, défini comme le premier jour de la première série de {window} jours ayant une température au-dessus ou égale à {thresh}", + "long_name": "Premier jour de la première série de {window} jours dont la température moyenne quotidienne est égale ou au-dessus de {thresh}", + "description": "Jour de l’année marquant le début de la saison de croissance, défini comme le premier jour de la première série de {window} jours ayant une température moyenne quotidienne au-dessus ou égale à {thresh}", "title": "Jour de l'année du début de la saison de croissance", "abstract": "Premier jour où la température moyenne quotidienne est au-dessus d'un seuil donné depuis un certain nombre de jours consécutifs." }, @@ -647,7 +647,7 @@ "abstract": "Nombre de périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne est au-dessus d'un seuil spécifique durant un minimum de jours donné." }, "LAST_SPRING_FROST": { - "long_name": "Jour de l'année du dernier gel printanier", + "long_name": "Dernier jour de température minimale quotidienne en dessous d'un seuil de {thresh} pendant au moins {window} jours avant une date donnée ({before_date})", "description": "Jour de l'année du dernier gel printanier, défini comme le dernier jour où la température minimale quotidienne reste sous {thresh} durant au moins {window} jours avant une certaine date ({before_date}).", "title": "Jour de l'année du dernier gel printanier", "abstract": "Dernier jour où la température minimale quotidienne reste sous un seuil donné durant un certain nombre de jours, limité par une date de calendrier finale." @@ -659,7 +659,7 @@ "abstract": "Longueur maximale des périodes chaudes durant une période donnée. Une période chaude se produit lorsque la température maximale quotidienne est au-dessus d'un seuil spécifique durant un minimum de jours." }, "CONSECUTIVE_FROST_FREE_DAYS": { - "long_name": "Nombre maximal de jours consécutifs ayant une température minimale supérieure à 0°C", + "long_name": "Nombre maximal de jours consécutifs ayant une température minimale au-dessus ou égale à {thresh}", "description": "Nombre maximal {freq:m} de jours consécutifs où la température minimale quotidienne est au-dessus ou égale à {thresh}.", "title": "Nombre maximal de jours consécutifs sans gel", "abstract": "Nombre maximal de jours consécutifs sans gel où la température minimale quotidienne est au-dessus ou égale à 0°C." @@ -671,8 +671,8 @@ "abstract": "Le premier jour où la température moyenne quotidienne est sous un seuil donné pendant un certain nombre de jours consécutifs après une date de calendrier donnée." }, "FROST_FREE_SEASON_END": { - "long_name": "Jour de l'année de la fin de la saison sans gel", - "description": "Jour de l'année de la fin de la saison sans gel. La saison sans gel est définie comme l'intervalle entre la première série de {window} jours où la température minimale quotidienne est sous {thresh} et la première série (après le {mid_date}) de {window} jours où elle est sous {thresh}.", + "long_name": "Premier jour, après {mid_date}, suivant une période de {window} jours ayant une température minimale quotidienne sous {thresh}", + "description": "Jour de l'année de la fin de la saison sans gel. La saison sans gel est définie comme l'intervalle entre la première série de {window} jours où la température minimale quotidienne est au-dessus ou égale à {thresh} et la première série (après le {mid_date}) de {window} jours où elle est sous {thresh}.", "title": "Fin de la saison sans gel", "abstract": "Premier jour où la température minimale quotidienne est sous un seuil donné depuis un certain nombre de jours consécutifs." }, @@ -766,20 +766,20 @@ "abstract": "Calcule le premier jour d'une période où la température moyenne quotidienne est sous un seuil donné pendant un nombre de jours, après une date de calendrier donnée." }, "FIRST_DAY_TG_BELOW": { - "long_name": "Premier jour de l'année avec une température moyenne quotidienne sous {thresh}", - "description": "Premier jour de l'année avec une température moyenne quotidienne sous {thresh} pour au moins {window} jours.", + "long_name": "Premier jour de l'année avec une température moyenne quotidienne sous {thresh} durant au moins {window} jours", + "description": "Premier jour de l'année avec une température moyenne quotidienne sous {thresh} durant au moins {window} jours.", "title": "Premier jour de l'année de températures moyennes quotidiennes sous un seuil", "abstract": "Calcule le premier jour d'une période où la température moyenne quotidienne est plus basse qu'un certain seuil durant un nombre de jours donné, limité par une date minimale." }, "FIRST_DAY_TN_BELOW": { - "long_name": "Premier jour de l'année avec une température minimale quotidienne sous {thresh}", - "description": "Premier jour de l'année avec une température minimale quotidienne sous {thresh} pour au moins {window} jours.", + "long_name": "Premier jour de l'année avec une température minimale quotidienne sous {thresh} durant au moins {window} jours", + "description": "Premier jour de l'année avec une température minimale quotidienne sous {thresh} durant au moins {window} jours.", "title": "Premier jour de l'année de températures minimales quotidiennes sous un seuil", "abstract": "Calcule le premier jour d'une période où la température minimale quotidienne est plus basse qu'un certain seuil durant un nombre de jours donné, limité par une date minimale." }, "FIRST_DAY_TX_BELOW": { - "long_name": "Premier jour de l'année avec une température maximale quotidienne sous {thresh}", - "description": "Premier jour de l'année avec une température maximale quotidienne sous {thresh} pour au moins {window} jours.", + "long_name": "Premier jour de l'année avec une température maximale quotidienne sous {thresh} durant au moins {window} jours", + "description": "Premier jour de l'année avec une température maximale quotidienne sous {thresh} durant au moins {window} jours.", "title": "Premier jour de l'année de températures maximales quotidiennes sous un seuil", "abstract": "Calcule le premier jour d'une période où la température maximale quotidienne est plus basse qu'un certain seuil durant un nombre de jours donné, limité par une date minimale." }, @@ -790,20 +790,20 @@ "abstract": "Calcule le premier jour d'une période où la température quotidienne est au-dessus d'un seuil donné pendant un nombre de jours, après une date de calendrier donnée." }, "FIRST_DAY_TG_ABOVE": { - "long_name": "Premier jour de l'année avec une température moyenne quotidienne au-dessus de {thresh}", - "description": "Premier jour de l'année avec une température moyenne quotidienne au-dessus de {thresh} pour au moins {window} jours.", + "long_name": "Premier jour de l'année avec une température moyenne quotidienne au-dessus de {thresh} durant au moins {window} jours", + "description": "Premier jour de l'année avec une température moyenne quotidienne au-dessus de {thresh} durant au moins {window} jours.", "title": "Premier jour de l'année de températures moyennes quotidiennes au-dessus d'un seuil", "abstract": "Calcule le premier jour d'une période où la température moyenne quotidienne est plus élevée qu'un certain seuil durant un nombre de jours donné, limité par une date minimale." }, "FIRST_DAY_TN_ABOVE": { - "long_name": "Premier jour de l'année avec une température minimale quotidienne au-dessus de {thresh}", - "description": "Premier jour de l'année avec une température minimale quotidienne au-dessus de {thresh} pour au moins {window} jours.", + "long_name": "Premier jour de l'année avec une température minimale quotidienne au-dessus de {thresh} durant au moins {window} jours", + "description": "Premier jour de l'année avec une température minimale quotidienne au-dessus de {thresh} durant au moins {window} jours.", "title": "Premier jour de l'année de températures minimales quotidiennes au-dessus d'un seuil", "abstract": "Calcule le premier jour d'une période où la température minimale quotidienne est plus élevée qu'un certain seuil durant un nombre de jours donné, limité par une date minimale." }, "FIRST_DAY_TX_ABOVE": { - "long_name": "Premier jour de l'année avec une température maximale quotidienne au-dessus de {thresh}", - "description": "Premier jour de l'année avec une température maximale quotidienne au-dessus de {thresh} pour au moins {window} jours.", + "long_name": "Premier jour de l'année avec une température maximale quotidienne au-dessus de {thresh} durant au moins {window} jours", + "description": "Premier jour de l'année avec une température maximale quotidienne au-dessus de {thresh} durant au moins {window} jours.", "title": "Premier jour de l'année de températures maximales quotidiennes au-dessus d'un seuil", "abstract": "Calcule le premier jour d'une période où la température maximale quotidienne est plus élevée qu'un certain seuil durant un nombre de jours donné, limité par une date minimale." }, diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 1216b2ff0..e0973adf6 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -690,9 +690,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="frost_days", units="days", standard_name="days_with_air_temperature_below_threshold", - long_name="Number of frost days", + long_name="Number of days where the daily minimum temperature is below {thresh}", description="{freq} number of days where the daily minimum temperature is below {thresh}.", - abstract="Number of days where the daily minimum temperature is below a given threshold", + abstract="Number of days where the daily minimum temperature is below a given threshold.", cell_methods="time: sum over days", compute=indices.frost_days, ) @@ -702,12 +702,14 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="frost_season_length", units="days", standard_name="days_with_air_temperature_below_threshold", - long_name="Length of the frost season", + long_name="Number of days between the first occurrence of at least {window} consecutive days with " + "minimum daily temperature below {thresh} and the first occurrence of at least {window} consecutive days with " + "minimum daily temperature at or above {thresh} after {mid_date}", description="{freq} number of days between the first occurrence of at least {window} consecutive days with " - "minimum daily temperature below freezing and the first occurrence of at least {window} consecutive days with " - "minimum daily temperature above freezing after {mid_date}.", + "minimum daily temperature below {thresh} and the first occurrence of at least {window} consecutive days with " + "minimum daily temperature at or above {thresh} after {mid_date}.", abstract="Duration of the freezing season, defined as the period when the daily minimum temperature is below 0°C " - "without a thawing window of days, with the thaw occurring after a median calendar date", + "without a thawing window of days, with the thaw occurring after a median calendar date.", cell_methods="time: sum over days", compute=indices.frost_season_length, parameters={"thresh": {"default": "0 degC"}}, @@ -718,7 +720,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="last_spring_frost", units="", standard_name="day_of_year", - long_name="Day of year of last spring frost", + long_name="Last day of minimum daily temperature below a threshold of {thresh} " + "for at least {window} days before a given date ({before_date})", description="Day of year of last spring frost, defined as the last day a minimum temperature " "remains below a threshold of {thresh} for at least {window} days before a given date ({before_date}).", abstract="The last day when temperature is below a given threshold for a certain number of days, " @@ -748,7 +751,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="first_day_tn_below", units="", standard_name="day_of_year", - long_name="First day of year with minimum temperature below {thresh}", + long_name="First day of year with a period of at least {window} days of minimum temperature below {thresh}", description="First day of year with minimum temperature below {thresh} for at least {window} days.", compute=indices.first_day_temperature_below, input=dict(tas="tasmin"), @@ -763,7 +766,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="first_day_tg_below", units="", standard_name="day_of_year", - long_name="First day of year with mean temperature below {thresh}", + long_name="First day of year with a period of at least {window} days of mean temperature below {thresh}", description="First day of year with mean temperature below {thresh} for at least {window} days.", compute=indices.first_day_temperature_below, parameters=dict( @@ -777,7 +780,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="first_day_tx_below", units="", standard_name="day_of_year", - long_name="First day of year with maximum temperature below {thresh}", + long_name="First day of year with a period of at least {window} days of maximum temperature below {thresh}", description="First day of year with maximum temperature below {thresh} for at least {window} days.", compute=indices.first_day_temperature_below, input=dict(tas="tasmax"), @@ -808,7 +811,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="first_day_tn_above", units="", standard_name="day_of_year", - long_name="First day of year with minimum temperature above {thresh}", + long_name="First day of year with a period of at least {window} days of minimum temperature above {thresh}", description="First day of year with minimum temperature above {thresh} for at least {window} days.", compute=indices.first_day_temperature_above, input=dict(tas="tasmin"), @@ -824,7 +827,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="first_day_tg_above", units="", standard_name="day_of_year", - long_name="First day of year with mean temperature above {thresh}", + long_name="First day of year with a period of at least {window} days of mean temperature above {thresh}", description="First day of year with mean temperature above {thresh} for at least {window} days.", compute=indices.first_day_temperature_above, parameters=dict( @@ -838,7 +841,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="first_day_tx_above", units="", standard_name="day_of_year", - long_name="First day of year with maximum temperature above {thresh}", + long_name="First day of year with a period of at least {window} days of maximum temperature above {thresh}", description="First day of year with maximum temperature above {thresh} for at least {window} days.", compute=indices.first_day_temperature_above, input=dict(tas="tasmax"), @@ -854,7 +857,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="ice_days", standard_name="days_with_air_temperature_below_threshold", units="days", - long_name="Number of ice days", + long_name="Number of days with maximum daily temperature below {thresh}", description="{freq} number of days where the maximum daily temperature is below {thresh}.", abstract="Number of days where the daily maximum temperature is below 0°C", cell_methods="time: sum over days", @@ -866,7 +869,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="consecutive_frost_days", units="days", standard_name="spell_length_of_days_with_air_temperature_below_threshold", - long_name="Maximum number of consecutive frost days", + long_name="Maximum number of consecutive days where minimum daily temperature is below {thresh}", description="{freq} maximum number of consecutive days where minimum daily temperature is below {thresh}.", abstract="Maximum number of consecutive days where the daily minimum temperature is below 0°C", cell_methods="time: maximum over days", @@ -879,12 +882,14 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="frost_free_season_length", units="days", standard_name="days_with_air_temperature_above_threshold", - long_name="Length of the frost free season", + long_name="Number of days between the first occurrence of at least {window} consecutive days " + "with minimum daily temperature at or above {thresh} and the first occurrence of at least " + "{window} consecutive days with minimum daily temperature below {thresh} after {mid_date}", description="{freq} number of days between the first occurrence of at least {window} consecutive days " - "with minimum daily temperature above or at the freezing point and the first occurrence of at least " - "{window} consecutive days with minimum daily temperature below freezing after {mid_date}.", - abstract="Duration of the frost free season, defined as the period when the daily minimum temperature is above 0°C " - "without a freezing window of days, with freezing occurring after a median calendar date.", + "with minimum daily temperature at or above {thresh} and the first occurrence of at least " + "{window} consecutive days with minimum daily temperature below {thresh} after {mid_date}.", + abstract="Duration of the frost free season, defined as the period when the minimum daily temperature is above 0°C " + "without a freezing window of `N` days, with freezing occurring after a median calendar date.", cell_methods="time: sum over days", compute=indices.frost_free_season_length, parameters={"thresh": {"default": "0 degC"}}, @@ -895,10 +900,10 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="frost_free_season_start", units="", standard_name="day_of_year", - long_name="Day of year of frost free season start", + long_name="First day following a period of {window} days with minimum daily temperature at or above {thresh}", description="Day of the year of the beginning of the frost-free season, defined as the {window}th consecutive day " - "when the temperature exceeds {thresh}.", - abstract="First day when the temperature exceeds a given threshold for a given number of consecutive days", + "when minimum daily temperature exceeds {thresh}.", + abstract="First day when minimum daily temperature exceeds a given threshold for a given number of consecutive days", compute=indices.frost_free_season_start, parameters={"thresh": {"default": "0 degC"}}, ) @@ -908,10 +913,11 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="frost_free_season_end", units="", standard_name="day_of_year", - long_name="Day of year of frost free season end", + long_name="First day, after {mid_date}, following a period of {window} days " + "with minimum daily temperature below {thresh}", description="Day of the year of the end of the frost-free season, defined as the interval between the first set of " - "{window} days when the daily temperature is above {thresh} and the first set (after {mid_date}) of {window} days " - "when it is below {thresh}.", + "{window} days when the minimum daily temperature is at or above {thresh} " + "and the first set (after {mid_date}) of {window} days when it is below {thresh}.", abstract="First day when the temperature is below a given threshold for a given number of consecutive days after " "a median calendar date.", cell_methods="", @@ -925,8 +931,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="consecutive_frost_free_days", units="days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", - long_name="Maximum number of consecutive days with Tmin at or above 0°C", - description="{freq} maximum number of consecutive days with minimum daily temperature above or equal to {thresh}.", + long_name="Maximum number of consecutive days with minimum temperature at or above {thresh}", + description="{freq} maximum number of consecutive days with minimum daily temperature at or above {thresh}.", abstract="Maximum number of consecutive frost-free days: where the daily minimum temperature is above " "or equal to 0°C", cell_methods="time: maximum over days", @@ -939,9 +945,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="growing_season_start", units="", standard_name="day_of_year", - long_name="Day of year of growing season start", + long_name="First day of the first series of {window} days with mean daily temperature above or equal to {thresh}", description="Day of the year marking the beginning of the growing season, defined as the first day of the first " - "series of {window} days with a temperature above or equal to {thresh}.", + "series of {window} days with mean daily temperature above or equal to {thresh}.", abstract="The first day when the temperature exceeds a certain threshold for a given number of consecutive days.", cell_methods="", compute=indices.growing_season_start, From 271aa81270d5cb0ba675db08562197535055565a Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 31 Oct 2022 11:06:33 -0400 Subject: [PATCH 094/106] field order, minor typos, degree-days indicators --- xclim/data/fr.json | 154 ++++++++++++------------- xclim/indicators/atmos/_temperature.py | 29 ++--- xclim/indices/_threshold.py | 8 +- 3 files changed, 97 insertions(+), 94 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index ad4a9606f..9813545f7 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -563,20 +563,20 @@ "abstract": "Premier jour où la température minimale quotidienne est au-dessus un seuil donné depuis un certain nombre de jours consécutifs." }, "GROWING_SEASON_LENGTH": { - "long_name": "Durée de la saison de croissance", - "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs où la température moyenne quotidienne dépasse {thresh} et la première occurrence d'au moins {window} jours consécutifs où la température est sous {thresh} après le {mid_date}.", + "long_name": "Nombre de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température moyenne quotidienne au-dessus de {fourchette} et la première occurrence d'au moins {window} jours consécutifs ayant une température moyenne quotidienne sous {thresh}, survenant après {mid_date}", + "description": "Nombre {freq:m} de jours entre la première occurrence d'au moins {window} jours consécutifs ayant une température moyenne quotidienne au-dessus de {thresh} et la première occurrence d'au moins {window} jours consécutifs ayant une température moyenne quotidienne est sous {thresh}, survenant après {mid_date}.", "title": "Durée de la saison de croissance", "abstract": "Nombre de jours entre la première occurrence d'une série de jours ayant une température moyenne quotidienne au-dessus d'un seuil et la première occurrence d'une série de jours avec une température moyenne quotidienne sous ce même seuil, survenant après une date de calendrier donnée." }, "GROWING_SEASON_START": { - "long_name": "Premier jour de la première série de {window} jours dont la température moyenne quotidienne est égale ou au-dessus de {thresh}", + "long_name": "Premier jour de la première série de {window} jours ayant une température moyenne quotidienne égale ou au-dessus de {thresh}", "description": "Jour de l’année marquant le début de la saison de croissance, défini comme le premier jour de la première série de {window} jours ayant une température moyenne quotidienne au-dessus ou égale à {thresh}", "title": "Jour de l'année du début de la saison de croissance", "abstract": "Premier jour où la température moyenne quotidienne est au-dessus d'un seuil donné depuis un certain nombre de jours consécutifs." }, "TROPICAL_NIGHTS": { - "long_name": "Nombre de nuits tropicales", - "description": "Nombre {freq:m} de nuits tropicales : définies comme des jours avec une température minimale quotidienne au-dessus de {thresh}.", + "long_name": "Nombre de jours où la température minimale quotidienne est au-dessus de {thresh}", + "description": "Nombre {freq:m} de nuits tropicales, définies comme des jours ayant une température minimale quotidienne au-dessus de {thresh}.", "title": "Nombre de nuits tropicales", "abstract": "Nombre de jours où la température minimale quotidienne est au-dessus d'un seuil donné." }, @@ -665,7 +665,7 @@ "abstract": "Nombre maximal de jours consécutifs sans gel où la température minimale quotidienne est au-dessus ou égale à 0°C." }, "GROWING_SEASON_END": { - "long_name": "Jour de l'année de la fin de la saison de croissance", + "long_name": "Premier jour de la première série de {window} jours ayant une température journalière moyenne sous {thresh}, survenant après {mid_date}", "description": "Jour de l'année de la fin de la saison de croissance, défini comme le premier jour après {mid_date} ayant une température moyenne quotidienne au-dessus ou égale à {thresh} après une série de {window} jours ayant une température moyenne quotidienne sous {thresh}.", "title": "Fin de la saison de croissance", "abstract": "Le premier jour où la température moyenne quotidienne est sous un seuil donné pendant un certain nombre de jours consécutifs après une date de calendrier donnée." @@ -808,10 +808,10 @@ "abstract": "Calcule le premier jour d'une période où la température maximale quotidienne est plus élevée qu'un certain seuil durant un nombre de jours donné, limité par une date minimale." }, "DEGREE_DAYS_EXCEEDANCE_DATE": { - "long_name": "Premier jour de l'année où la somme des degrés-jours est au-dessus d'un seuil donné", - "description": "Premier jour de l'année où la somme des degrés-jours (température moyenne quotidienne {op} {thresh}) est au-dessus de {sum_thresh}, avec la somme cumulative à partir de {start_date}.", + "long_name": "Premier jour de l'année où l'intégral de la température moyenne quotidienne {op} {thresh} est au-dessus de {sum_thresh}, avec la somme cumulative à partir de {after_date}", + "description": "Premier jour de l'année où l'intégral des degrés-jours (ou température moyenne quotidienne {op} {thresh}) est au-dessus de {sum_thresh}, avec la somme cumulative à partir de {after_date}.", "title": "Jour du dépassement des degrés-jours", - "abstract": "Jour de l'année où la somme des degrés-jours est au-dessus d'un seuil donné. Les degrés-jours sont calculés au-dessus ou en dessous d'un seuil de température donné." + "abstract": "Jour de l'année où la somme des degrés-jours est au-dessus d'un seuil donné, survenant après une date donnée. Les degrés-jours sont calculés au-dessus ou en dessous d'un seuil de température donné." }, "PRSN": { "long_name": "Précipitation solide (méthode \"{methode}\" avec une température égale ou inférieure à {thresh})", @@ -946,22 +946,22 @@ "description": "Le ratio {freq:m} entre la précipitation liquide et la précipitation totale. La précipitation liquide est approximée par la précipitation lorsque la température est au-dessus de {thresh}." }, "WARM_SPELL_DURATION_INDEX": { + "long_name": "Nombre de jours faisant partie d'une vague de chaleur définie par un centile", "title": "Indice de durée des vagues de chaleur", "abstract": "Nombre de jours consécutifs plus grand qu'un nombre de jours minimal donnée et ayant une température maximale quotidienne plus grande qu'un centile donné. Le seuil de centile des températures doit être calculé avec une fenêtre mobile d'un nombre de jours donné.", - "description": "Nombre de jours avec au moins {window} jours consécutifs où la température maximale quotidienne est au-dessus ou égale au(x) {tasmax_per_thresh}e centile(s). Une fenêtre de {tasmax_per_window} jour(s), centrée sur chaque jour du calendrier de la période {tasmax_per_period}, est utilisée pour calculer le(s) {tasmax_per_thresh}e(s) centile(s).", - "long_name": "Nombre de jours faisant partie d'une vague de chaleur définie par un centile" + "description": "Nombre de jours avec au moins {window} jours consécutifs où la température maximale quotidienne est au-dessus ou égale au(x) {tasmax_per_thresh}e centile(s). Une fenêtre de {tasmax_per_window} jour(s), centrée sur chaque jour du calendrier de la période {tasmax_per_period}, est utilisée pour calculer le(s) {tasmax_per_thresh}e(s) centile(s)." }, "MAXIMUM_CONSECUTIVE_WARM_DAYS": { - "title": "Nombre maximal de jours chauds consécutifs", - "abstract": "Nombre maximal de jours consécutifs où la température maximale quotidienne est au-dessus d'un seuil donné.", + "long_name": "Nombre maximal de jours chauds consécutifs", "description": "Nombre {freq:m} maximal de jours chauds consécutifs (température maximale quotidienne > {thresh}).", - "long_name": "Nombre maximal de jours chauds consécutifs" + "title": "Nombre maximal de jours chauds consécutifs", + "abstract": "Nombre maximal de jours consécutifs où la température maximale quotidienne est au-dessus d'un seuil donné." }, "FIRE_SEASON": { - "title": "Saison des incendies", - "abstract": "Masque binaire de la saison des incendies, défini selon des conditions de températures quotidiennes consécutives et, optionnellement, d'épaisseurs du couvert de neige.", + "long_name": "Saison des incendies", "description": "Masque de la saison des incendies, calculé selon la méthode {method}", - "long_name": "Saison des incendies" + "title": "Saison des incendies", + "abstract": "Masque binaire de la saison des incendies, défini selon des conditions de températures quotidiennes consécutives et, optionnellement, d'épaisseurs du couvert de neige." }, "CORN_HEAT_UNITS": { "title": "Unités thermiques maïs", @@ -970,110 +970,108 @@ "long_name": "Unités thermiques maïs (Tmin > {thresh_tasmin} et Tmax > {thresh_tasmax})" }, "FREEZETHAW_SPELL_FREQUENCY": { - "title": "Fréquence des périodes des événements consécutifs de gel-dégel", - "abstract": "Fréquence des périodes des événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux..", + "long_name": "Fréquence des périodes où les températures maximales quotidiennes sont au-dessus de {thresh_tasmax} et les températures minimales quotidiennes sont égales ou en dessous de {thresh_tasmin} pendant au moins {window} jour(s) consécutif(s)", "description": "Fréquence {freq:f} périodes des événements consécutifs de gel-dégel (températures maximales au-dessus de {thresh_tasmax} et températures minimales en dessous ou égales à {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", - "long_name": "Fréquence des périodes où les températures maximales quotidiennes sont au-dessus de {thresh_tasmax} et les températures minimales quotidiennes sont égales ou en dessous de {thresh_tasmin} pendant au moins {window} jour(s) consécutif(s)" + "title": "Fréquence des périodes des événements consécutifs de gel-dégel", + "abstract": "Fréquence des périodes des événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux." }, "FREEZETHAW_SPELL_MAX_LENGTH": { - "title": "Durée maximale des périodes des événements consécutifs de gel-dégel", - "abstract": "Durée maximale des périodes des événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux..", + "long_name": "Durée maximale des périodes où les températures maximales quotidiennes sont au-dessus de {thresh_tasmax} et les températures minimales quotidiennes sont égales ou en dessous de {thresh_tasmin} pendant au moins {window} jour(s) consécutif(s)", "description": "Durée maximale {freq:f} des périodes des événements consécutifs de gel-dégel (températures maximales au-dessus de {thresh_tasmax} et températures minimales en dessous ou égales à {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", - "long_name": "Durée maximale des périodes où les températures maximales quotidiennes sont au-dessus de {thresh_tasmax} et les températures minimales quotidiennes sont égales ou en dessous de {thresh_tasmin} pendant au moins {window} jour(s) consécutif(s)" + "title": "Durée maximale des périodes des événements consécutifs de gel-dégel", + "abstract": "Durée maximale des périodes des événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux." }, "FREEZETHAW_SPELL_MEAN_LENGTH": { - "title": "Durée moyenne des périodes des événements consécutifs de gel-dégel", - "abstract": "Durée moyenne des périodes des événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux..", + "long_name": "Durée moyenne des périodes où les températures maximales quotidiennes sont au-dessus de {thresh_tasmax} et les températures minimales quotidiennes sont égales ou en dessous de {thresh_tasmin} pendant au moins {window} jour(s) consécutif(s)", "description": "Durée moyenne {freq:f} des spériodes des événements consécutifs de gel-dégel (températures maximales au-dessus de {thresh_tasmax} et températures minimales en dessous ou égales à {thresh_tasmin} pour au moins {window} jour(s) consécutif(s)).", - "long_name": "Durée moyenne des périodes où les températures maximales quotidiennes sont au-dessus de {thresh_tasmax} et les températures minimales quotidiennes sont égales ou en dessous de {thresh_tasmin} pendant au moins {window} jour(s) consécutif(s)" + "title": "Durée moyenne des périodes des événements consécutifs de gel-dégel", + "abstract": "Durée moyenne des périodes des événements consécutifs de gel-dégel. Une période de gel-dégel est définie comme un nombre de jours consécutifs où les températures maximales quotidiennes sont au-dessus d'un seuil donné et les températures minimales quotidiennes sont en dessous ou égales à un seuil donné, généralement 0°C pour les deux." }, "WIND_CHILL": { - "title": "Facteur éolien", - "abstract": "Le facteur éolien est un indice qui équivaut à la sensation du froid par un individu moyen. Il est calculé à partir de la température et de la vitesse du vent à 10 m. Tel que définit par Environnement et Changement Climatique Canada, une seconde formule est utilisée pour les vents faibles. La formule standard est sinon la même qu'utilisée aux États-Unis.", + "long_name": "Indice de facteur éolien", "description": "L'indice de refroiddissement éolien, équivalent à la température ressentie due au vent par un individu moyen.", - "long_name": "Indice de facteur éolien" + "title": "Facteur éolien", + "abstract": "Le facteur éolien est un indice qui équivaut à la sensation du froid par un individu moyen. Il est calculé à partir de la température et de la vitesse du vent à 10 m. Tel que définit par Environnement et Changement Climatique Canada, une seconde formule est utilisée pour les vents faibles. La formule standard est sinon la même qu'utilisée aux États-Unis." }, "HUMIDEX": { - "title": "Indice humidex", - "abstract": "L'indice humidex décrit la température ressentie par une personne lorsqu'on tient compte de l'humidité relative. Il peut être interpreté comme la température équivalente ressentie lorsque l'air est sec.", + "long_name": "indice humidex", "description": "Indice humidex décrivant la température ressentie par une personne en réponse à l'humidité relative.", - "long_name": "indice humidex" + "title": "Indice humidex", + "abstract": "L'indice humidex décrit la température ressentie par une personne lorsqu'on tient compte de l'humidité relative. Il peut être interpreté comme la température équivalente ressentie lorsque l'air est sec." }, "HEAT_INDEX": { - "title": "Indice de chaleur", - "abstract": "L'indice de chaleur est une estimation de la température ressentie par une personne à l'ombre lorsqu'on tient compte de l'humidité relative.", + "long_name": "Indice de chaleur", "description": "Température ressentie estimée avec l'humidité relative et la température ambiante.", - "long_name": "Indice de chaleur" + "title": "Indice de chaleur", + "abstract": "L'indice de chaleur est une estimation de la température ressentie par une personne à l'ombre lorsqu'on tient compte de l'humidité relative." }, "POTENTIAL_EVAPOTRANSPIRATION": { - "title": "Évapotranspiration potentielle", - "abstract": "Le potentiel d'évaporation de l'eau du sol et de transpiration par les plantes si l'approvisionnement en eau est suffisant, avec une méthode donnée.", + "long_name": "Évapotranspiration potentielle (méthode \"{methode}\")", "description": "Le potentiel d'évaporation de l'eau du sol et de transpiration par les plantes si l'approvisionnement en eau est suffisant, avec la méthode de {method}.", - "long_name": "Évapotranspiration potentielle (méthode \"{methode}\")" + "title": "Évapotranspiration potentielle", + "abstract": "Le potentiel d'évaporation de l'eau du sol et de transpiration par les plantes si l'approvisionnement en eau est suffisant, avec une méthode donnée." }, "WATER_BUDGET_FROM_TAS": { - "title": "Bilan hydrique", - "abstract": "Précipitations moins l'évapotranspiration potentielle en tant que mesure approximative d'un bilan hydrique de surface, où l'évapotranspiration potentielle est calculée avec une méthode donnée.", + "long_name": "Bilan hydrique (méthode \"{methode}\")", "description": "Précipitations moins l'évapotranspiration potentielle en tant que mesure approximative d'un bilan hydrique de surface, où l'évapotranspiration potentielle est calculée avec la méthode {method}.", - "long_name": "Bilan hydrique (méthode \"{methode}\")" + "title": "Bilan hydrique", + "abstract": "Précipitations moins l'évapotranspiration potentielle en tant que mesure approximative d'un bilan hydrique de surface, où l'évapotranspiration potentielle est calculée avec une méthode donnée." }, "WATER_BUDGET": { - "title": "Bilan hydrique", - "abstract": "Précipitations moins l'évapotranspiration potentielle en tant que mesure approximative d'un bilan hydrique de surface.", + "long_name": "Bilan hydrique", "description": "Précipitations moins l'évapotranspiration potentielle en tant que mesure approximative d'un bilan hydrique de surface.", - "long_name": "Bilan hydrique" + "title": "Bilan hydrique", + "abstract": "Précipitations moins l'évapotranspiration potentielle en tant que mesure approximative d'un bilan hydrique de surface." }, "DRY_SPELL_FREQUENCY": { - "title": "Fréquence des périodes sèches", - "abstract": "Fréquence des périodes sèches d'une durée minimale donnée, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donnée sont inférieures à un seuil donné.", + "long_name": "Fréquence des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}", "description": "Fréquence {freq:f} des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}.", - "long_name": "Fréquence des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}" + "title": "Fréquence des périodes sèches", + "abstract": "Fréquence des périodes sèches d'une durée minimale donnée, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donnée sont inférieures à un seuil donné." }, "DRY_SPELL_TOTAL_LENGTH": { - "title": "Durée totale en jours des périodes sèches", - "abstract": "Durée totale en jours des périodes sèches d'une durée minimale donnée, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donné sont inférieures à un seuil donné.", + "long_name": "Durée totale en jours des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}", "description": "Durée totale {freq:f} en jours des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}.", - "long_name": "Durée totale en jours des périodes sèches de {window} jours et plus, pendant lesquelles les précipitations {op:fpl} sur une fenêtre de {window} jours sont inférieures à {thresh}" + "title": "Durée totale en jours des périodes sèches", + "abstract": "Durée totale en jours des périodes sèches d'une durée minimale donnée, pendant lesquelles les précipitations accumulées ou maximales sur une fenêtre de jours donné sont inférieures à un seuil donné." }, "COLD_AND_DRY_DAYS": { - "title": "Nombre de jours froids et secs", - "abstract": "Nombre de jours où la température et la précipitation sont en dessous de centiles donnés.", + "long_name": "Nombre de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation en dessous du {pr_per_thresh}e centile", "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation en dessous du {pr_per_thresh}e centile.", - "long_name": "Nombre de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation en dessous du {pr_per_thresh}e centile" + "title": "Nombre de jours froids et secs", + "abstract": "Nombre de jours où la température et la précipitation sont en dessous de centiles donnés." }, "WARM_AND_DRY_DAYS": { - "title": "Nombre de jours chauds et secs", - "abstract": "Nombre de jours où la température est au-dessus d'un centile donné et la précipitation en dessous d'un centile donné.", + "long_name": "Nombre de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation en dessous du {pr_per_thresh}e centile", "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation en dessous du {pr_per_thresh}e centile.", - "long_name": "Nombre de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation en dessous du {pr_per_thresh}e centile" + "title": "Nombre de jours chauds et secs", + "abstract": "Nombre de jours où la température est au-dessus d'un centile donné et la précipitation en dessous d'un centile donné." }, "WARM_AND_WET_DAYS": { - "title": "Nombre de jours chauds et pluvieux", - "abstract": "Nombre de jours où la température et la précipitation sont au-dessus de centiles donnés.", + "long_name": "Nombre de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile", "description": "Nombre {freq:m} de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile.", - "long_name": "Nombre de jours où la température est au-dessus du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile" + "title": "Nombre de jours chauds et pluvieux", + "abstract": "Nombre de jours où la température et la précipitation sont au-dessus de centiles donnés." }, "COLD_AND_WET_DAYS": { - "title": "Nombre de jours froids et pluvieux", - "abstract": "Nombre de jours où la température est en dessous d'un centile donné et la précipitation au-dessus d'un centile donné.", + "long_name": "Nombre de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile", "description": "Nombre {freq:m} de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile.", - "long_name": "Nombre de jours où la température est en dessous du {tas_per_thresh}e centile et la précipitation au-dessus du {pr_per_thresh}e centile" + "title": "Nombre de jours froids et pluvieux", + "abstract": "Nombre de jours où la température est en dessous d'un centile donné et la précipitation au-dessus d'un centile donné." }, "CALM_DAYS": { - "title": "Nombre de jours de vent calme", - "abstract": "Nombre de jours où la vitesse du vent de surface est sous un seuil donné.", + "long_name": "Nombre de jours où la vitesse du vent de surface est sous {thresh}", "description": "Nombre {freq:m} de jours où la vitesse du vent de surface est sous {thresh}.", - "long_name": "Nombre de jours où la vitesse du vent de surface est sous {thresh}" + "title": "Nombre de jours de vent calme", + "abstract": "Nombre de jours où la vitesse du vent de surface est sous un seuil donné." }, "WINDY_DAYS": { - "title": "Nombre de jours venteux", - "abstract": "Nombre de jours où la vitesse du vent de surface est au-dessus ou égale à un seuil donné.", + "long_name": "Nombre de jours où la vitesse du vent de surface est au-dessus ou égale à {thresh}", "description": "Nombre {freq:m} de jours où la vitesse du vent de surface est au-dessus ou égale à {thresh}.", - "long_name": "Nombre de jours où la vitesse du vent de surface est au-dessus ou égale à {thresh}" + "title": "Nombre de jours venteux", + "abstract": "Nombre de jours où la vitesse du vent de surface est au-dessus ou égale à un seuil donné." }, "JETSTREAM_METRIC_WOOLLINGS": { - "title": "Force et latitude du courant-jet", - "abstract": "Latitude et magnitude du maximum de la vitesse du vent zonal entre 15 à 75°N et -60 à 0°E. Le vent est lissé par un fenêtrage de Lanczos.", "description": [ "Latitude quotidienne du maximum du vent zonal lissé par un fenêtrage de Lanczos.", "Magnitude quotidienne du maximum du vent zonal lissé par un fenêtrage de Lanczos." @@ -1081,18 +1079,20 @@ "long_name": [ "Latitude du maximum du vent zonal", "Magnitude du maximum du vent zonal" - ] + ], + "title": "Force et latitude du courant-jet", + "abstract": "Latitude et magnitude du maximum de la vitesse du vent zonal entre 15 à 75°N et -60 à 0°E. Le vent est lissé par un fenêtrage de Lanczos." }, "UTCI": { - "title": "Indice universel du climat thermique [UTCI]", - "abstract": "L'UTCI représente la température ressentie par rapport à un environnement de référence et est utilisé pour évaluer le stress thermique à l'extérieur.", + "long_name": "Indice universel du climat thermique [UTCI]", "description": "L'UTCI représente la température ressentie par rapport à un environnement de référence et est utilisé pour évaluer le stress thermique à l'extérieur.", - "long_name": "Indice universel du climat thermique [UTCI]" + "title": "Indice universel du climat thermique [UTCI]", + "abstract": "L'UTCI représente la température ressentie par rapport à un environnement de référence et est utilisé pour évaluer le stress thermique à l'extérieur." }, "MEAN_RADIANT_TEMPERATURE": { - "title": "Température radiative moyenne", - "abstract": "La température moyenne des rayonnements solaires et thermiques incidents sur un corps à l'extérieur.", + "long_name": "Température radiative moyenne", "description": "La température moyenne des rayonnements incidents sur un corps.", - "long_name": "Température radiative moyenne" + "title": "Température radiative moyenne", + "abstract": "La température moyenne des rayonnements solaires et thermiques incidents sur un corps à l'extérieur." } } diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index e0973adf6..06b5cd56b 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -959,10 +959,12 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="growing_season_length", units="days", standard_name="growing_season_length", - long_name="Growing season length", + long_name="Number of days between the first occurrence of at least {window} consecutive days with mean " + "daily temperature over {thresh} and the first occurrence of at least {window} consecutive days with " + "mean daily temperature below {thresh}, occurring after {mid_date}", description="{freq} number of days between the first occurrence of at least {window} consecutive days " "with mean daily temperature over {thresh} and the first occurrence of at least {window} consecutive days with " - "mean daily temperature below {thresh} after {mid_date}.", + "mean daily temperature below {thresh}, occurring after {mid_date}.", abstract="Number of days between the first occurrence of a series of days with a daily average temperature above a " "threshold and the first occurrence of a series of days with a daily average temperature below that same " "threshold, occurring after a given calendar date.", @@ -976,7 +978,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="growing_season_end", units="", standard_name="day_of_year", - long_name="Day of year of growing season end", + long_name="First day of the first series of {window} days with mean daily temperature below {thresh}, " + "occurring after {mid_date}", description="Day of year of end of growing season, defined as the first day of consistent inferior threshold " "temperature of {thresh} after a run of {window} days superior to threshold temperature, occurring after " "{mid_date}.", @@ -992,15 +995,14 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="tropical_nights", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", - long_name="Number of tropical nights", - description="{freq} number of Tropical Nights: defined as days with minimum daily temperature above {thresh}.", - abstract="Number of days where minimum temperature is below a given threshold.", + long_name="Number of days with minimum daily temperature above {thresh}", + description="{freq} number of Tropical Nights, defined as days with minimum daily temperature above {thresh}.", + abstract="Number of days where minimum temperature is above a given threshold.", cell_methods="time: sum over days", compute=indices.tn_days_above, parameters={"thresh": {"default": "20.0 degC"}}, ) -# FIXME: Is there a "tas_per_period"? French indices mention "per_base_thresh"? I don't see them in the indices. tg90p = TempWithIndexing( title="Days with mean temperature above the 90th percentile", identifier="tg90p", @@ -1090,11 +1092,12 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): title="Degree day exceedance date", identifier="degree_days_exceedance_date", units="", - long_name="Day of year when cumulative degree days exceed threshold.", standard_name="day_of_year", - description="Day of year when the integral of degree days (mean temperature {op} {thresh}) exceeds {sum_thresh}, " - "with the cumulative sum starting from {after_date}.", - abstract="The day of the year when the sum of degree days exceeds a threshold. " + long_name="Day of year when the integral of mean daily temperature {op} {thresh} exceeds {sum_thresh}, " + "with the cumulative sum starting from {after_date}", + description="Day of year when the integral of degree days (or mean daily temperature {op} {thresh}) exceeds " + "{sum_thresh}, with the cumulative sum starting from {after_date}.", + abstract="The day of the year when the sum of degree days exceeds a threshold, occurring after a given date. " "Degree days are calculated above or below a given temperature threshold.", cell_methods="", compute=indices.degree_days_exceedance_date, @@ -1105,8 +1108,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): title="Warm spell duration index", identifier="warm_spell_duration_index", units="days", - long_name="Number of days part of a percentile-defined warm spell", standard_name="number_of_days_with_air_temperature_above_threshold", + long_name="Number of days part of a percentile-defined warm spell", description="{freq} number of days with at least {window} consecutive days where the daily maximum temperature is " "above the {tasmax_per_thresh}th percentile(s). A {tasmax_per_window} day(s) window, centred on each calendar day " "in the {tasmax_per_period} period, is used to compute the {tasmax_per_thresh}th percentile(s).", @@ -1121,8 +1124,8 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): title="Maximum consecutive warm days", identifier="maximum_consecutive_warm_days", units="days", - long_name="Maximum number of consecutive warm days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", + long_name="Maximum number of consecutive warm days", description="{freq} longest spell of consecutive days with Tmax above {thresh}.", abstract="Maximum number of consecutive days where the daily maximum temperature exceeds a certain threshold.", cell_methods="time: maximum over days", diff --git a/xclim/indices/_threshold.py b/xclim/indices/_threshold.py index 003e06398..d9cd865d2 100644 --- a/xclim/indices/_threshold.py +++ b/xclim/indices/_threshold.py @@ -644,10 +644,10 @@ def growing_season_length( ) -> xarray.DataArray: r"""Growing season length. - The number of days between the first occurrence of at least six consecutive days with mean daily temperature over a - threshold (default: 5℃) and the first occurrence of at least six consecutive days with mean daily temperature below - the same threshold after a certain date. (Usually July 1st in the northern emisphere and January 1st in the southern - hemisphere.) + The number of days between the first occurrence of at least `N` (default: 6) consecutive days with mean daily + temperature over a threshold (default: 5℃) and the first occurrence of at least `N` consecutive days with mean + daily temperature below the same threshold after a certain date. (Usually July 1st in the northern emisphere and + January 1st in the southern hemisphere.) Warnings -------- From 86cd62eee3c5bb14e977ecda3571eabba8965874 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 31 Oct 2022 13:30:45 -0400 Subject: [PATCH 095/106] docstring consistency --- xclim/indices/_threshold.py | 239 +++++++++++++++++++----------------- 1 file changed, 129 insertions(+), 110 deletions(-) diff --git a/xclim/indices/_threshold.py b/xclim/indices/_threshold.py index d9cd865d2..76e7240f9 100644 --- a/xclim/indices/_threshold.py +++ b/xclim/indices/_threshold.py @@ -94,7 +94,7 @@ def calm_days( ) -> xarray.DataArray: r"""Calm days. - The number of days with average near-surface wind speed below threshold. + The number of days with average near-surface wind speed below threshold (default: 2 m/s). Parameters ---------- @@ -112,8 +112,7 @@ def calm_days( Notes ----- - Let :math:`WS_{ij}` be the windspeed at day :math:`i` of period :math:`j`. Then - counted is the number of days where: + Let :math:`WS_{ij}` be the windspeed at day :math:`i` of period :math:`j`. Then counted is the number of days where: .. math:: @@ -136,7 +135,7 @@ def cold_spell_days( r"""Cold spell days. The number of days that are part of cold spell events, defined as a sequence of consecutive days with mean daily - temperature below a threshold in °C. + temperature below a threshold (default: -10°C). Parameters ---------- @@ -159,7 +158,7 @@ def cold_spell_days( Notes ----- Let :math:`T_i` be the mean daily temperature on day :math:`i`, the number of cold spell days during - period :math:`\phi` is given by + period :math:`\phi` is given by: .. math:: @@ -186,7 +185,7 @@ def cold_spell_frequency( r"""Cold spell frequency. The number of cold spell events, defined as a sequence of consecutive days with mean daily temperature below a - threshold. + threshold (default: -10℃). Parameters ---------- @@ -222,8 +221,8 @@ def continuous_snow_cover_end( ) -> xarray.DataArray: r"""End date of continuous snow cover. - First day after the start of the continuous snow cover when snow depth is below `threshold` for at least - `window` consecutive days. + First day after the start of the continuous snow cover when snow depth is below a threshold (default: 2 cm) + for at least `N` (default: 14) consecutive days. Warnings -------- @@ -245,7 +244,7 @@ def continuous_snow_cover_end( xarray.DataArray, [dimensionless] First day after the start of the continuous snow cover when the snow depth goes below a threshold for a minimum duration. - If there is no such day, return np.nan. + If there is no such day, returns np.nan. References ---------- @@ -269,7 +268,8 @@ def continuous_snow_cover_start( ) -> xarray.DataArray: r"""Start date of continuous snow cover. - Day of year when snow depth is above or equal `threshold` for at least `window` consecutive days. + Day of year when snow depth is above or equal to a threshold (default: 2 cm) + for at least `N` (default: 14) consecutive days. Warnings -------- @@ -290,7 +290,7 @@ def continuous_snow_cover_start( ------- xarray.DataArray, [dimensionless] First day of the year when the snow depth is superior to a threshold for a minimum duration. - If there is no such day, return np.nan. + If there is no such day, returns np.nan. References ---------- @@ -320,6 +320,7 @@ def daily_pr_intensity( r"""Average daily precipitation intensity. Return the average precipitation over wet days. + Wet days are those with precipitation over a given threshold (default: 1 mm/day). Parameters ---------- @@ -333,7 +334,7 @@ def daily_pr_intensity( Returns ------- xarray.DataArray, [precipitation] - The average precipitation over wet days for each period + The average precipitation over wet days for each period. Notes ----- @@ -349,7 +350,7 @@ def daily_pr_intensity( Examples -------- The following would compute for each grid cell of file `pr.day.nc` the average precipitation fallen over days with - precipitation >= 5 mm at seasonal frequency, ie DJF, MAM, JJA, SON, DJF, etc.: + precipitation >= 5 mm at seasonal frequency, i.e. DJF, MAM, JJA, SON, DJF, etc.: >>> from xclim.indices import daily_pr_intensity >>> pr = xr.open_dataset(path_to_pr_file).pr @@ -398,12 +399,12 @@ def dry_days( Returns ------- xarray.DataArray, [time] - Number of days with daily precipitation below threshold. + Number of days with daily precipitation {op} threshold. Notes ----- - Let :math:`PR_{ij}` be the daily precipitation at day :math:`i` of period :math:`j`. Then - counted is the number of days where: + Let :math:`PR_{ij}` be the daily precipitation at day :math:`i` of period :math:`j`. Then counted is the number + of days where: .. math:: @@ -421,7 +422,7 @@ def maximum_consecutive_wet_days( ) -> xarray.DataArray: r"""Consecutive wet days. - Returns the maximum number of consecutive wet days. + Returns the maximum number of consecutive days with precipitation above a given threshold (default: 1 mm/day). Parameters ---------- @@ -464,7 +465,7 @@ def cooling_degree_days( ) -> xarray.DataArray: r"""Cooling degree days. - Sum of degree days above the temperature threshold at which spaces are cooled. + Returns the sum of degree days above the temperature threshold at which spaces are cooled (default: 18℃). Parameters ---------- @@ -514,7 +515,7 @@ def growing_degree_days( ) -> xarray.DataArray: r"""Growing degree-days over threshold temperature value. - The sum of growing degree-days over the threshold temperature. + The sum of growing degree-days over a given mean daily temperature threshold (default: 4℃). Parameters ---------- @@ -532,7 +533,7 @@ def growing_degree_days( Notes ----- - Let :math:`TG_{ij}` be the daily mean temperature at day :math:`i` of period :math:`j`. Then the + Let :math:`TG_{ij}` be the mean daily temperature at day :math:`i` of period :math:`j`. Then the growing degree days are: .. math:: @@ -548,8 +549,8 @@ def growing_season_start( ) -> xarray.DataArray: r"""Start of the growing season. - Day of the year of the start of a sequence of days with mean temperatures consistently above or equal to a - threshold. + Day of the year of the start of a sequence of days with mean daily temperatures consistently above or equal to a + given threshold (default: 5℃). Parameters ---------- @@ -597,8 +598,12 @@ def growing_season_end( ) -> xarray.DataArray: r"""End of the growing season. - Day of the year of the start of a sequence of days with mean temperatures consistently below a threshold, - occurring after a given calendar date. + Day of the year of the start of a sequence of `N` (default: 5) days with mean temperatures consistently below a + given threshold (default: 5℃), occurring after a given calendar date (default: July 1). + + Warnings + -------- + The default `freq` and `mid_date` parameters are valid for the northern hemisphere. Parameters ---------- @@ -644,14 +649,14 @@ def growing_season_length( ) -> xarray.DataArray: r"""Growing season length. - The number of days between the first occurrence of at least `N` (default: 6) consecutive days with mean daily + The number of days between the first occurrence of at least `N` (default: 6) consecutive days with mean daily temperature over a threshold (default: 5℃) and the first occurrence of at least `N` consecutive days with mean - daily temperature below the same threshold after a certain date. (Usually July 1st in the northern emisphere and - January 1st in the southern hemisphere.) + daily temperature below the same threshold after a certain date, usually July 1st (06-01) in the northern emispher + and January 1st (01-01) in the southern hemisphere. Warnings -------- - The default `freq` is valid for the northern hemisphere. + The default `freq` and `mid_date` parameters are valid for the northern hemisphere. Parameters ---------- @@ -724,14 +729,14 @@ def frost_season_length( ) -> xarray.DataArray: r"""Frost season length. - The number of days between the first occurrence of at least N (def: 5) consecutive days with minimum daily - temperature under a threshold (default: 0℃) and the first occurrence of at least N (def 5) consecutive days with + The number of days between the first occurrence of at least `N` (default: 5) consecutive days with minimum daily + temperature under a threshold (default: 0℃) and the first occurrence of at least `N` consecutive days with minimum daily temperature above the same threshold. A mid-date can be given to limit the earliest day the end of season can take. Warnings -------- - The default `freq` is valid for the northern hemisphere. + The default `freq` and `mid_date` parameters are valid for the northern hemisphere. Parameters ---------- @@ -800,7 +805,8 @@ def frost_free_season_start( r"""Start of the frost free season. Day of the year of the start of a sequence of days with minimum temperatures consistently above or equal to a - threshold, after a period with minimum temperatures consistently above the same threshold. + threshold (default: 0℃), after a period of `N` days (default: 5) with minimum temperatures consistently + above the same threshold. Parameters ---------- @@ -849,8 +855,13 @@ def frost_free_season_end( ) -> xarray.DataArray: r"""End of the frost free season. - Day of the year of the start of a sequence of days with minimum temperatures consistently - below a threshold, after a period with minimum temperatures consistently above the same threshold. + Day of the year of the start of a sequence of days with minimum temperatures consistently below a threshold + (default: 0℃), after a period of `N` days (default: 5) with minimum temperatures consistently above the same + threshold. + + Warnings + -------- + The default `freq` and `mid_date` parameters are valid for the northern hemisphere. Parameters ---------- @@ -896,14 +907,14 @@ def frost_free_season_length( ) -> xarray.DataArray: r"""Frost free season length. - The number of days between the first occurrence of at least N (def: 5) consecutive days with minimum daily - temperature above a threshold (default: 0℃) and the first occurrence of at least N (def 5) consecutive days with + The number of days between the first occurrence of at least `N` (default: 5) consecutive days with minimum daily + temperature above a threshold (default: 0℃) and the first occurrence of at least `N` consecutive days with minimum daily temperature below the same threshold. A mid-date can be given to limit the earliest day the end of season can take. Warnings -------- - The default `mid_date` and `freq` call parameters are valid for the northern hemisphere. + The default `freq` and `mid_date` parameters are valid for the northern hemisphere. Parameters ---------- @@ -973,12 +984,12 @@ def last_spring_frost( ) -> xarray.DataArray: r"""Last day of temperatures inferior to a threshold temperature. - Returns last day of period where a temperature is inferior to a threshold over a given number of days and limited - to a final calendar date. + Returns last day of period where a temperature is inferior to a threshold over a given number of days (default: 1) + and limited to a final calendar date (default: July 1). Warnings -------- - The default `before_date` and `freq` call parameters are valid for the northern hemisphere. + The default `freq` and `before_date` parameters are valid for the northern hemisphere. Parameters ---------- @@ -1054,12 +1065,12 @@ def first_day_temperature_below( ) -> xarray.DataArray: r"""First day of temperatures inferior to a given temperature threshold. - Returns first day of period where temperature is inferior to a threshold over a given number of days, - limited to a starting calendar date. + Returns first day of period where temperature is inferior to a threshold over a given number of days (default: 1), + limited to a starting calendar date (default: July 1). Warnings -------- - The default `after_date` and `freq` call parameters are valid for the northern hemisphere. + The default `freq` and `after_date` parameters are valid for the northern hemisphere. Parameters ---------- @@ -1106,12 +1117,12 @@ def first_day_temperature_above( ) -> xarray.DataArray: r"""First day of temperatures superior to a given temperature threshold. - Returns first day of period where temperature is superior to a threshold over a given number of days, - limited to a starting calendar date. + Returns first day of period where temperature is superior to a threshold over a given number of days (default: 1), + limited to a starting calendar date (default: January 1). Warnings -------- - The default `freq` is valid for the northern hemisphere. + The default `freq` and `after_date` parameters are valid for the northern hemisphere. Parameters ---------- @@ -1165,7 +1176,7 @@ def first_snowfall( ) -> xarray.DataArray: r"""First day with solid precipitation above a threshold. - Returns the first day of a period where the solid precipitation exceeds a threshold. + Returns the first day of a period where the solid precipitation exceeds a threshold (default: 0.5 mm/day). Warnings -------- @@ -1211,7 +1222,7 @@ def last_snowfall( ) -> xarray.DataArray: r"""Last day with solid precipitation above a threshold. - Returns the last day of a period where the solid precipitation exceeds a threshold. + Returns the last day of a period where the solid precipitation exceeds a threshold (default: 0.5 mm/day). Warnings -------- @@ -1297,7 +1308,7 @@ def heat_wave_index( ) -> xarray.DataArray: """Heat wave index. - Number of days that are part of a heatwave, defined as five or more consecutive days over 25℃. + Number of days that are part of a heatwave, defined as five or more consecutive days over a threshold of 25℃. Parameters ---------- @@ -1331,7 +1342,7 @@ def heating_degree_days( ) -> xarray.DataArray: r"""Heating degree days. - Sum of degree days below the temperature threshold at which spaces are heated. + Sum of degree days below the temperature threshold (default: 17℃) at which spaces are heated. Parameters ---------- @@ -1374,8 +1385,8 @@ def hot_spell_max_length( r"""Longest hot spell. Longest spell of high temperatures over a given period. - The longest series of consecutive days with tasmax ≥ 30 °C. Here, there is no minimum threshold for number of - days in a row that must be reached or exceeded to count as a spell. A year with zero +30 °C days will return a + The longest series of consecutive days with tasmax at or above 30°C. Here, there is no minimum threshold for number + of days in a row that must be reached or exceeded to count as a spell. A year with zero +30°C days will return a longest spell value of zero. Parameters @@ -1430,7 +1441,7 @@ def hot_spell_frequency( """Hot spell frequency. Number of hot spells over a given period. A hot spell is defined as an event where the - maximum daily temperature exceeds a specific threshold over a minimum number of days. + maximum daily temperature exceeds a specific threshold (default: 30℃) over a minimum number of days (default: 3). Parameters ---------- @@ -1479,7 +1490,7 @@ def snow_cover_duration( # noqa: D401 """Number of days with snow depth above a threshold. - Number of days where surface snow depth is greater or equal to given threshold. + Number of days where surface snow depth is greater or equal to given threshold (default: 2 cm). Warnings -------- @@ -1513,7 +1524,7 @@ def tn_days_above( ): # noqa: D401 """Number of days with tasmin above a threshold (number of tropical nights). - Number of days where daily minimum temperature exceeds a threshold. + Number of days where minimum daily temperature exceeds a threshold (default: 20℃). Parameters ---------- @@ -1529,11 +1540,11 @@ def tn_days_above( Returns ------- xarray.DataArray, [time] - Number of days where tasmin > threshold. + Number of days where tasmin {op} threshold. Notes ----- - Let :math:`TN_{ij}` be the daily minimum temperature at day :math:`i` of period :math:`j`. Then + Let :math:`TN_{ij}` be the minimum daily temperature at day :math:`i` of period :math:`j`. Then counted is the number of days where: .. math:: @@ -1554,7 +1565,7 @@ def tn_days_below( ) -> xarray.DataArray: # noqa: D401 """Number of days with tasmin below a threshold. - Number of days where daily minimum temperature is below a threshold. + Number of days where minimum daily temperature is below a threshold (default: -10℃). Parameters ---------- @@ -1570,11 +1581,11 @@ def tn_days_below( Returns ------- xarray.DataArray, [time] - Number of days where tasmin < threshold. + Number of days where tasmin {op} threshold. Notes ----- - Let :math:`TN_{ij}` be the daily minimum temperature at day :math:`i` of period :math:`j`. Then + Let :math:`TN_{ij}` be the minimum daily temperature at day :math:`i` of period :math:`j`. Then counted is the number of days where: .. math:: @@ -1595,7 +1606,7 @@ def tg_days_above( ): # noqa: D401 """Number of days with tas above a threshold. - Number of days where daily mean temperature exceeds a threshold. + Number of days where mean daily temperature exceeds a threshold (default: 10℃). Parameters ---------- @@ -1611,11 +1622,11 @@ def tg_days_above( Returns ------- xarray.DataArray, [time] - Number of days where tas > threshold. + Number of days where tas {op} threshold. Notes ----- - Let :math:`TG_{ij}` be the daily mean temperature at day :math:`i` of period :math:`j`. Then + Let :math:`TG_{ij}` be the mean daily temperature at day :math:`i` of period :math:`j`. Then counted is the number of days where: .. math:: @@ -1636,7 +1647,7 @@ def tg_days_below( ): # noqa: D401 """Number of days with tas below a threshold. - Number of days where daily mean temperature is below a threshold. + Number of days where mean daily temperature is below a threshold (default: 10℃). Parameters ---------- @@ -1652,11 +1663,11 @@ def tg_days_below( Returns ------- xarray.DataArray, [time] - Number of days where tas < threshold. + Number of days where tas {op} threshold. Notes ----- - Let :math:`TG_{ij}` be the daily mean temperature at day :math:`i` of period :math:`j`. Then counted is the number + Let :math:`TG_{ij}` be the mean daily temperature at day :math:`i` of period :math:`j`. Then counted is the number of days where: .. math:: @@ -1677,7 +1688,7 @@ def tx_days_above( ) -> xarray.DataArray: # noqa: D401 """Number of days with tasmax above a threshold (number of summer days). - Number of days where daily maximum temperature exceeds a threshold. + Number of days where maximum daily temperature exceeds a threshold (default: 25℃). Parameters ---------- @@ -1693,12 +1704,12 @@ def tx_days_above( Returns ------- xarray.DataArray, [time] - Number of days where tasmax > threshold (number of summer days). + Number of days where tasmax {op} threshold (number of summer days). Notes ----- - Let :math:`TX_{ij}` be the daily maximum temperature at day :math:`i` of period :math:`j`. Then - counted is the number of days where: + Let :math:`TX_{ij}` be the maximum daily temperature at day :math:`i` of period :math:`j`. Then counted is the + number of days where: .. math:: @@ -1718,7 +1729,7 @@ def tx_days_below( ): # noqa: D401 """Number of days with tmax below a threshold. - Number of days where daily maximum temperature is below a threshold. + Number of days where maximum daily temperature is below a threshold (default: 25℃). Parameters ---------- @@ -1734,16 +1745,16 @@ def tx_days_below( Returns ------- xarray.DataArray, [time] - Number of days where tasmin < threshold. + Number of days where tasmin {op} threshold. Notes ----- - Let :math:`TN_{ij}` be the daily minimum temperature at day :math:`i` of period :math:`j`. Then + Let :math:`TX_{ij}` be the maximum daily temperature at day :math:`i` of period :math:`j`. Then counted is the number of days where: .. math:: - TN_{ij} < Threshold [℃] + TX_{ij} < Threshold [℃] """ thresh = convert_units_to(thresh, tasmax) f1 = threshold_count(tasmax, op, thresh, freq, constrain=("<", "<=")) @@ -1756,12 +1767,12 @@ def warm_day_frequency( ) -> xarray.DataArray: """Frequency of extreme warm days. - Return the number of days with tasmax exceeding threshold per period. + Return the number of days with maximum daily temperature exceeding threshold (default: 30℃) per period. Parameters ---------- tasmax : xarray.DataArray - Mean daily temperature. + Maximum daily temperature. thresh : str Threshold temperature on which to base evaluation. freq : str @@ -1772,12 +1783,12 @@ def warm_day_frequency( Returns ------- xarray.DataArray, [time] - Number of days with tasmax > threshold per period. + Number of days with tasmax {op} threshold per period. Notes ----- - Let :math:`TX_{ij}` be the daily maximum temperature at day :math:`i` of period :math:`j`. Then - counted is the number of days where: + Let :math:`TX_{ij}` be the maximum daily temperature at day :math:`i` of period :math:`j`. Then counted is the + number of days where: .. math:: @@ -1794,7 +1805,7 @@ def warm_night_frequency( ) -> xarray.DataArray: """Frequency of extreme warm nights. - Return the number of days with tasmin exceeding threshold per period. + Return the number of days with minimum daily temperature exceeding threshold (default: 22℃) per period. Parameters ---------- @@ -1810,7 +1821,7 @@ def warm_night_frequency( Returns ------- xarray.DataArray, [time] - Number of days with tasmin > threshold per period. + Number of days with tasmin {op} threshold per period. """ thresh = convert_units_to(thresh, tasmin) events = threshold_count(tasmin, op, thresh, freq, constrain=(">", ">=")) @@ -1826,7 +1837,7 @@ def wetdays( ) -> xarray.DataArray: """Wet days. - Return the total number of days during period with precipitation over threshold. + Return the total number of days during period with precipitation over threshold (default: 1.0 mm/day). Parameters ---------- @@ -1846,8 +1857,8 @@ def wetdays( Examples -------- - The following would compute for each grid cell of file `pr.day.nc` the number days - with precipitation over 5 mm at the seasonal frequency, ie DJF, MAM, JJA, SON, DJF, etc.: + The following would compute for each grid cell of file `pr.day.nc` the number days with precipitation over 5 mm + at the seasonal frequency, i.e. DJF, MAM, JJA, SON, DJF, etc.: >>> from xclim.indices import wetdays >>> pr = xr.open_dataset(path_to_pr_file).pr @@ -1868,7 +1879,7 @@ def wetdays_prop( ) -> xarray.DataArray: """Proportion of wet days. - Return the proportion of days during period with precipitation over threshold. + Return the proportion of days during period with precipitation over threshold (default: 1.0 mm/day). Parameters ---------- @@ -1888,8 +1899,8 @@ def wetdays_prop( Examples -------- - The following would compute for each grid cell of file `pr.day.nc` the proportion of days - with precipitation over 5 mm at the seasonal frequency, ie DJF, MAM, JJA, SON, DJF, etc.: + The following would compute for each grid cell of file `pr.day.nc` the proportion of days with precipitation over + 5 mm at the seasonal frequency, i.e. DJF, MAM, JJA, SON, DJF, etc.: >>> from xclim.indices import wetdays_prop >>> pr = xr.open_dataset(path_to_pr_file).pr @@ -1910,8 +1921,8 @@ def maximum_consecutive_frost_days( ) -> xarray.DataArray: r"""Maximum number of consecutive frost days (Tn < 0℃). - The maximum number of consecutive days within the period where the - temperature is under a certain threshold (default: 0°C). + The maximum number of consecutive days within the period where the minimum daily temperature + is under a given threshold (default: 0°C). Warnings -------- @@ -1933,14 +1944,14 @@ def maximum_consecutive_frost_days( Notes ----- - Let :math:`\mathbf{t}=t_0, t_1, \ldots, t_n` be a daily minimum temperature series and :math:`thresh` the threshold + Let :math:`\mathbf{t}=t_0, t_1, \ldots, t_n` be a minimum daily temperature series and :math:`thresh` the threshold below which a day is considered a frost day. Let :math:`\mathbf{s}` be the sorted vector of indices :math:`i` where :math:`[t_i < thresh] \neq [t_{i+1} < thresh]`, that is, the days where the temperature crosses the threshold. - Then the maximum number of consecutive frost free days is given by + Then the maximum number of consecutive frost days is given by .. math:: - \max(\mathbf{d}) \quad \mathrm{where} \quad d_j = (s_j - s_{j-1}) [t_{s_j} > thresh] + \max(\mathbf{d}) \quad \mathrm{where} \quad d_j = (s_j - s_{j-1}) [t_{s_j} < thresh] where :math:`[P]` is 1 if :math:`P` is true, and 0 if false. Note that this formula does not handle sequences at the start and end of the series, but the numerical algorithm does. @@ -1957,7 +1968,8 @@ def maximum_consecutive_dry_days( ) -> xarray.DataArray: r"""Maximum number of consecutive dry days. - Return the maximum number of consecutive days within the period where precipitation is below a certain threshold. + Return the maximum number of consecutive days within the period where precipitation + is below a certain threshold (default: 1 mm/day). Parameters ---------- @@ -1982,7 +1994,7 @@ def maximum_consecutive_dry_days( .. math:: - \max(\mathbf{d}) \quad \mathrm{where} \quad d_j = (s_j - s_{j-1}) [p_{s_j} > thresh] + \max(\mathbf{d}) \quad \mathrm{where} \quad d_j = (s_j - s_{j-1}) [p_{s_j} < thresh] where :math:`[P]` is 1 if :math:`P` is true, and 0 if false. Note that this formula does not handle sequences at the start and end of the series, but the numerical algorithm does. @@ -1999,8 +2011,12 @@ def maximum_consecutive_frost_free_days( ) -> xarray.DataArray: r"""Maximum number of consecutive frost free days (Tn >= 0℃). - Return the maximum number of consecutive days within the period where the - minimum temperature is above or equal to a certain threshold. + Return the maximum number of consecutive days within the period where the minimum daily temperature is + above or equal to a certain threshold (default: 0℃). + + Warnings + -------- + The default `freq` is valid for the northern hemisphere. Parameters ---------- @@ -2042,8 +2058,8 @@ def maximum_consecutive_tx_days( ) -> xarray.DataArray: r"""Maximum number of consecutive days with tasmax above a threshold (summer days). - Return the maximum number of consecutive days within the period where the maximum temperature is above a certain - threshold. + Return the maximum number of consecutive days within the period where the maximum daily temperature is + above a certain threshold (default: 25℃). Parameters ---------- @@ -2064,7 +2080,7 @@ def maximum_consecutive_tx_days( Let :math:`\mathbf{t}=t_0, t_1, \ldots, t_n` be a daily maximum temperature series and :math:`thresh` the threshold above which a day is considered a summer day. Let :math:`\mathbf{s}` be the sorted vector of indices :math:`i` where :math:`[t_i < thresh] \neq [t_{i+1} < thresh]`, that is, the days where the temperature crosses the threshold. - Then the maximum number of consecutive dry days is given by: + Then the maximum number of consecutive tx_days (summer days) is given by: .. math:: @@ -2124,7 +2140,7 @@ def sea_ice_extent( """Total sea ice extent. Sea ice extent measures the *ice-covered* area, where a region is considered ice-covered if its sea ice - concentration is above a threshold usually set to 15%. + concentration is above a threshold, usually set to 15%. Parameters ---------- @@ -2160,7 +2176,7 @@ def windy_days( ) -> xarray.DataArray: r"""Windy days. - The number of days with average near-surface wind speed above threshold. + The number of days with average near-surface wind speed above threshold (default: 10.8 m/s). Parameters ---------- @@ -2178,8 +2194,7 @@ def windy_days( Notes ----- - Let :math:`WS_{ij}` be the windspeed at day :math:`i` of period :math:`j`. Then - counted is the number of days where: + Let :math:`WS_{ij}` be the windspeed at day :math:`i` of period :math:`j`. Then counted is the number of days where: .. math:: @@ -2199,7 +2214,7 @@ def tropical_nights( ) -> xarray.DataArray: """Tropical nights. - The number of days with minimum daily temperature above threshold. + The number of days with minimum daily temperature above threshold (default: 20℃). Parameters ---------- @@ -2249,7 +2264,7 @@ def rprctot( """Proportion of accumulated precipitation arising from convective processes. Return the proportion of total accumulated precipitation due to convection on days with total precipitation - exceeding a specified threshold during the given period. + exceeding a given threshold (default: 1.0 mm/day) during the given period. Parameters ---------- @@ -2291,8 +2306,8 @@ def degree_days_exceedance_date( ) -> xarray.DataArray: r"""Degree-days exceedance date. - Day of year when the sum of degree days exceeds a threshold. Degree days are computed above or below a given - temperature threshold. + Day of year when the sum of degree days exceeds a threshold (default: 25 K days). + Degree days are computed above or below a given temperature threshold (default: 0℃). Parameters ---------- @@ -2306,8 +2321,8 @@ def degree_days_exceedance_date( If equivalent to '>', degree days are computed as `tas - thresh` and if equivalent to '<', they are computed as `thresh - tas`. after_date: str, optional - Date at which to start the cumulative sum. In "mm-dd" format, defaults to the - start of the sampling period. + Date at which to start the cumulative sum. + In "mm-dd" format, defaults to the start of the sampling period. freq : str Resampling frequency. If `after_date` is given, `freq` should be annual. @@ -2369,7 +2384,11 @@ def winter_storm( ) -> xarray.DataArray: """Days with snowfall over threshold. - Number of days with snowfall accumulation greater or equal to threshold. + Number of days with snowfall accumulation greater or equal to threshold (default: 25 cm). + + Warnings + -------- + The default `freq` is valid for the northern hemisphere. Parameters ---------- From 44bcc1d069fd07846cf5c6a5d172dfde9edfdd9a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 17:51:42 +0000 Subject: [PATCH 096/106] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- xclim/indices/_threshold.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xclim/indices/_threshold.py b/xclim/indices/_threshold.py index 1099d3f7a..29dc25cc6 100644 --- a/xclim/indices/_threshold.py +++ b/xclim/indices/_threshold.py @@ -171,8 +171,8 @@ def cold_spell_days( where :math:`[P]` is 1 if :math:`P` is true, and 0 if false. """ t = convert_units_to(thresh, tas) - over = compare(tas, op, t, constrain=("<", "<=")) - + over = compare(tas, op, t, constrain=("<", "<=")) + out = rl.resample_and_rl( over, resample_before_rl, @@ -211,7 +211,7 @@ def cold_spell_frequency( Comparison operation. Default: "<". resample_before_rl : bool Determines if the resampling should take place before or after the run - + Returns ------- xarray.DataArray, [time] @@ -220,7 +220,7 @@ def cold_spell_frequency( """ t = convert_units_to(thresh, tas) over = compare(tas, op, t, constrain=("<", "<=")) - + out = rl.resample_and_rl( over, resample_before_rl, From 6b31e425d2bf126fb2c87756a5394ebffe67b4cd Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 31 Oct 2022 13:56:54 -0400 Subject: [PATCH 097/106] wsdi --- xclim/data/fr.json | 2 +- xclim/indicators/atmos/_temperature.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index bee2da17e..4ffa4b8a6 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -952,7 +952,7 @@ "description": "Le ratio {freq:m} entre la précipitation liquide et la précipitation totale. La précipitation liquide est approximée par la précipitation lorsque la température est au-dessus de {thresh}." }, "WARM_SPELL_DURATION_INDEX": { - "long_name": "Nombre de jours faisant partie d'une vague de chaleur définie par un centile", + "long_name": "Nombre de jours avec au moins {window} jours consécutifs ayant une température maximale quotidienne au-dessus du ou des {tasmax_per_thresh}ème(s) percentile(s)", "title": "Indice de durée des vagues de chaleur", "abstract": "Nombre de jours consécutifs plus grand qu'un nombre de jours minimal donnée et ayant une température maximale quotidienne plus grande qu'un centile donné. Le seuil de centile des températures doit être calculé avec une fenêtre mobile d'un nombre de jours donné.", "description": "Nombre de jours avec au moins {window} jours consécutifs où la température maximale quotidienne est au-dessus ou égale au(x) {tasmax_per_thresh}e centile(s). Une fenêtre de {tasmax_per_window} jour(s), centrée sur chaque jour du calendrier de la période {tasmax_per_period}, est utilisée pour calculer le(s) {tasmax_per_thresh}e(s) centile(s)." diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 06b5cd56b..9d4d4a751 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -1109,11 +1109,12 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="warm_spell_duration_index", units="days", standard_name="number_of_days_with_air_temperature_above_threshold", - long_name="Number of days part of a percentile-defined warm spell", - description="{freq} number of days with at least {window} consecutive days where the daily maximum temperature is " + long_name="Number of days with at least {window} consecutive days where the maximum daily temperature is above " + "the {tasmax_per_thresh}th percentile(s)", + description="{freq} number of days with at least {window} consecutive days where the maximum daily temperature is " "above the {tasmax_per_thresh}th percentile(s). A {tasmax_per_window} day(s) window, centred on each calendar day " "in the {tasmax_per_period} period, is used to compute the {tasmax_per_thresh}th percentile(s).", - abstract="Number of days part of a percentile-defined warm spell. A warm spell occurs when the daily maximum " + abstract="Number of days part of a percentile-defined warm spell. A warm spell occurs when the maximum daily " "temperature is above a given percentile for a given number of consecutive days.", cell_methods="time: sum over days", compute=indices.warm_spell_duration_index, From c0917686896f23e0985bdb904c15f429f7af14bb Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 31 Oct 2022 16:15:53 -0400 Subject: [PATCH 098/106] agroclimate indices --- xclim/data/fr.json | 30 ++++++------ xclim/indicators/atmos/_temperature.py | 67 +++++++++++++++----------- 2 files changed, 53 insertions(+), 44 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index 4ffa4b8a6..fd1af9326 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -500,31 +500,31 @@ "abstract": "Cumul des degrés-jours pour les jours où la température moyenne quotidienne est au-dessus d'un seuil donné, habituellement 0°C." }, "BIOLOGICALLY_EFFECTIVE_DEGREE_DAYS": { - "long_name": "Degrés-jours biologiquement actifs", - "description": "Cumul des degrés-jours borné par la température minimale quotidienne sous {thresh_tasmin} et la différence entre les températures maximale et minimale quotiennes sous {max_daily_degree_days} . Les degrés jours quotidiens sont corrigés selon la différence entre les températures maximale et minimale quotiennes et selon un coefficient de durée du jour dépendant de la latitude.", + "long_name": "Intégrale de la température moyenne quotidienne au-dessus de {thresh}, avec une valeur maximale de {max_daily_degree_days}, multipliée par un coefficient de longueur de jour et un modificateur de plage de température basé sur la méthode {method} pour les jours compris entre {start_date} et {end_date}", + "description": "Cumul des degrés-jours borné par la température minimale quotidienne sous {thresh_tasmin} et la différence entre les températures maximale et minimale quotiennes sous {max_daily_degree_days} . Les degrés jours quotidiens sont corrigés selon la différence entre les températures maximale et minimale quotiennes et selon un coefficient de durée du jour `k` dépendant de la latitude et le coefficient `TR_adj` est un modificateur qui tient compte des grandes variations de température.", "title": "Degrés-jours biologiquement actifs", "comment": "Formule originale prise de Gladstones 1992.", - "abstract": "Indice basé sur une relation non linéaire entre la température et les processus physiologiques. Il intègre une borne supérieure du cumul, un coefficient lié à la durée du jour et une correction liée à l'écart journalier des températures." + "abstract": "Prend en compte les températures minimales et maximales quotidiennes avec un seuil de base donné entre le 1er avril et le 31 octobre, avec une valeur quotidienne maximale pour les degrés-jours cumulés (généralement 9°C), et intègre des coefficients de modification pour les latitudes comprises entre 40°N et 50°N ainsi que pour les variations de l'amplitude thermique quotidienne." }, "EFFECTIVE_GROWING_DEGREE_DAYS": { - "long_name": "Degrés-jours de croissance effectifs", - "description": "Accumulation des degrés-jours borné par (Tmax + Tmin)/2 > {thresh} et des dates de début et fin de la saison de croissance generés dynamiquement.", + "long_name": "Intégrale de la température journalière moyenne supérieure à {thresh} pour les jours compris entre les dates de début et de fin déterminées dynamiquement à l'aide de la méthode {method}", + "description": "Indice de sommation de chaleur pour l'estimation de l'adéquation agroclimatique. Calculé avec la formule {method} (Somme de max((Tn + Tx)/2 - {thresh}, 0) entre les dates de début et de fin de saison de croissance déterminées dynamiquement. La méthode `bootsma` utilise une température moyenne sur 10 jours au-dessus de {thresh} pour identifier une date de début, tandis que la méthode `qian` utilise une moyenne pondérée au-dessus de {thresh} sur 5 jours pour déterminer la date de début. La date de fin de la saison de croissance est la date de la première gelée d'automne (Tn < 0°C) survenant après {after_date}.", "title": "Degrés-jours de croissance effectifs", "comment": "Formule originale prise de Bootsma et al. 2005.", - "abstract": "Indice de degrés-jours de croissance basés sur un début et une fin dynamiques de la saison de croissance." + "abstract": "Considère la température minimale et maximale quotidienne avec un seuil de base donné entre les dates de début et de fin de saison de croissance déterminées dynamiquement. La méthode `bootsma` utilise une température moyenne sur 10 jours au-dessus d'un seuil donné pour identifier une date de début, tandis que la méthode `qian` utilise une température moyenne pondérée au-dessus d'un seuil donné sur 5 jours pour déterminer la date de début. La date de fin de la saison de croissance est la date de la première gelée d'automne (Tn < 0°C) survenant après une date donnée (généralement le 1er juillet)." }, "LATITUDE_TEMPERATURE_INDEX": { - "long_name": "Indice latitude-température", - "description": "Température moyenne du mois le plus chaud avec un facteur d'échelle basé sur la latitude : Moyenne de température du mois le plus chaud * ({lat_factor} - latitude).", + "long_name": "Température moyenne du mois le plus chaud multipliée par la différence de {lat_factor} moins la latitude", + "description": "Température moyenne du mois le plus chaud avec un facteur d'échelle basé sur la latitude. Température moyenne du mois le plus chaud multipliée par la différence de {lat_factor} moins la latitude.", "title": "Indice de latitude-température", "comment": "Formule originale prise de Jackson, D. I., & Cherry, N. J. (1988)", - "abstract": "Indice climatique basé sur la température moyenne du mois le plus chaud et un coefficient basé sur la latitude pour tenir compte de la durée plus longue du jour favorisant les conditions de croissance. Développé spécifiquement pour la viticulture." + "abstract": "Indice climatique basé sur la température moyenne du mois le plus chaud et un coefficient basé sur la latitude pour tenir compte de la durée plus longue du jour favorisant les conditions de croissance. Développé spécifiquement pour la viticulture. Température moyenne du mois le plus chaud multipliée par la différence de coéffient de facteur latitude moins la latitude." }, "HUGLIN_INDEX": { - "long_name": "Indice héliothermique de Huglin", - "description": "Indice de sommation de chaleur pour l'estimation de l'adéquation agroclimatique, développé spécifiquement pour la viticulture. Calculé avec la formule {méthode} (Somme de ((Tmin + Tmax)/2 - {thresh}) * k), où le coefficient (`k`) est une longueur de jour basée sur la latitude pour les jours typiquement compris entre le 1er avril et le 30 septembre.", + "long_name": "Intégrale de la température moyenne quotidienne au-dessus de {thresh} multipliée par le coefficient de longueur du jour du méthode {method} pour les jours compris entre {start_date} et {end_date}", + "description": "Indice de sommation de chaleur pour l'estimation de l'adéquation agroclimatique, développé spécifiquement pour la viticulture. Calculé avec la formule {méthode} (Somme de ((Tn + Tx)/2 - {thresh}) * k), où le coefficient (`k`) est une longueur de jour basée sur la latitude pour les jours typiquement compris entre {start_date} et {end_date}.", "title": "Indice héliothermique de Huglin", - "abstract": "Indice de sommation de chaleur pour l'estimation de l'adéquation agroclimatique, développé spécifiquement pour la viticulture. Il prend en compte les Tmin et Tmax quotidiennes avec un seuil de base donné, généralement entre le 1er avril et le 30 septembre, et intègre un calcul de coefficient de longueur de jour pour les latitudes plus élevées. Métrique initialement publiée dans Huglin (1978). Le coefficient de longueur du jour est basé sur Hall & Jones (2010)." + "abstract": "Indice de sommation de chaleur pour l'estimation de l'adéquation agroclimatique, développé spécifiquement pour la viticulture. Il prend en compte les temperature minimales et maximales quotidiennes avec un seuil de base donné, généralement entre le 1er avril et le 30 septembre, et intègre un calcul de coefficient de longueur de jour pour les latitudes plus élevées. Métrique initialement publiée dans Huglin (1978). Le coefficient de longueur du jour est basé sur Hall & Jones (2010)." }, "FRESHET_START": { "long_name": "Premier jour où le seuil de température de {thresh} est dépassé pendant au moins {windows} jours", @@ -958,10 +958,10 @@ "description": "Nombre de jours avec au moins {window} jours consécutifs où la température maximale quotidienne est au-dessus ou égale au(x) {tasmax_per_thresh}e centile(s). Une fenêtre de {tasmax_per_window} jour(s), centrée sur chaque jour du calendrier de la période {tasmax_per_period}, est utilisée pour calculer le(s) {tasmax_per_thresh}e(s) centile(s)." }, "MAXIMUM_CONSECUTIVE_WARM_DAYS": { - "long_name": "Nombre maximal de jours chauds consécutifs", - "description": "Nombre {freq:m} maximal de jours chauds consécutifs (température maximale quotidienne > {thresh}).", + "long_name": "Nombre maximal de jours consécutifs ayant une température maximale quotidienne au-dessus de {thresh}", + "description": "La plus longue période {freq:m} de jours consécutifs ayant une température maximale quotidienne au-dessus de {thresh}.", "title": "Nombre maximal de jours chauds consécutifs", - "abstract": "Nombre maximal de jours consécutifs où la température maximale quotidienne est au-dessus d'un seuil donné." + "abstract": "Nombre maximal de jours consécutifs ayant une température maximale quotidienne au-dessus d'un seuil donné." }, "FIRE_SEASON": { "long_name": "Saison des incendies", diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 9d4d4a751..2ddc6e5e3 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -1126,9 +1126,9 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="maximum_consecutive_warm_days", units="days", standard_name="spell_length_of_days_with_air_temperature_above_threshold", - long_name="Maximum number of consecutive warm days", - description="{freq} longest spell of consecutive days with Tmax above {thresh}.", - abstract="Maximum number of consecutive days where the daily maximum temperature exceeds a certain threshold.", + long_name="Maximum number of consecutive days with maximum daily temperature above {thresh}", + description="{freq} longest spell of consecutive days with maximum daily temperature above {thresh}.", + abstract="Maximum number of consecutive days where the maximum daily temperature exceeds a certain threshold.", cell_methods="time: maximum over days", compute=indices.maximum_consecutive_tx_days, ) @@ -1154,13 +1154,14 @@ def cfcheck(self, tas, snd=None): title="Huglin heliothermal index", identifier="huglin_index", units="", - long_name="Huglin heliothermal index", - description="Heat-summation index for agroclimatic suitability estimation, developed specifically for viticulture. " - "Computed with {method} formula (Summation of ((Tmin + Tmax)/2 - {thresh}) * k), where coefficient (`k`) is a " - "latitude-based day-length for days typically between 1 April and 30 September.", + long_name="Integral of mean daily temperature above {thresh} multiplied by day-length coefficient with {method} " + "method for days between {start_date} and {end_date}", + description="Heat-summation index for agroclimatic suitability estimation, developed specifically for viticulture, " + "computed with {method} formula (Summation of ((Tn + Tx)/2 - {thresh}) * k), where coefficient `k` is a " + "latitude-based day-length for days between {start_date} and {end_date}.", abstract="Heat-summation index for agroclimatic suitability estimation, developed specifically for viticulture. " - "Considers daily Tmin and Tmax with a given base threshold, typically between 1 April and 30 September, and " - "integrates a day-length coefficient calculation for higher latitudes. " + "Considers daily minimum and maximum temperature with a given base threshold, typically between 1 April and 30" + "September, and integrates a day-length coefficient calculation for higher latitudes. " "Metric originally published in Huglin (1978). Day-length coefficient based on Hall & Jones (2010).", cell_methods="", var_name="hi", @@ -1178,13 +1179,18 @@ def cfcheck(self, tas, snd=None): title="Biologically effective degree days", identifier="biologically_effective_degree_days", units="K days", - long_name="Biologically effective degree days", + long_name="Integral of mean daily temperature above {thresh}, with maximum value of {max_daily_degree_days}, " + "multiplied by day-length coefficient and temperature range modifier based on {method} method for days between " + "{start_date} and {end_date}", description="Heat-summation index for agroclimatic suitability estimation, developed specifically for viticulture. " - "Computed with {method} formula (Summation of min((max((Tmin + Tmax)/2 - {thresh_tasmin}, 0) * k) + TR_adj, 9°C), " - "where coefficient (`k`) is a latitude-based day-length for days between {start_date} and {end_date}).", - abstract="Considers daily Tmin and Tmax with a given base threshold between 1 April and 31 October, with a maximum " - "daily value for degree days (typically 9°C), and integrates a modification coefficient for latitudes between " - "40°N and 50°N as well as swings in daily temperature range. Original formula published in Gladstones, 1992.", + "Computed with {method} formula (Summation of min((max((Tn + Tx)/2 - {thresh_tasmin}, 0) * k) + TR_adj, Dmax), " + "where coefficient `k` is a latitude-based day-length for days between {start_date} and {end_date}), " + "coefficient `TR_adj` is a modifier accounting for large temperature swings, and `Dmax` is the maximum possible" + "amount of degree days that can be gained within a day ({max_daily_degree_days}).", + abstract="Considers daily minimum and maximum temperature with a given base threshold between 1 April and 31 " + "October, with a maximum daily value for cumulative degree days (typically 9°C), and integrates modification " + "coefficients for latitudes between 40°N and 50°N as well as for swings in daily temperature range. " + "Metric originally published in Gladstones (1992).", cell_methods="", var_name="bedd", compute=indices.biologically_effective_degree_days, @@ -1201,17 +1207,20 @@ def cfcheck(self, tas, snd=None): title="Effective growing degree days", identifier="effective_growing_degree_days", units="K days", - long_name="Effective growing degree days", + long_name="Integral of mean daily temperature above {thresh} for days between start and end dates " + "dynamically determined using {method} method", description="Heat-summation index for agroclimatic suitability estimation." - "Computed with {method} formula (Summation of max((Tmin + Tmax)/2 - {thresh}, 0) between dynamically-determined " - "growing season start and end dates. The 'bootsma' method uses a 10-day average temperature above {thresh} to " - "identify a start date, while the 'qian' method uses a weighted mean average above {thresh} over 5 days to " - "determine start date. The end date of the growing season is the date of first fall frost (Tmin < 0°C). ", - abstract="Considers daily Tmin and Tmax with a given base threshold between dynamically-determined growing season " - "start and end dates. The 'bootsma' method uses a 10-day mean temperature above a given threshold to identify a " - "start date, while the 'qian' method uses a weighted mean temperature above a given threshold over 5 days to " - "determine start date. The end date of the growing season is the date of first fall frost (Tmin < 0°C). " - "Original formula published in Bootsma et al. 2005.", + "Computed with {method} formula (Summation of max((Tn + Tx)/2 - {thresh}, 0) between dynamically-determined " + "growing season start and end dates. The `bootsma` method uses a 10-day average temperature above {thresh} to " + "identify a start date, while the `qian` method uses a weighted mean average above {thresh} over 5 days to " + "determine the start date. The end date of the growing season is the date of first fall frost (Tn < 0°C) occurring" + "after {after_date}.", + abstract="Considers daily minimum and maximum temperature with a given base threshold between " + "dynamically-determined growing season start and end dates. The `bootsma` method uses a 10-day mean temperature " + "above a given threshold to identify a start date, while the `qian` method uses a weighted mean temperature above " + "a given threshold over 5 days to determine the start date. The end date of the growing season is the date of " + "first fall frost (Tn < 0°C) occurring after a given date (typically, July 1). " + "Metric originally published in Bootsma et al. (2005).", cell_methods="", var_name="egdd", compute=indices.effective_growing_degree_days, @@ -1227,14 +1236,14 @@ def cfcheck(self, tas, snd=None): title="Latitude temperature index", identifier="latitude_temperature_index", units="", - long_name="Latitude-temperature index", + long_name="Mean temperature of warmest month multiplied by the difference of {lat_factor} minus latitude", description="A climate indice based on mean temperature of the warmest month and a latitude-based coefficient to " "account for longer day-length favouring growing conditions. Developed specifically for viticulture. " - "Mean temperature of warmest month * ({lat_factor} - latitude).", + "Mean temperature of warmest month multiplied by the difference of {lat_factor} minus latitude.", abstract="A climate indice based on mean temperature of the warmest month and a latitude-based coefficient to " "account for longer day-length favouring growing conditions. Developed specifically for viticulture. " - "Mean temperature of warmest month * (latitude_factor - latitude). " - "Indice originally published in Jackson, D. I., & Cherry, N. J. (1988)", + "Mean temperature of warmest month multiplied by the difference of latitude factor coefficient minus latitude. " + "Metric originally published in Jackson, D. I., & Cherry, N. J. (1988).", cell_methods="", allowed_periods=["A"], var_name="lti", From 5ffaad4c2bcf4ed85b61ad6f943b7e69d88ecae5 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 31 Oct 2022 17:23:21 -0400 Subject: [PATCH 099/106] fix tests --- xclim/indicators/atmos/_temperature.py | 19 ++++++++++---- xclim/testing/tests/test_formatting.py | 9 ++++--- xclim/testing/tests/test_precip.py | 4 +-- xclim/testing/tests/test_temperature.py | 33 ++++++++++++++++--------- 4 files changed, 42 insertions(+), 23 deletions(-) diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 2ddc6e5e3..01afd259a 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -535,7 +535,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): title="Freeze-thaw spell frequency", identifier="freezethaw_spell_frequency", units="days", - long_name="Frequency of events where maximum daily temperatures are above {thresh_tasmax} " + long_name="Frequency of events where maximum daily temperatures are above {thresh_tasmax}" "and minimum daily temperatures are at or below {thresh_tasmin} for at least {window} consecutive day(s).", description="{freq} number of freeze-thaw spells, where maximum daily temperatures are above {thresh_tasmax} " "and minimum daily temperatures are at or below {thresh_tasmin} for at least {window} consecutive day(s).", @@ -1093,10 +1093,19 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="degree_days_exceedance_date", units="", standard_name="day_of_year", - long_name="Day of year when the integral of mean daily temperature {op} {thresh} exceeds {sum_thresh}, " - "with the cumulative sum starting from {after_date}", - description="Day of year when the integral of degree days (or mean daily temperature {op} {thresh}) exceeds " - "{sum_thresh}, with the cumulative sum starting from {after_date}.", + long_name=lambda **kws: "Day of year when the integral of mean daily temperature {op} {thresh} exceeds {sum_thresh}" + + ( + ", with the cumulative sum starting from {after_date}" + if kws["after_date"] is not None + else "" + ), + description=lambda **kws: "Day of year when the integral of degree days (mean daily temperature {op} {thresh}) " + "exceeds {sum_thresh}" + + ( + ", with the cumulative sum starting from {after_date}." + if kws["after_date"] is not None + else "." + ), abstract="The day of the year when the sum of degree days exceeds a threshold, occurring after a given date. " "Degree days are calculated above or below a given temperature threshold.", cell_methods="", diff --git a/xclim/testing/tests/test_formatting.py b/xclim/testing/tests/test_formatting.py index 1455bd2a6..7388c4859 100644 --- a/xclim/testing/tests/test_formatting.py +++ b/xclim/testing/tests/test_formatting.py @@ -34,10 +34,11 @@ def test_indicator_docstring(): assert doc[12] == " Default : `ds.tasmin`. [Required units : [temperature]]" assert ( doc[41] - == " Number of heat wave events (heat_wave_events), with additional attributes: **description**: " - "{freq} number of heat wave events within a given period. A heat wave occurs when daily " - "minimum and maximum temperatures exceed {thresh_tasmin} and {thresh_tasmax}, respectively, " - "over at least {window} days." + == " Total number of series of at least {window} consecutive days with daily minimum temperature above " + "{thresh_tasmin} and daily maximum temperature above {thresh_tasmax} (heat_wave_events), " + "with additional attributes: **description**: {freq} number of heat wave events within a given period. " + "A heat wave occurs when daily minimum and maximum temperatures exceed {thresh_tasmin} and {thresh_tasmax}, " + "respectively, over at least {window} days." ) doc = degree_days_exceedance_date.__doc__.split("\n") diff --git a/xclim/testing/tests/test_precip.py b/xclim/testing/tests/test_precip.py index aadc1bbb1..902a8293a 100644 --- a/xclim/testing/tests/test_precip.py +++ b/xclim/testing/tests/test_precip.py @@ -79,8 +79,8 @@ def test_with_different_phases(self): np.testing.assert_array_almost_equal(out_liq + out_sol, out_tot, 4) - assert "solid" in out_sol.long_name - assert "liquid" in out_liq.long_name + assert "solid" in out_sol.description + assert "liquid" in out_liq.description assert out_sol.standard_name == "lwe_thickness_of_snowfall_amount" # With a non-default threshold diff --git a/xclim/testing/tests/test_temperature.py b/xclim/testing/tests/test_temperature.py index 75fe5d664..7943393d1 100644 --- a/xclim/testing/tests/test_temperature.py +++ b/xclim/testing/tests/test_temperature.py @@ -362,7 +362,7 @@ def test_real_data(self, atmosds): test = atmos.maximum_consecutive_frost_free_days(tasmin) np.testing.assert_allclose(test[2, 0], [68], rtol=1e-1) assert ( - "Annual maximum number of consecutive days with minimum daily temperature above or equal to 0 degc." + "Annual maximum number of consecutive days with minimum daily temperature at or above 0 degc." ) in test.description @@ -1225,7 +1225,7 @@ def test_degree_days_exceedance_date(): ) np.testing.assert_array_equal(out, np.array([[153, 136, 9, 6]]).T) assert ( - "Day of year when the integral of degree days (mean temperature > 4 degc) " + "Day of year when the integral of degree days (mean daily temperature > 4 degc) " "exceeds 200 k days, with the cumulative sum starting from none." in out.attrs["description"] ) @@ -1288,7 +1288,7 @@ def test_maximum_consecutive_warm_days(): out = atmos.maximum_consecutive_warm_days(tasmax) np.testing.assert_array_equal(out[1, :], np.array([13, 21, 6, 10])) assert ( - "Annual longest spell of consecutive days with tmax above 25 degc." + "Annual longest spell of consecutive days with maximum daily temperature above 25 degc." in out.description ) @@ -1338,10 +1338,13 @@ def test_freezethaw_spell_frequency(self): ) np.testing.assert_array_equal(out.isel(location=-1), [1, 0, 1, 1]) - assert out.attrs["long_name"] == "Frequency of daily freeze-thaw spells" + assert out.attrs["long_name"] == ( + "Frequency of events where maximum daily temperatures are above 0 degc " + "and minimum daily temperatures are at or below 0 degc for at least 2 consecutive day(s)." + ) assert out.attrs["description"] in [ - "Annual number of freeze-thaw spells, where maximum daily temperatures are above 0 degc and minimum daily " - "temperatures are at or below 0 degc for at least 2 consecutive day(s)." + "Annual number of freeze-thaw spells, where maximum daily temperatures are above 0 degc " + "and minimum daily temperatures are at or below 0 degc for at least 2 consecutive day(s)." ] def test_freezethaw_spell_mean_length(self): @@ -1363,10 +1366,13 @@ def test_freezethaw_spell_mean_length(self): ) np.testing.assert_array_equal(out.isel(location=-1), [2, 0, 2, 2]) - assert out.attrs["long_name"] == "Average length of daily freeze-thaw spells" + assert out.attrs["long_name"] == ( + "Average length of events where maximum daily temperatures are above 0 degc " + "and minimum daily temperatures are at or below 0 degc for at least 2 consecutive day(s)." + ) assert out.attrs["description"] in [ - "Annual average length of freeze-thaw spells, where maximum daily temperatures are above 0 degc and " - "minimum daily temperatures are at or below 0 degc for at least 2 consecutive day(s)." + "Annual average length of freeze-thaw spells, where maximum daily temperatures are above 0 degc " + "and minimum daily temperatures are at or below 0 degc for at least 2 consecutive day(s)." ] def test_freezethaw_spell_max_length(self): @@ -1386,8 +1392,11 @@ def test_freezethaw_spell_max_length(self): ) np.testing.assert_array_equal(out.isel(location=-1), [2, 0, 2, 2]) - assert out.attrs["long_name"] == "Maximal length of freeze-thaw spells" + assert out.attrs["long_name"] == ( + "Maximal length of events where maximum daily temperatures are above 0 degc " + "and minimum daily temperatures are at or below 0 degc for at least 2 consecutive day(s)." + ) assert out.attrs["description"] in [ - "Annual maximal length of freeze-thaw spells, where maximum daily temperatures are above 0 degc and " - "minimum daily temperatures are at or below 0 degc for at least 2 consecutive day(s)." + "Annual maximal length of freeze-thaw spells, where maximum daily temperatures are above 0 degc " + "and minimum daily temperatures are at or below 0 degc for at least 2 consecutive day(s)." ] From 3a982e24eaace205e7b8884c5e8503d278fa741b Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 31 Oct 2022 17:42:11 -0400 Subject: [PATCH 100/106] more test fixes --- xclim/indicators/atmos/_precip.py | 2 +- xclim/indicators/atmos/_temperature.py | 2 +- xclim/testing/tests/test_indicators.py | 10 ++++++++-- xclim/testing/tests/test_temperature.py | 11 ++++++++++- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/xclim/indicators/atmos/_precip.py b/xclim/indicators/atmos/_precip.py index 50229a532..0bfb79c0e 100644 --- a/xclim/indicators/atmos/_precip.py +++ b/xclim/indicators/atmos/_precip.py @@ -144,7 +144,7 @@ class HrPrecip(Hourly): identifier="wetdays", units="days", standard_name="number_of_days_with_lwe_thickness_of_precipitation_amount_at_or_above_threshold", - long_name="Number of days with daily precipitation at or above {thresh})", + long_name="Number of days with daily precipitation at or above {thresh}", description="{freq} number of days with daily precipitation at or above {thresh}.", abstract="The number of days with daily precipitation at or above a given threshold.", cell_methods="time: sum over days", diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 01afd259a..2458fa059 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -535,7 +535,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): title="Freeze-thaw spell frequency", identifier="freezethaw_spell_frequency", units="days", - long_name="Frequency of events where maximum daily temperatures are above {thresh_tasmax}" + long_name="Frequency of events where maximum daily temperatures are above {thresh_tasmax} " "and minimum daily temperatures are at or below {thresh_tasmin} for at least {window} consecutive day(s).", description="{freq} number of freeze-thaw spells, where maximum daily temperatures are above {thresh_tasmax} " "and minimum daily temperatures are at or below {thresh_tasmin} for at least {window} consecutive day(s).", diff --git a/xclim/testing/tests/test_indicators.py b/xclim/testing/tests/test_indicators.py index adcf60158..0fcf904c1 100644 --- a/xclim/testing/tests/test_indicators.py +++ b/xclim/testing/tests/test_indicators.py @@ -503,12 +503,18 @@ def test_identifier(): def test_formatting(pr_series): out = atmos.wetdays(pr_series(np.arange(366)), thresh=1.0 * units.mm / units.day) # pint 0.10 now pretty print day as d. - assert out.attrs["long_name"] == "Number of wet days" + assert ( + out.attrs["long_name"] + == "Number of days with daily precipitation at or above 1 mm/d" + ) assert out.attrs["description"] in [ "Annual number of days with daily precipitation at or above 1 mm/d." ] out = atmos.wetdays(pr_series(np.arange(366)), thresh=1.5 * units.mm / units.day) - assert out.attrs["long_name"] == "Number of wet days" + assert ( + out.attrs["long_name"] + == "Number of days with daily precipitation at or above 1.5 mm/d" + ) assert out.attrs["description"] in [ "Annual number of days with daily precipitation at or above 1.5 mm/d." ] diff --git a/xclim/testing/tests/test_temperature.py b/xclim/testing/tests/test_temperature.py index 7943393d1..338104e0c 100644 --- a/xclim/testing/tests/test_temperature.py +++ b/xclim/testing/tests/test_temperature.py @@ -1224,9 +1224,18 @@ def test_degree_days_exceedance_date(): sum_thresh="200 K days", ) np.testing.assert_array_equal(out, np.array([[153, 136, 9, 6]]).T) + assert ( + "Day of year when the integral of degree days (mean daily temperature > 4 degc) exceeds 200 k days." + in out.attrs["description"] + ) + + out = atmos.degree_days_exceedance_date( + tas=tas, thresh="4 degC", op=">", sum_thresh="200 K days", after_date="07-01" + ) + np.testing.assert_array_equal(out, np.array([[153, 136, 9, 6]]).T) assert ( "Day of year when the integral of degree days (mean daily temperature > 4 degc) " - "exceeds 200 k days, with the cumulative sum starting from none." + "exceeds 200 k days, with the cumulative sum starting from 07-01." in out.attrs["description"] ) From 96009017a9dd5129a7b460ca26f6fa109ed5ad47 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Mon, 31 Oct 2022 17:57:34 -0400 Subject: [PATCH 101/106] fix heat_wave_index docstring, fix after_date values --- xclim/data/fr.json | 2 +- xclim/indicators/atmos/_temperature.py | 2 +- xclim/testing/tests/test_temperature.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index fd1af9326..ccff634ce 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -314,7 +314,7 @@ "abstract": "Durée totale des vagues de chaleur en somme de jours. Une vague de chaleur se produit lorsque les températures minimale et maximale quotidiennes excèdent des seuils donnés durant un certain nombre de jours." }, "HEAT_WAVE_INDEX": { - "long_name": "Nombre total de jours constituant des événements d'au moins {window} jours consécutifs ayant une température maximale quotidienne au-dessus {thresh_tasmax}", + "long_name": "Nombre total de jours constituant des événements d'au moins {window} jours consécutifs ayant une température maximale quotidienne au-dessus {thresh}", "description": "Nombre {freq:m} de jours de vague de chaleur. Une vague de chaleur se produit lorsque la température maximale quotidienne excède {thresh} durant au moins {window} jours.", "title": "Indice de vague de chaleur", "abstract": "Nombre de jours de vagues de chaleur. Une vague de chaleur se produit lorsque la température maximale quotidienne excède un seuil donné durant un certain nombre de jours." diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 2458fa059..f8d1d57f3 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -245,7 +245,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): units="days", standard_name="heat_wave_index", long_name="Total number of days constituting events of at least {window} consecutive days " - "with daily maximum temperature above {thresh_tasmax}", + "with daily maximum temperature above {thresh}", description="{freq} total number of days that are part of a heatwave within a given period. " "A heat wave occurs when daily maximum temperatures exceed {thresh} over at least {window} days.", abstract="Number of days that constitute heatwave events. A heat wave occurs when daily minimum and maximum " diff --git a/xclim/testing/tests/test_temperature.py b/xclim/testing/tests/test_temperature.py index 338104e0c..147570dad 100644 --- a/xclim/testing/tests/test_temperature.py +++ b/xclim/testing/tests/test_temperature.py @@ -1232,7 +1232,7 @@ def test_degree_days_exceedance_date(): out = atmos.degree_days_exceedance_date( tas=tas, thresh="4 degC", op=">", sum_thresh="200 K days", after_date="07-01" ) - np.testing.assert_array_equal(out, np.array([[153, 136, 9, 6]]).T) + np.testing.assert_array_equal(out, np.array([[199, 193, 190, 190]]).T) assert ( "Day of year when the integral of degree days (mean daily temperature > 4 degc) " "exceeds 200 k days, with the cumulative sum starting from 07-01." From a60c7f1b9375ffd5c442940038e11f212f36ddea Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 1 Nov 2022 10:07:04 -0400 Subject: [PATCH 102/106] temporarily disable dded --- xclim/indicators/atmos/_temperature.py | 50 +++++++++++++------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index f8d1d57f3..47b2e6ccf 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -74,7 +74,7 @@ "growing_season_end", "growing_season_length", "tropical_nights", - "degree_days_exceedance_date", + # "degree_days_exceedance_date", # temporarily disabled "warm_spell_duration_index", "maximum_consecutive_warm_days", "fire_season", @@ -1087,30 +1087,30 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): compute=indices.tn10p, ) - -degree_days_exceedance_date = Temp( - title="Degree day exceedance date", - identifier="degree_days_exceedance_date", - units="", - standard_name="day_of_year", - long_name=lambda **kws: "Day of year when the integral of mean daily temperature {op} {thresh} exceeds {sum_thresh}" - + ( - ", with the cumulative sum starting from {after_date}" - if kws["after_date"] is not None - else "" - ), - description=lambda **kws: "Day of year when the integral of degree days (mean daily temperature {op} {thresh}) " - "exceeds {sum_thresh}" - + ( - ", with the cumulative sum starting from {after_date}." - if kws["after_date"] is not None - else "." - ), - abstract="The day of the year when the sum of degree days exceeds a threshold, occurring after a given date. " - "Degree days are calculated above or below a given temperature threshold.", - cell_methods="", - compute=indices.degree_days_exceedance_date, -) +# FIXME: This is crashing CLI tests +# degree_days_exceedance_date = Temp( +# title="Degree day exceedance date", +# identifier="degree_days_exceedance_date", +# units="", +# standard_name="day_of_year", +# long_name=lambda **kws: "Day of year when the integral of mean daily temperature {op} {thresh} exceeds {sum_thresh}" +# + ( +# ", with the cumulative sum starting from {after_date}" +# if kws["after_date"] is not None +# else "" +# ), +# description=lambda **kws: "Day of year when the integral of degree days (mean daily temperature {op} {thresh}) " +# "exceeds {sum_thresh}" +# + ( +# ", with the cumulative sum starting from {after_date}." +# if kws["after_date"] is not None +# else "." +# ), +# abstract="The day of the year when the sum of degree days exceeds a threshold, occurring after a given date. " +# "Degree days are calculated above or below a given temperature threshold.", +# cell_methods="", +# compute=indices.degree_days_exceedance_date, +# ) warm_spell_duration_index = Temp( From 71945c397cde4f16d581da491fae3a8299b4940f Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 1 Nov 2022 10:36:34 -0400 Subject: [PATCH 103/106] fix bad kwarg --- xclim/data/fr.json | 2 +- xclim/indicators/atmos/_temperature.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/xclim/data/fr.json b/xclim/data/fr.json index ccff634ce..25afcd9dd 100644 --- a/xclim/data/fr.json +++ b/xclim/data/fr.json @@ -500,7 +500,7 @@ "abstract": "Cumul des degrés-jours pour les jours où la température moyenne quotidienne est au-dessus d'un seuil donné, habituellement 0°C." }, "BIOLOGICALLY_EFFECTIVE_DEGREE_DAYS": { - "long_name": "Intégrale de la température moyenne quotidienne au-dessus de {thresh}, avec une valeur maximale de {max_daily_degree_days}, multipliée par un coefficient de longueur de jour et un modificateur de plage de température basé sur la méthode {method} pour les jours compris entre {start_date} et {end_date}", + "long_name": "Intégrale de la température moyenne quotidienne au-dessus de {thresh_tasmin}, avec une valeur maximale de {max_daily_degree_days}, multipliée par un coefficient de longueur de jour et un modificateur de plage de température basé sur la méthode {method} pour les jours compris entre {start_date} et {end_date}", "description": "Cumul des degrés-jours borné par la température minimale quotidienne sous {thresh_tasmin} et la différence entre les températures maximale et minimale quotiennes sous {max_daily_degree_days} . Les degrés jours quotidiens sont corrigés selon la différence entre les températures maximale et minimale quotiennes et selon un coefficient de durée du jour `k` dépendant de la latitude et le coefficient `TR_adj` est un modificateur qui tient compte des grandes variations de température.", "title": "Degrés-jours biologiquement actifs", "comment": "Formule originale prise de Gladstones 1992.", diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 47b2e6ccf..91fd479a2 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -1188,9 +1188,9 @@ def cfcheck(self, tas, snd=None): title="Biologically effective degree days", identifier="biologically_effective_degree_days", units="K days", - long_name="Integral of mean daily temperature above {thresh}, with maximum value of {max_daily_degree_days}, " - "multiplied by day-length coefficient and temperature range modifier based on {method} method for days between " - "{start_date} and {end_date}", + long_name="Integral of mean daily temperature above {thresh_tasmin}, with maximum value of " + "{max_daily_degree_days}, multiplied by day-length coefficient and temperature range modifier based on {method} " + "method for days between {start_date} and {end_date}", description="Heat-summation index for agroclimatic suitability estimation, developed specifically for viticulture. " "Computed with {method} formula (Summation of min((max((Tn + Tx)/2 - {thresh_tasmin}, 0) * k) + TR_adj, Dmax), " "where coefficient `k` is a latitude-based day-length for days between {start_date} and {end_date}), " From 407ab1265f2736792778d8b01122052ab1ed5a55 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 1 Nov 2022 11:04:03 -0400 Subject: [PATCH 104/106] Revert "temporarily disable dded" This reverts commit a60c7f1b9375ffd5c442940038e11f212f36ddea. --- xclim/indicators/atmos/_temperature.py | 50 +++++++++++++------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index 91fd479a2..c296225dc 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -74,7 +74,7 @@ "growing_season_end", "growing_season_length", "tropical_nights", - # "degree_days_exceedance_date", # temporarily disabled + "degree_days_exceedance_date", "warm_spell_duration_index", "maximum_consecutive_warm_days", "fire_season", @@ -1087,30 +1087,30 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): compute=indices.tn10p, ) -# FIXME: This is crashing CLI tests -# degree_days_exceedance_date = Temp( -# title="Degree day exceedance date", -# identifier="degree_days_exceedance_date", -# units="", -# standard_name="day_of_year", -# long_name=lambda **kws: "Day of year when the integral of mean daily temperature {op} {thresh} exceeds {sum_thresh}" -# + ( -# ", with the cumulative sum starting from {after_date}" -# if kws["after_date"] is not None -# else "" -# ), -# description=lambda **kws: "Day of year when the integral of degree days (mean daily temperature {op} {thresh}) " -# "exceeds {sum_thresh}" -# + ( -# ", with the cumulative sum starting from {after_date}." -# if kws["after_date"] is not None -# else "." -# ), -# abstract="The day of the year when the sum of degree days exceeds a threshold, occurring after a given date. " -# "Degree days are calculated above or below a given temperature threshold.", -# cell_methods="", -# compute=indices.degree_days_exceedance_date, -# ) + +degree_days_exceedance_date = Temp( + title="Degree day exceedance date", + identifier="degree_days_exceedance_date", + units="", + standard_name="day_of_year", + long_name=lambda **kws: "Day of year when the integral of mean daily temperature {op} {thresh} exceeds {sum_thresh}" + + ( + ", with the cumulative sum starting from {after_date}" + if kws["after_date"] is not None + else "" + ), + description=lambda **kws: "Day of year when the integral of degree days (mean daily temperature {op} {thresh}) " + "exceeds {sum_thresh}" + + ( + ", with the cumulative sum starting from {after_date}." + if kws["after_date"] is not None + else "." + ), + abstract="The day of the year when the sum of degree days exceeds a threshold, occurring after a given date. " + "Degree days are calculated above or below a given temperature threshold.", + cell_methods="", + compute=indices.degree_days_exceedance_date, +) warm_spell_duration_index = Temp( From af1ae713f5e6d27e4ac20149a3aff6825ddea801 Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 1 Nov 2022 11:33:42 -0400 Subject: [PATCH 105/106] remove lambda from long_name --- xclim/indicators/atmos/_temperature.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/xclim/indicators/atmos/_temperature.py b/xclim/indicators/atmos/_temperature.py index c296225dc..a4affe4a4 100644 --- a/xclim/indicators/atmos/_temperature.py +++ b/xclim/indicators/atmos/_temperature.py @@ -1093,12 +1093,7 @@ class TempWithIndexing(ResamplingIndicatorWithIndexing): identifier="degree_days_exceedance_date", units="", standard_name="day_of_year", - long_name=lambda **kws: "Day of year when the integral of mean daily temperature {op} {thresh} exceeds {sum_thresh}" - + ( - ", with the cumulative sum starting from {after_date}" - if kws["after_date"] is not None - else "" - ), + long_name="Day of year when the integral of mean daily temperature {op} {thresh} exceeds {sum_thresh}", description=lambda **kws: "Day of year when the integral of degree days (mean daily temperature {op} {thresh}) " "exceeds {sum_thresh}" + ( From a17413a786ca4b3cc559746bb2e635cb3670078b Mon Sep 17 00:00:00 2001 From: Zeitsperre <10819524+Zeitsperre@users.noreply.github.com> Date: Tue, 1 Nov 2022 11:45:50 -0400 Subject: [PATCH 106/106] more accurate HISTORY.rst --- HISTORY.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index a763f496d..5e8916c7d 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -36,8 +36,8 @@ Breaking changes * Running `pytest` now requires the `pytest-dist` distributed testing dependency. This library has been added to the `dev` requirements and conda environment configuration. (:pull:`1203`). * Parameters ``reducer`` and ``window`` in ``xclim.indices.rle_statistics`` are now positional. (:pull:`1161`). * The ``relative_annual_cycle_amplitude`` and ``annual_cycle_amplitude`` have been rewritten to match the version defined in the VALUE project, outputs will change drastically (for the better) (:pull:`1198`). -* English indicator metadata has been adjusted to remove frequencies and other variable-sourced fields in the `long_name` of indicators. English indicators now have an explicit `title` and `abstract`. (:issue:`936`, :pull:`1123`). -* French indicator metadata translations are now more uniform and follow agreed-upon grammar conventions, removing variable-sourced fields in `long_name_fr`. (:issue:`936`, :pull:`1123`). +* English indicator metadata has been adjusted to remove frequencies from fields in the `long_name` of indicators. English indicators now have an explicit `title` and `abstract`. (:issue:`936`, :pull:`1123`). +* French indicator metadata translations are now more uniform and more closely follow agreed-upon grammar conventions, while also removing frequency fields in `long_name_fr`. (:issue:`936`, :pull:`1123`). * The ``freshet_start`` indice is now deprecated in favour of ``first_day_temperature_above`` with `thresh='0 degC', window=5`. The `freshet_start` indicator is now based on ``first_day_temperature_above``, but is otherwise unaffected. (:issue:`1195`, :pull:`1196`). * Call signatures for several indices/indicators have been modified to optionally accept `op` for manually setting threshold comparison operators (:issue:`1194`, :pull:`1197`). The affected indices and indicators as follows: - ``hot_spell_max_length``, ``hot_spell_frequency``, ``cold_spell_days``, ``cold_spell_frequency``, ``heat_wave_index``, ``warm_day_frequency`` (indice only), ``warm_night_frequency`` (indice only), ``dry_days``, ``wetdays``, ``wetdays_prop``.