{"processes":[{"id":"load_collection","summary":"Load a collection","description":"Loads a collection from the current back-end by its id and returns it as a processable data cube.","parameters":[{"name":"id","description":"Collection ID","schema":{"type":"string"}},{"name":"spatial_extent","description":"Bounding box filter","optional":true,"default":null,"schema":[{"type":"object"},{"type":"null"}]},{"name":"temporal_extent","description":"Date range filter as [start, end]","optional":true,"default":null,"schema":[{"type":"array"},{"type":"null"}]},{"name":"bands","description":"Variable names to load","optional":true,"default":null,"schema":[{"type":"array","items":{"type":"string"}},{"type":"null"}]}],"returns":{"description":"A data cube for further processing.","schema":{"type":"object"}},"links":[{"rel":"about","href":"https://processes.openeo.org/#load_collection"}]},{"id":"save_result","summary":"Save processed data to storage","description":"Saves processed data to the local user workspace.","parameters":[{"name":"data","description":"The data to save","schema":{"type":"object"}},{"name":"format","description":"Output format (e.g. Zarr, JSON, GeoParquet)","schema":{"type":"string"}},{"name":"options","description":"Format-specific output options","optional":true,"default":{},"schema":{"type":"object"}}],"returns":{"description":"false if saving was not successfully finished.","schema":{"type":"boolean"}},"links":[{"rel":"about","href":"https://processes.openeo.org/#save_result"}]},{"id":"absolute","summary":"Absolute value","description":"Computes the absolute value of a real number `x`, which is the \"unsigned\" portion of x and often denoted as *|x|*.\n\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed absolute value.","schema":{"type":["number","null"],"minimum":0}},"examples":[{"arguments":{"x":0},"returns":0},{"arguments":{"x":3.5},"returns":3.5},{"arguments":{"x":-0.4},"returns":0.4},{"arguments":{"x":-3.5},"returns":3.5}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/AbsoluteValue.html","title":"Absolute value explained by Wolfram MathWorld"}],"process_graph":{"lt":{"process_id":"lt","arguments":{"x":{"from_parameter":"x"},"y":0}},"multiply":{"process_id":"multiply","arguments":{"x":{"from_parameter":"x"},"y":-1}},"if":{"process_id":"if","arguments":{"value":{"from_node":"lt"},"accept":{"from_node":"multiply"},"reject":{"from_parameter":"x"}},"result":true}}},{"id":"add","summary":"Addition of two numbers","description":"Sums up the two numbers `x` and `y` (*`x + y`*) and returns the computed sum.\n\nNo-data values are taken into account so that `null` is returned if any element is such a value.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it.","categories":["math"],"parameters":[{"name":"x","description":"The first summand.","schema":{"type":["number","null"]}},{"name":"y","description":"The second summand.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed sum of the two numbers.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":5,"y":2.5},"returns":7.5},{"arguments":{"x":-2,"y":-4},"returns":-6},{"arguments":{"x":1,"y":null},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Sum.html","title":"Sum explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}],"process_graph":{"sum":{"process_id":"sum","arguments":{"data":[{"from_parameter":"x"},{"from_parameter":"y"}],"ignore_nodata":false},"result":true}}},{"id":"add_dimension","summary":"Add a new dimension","description":"Adds a new named dimension to the data cube.\n\nAfterwards, the dimension can be referred to with the specified `name`. If a dimension with the specified name exists, the process fails with a `DimensionExists` exception. The dimension label of the dimension is set to the specified `label`.","categories":["cubes"],"parameters":[{"name":"data","description":"A data cube to add the dimension to.","schema":{"type":"object","subtype":"datacube"}},{"name":"name","description":"Name for the dimension.","schema":{"type":"string"}},{"name":"label","description":"A dimension label.","schema":[{"type":"number"},{"type":"string"}]},{"name":"type","description":"The type of dimension, defaults to `other`.","schema":{"type":"string","enum":["bands","geometry","spatial","temporal","other"]},"default":"other","optional":true}],"returns":{"description":"The data cube with a newly added dimension. The new dimension has exactly one dimension label. All other dimensions remain unchanged.","schema":{"type":"object","subtype":"datacube"}},"exceptions":{"DimensionExists":{"message":"A dimension with the specified name already exists."}}},{"id":"aggregate_dekads","summary":"Aggregate a dekadal cube to months or ISO weeks, weighted by day overlap","description":"Aggregate dekads to ``period``, weighting each by the days it shares with the target.\n\n``mean`` treats each value as a mean daily rate and returns the day-weighted average,\nso the units are unchanged. ``sum`` treats each value as a total accumulated over its\ndekad, converts it to a daily rate, and sums over the target's days — exact regardless\nof dekad length.\n\nBoth are NaN-aware per pixel — a dekad missing over part of the grid does not poison the\nwhole target period there — but they handle the gap differently, because the right answer\ndiffers:\n\n* ``mean`` **renormalises**: the missing dekad's weight leaves the denominator, so the\n  result is the day-weighted mean of the dekads that do exist. A rate estimated from two\n  dekads is still a rate.\n* ``sum`` **omits**: the missing dekad contributes nothing and the rest are not scaled up,\n  so the result is a *partial* total. Renormalising would be extrapolation — inventing\n  accumulation that was never observed — so the total reports only what is there.\n\nA pixel with no data at all in a target period stays NaN rather than becoming 0.\n\nThe same asymmetry applies to a partially covered period at either end of the record,\nwhere only some of its dekads were loaded: the ``mean`` is well defined, while a ``sum``\nis a partial total. That case is detectable from the weights alone rather than per pixel,\nso it is logged — silently returning a month's total computed from one dekad is the kind\nof number that gets published.","parameters":[{"name":"data","schema":{},"description":"Dekadal data cube (timesteps on the 1st, 11th and 21st)."},{"name":"period","schema":{"type":"string"},"description":"Target period: 'month' (default) or 'week'.","optional":true,"default":"month"},{"name":"method","schema":{"type":"string"},"description":"'mean' (default) for a per-day rate — the day-weighted average daily value, in the same units. 'sum' for a per-dekad total — reallocated by day overlap into a target-period total.","optional":true,"default":"mean"}],"returns":{"schema":{}}},{"id":"aggregate_spatial","summary":"Aggregate spatial data within geometries","description":"Aggregate raster values within each polygon using the supplied reducer.","parameters":[{"name":"data","schema":{},"description":"A raster data cube."},{"name":"geometries","schema":{},"description":"GeoJSON FeatureCollection, Feature, or geometry."},{"name":"reducer","schema":{},"description":"A reducer to apply on the pixel values."},{"name":"target_dimension","schema":{"type":["string","null"]},"description":"Name for the new geometry dimension (default: 'geometry').","optional":true,"default":null},{"name":"context","schema":{},"description":"Optional context passed to the reducer.","optional":true,"default":null}],"returns":{"schema":{}}},{"id":"aggregate_temporal","summary":"Temporal aggregations","description":"Computes a temporal aggregation based on an array of temporal intervals.\n\nFor common regular calendar hierarchies such as year, month, week or seasons ``aggregate_temporal_period()`` can be used. Other calendar hierarchies must be transformed into specific intervals by the clients.\n\nFor each interval, all data along the dimension will be passed through the reducer.\n\nThe computed values will be projected to the labels. If no labels are specified, the start of the temporal interval will be used as label for the corresponding values. In case of a conflict (i.e. the user-specified values for the start times of the temporal intervals are not distinct), the user-defined labels must be specified in the parameter `labels` as otherwise a `DistinctDimensionLabelsRequired` exception would be thrown. The number of user-defined labels and the number of intervals need to be equal.\n\nIf the dimension is not set or is set to `null`, the data cube is expected to only have one temporal dimension.","categories":["cubes","aggregate"],"parameters":[{"name":"data","description":"A data cube.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"temporal"}]}},{"name":"intervals","description":"Left-closed temporal intervals, which are allowed to overlap. Each temporal interval in the array has exactly two elements:\n\n1. The first element is the start of the temporal interval. The specified time instant is **included** in the interval.\n2. The second element is the end of the temporal interval. The specified time instant is **excluded** from the interval.\n\nThe second element must always be greater/later than the first element, except when using time without date. Otherwise, a `TemporalExtentEmpty` exception is thrown.","schema":{"type":"array","subtype":"temporal-intervals","minItems":1,"items":{"type":"array","subtype":"temporal-interval","uniqueItems":true,"minItems":2,"maxItems":2,"items":{"anyOf":[{"type":"string","format":"date-time","subtype":"date-time","description":"Date and time with a time zone."},{"type":"string","format":"date","subtype":"date","description":"Date only, formatted as `YYYY-MM-DD`. The time zone is UTC. Missing time components are all 0."},{"type":"string","subtype":"time","pattern":"^\\d{2}:\\d{2}:\\d{2}$","description":"Time only, formatted as `HH:MM:SS`. The time zone is UTC."},{"type":"null"}]}},"examples":[[["2015-01-01","2016-01-01"],["2016-01-01","2017-01-01"],["2017-01-01","2018-01-01"]],[["06:00:00","18:00:00"],["18:00:00","06:00:00"]]]}},{"name":"reducer","description":"A reducer to be applied for the values contained in each interval. A reducer is a single process such as ``mean()`` or a set of processes, which computes a single value for a list of values, see the category 'reducer' for such processes. Intervals may not contain any values, which for most reducers leads to no-data (`null`) values by default.","schema":{"type":"object","subtype":"process-graph","parameters":[{"name":"data","description":"A labeled array with elements of any type. If there's no data for the interval, the array is empty.","schema":{"type":"array","subtype":"labeled-array","items":{"description":"Any data type."}}},{"name":"context","description":"Additional data passed by the user.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"The value to be set in the new data cube.","schema":{"description":"Any data type."}}}},{"name":"labels","description":"Distinct labels for the intervals, which can contain dates and/or times. Is only required to be specified if the values for the start of the temporal intervals are not distinct and thus the default labels would not be unique. The number of labels and the number of groups need to be equal.","schema":{"type":"array","items":{"type":["number","string"]}},"default":[],"optional":true},{"name":"dimension","description":"The name of the temporal dimension for aggregation. All data along the dimension is passed through the specified reducer. If the dimension is not set or set to `null`, the data cube is expected to only have one temporal dimension. Fails with a `TooManyDimensions` exception if it has more dimensions. Fails with a `DimensionNotAvailable` exception if the specified dimension does not exist.","schema":{"type":["string","null"]},"default":null,"optional":true},{"name":"context","description":"Additional data to be passed to the reducer.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"A new data cube with the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged, except for the resolution and dimension labels of the given temporal dimension.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"temporal"}]}},"examples":[{"arguments":{"data":{"from_parameter":"data"},"intervals":[["2015-01-01","2016-01-01"],["2016-01-01","2017-01-01"],["2017-01-01","2018-01-01"],["2018-01-01","2019-01-01"],["2019-01-01","2020-01-01"]],"labels":["2015","2016","2017","2018","2019"],"reducer":{"process_graph":{"mean1":{"process_id":"mean","arguments":{"data":{"from_parameter":"data"}},"result":true}}}}}],"exceptions":{"TooManyDimensions":{"message":"The data cube contains multiple temporal dimensions. The parameter `dimension` must be specified."},"DimensionNotAvailable":{"message":"A dimension with the specified name does not exist."},"DistinctDimensionLabelsRequired":{"message":"The dimension labels have duplicate values. Distinct labels must be specified."},"TemporalExtentEmpty":{"message":"At least one of the intervals is empty. The second instant in time must always be greater/later than the first instant."}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#aggregate","rel":"about","title":"Aggregation explained in the openEO documentation"},{"href":"https://www.rfc-editor.org/rfc/rfc3339.html","rel":"about","title":"RFC3339: Details about formatting temporal strings"}]},{"id":"aggregate_temporal_period","summary":"Temporal aggregations based on calendar hierarchies","description":"Computes a temporal aggregation based on calendar hierarchies such as years, months or seasons. For other calendar hierarchies ``aggregate_temporal()`` can be used.\n\nFor each interval, all data along the dimension will be passed through the reducer.\n\nIf the dimension is not set or is set to `null`, the data cube is expected to only have one temporal dimension.","categories":["aggregate","climatology","cubes"],"parameters":[{"name":"data","description":"The source data cube.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"temporal"}]}},{"name":"period","description":"The time intervals to aggregate. The following pre-defined values are available:\n\n* `hour`: Hour of the day\n* `day`: Day of the year\n* `week`: Week of the year\n* `dekad`: Ten day periods, counted per year with three periods per month (day 1 - 10, 11 - 20 and 21 - end of month). The third dekad of the month can range from 8 to 11 days. For example, the third dekad of a year spans from January 21 till January 31 (11 days), the fourth dekad spans from February 1 till February 10 (10 days) and the sixth dekad spans from February 21 till February 28 or February 29 in a leap year (8 or 9 days respectively).\n* `month`: Month of the year\n* `season`: Three month periods of the calendar seasons (December - February, March - May, June - August, September - November).\n* `tropical-season`: Six month periods of the tropical seasons (November - April, May - October).\n* `year`: Proleptic years\n* `decade`: Ten year periods ([0-to-9 decade](https://en.wikipedia.org/wiki/Decade#0-to-9_decade)), from a year ending in a 0 to the next year ending in a 9.\n* `decade-ad`: Ten year periods ([1-to-0 decade](https://en.wikipedia.org/wiki/Decade#1-to-0_decade)) better aligned with the anno Domini (AD) calendar era, from a year ending in a 1 to the next year ending in a 0.","schema":{"type":"string","enum":["hour","day","week","dekad","month","season","tropical-season","year","decade","decade-ad"]}},{"name":"reducer","description":"A reducer to be applied for the values contained in each period. A reducer is a single process such as ``mean()`` or a set of processes, which computes a single value for a list of values, see the category 'reducer' for such processes. Periods may not contain any values, which for most reducers leads to no-data (`null`) values by default.","schema":{"type":"object","subtype":"process-graph","parameters":[{"name":"data","description":"A labeled array with elements of any type. If there's no data for the period, the array is empty.","schema":{"type":"array","subtype":"labeled-array","items":{"description":"Any data type."}}},{"name":"context","description":"Additional data passed by the user.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"The value to be set in the new data cube.","schema":{"description":"Any data type."}}}},{"name":"dimension","description":"The name of the temporal dimension for aggregation. All data along the dimension is passed through the specified reducer. If the dimension is not set or set to `null`, the source data cube is expected to only have one temporal dimension. Fails with a `TooManyDimensions` exception if it has more dimensions. Fails with a `DimensionNotAvailable` exception if the specified dimension does not exist.","schema":{"type":["string","null"]},"optional":true,"default":null},{"name":"context","description":"Additional data to be passed to the reducer.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"A new data cube with the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged, except for the resolution and dimension labels of the given temporal dimension. The specified temporal dimension has the following dimension labels (`YYYY` = four-digit year, `MM` = two-digit month, `DD` two-digit day of month):\n\n* `hour`: `YYYY-MM-DD-00` - `YYYY-MM-DD-23`\n* `day`: `YYYY-001` - `YYYY-365`\n* `week`: `YYYY-01` - `YYYY-52`\n* `dekad`: `YYYY-00` - `YYYY-36`\n* `month`: `YYYY-01` - `YYYY-12`\n* `season`: `YYYY-djf` (December - February), `YYYY-mam` (March - May), `YYYY-jja` (June - August), `YYYY-son` (September - November).\n* `tropical-season`: `YYYY-ndjfma` (November - April), `YYYY-mjjaso` (May - October).\n* `year`: `YYYY`\n* `decade`: `YYY0`\n* `decade-ad`: `YYY1`\n\nThe dimension labels in the new data cube are complete for the whole extent of the source data cube. For example, if `period` is set to `day` and the source data cube has two dimension labels at the beginning of the year (`2020-01-01`) and the end of a year (`2020-12-31`), the process returns a data cube with 365 dimension labels (`2020-001`, `2020-002`, ..., `2020-365`). In contrast, if `period` is set to `day` and the source data cube has just one dimension label `2020-01-05`, the process returns a data cube with just a single dimension label (`2020-005`).","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"temporal"}]}},"exceptions":{"TooManyDimensions":{"message":"The data cube contains multiple temporal dimensions. The parameter `dimension` must be specified."},"DimensionNotAvailable":{"message":"A dimension with the specified name does not exist."},"DistinctDimensionLabelsRequired":{"message":"The dimension labels have duplicate values. Distinct labels must be specified."}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#aggregate","rel":"about","title":"Aggregation explained in the openEO documentation"}]},{"id":"all","summary":"Are all of the values true?","description":"Checks if **all** of the values in `data` are true. If no value is given (i.e. the array is empty) the process returns `null`.\n\nBy default all no-data values are ignored so that the process returns `null` if all values are no-data, `true` if all values are true and `false` otherwise. Setting the `ignore_nodata` flag to `false` takes no-data values into account and the array values are reduced pairwise according to the following truth table:\n\n```\n      || null  | false | true\n----- || ----- | ----- | -----\nnull  || null  | false | null\nfalse || false | false | false\ntrue  || null  | false | true\n```\n\n**Remark:** The process evaluates all values from the first to the last element and stops once the outcome is unambiguous. A result is ambiguous unless a value is `false` or all values have been taken into account.","categories":["logic","reducer"],"parameters":[{"name":"data","description":"A set of boolean values.","schema":{"type":"array","items":{"type":["boolean","null"]}}},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not and ignores them by default.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"Boolean result of the logical operation.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"data":[false,null]},"returns":false},{"arguments":{"data":[true,null]},"returns":true},{"arguments":{"data":[false,null],"ignore_nodata":false},"returns":false},{"arguments":{"data":[true,null],"ignore_nodata":false},"returns":null},{"arguments":{"data":[true,false,true,false]},"returns":false},{"arguments":{"data":[true,false]},"returns":false},{"arguments":{"data":[true,true]},"returns":true},{"arguments":{"data":[true]},"returns":true},{"arguments":{"data":[null],"ignore_nodata":false},"returns":null},{"arguments":{"data":[]},"returns":null}]},{"id":"and","summary":"Logical AND","description":"Checks if **both** values are true.\n\nEvaluates parameter `x` before `y` and stops once the outcome is unambiguous. If any argument is `null`, the result will be `null` if the outcome is ambiguous.\n\n**Truth table:**\n\n```\na \\ b || null  | false | true\n----- || ----- | ----- | -----\nnull  || null  | false | null\nfalse || false | false | false\ntrue  || null  | false | true\n```","categories":["logic"],"parameters":[{"name":"x","description":"A boolean value.","schema":{"type":["boolean","null"]}},{"name":"y","description":"A boolean value.","schema":{"type":["boolean","null"]}}],"returns":{"description":"Boolean result of the logical AND.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":true,"y":true},"returns":true},{"arguments":{"x":true,"y":false},"returns":false},{"arguments":{"x":false,"y":false},"returns":false},{"arguments":{"x":false,"y":null},"returns":false},{"arguments":{"x":true,"y":null},"returns":null}],"process_graph":{"all":{"process_id":"all","arguments":{"data":[{"from_parameter":"x"},{"from_parameter":"y"}],"ignore_nodata":false},"result":true}}},{"id":"any","summary":"Is at least one value true?","description":"Checks if **any** (i.e. at least one) value in `data` is `true`. If no value is given (i.e. the array is empty) the process returns `null`.\n\nBy default all no-data values are ignored so that the process returns `null` if all values are no-data, `true` if at least one value is true and `false` otherwise. Setting the `ignore_nodata` flag to `false` takes no-data values into account and the array values are reduced pairwise according to the following truth table:\n\n```\n      || null | false | true\n----- || ---- | ----- | ----\nnull  || null | null  | true\nfalse || null | false | true\ntrue  || true | true  | true\n```\n\n**Remark:** The process evaluates all values from the first to the last element and stops once the outcome is unambiguous. A result is ambiguous unless a value is `true`.","categories":["logic","reducer"],"parameters":[{"name":"data","description":"A set of boolean values.","schema":{"type":"array","items":{"type":["boolean","null"]}}},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not and ignores them by default.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"Boolean result of the logical operation.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"data":[false,null]},"returns":false},{"arguments":{"data":[true,null]},"returns":true},{"arguments":{"data":[false,null],"ignore_nodata":false},"returns":null},{"arguments":{"data":[true,null],"ignore_nodata":false},"returns":true},{"arguments":{"data":[true,false,true,false]},"returns":true},{"arguments":{"data":[true,false]},"returns":true},{"arguments":{"data":[false,false]},"returns":false},{"arguments":{"data":[true]},"returns":true},{"arguments":{"data":[null],"ignore_nodata":false},"returns":null},{"arguments":{"data":[]},"returns":null}]},{"id":"api","summary":"Antecedent Precipitation Index.","description":"Calculate the running weighted sum of daily precipitation values given a window and weighting exponent. This index serves as an indicator for soil moisture.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation data."},{"name":"window","schema":{"type":"number"},"description":"Window for the days of precipitation data to be weighted and summed, default is 7.","optional":true,"default":7},{"name":"p_exp","schema":{"type":"number"},"description":"Weighting exponent, default is 0.935.","optional":true,"default":0.935}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"apply","summary":"Apply a process to each value","description":"Applies a process to each value in the data cube (i.e. a local operation). In contrast, the process ``apply_dimension()`` applies a process to all values along a particular dimension.","categories":["cubes"],"parameters":[{"name":"data","description":"A data cube.","schema":{"type":"object","subtype":"datacube"}},{"name":"process","description":"A process that accepts and returns a single value and is applied on each individual value in the data cube. The process may consist of multiple sub-processes and could, for example, consist of processes such as ``absolute()`` or ``linear_scale_range()``.","schema":{"type":"object","subtype":"process-graph","parameters":[{"name":"x","description":"The value to process.","schema":{"description":"Any data type."}},{"name":"context","description":"Additional data passed by the user.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"The value to be set in the new data cube.","schema":{"description":"Any data type."}}}},{"name":"context","description":"Additional data to be passed to the process.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"A data cube with the newly computed values and the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged.","schema":{"type":"object","subtype":"datacube"}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#apply","rel":"about","title":"Apply explained in the openEO documentation"}]},{"id":"apply_dimension","summary":"Apply a process to all values along a dimension","description":"Applies a process to all values along a dimension of a data cube. For example, if the temporal dimension is specified the process will work on the values of a time series.\n\nThe process ``reduce_dimension()`` also applies a process to values along a dimension, but drops the dimension afterwards. The process ``apply()`` applies a process to each value in the data cube.\n\nThe target dimension is the source dimension if not specified otherwise in the `target_dimension` parameter. The values in the target dimension get replaced by the computed values. The name, type and reference system are preserved.\n\nThe dimension labels are preserved when the target dimension is the source dimension and the number of values in the source dimension is equal to the number of values computed by the process. Otherwise, the dimension labels will be incrementing integers starting from zero, which can be changed using ``rename_labels()`` afterwards. The number of labels will be equal to the number of values computed by the process.","categories":["cubes"],"parameters":[{"name":"data","description":"A data cube.","schema":{"type":"object","subtype":"datacube"}},{"name":"process","description":"Process to be applied on all values along the given dimension. The specified process needs to accept an array and must return an array with at least one element. A process may consist of multiple sub-processes.","schema":{"type":"object","subtype":"process-graph","parameters":[{"name":"data","description":"A labeled array with elements of any type.","schema":{"type":"array","subtype":"labeled-array","items":{"description":"Any data type."}}},{"name":"context","description":"Additional data passed by the user.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"The value to be set in the new data cube.","schema":{"type":"array","items":{"description":"Any data type."}}}}},{"name":"dimension","description":"The name of the source dimension to apply the process on. Fails with a `DimensionNotAvailable` exception if the specified dimension does not exist.","schema":{"type":"string"}},{"name":"target_dimension","description":"The name of the target dimension or `null` (the default) to use the source dimension specified in the parameter `dimension`.\n\nBy specifying a target dimension, the source dimension is removed. The target dimension with the specified name and the type `other` (see ``add_dimension()``) is created, if it doesn't exist yet.","schema":{"type":["string","null"]},"default":null,"optional":true},{"name":"context","description":"Additional data to be passed to the process.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"A data cube with the newly computed values.\n\nAll dimensions stay the same, except for the dimensions specified in corresponding parameters. There are three cases how the dimensions can change:\n\n1. The source dimension is the target dimension:\n   - The (number of) dimensions remain unchanged as the source dimension is the target dimension.\n   - The source dimension properties name and type remain unchanged.\n   - The dimension labels, the reference system and the resolution are preserved only if the number of values in the source dimension is equal to the number of values computed by the process. Otherwise, all other dimension properties change as defined in the list below.\n2. The source dimension is not the target dimension. The target dimension exists with a single label only:\n   - The number of dimensions decreases by one as the source dimension is 'dropped' and the target dimension is filled with the processed data that originates from the source dimension.\n   - The target dimension properties name and type remain unchanged. All other dimension properties change as defined in the list below.\n3. The source dimension is not the target dimension and the latter does not exist:\n   - The number of dimensions remain unchanged, but the source dimension is replaced with the target dimension.\n   - The target dimension has the specified name and the type other. All other dimension properties are set as defined in the list below.\n\nUnless otherwise stated above, for the given (target) dimension the following applies:\n\n- the number of dimension labels is equal to the number of values computed by the process,\n- the dimension labels are incrementing integers starting from zero,\n- the resolution changes, and\n- the reference system is undefined.","schema":{"type":"object","subtype":"datacube"}},"exceptions":{"DimensionNotAvailable":{"message":"A dimension with the specified name does not exist."}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#apply","rel":"about","title":"Apply explained in the openEO documentation"}]},{"id":"apply_kernel","summary":"Apply a spatial convolution with a kernel","description":"Applies a 2D convolution (i.e. a focal operation with a weighted kernel) on the horizontal spatial dimensions (axes `x` and `y`) of a raster data cube.\n\nEach value in the kernel is multiplied with the corresponding pixel value and all products are summed up afterwards. The sum is then multiplied with the factor.\n\nThe process can't handle non-numerical or infinite numerical values in the data cube. Boolean values are converted to integers (`false` = 0, `true` = 1), but all other non-numerical or infinite values are replaced with zeroes by default (see parameter `replace_invalid`).\n\nFor cases requiring more generic focal operations or non-numerical values, see ``apply_neighborhood()``.","categories":["cubes","math > image filter"],"parameters":[{"name":"data","description":"A raster data cube.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},{"name":"kernel","description":"Kernel as a two-dimensional array of weights. The inner level of the nested array aligns with the `x` axis and the outer level aligns with the `y` axis. Each level of the kernel must have an uneven number of elements, otherwise the process throws a `KernelDimensionsUneven` exception.","schema":{"description":"A two-dimensional array of numbers.","type":"array","subtype":"kernel","items":{"type":"array","items":{"type":"number"}}}},{"name":"factor","description":"A factor that is multiplied to each value after the kernel has been applied.\n\nThis is basically a shortcut for explicitly multiplying each value by a factor afterwards, which is often required for some kernel-based algorithms such as the Gaussian blur.","schema":{"type":"number"},"default":1,"optional":true},{"name":"border","description":"Determines how the data is extended when the kernel overlaps with the borders. Defaults to fill the border with zeroes.\n\nThe following options are available:\n\n* *numeric value* - fill with a user-defined constant number `n`: `nnnnnn|abcdefgh|nnnnnn` (default, with `n` = 0)\n* `replicate` - repeat the value from the pixel at the border: `aaaaaa|abcdefgh|hhhhhh`\n* `reflect` - mirror/reflect from the border: `fedcba|abcdefgh|hgfedc`\n* `reflect_pixel` - mirror/reflect from the center of the pixel at the border: `gfedcb|abcdefgh|gfedcb`\n* `wrap` - repeat/wrap the image: `cdefgh|abcdefgh|abcdef`","schema":[{"type":"string","enum":["replicate","reflect","reflect_pixel","wrap"]},{"type":"number"}],"default":0,"optional":true},{"name":"replace_invalid","description":"This parameter specifies the value to replace non-numerical or infinite numerical values with. By default, those values are replaced with zeroes.","schema":{"type":"number"},"default":0,"optional":true}],"returns":{"description":"A data cube with the newly computed values and the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},"exceptions":{"KernelDimensionsUneven":{"message":"Each dimension of the kernel must have an uneven number of elements."}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#apply","rel":"about","title":"Apply explained in the openEO documentation"},{"rel":"about","href":"http://www.songho.ca/dsp/convolution/convolution.html","title":"Convolutions explained"},{"rel":"about","href":"http://www.songho.ca/dsp/convolution/convolution2d_example.html","title":"Example of 2D Convolution"}]},{"id":"apply_neighborhood_intertwin","summary":"apply_neighborhood_intertwin","description":"","parameters":[],"returns":{"description":"Result.","schema":{}},"links":[{"rel":"about","href":"https://processes.openeo.org/#apply_neighborhood_intertwin"}]},{"id":"arccos","summary":"Inverse cosine","description":"Computes the arc cosine of `x`. The arc cosine is the inverse function of the cosine so that *`arccos(cos(x)) = x`*.\n\nWorks on radians only.\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed angle in radians.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":1},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/InverseCosine.html","title":"Inverse cosine explained by Wolfram MathWorld"}]},{"id":"arcosh","summary":"Inverse hyperbolic cosine","description":"Computes the inverse hyperbolic cosine of `x`. It is the inverse function of the hyperbolic cosine so that *`arcosh(cosh(x)) = x`*.\n\nWorks on radians only.\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed angle in radians.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":1},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/InverseHyperbolicCosine.html","title":"Inverse hyperbolic cosine explained by Wolfram MathWorld"}]},{"id":"arcsin","summary":"Inverse sine","description":"Computes the arc sine of `x`. The arc sine is the inverse function of the sine so that *`arcsin(sin(x)) = x`*.\n\nWorks on radians only.\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed angle in radians.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/InverseSine.html","title":"Inverse sine explained by Wolfram MathWorld"}]},{"id":"arctan","summary":"Inverse tangent","description":"Computes the arc tangent of `x`. The arc tangent is the inverse function of the tangent so that *`arctan(tan(x)) = x`*.\n\nWorks on radians only.\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed angle in radians.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/InverseTangent.html","title":"Inverse tangent explained by Wolfram MathWorld"}]},{"id":"arctan2","summary":"Inverse tangent of two numbers","description":"Computes the arc tangent of two numbers `x` and `y`. It is similar to calculating the arc tangent of *`y / x`*, except that the signs of both arguments are used to determine the quadrant of the result.\n\nWorks on radians only.\nThe no-data value `null` is passed through and therefore gets propagated if any of the arguments is `null`.","categories":["math > trigonometric"],"parameters":[{"name":"y","description":"A number to be used as the dividend.","schema":{"type":["number","null"]}},{"name":"x","description":"A number to be used as the divisor.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed angle in radians.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"y":0,"x":0},"returns":0},{"arguments":{"y":null,"x":1.5},"returns":null}],"links":[{"rel":"about","href":"https://en.wikipedia.org/wiki/Atan2","title":"Two-argument inverse tangent explained by Wikipedia"}]},{"id":"array_append","summary":"Append a value to an array","description":"Appends a new value to the end of the array, which may also include a new label for labeled arrays.","categories":["arrays"],"parameters":[{"name":"data","description":"An array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"value","description":"Value to append to the array.","schema":{"description":"Any data type is allowed."}},{"name":"label","description":"If the given array is a labeled array, a new label for the new value should be given. If not given or `null`, the array index as string is used as the label. If in any case the label exists, a `LabelExists` exception is thrown.","optional":true,"default":null,"schema":{"type":["string","null"]}}],"returns":{"description":"The new array with the value being appended.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},"exceptions":{"LabelExists":{"message":"An array element with the specified label already exists."}},"examples":[{"arguments":{"data":[1,2],"value":3},"returns":[1,2,3]}]},{"id":"array_apply","summary":"Apply a process to each array element","description":"Applies a process to each individual value in the array. This is basically what other languages call either a `for each` loop or a `map` function.","categories":["arrays"],"parameters":[{"name":"data","description":"An array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"process","description":"A process that accepts and returns a single value and is applied on each individual value in the array. The process may consist of multiple sub-processes and could, for example, consist of processes such as ``absolute()`` or ``linear_scale_range()``.","schema":{"type":"object","subtype":"process-graph","parameters":[{"name":"x","description":"The value of the current element being processed.","schema":{"description":"Any data type."}},{"name":"index","description":"The zero-based index of the current element being processed.","schema":{"type":"integer","minimum":0}},{"name":"label","description":"The label of the current element being processed. Only populated for labeled arrays.","schema":[{"type":"number"},{"type":"string"},{"type":"null"}],"default":null,"optional":true},{"name":"context","description":"Additional data passed by the user.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"The value to be set in the new array.","schema":{"description":"Any data type."}}}},{"name":"context","description":"Additional data to be passed to the process.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"An array with the newly computed values. The number of elements are the same as for the original array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}}},{"id":"array_concat","summary":"Merge two arrays","description":"Concatenates two arrays into a single array by appending the second array to the first array. Array labels get discarded from both arrays before merging.","categories":["arrays"],"experimental":true,"parameters":[{"name":"array1","description":"The first array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"array2","description":"The second array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}}],"returns":{"description":"The merged array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},"examples":[{"description":"Concatenates two arrays containing different data type.","arguments":{"array1":["a","b"],"array2":[1,2]},"returns":["a","b",1,2]}]},{"id":"array_contains","summary":"Check whether the array contains a given value","description":"Checks whether the array specified for `data` contains the value specified in `value`. Returns `true` if there's a match, otherwise `false`.\n\n**Remarks:**\n\n* To get the index or the label of the value found, use ``array_find()``.\n* All definitions for the process ``eq()`` regarding the comparison of values apply here as well. A `null` return value from ``eq()`` is handled exactly as `false` (no match).\n* Data types MUST be checked strictly. For example, a string with the content *1* is not equal to the number *1*.\n* An integer *1* is equal to a floating-point number *1.0* as `integer` is a sub-type of `number`. Still, this process may return unexpectedly `false` when comparing floating-point numbers due to floating-point inaccuracy in machine-based computation.\n* Temporal strings are treated as normal strings and MUST NOT be interpreted.","categories":["arrays","comparison","reducer"],"parameters":[{"name":"data","description":"List to find the value in.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"value","description":"Value to find in `data`. If the value is `null`, this process returns always `false`.","schema":{"type":["number","boolean","string","null"]}}],"returns":{"description":"`true` if the list contains the value, false` otherwise.","schema":{"type":"boolean"}},"examples":[{"arguments":{"data":[1,2,3],"value":2},"returns":true},{"arguments":{"data":["A","B","C"],"value":"b"},"returns":false},{"arguments":{"data":[1,2,3],"value":"2"},"returns":false},{"arguments":{"data":[1,2,null],"value":null},"returns":false},{"arguments":{"data":[[1,2],[3,4]],"value":2},"returns":false}],"links":[{"rel":"example","type":"application/json","href":"https://raw.githubusercontent.com/Open-EO/openeo-community-examples/main/processes/array_contains_nodata.json","title":"Check for no-data values in arrays"}],"process_graph":{"find":{"process_id":"array_find","arguments":{"data":{"from_parameter":"data"},"value":{"from_parameter":"value"}}},"is_nodata":{"process_id":"is_nodata","arguments":{"x":{"from_node":"find"}}},"not":{"process_id":"not","arguments":{"x":{"from_node":"is_nodata"}},"result":true}}},{"id":"array_create","summary":"Create an array","description":"Creates a new array, which by default is empty.\n\nThe second parameter `repeat` allows to add the given array multiple times to the new array.\n\nIn most cases you can simply pass a (native) array to processes directly, but this process is especially useful to create a new array that is getting returned by a child process, for example in ``apply_dimension()``.","categories":["arrays"],"parameters":[{"name":"data","description":"A (native) array to fill the newly created array with. Defaults to an empty array.","optional":true,"default":[],"schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"repeat","description":"The number of times the (native) array specified in `data` is repeatedly added after each other to the new array being created. Defaults to `1`.","optional":true,"default":1,"schema":{"type":"integer","minimum":1}}],"returns":{"description":"The newly created array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},"examples":[{"arguments":{},"returns":[]},{"arguments":{"data":["this","is","a","test"]},"returns":["this","is","a","test"]},{"arguments":{"data":[null],"repeat":3},"returns":[null,null,null]},{"arguments":{"data":[1,2,3],"repeat":2},"returns":[1,2,3,1,2,3]}]},{"id":"array_create_labeled","summary":"array_create_labeled","description":"","parameters":[],"returns":{"description":"Result.","schema":{}},"links":[{"rel":"about","href":"https://processes.openeo.org/#array_create_labeled"}]},{"id":"array_element","summary":"Get an element from an array","description":"Gives the element with the specified index or label from the array.\n\nEither the parameter `index` or `label` must be specified, otherwise the `ArrayElementParameterMissing` exception is thrown. If both parameters are set the `ArrayElementParameterConflict` exception is thrown.","categories":["arrays","reducer"],"parameters":[{"name":"data","description":"An array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"index","description":"The zero-based index of the element to retrieve.","schema":{"type":"integer","minimum":0},"optional":true},{"name":"label","description":"The label of the element to retrieve. Throws an `ArrayNotLabeled` exception, if the given array is not a labeled array and this parameter is set.","schema":[{"type":"number"},{"type":"string"}],"optional":true},{"name":"return_nodata","description":"By default this process throws an `ArrayElementNotAvailable` exception if the index or label is invalid. If you want to return `null` instead, set this flag to `true`.","schema":{"type":"boolean"},"default":false,"optional":true}],"returns":{"description":"The value of the requested element.","schema":{"description":"Any data type is allowed."}},"exceptions":{"ArrayElementNotAvailable":{"message":"The array has no element with the specified index or label."},"ArrayElementParameterMissing":{"message":"The process `array_element` requires either the `index` or `labels` parameter to be set."},"ArrayElementParameterConflict":{"message":"The process `array_element` only allows that either the `index` or the `labels` parameter is set."},"ArrayNotLabeled":{"message":"The array is not a labeled array, but the `label` parameter is set. Use the `index` instead."}},"examples":[{"arguments":{"data":[9,8,7,6,5],"index":2},"returns":7},{"arguments":{"data":["A","B","C"],"index":0},"returns":"A"},{"arguments":{"data":[],"index":0,"return_nodata":true},"returns":null}]},{"id":"array_filter","summary":"Filter an array based on a condition","description":"Filters the array elements based on a logical expression so that afterwards an array is returned that only contains the values, indices and/or labels conforming to the condition.","categories":["arrays","filter"],"parameters":[{"name":"data","description":"An array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"condition","description":"A condition that is evaluated against each value, index and/or label in the array. Only the array elements for which the condition returns `true` are preserved.","schema":{"type":"object","subtype":"process-graph","parameters":[{"name":"x","description":"The value of the current element being processed.","schema":{"description":"Any data type."}},{"name":"index","description":"The zero-based index of the current element being processed.","schema":{"type":"integer","minimum":0}},{"name":"label","description":"The label of the current element being processed. Only populated for labeled arrays.","schema":[{"type":"number"},{"type":"string"},{"type":"null"}],"default":null,"optional":true},{"name":"context","description":"Additional data passed by the user.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"`true` if the value should be kept in the array, otherwise `false`.","schema":{"type":"boolean"}}}},{"name":"context","description":"Additional data to be passed to the condition.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"An array filtered by the specified condition. The number of elements are less than or equal compared to the original array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}}},{"id":"array_find","summary":"Get the index for a value in an array","description":"Returns the zero-based index of the first (or last) occurrence of the value specified by `value` in the array specified by `data` or `null` if there is no match. Use the parameter `reverse` to switch from the first to the last match.\n\n**Remarks:**\n\n* Use ``array_contains()`` to check if an array contains a value regardless of the position.\n* Use ``array_find_label()`` to find the index for a label.\n* All definitions for the process ``eq()`` regarding the comparison of values apply here as well. A `null` return value from ``eq()`` is handled exactly as `false` (no match).\n* Data types MUST be checked strictly. For example, a string with the content *1* is not equal to the number *1*.\n* An integer *1* is equal to a floating-point number *1.0* as `integer` is a sub-type of `number`. Still, this process may return unexpectedly `false` when comparing floating-point numbers due to floating-point inaccuracy in machine-based computation.\n* Temporal strings are treated as normal strings and MUST NOT be interpreted.\n* If the specified value is an array, object or null, the process always returns `null`. See the examples for one to find `null` values.","categories":["arrays","reducer"],"parameters":[{"name":"data","description":"List to find the value in.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"value","description":"Value to find in `data`. If the value is `null`, this process returns always `null`.","schema":{"description":"Any data type is allowed."}},{"name":"reverse","description":"By default, this process finds the index of the first match. To return the index of the last match instead, set this flag to `true`.","schema":{"type":"boolean"},"default":false,"optional":true}],"returns":{"description":"The index of the first element with the specified value. If no element was found, `null` is returned.","schema":[{"type":"null"},{"type":"integer","minimum":0}]},"examples":[{"arguments":{"data":[1,2,3,2,3],"value":2},"returns":1},{"arguments":{"data":[1,2,3,2,3],"value":2,"reverse":true},"returns":3},{"arguments":{"data":["A","B","C"],"value":"b"},"returns":null},{"arguments":{"data":[1,2,3],"value":"2"},"returns":null},{"arguments":{"data":[1,null,2,null],"value":null},"returns":null},{"arguments":{"data":[[1,2],[3,4]],"value":[1,2]},"returns":null},{"arguments":{"data":[[1,2],[3,4]],"value":2},"returns":null},{"arguments":{"data":[{"a":"b"},{"c":"d"}],"value":{"a":"b"}},"returns":null}],"links":[{"rel":"example","type":"application/json","href":"https://raw.githubusercontent.com/Open-EO/openeo-community-examples/main/processes/array_find_nodata.json","title":"Find no-data values in arrays"}]},{"id":"array_find_label","summary":"array_find_label","description":"","parameters":[],"returns":{"description":"Result.","schema":{}},"links":[{"rel":"about","href":"https://processes.openeo.org/#array_find_label"}]},{"id":"array_interpolate_linear","summary":"One-dimensional linear interpolation for arrays","description":"Performs a linear interpolation for each of the no-data values (`null`) in the array given, except for leading and trailing no-data values.\n\nThe linear interpolants are defined by the array indices or labels (x) and the values in the array (y).","categories":["arrays","math","math > interpolation"],"parameters":[{"name":"data","description":"An array of numbers and no-data values.\n\nIf the given array is a labeled array, the labels must have a natural/inherent label order and the process expects the labels to be sorted accordingly. This is the default behavior in openEO for spatial and temporal dimensions.","schema":{"type":"array","items":{"type":["number","null"]}}}],"returns":{"description":"An array with no-data values being replaced with interpolated values. If not at least 2 numerical values are available in the array, the array stays the same.","schema":{"type":"array","items":{"type":["number","null"]}}},"examples":[{"arguments":{"data":[null,1,null,6,null,-8]},"returns":[null,1,3.5,6,-1,-8]},{"arguments":{"data":[null,1,null,null]},"returns":[null,1,null,null]}],"links":[{"rel":"about","href":"https://en.wikipedia.org/wiki/Linear_interpolation","title":"Linear interpolation explained by Wikipedia"}]},{"id":"array_labels","summary":"Get the labels for an array","description":"Gives all labels for a labeled array or gives all indices for an array without labels. If the array is not labeled, an array with the zero-based indices is returned. The labels or indices have the same order as in the array.","categories":["arrays"],"parameters":[{"name":"data","description":"An array.","schema":{"type":"array"}}],"returns":{"description":"The labels or indices as array.","schema":{"type":"array","items":{"type":["number","string"]}}}},{"id":"array_modify","summary":"Change the content of an array (remove, insert, update)","description":"Modify an array by removing, inserting or updating elements. Updating can be seen as removing elements followed by inserting new elements (not necessarily the same number).\n\nAll labels get discarded and the array indices are always a sequence of numbers with the step size of 1 and starting at 0.","categories":["arrays"],"experimental":true,"parameters":[{"name":"data","description":"The array to modify.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"values","description":"The values to insert into the `data` array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"index","description":"The index in the `data` array of the element to insert the value(s) before. If the index is greater than the number of elements in the `data` array, the process throws an `ArrayElementNotAvailable` exception.\n\nTo insert after the last element, there are two options:\n\n1. Use the simpler processes ``array_append()`` to append a single value or ``array_concat()`` to append multiple values.\n2. Specify the number of elements in the array. You can retrieve the number of elements with the process ``count()``, having the parameter `condition` set to `true`.","schema":{"type":"integer","minimum":0}},{"name":"length","description":"The number of elements in the `data` array to remove (or replace) starting from the given index. If the array contains fewer elements, the process simply removes all elements up to the end.","optional":true,"default":1,"schema":{"type":"integer","minimum":0}}],"returns":{"description":"An array with values added, updated or removed.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},"exceptions":{"ArrayElementNotAvailable":{"message":"The array can't be modified as the given index is larger than the number of elements in the array."}},"examples":[{"description":"Replace a single value in the array.","arguments":{"data":["a","d","c"],"values":["b"],"index":1},"returns":["a","b","c"]},{"description":"Replace multiple values in the array.","arguments":{"data":["a","b",4,5],"values":[1,2,3],"index":0,"length":2},"returns":[1,2,3,4,5]},{"description":"Insert a value to the array at a given position.","arguments":{"data":["a","c"],"values":["b"],"index":1,"length":0},"returns":["a","b","c"]},{"description":"Remove a single value from the array.","arguments":{"data":["a","b",null,"c"],"values":[],"index":2},"returns":["a","b","c"]},{"description":"Remove multiple values from the array.","arguments":{"data":[null,null,"a","b","c"],"values":[],"index":0,"length":2},"returns":["a","b","c"]},{"description":"Remove multiple values from the end of the array and ignore that the given length is exceeding the size of the array.","arguments":{"data":["a","b","c"],"values":[],"index":1,"length":10},"returns":["a"]}]},{"id":"arsinh","summary":"Inverse hyperbolic sine","description":"Computes the inverse hyperbolic sine of `x`. It is the inverse function of the hyperbolic sine so that *`arsinh(sinh(x)) = x`*.\n\nWorks on radians only.\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed angle in radians.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/InverseHyperbolicSine.html","title":"Inverse hyperbolic sine explained by Wolfram MathWorld"}]},{"id":"artanh","summary":"Inverse hyperbolic tangent","description":"Computes the inverse hyperbolic tangent of `x`. It is the inverse function of the hyperbolic tangent so that *`artanh(tanh(x)) = x`*.\n\nWorks on radians only.\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed angle in radians.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/InverseHyperbolicTangent.html","title":"Inverse hyperbolic tangent explained by Wolfram MathWorld"}]},{"id":"australian_hardiness_zones","summary":"Australian hardiness zones","description":"A climate indice based on a multi-year rolling average of the annual minimum temperature. Developed specifically to aid in determining plant suitability of geographic regions. The Australian National Botanical Gardens (ANBG) classification scheme divides categories into 5-degree Celsius zones, starting from -15 degrees Celsius and ending at 20 degrees Celsius.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum temperature."},{"name":"window","schema":{"type":"number"},"description":"The length of the averaging window, in years.","optional":true,"default":30},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"base_flow_index","summary":"Base flow index","description":"Minimum of the 7-day moving average flow divided by the mean flow.","parameters":[{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Rate of river discharge."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"between","summary":"Between comparison","description":"By default, this process checks whether `x` is greater than or equal to `min` and lower than or equal to `max`, which is the same as computing `and(gte(x, min), lte(x, max))`. Therefore, all definitions from ``and()``, ``gte()`` and ``lte()`` apply here as well.\n\nIf `exclude_max` is set to `true` the upper bound is excluded so that the process checks whether `x` is greater than or equal to `min` and lower than `max`. In this case, the process works the same as computing `and(gte(x, min), lt(x, max))`.\n\nLower and upper bounds are not allowed to be swapped. So `min` MUST be lower than or equal to `max` or otherwise the process always returns `false`.","categories":["comparison"],"parameters":[{"name":"x","description":"The value to check.","schema":{"description":"Any data type is allowed."}},{"name":"min","description":"Lower boundary (inclusive) to check against.","schema":{"type":"number"}},{"name":"max","description":"Upper boundary (inclusive) to check against.","schema":{"type":"number"}},{"name":"exclude_max","description":"Exclude the upper boundary `max` if set to `true`. Defaults to `false`.","schema":{"type":"boolean"},"default":false,"optional":true}],"returns":{"description":"`true` if `x` is between the specified bounds, otherwise `false`.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":null,"min":0,"max":1},"returns":null},{"arguments":{"x":1,"min":0,"max":1},"returns":true},{"arguments":{"x":1,"min":0,"max":1,"exclude_max":true},"returns":false},{"description":"Swapped bounds (min is greater than max) MUST always return `false`.","arguments":{"x":0.5,"min":1,"max":0},"returns":false},{"arguments":{"x":-0.5,"min":-1,"max":0},"returns":true}],"process_graph":{"gte":{"process_id":"gte","arguments":{"x":{"from_parameter":"x"},"y":{"from_parameter":"min"}}},"lte":{"process_id":"lte","arguments":{"x":{"from_parameter":"x"},"y":{"from_parameter":"max"}}},"lt":{"process_id":"lt","arguments":{"x":{"from_parameter":"x"},"y":{"from_parameter":"max"}}},"if":{"process_id":"if","arguments":{"value":{"from_parameter":"exclude_max"},"accept":{"from_node":"lte"},"reject":{"from_node":"lt"}}},"and":{"process_id":"and","arguments":{"x":{"from_node":"gte"},"y":{"from_node":"if"}},"result":true}}},{"id":"biologically_effective_degree_days","summary":"Biologically effective degree days","description":"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).","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"lat","schema":{"type":"object","subtype":"datacube"},"description":"Latitude coordinate. If None and method is not \"icclim\", a CF-conformant \"latitude\" field must be available within the passed DataArray."},{"name":"thresh_tasmin","schema":{"type":"string"},"description":"The minimum temperature threshold.","optional":true,"default":"10 degC"},{"name":"method","schema":{"type":"string"},"description":"The formula to use for the daily temperature range and latitude coefficient. The \"gladstones\" method uses a temperature range adjustment and a latitude coefficient based on :cite:t:`gladstones_wine_2011`. End_date should be \"11-01\" for the Northern Hemisphere. The \"huglin\" method uses a temperature range adjustment and a stepwise latitude coefficient for values between 40° and 50° based on :cite:t:`huglin_nouveau_1978`. End_date should be \"11-01\" for the Northern Hemisphere. The \"icclim\" method does not implement daily temperature range and nor a latitude coefficient based on :cite:t:`project_team_eca&d_algorithm_2013`. End date should be \"10-01\" for the Northern Hemisphere. The \"interpolated\" method uses a temperature range adjustment and a smoothed curve latitude coefficient for values between 40° and 50° based on :cite:t:`huglin_nouveau_1978`. The \"jones\" method uses a temperature range adjustment and integrates axial tilt, latitude, and day-of-year based on :cite:t:`hall_spatial_2010`. End_date should be \"11-01\" for the Northern Hemisphere.","optional":true,"default":"gladstones"},{"name":"cap_value","schema":{"type":"number"},"description":"The value to use for the latitude coefficient for latitudes north of 50°N or south of 50°S. Only applicable for methods \"huglin\" and \"interpolated\".","optional":true,"default":1.0},{"name":"low_dtr","schema":{"type":"string"},"description":"The lower bound for daily temperature range adjustment.","optional":true,"default":"10 degC"},{"name":"high_dtr","schema":{"type":"string"},"description":"The higher bound for daily temperature range adjustment.","optional":true,"default":"13 degC"},{"name":"max_daily_degree_days","schema":{"type":"string"},"description":"The maximum number of biologically effective degrees days that can be summed daily.","optional":true,"default":"9 degC"},{"name":"start_date","schema":{"type":"string"},"description":"The hemisphere-based start date to consider (north = April, south = October).","optional":true,"default":"04-01"},{"name":"end_date","schema":{"type":"string"},"description":"The hemisphere-based start date to consider (north = October, south = April). This date is non-inclusive.","optional":true,"default":"11-01"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency (For Southern Hemisphere, should be \"YS-JUL\").","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"blowing_snow","summary":"Blowing snow days","description":"The number of days with snowfall, snow depth, and windspeed over given thresholds for a period of days.","parameters":[{"name":"snd","schema":{"type":"object","subtype":"datacube"},"description":"Surface snow depth."},{"name":"sfcWind","schema":{"type":"object","subtype":"datacube"},"description":"Wind velocity."},{"name":"snd_thresh","schema":{"type":"string"},"description":"Threshold on net snowfall accumulation over the last `window` days.","optional":true,"default":"5 cm"},{"name":"sfcWind_thresh","schema":{"type":"string"},"description":"Wind speed threshold.","optional":true,"default":"15 km/h"},{"name":"window","schema":{"type":"number"},"description":"Period over which snow is accumulated before comparing against threshold.","optional":true,"default":3},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"calm_days","summary":"Calm days","description":"Number of days with surface wind speed below threshold.","parameters":[{"name":"sfcWind","schema":{"type":"object","subtype":"datacube"},"description":"Daily windspeed."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold average near-surface wind speed on which to base evaluation.","optional":true,"default":"2 m s-1"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"MS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"cdd","summary":"Maximum consecutive dry days","description":"The longest number of consecutive days where daily precipitation below a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily precipitation flux."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold precipitation on which to base evaluation.","optional":true,"default":"1 mm/day"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"ceil","summary":"Round fractions up","description":"The least integer greater than or equal to the number `x`.\n\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > rounding"],"parameters":[{"name":"x","description":"A number to round up.","schema":{"type":["number","null"]}}],"returns":{"description":"The number rounded up.","schema":{"type":["integer","null"]}},"examples":[{"arguments":{"x":0},"returns":0},{"arguments":{"x":3.5},"returns":4},{"arguments":{"x":-0.4},"returns":0},{"arguments":{"x":-3.5},"returns":-3}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/CeilingFunction.html","title":"Ceiling explained by Wolfram MathWorld"}]},{"id":"climatological_normal","summary":"Climatological normal (day-of-year or month-of-year)","description":"Compute a climatology from a cube's temporal dimension.\n\nThe mean per ``frequency`` bin over the loaded time range; the temporal dimension is\nreduced to an ordinal ``dayofyear`` (1..366) or ``month`` (1..12) dimension. For\n``dayofyear`` the result is optionally circular-smoothed (WMO 31-day window); smoothing\nis not applied to ``month`` (a 12-value axis). Select the reference period via\n``load_collection``'s ``temporal_extent`` (e.g. ``[\"1991-01-01\", \"2020-12-31\"]``).","parameters":[{"name":"data","schema":{},"description":"A raster data cube with a temporal dimension."},{"name":"frequency","schema":{"type":"string"},"description":"Climatology resolution: 'dayofyear' (1..366, default) or 'month' (1..12).","optional":true,"default":"dayofyear"},{"name":"smoothing_window","schema":{"type":"integer"},"description":"Circular rolling-mean window in days for WMO day-of-year smoothing (0 disables, must be odd and <= the number of days, default 31). Ignored when frequency='month'.","optional":true,"default":31}],"returns":{"schema":{}}},{"id":"clip","summary":"Clip a value between a minimum and a maximum","description":"Clips a number between specified minimum and maximum values. A value larger than the maximum value is set to the maximum value, a value lower than the minimum value is set to the minimum value.\n\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}},{"name":"min","description":"Minimum value. If the value is lower than this value, the process will return the value of this parameter.","schema":{"type":"number"}},{"name":"max","description":"Maximum value. If the value is greater than this value, the process will return the value of this parameter.","schema":{"type":"number"}}],"returns":{"description":"The value clipped to the specified range.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":-5,"min":-1,"max":1},"returns":-1},{"arguments":{"x":10.001,"min":1,"max":10},"returns":10},{"arguments":{"x":1e-6,"min":0,"max":0.02},"returns":1e-6},{"arguments":{"x":null,"min":0,"max":1},"returns":null}],"process_graph":{"min":{"process_id":"min","arguments":{"data":[{"from_parameter":"max"},{"from_parameter":"x"}]}},"max":{"process_id":"max","arguments":{"data":[{"from_parameter":"min"},{"from_node":"min"}]},"result":true}}},{"id":"cold_and_dry_days","summary":"Cold and dry days","description":"Number of days with temperature below a given percentile and precipitation below a given percentile.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature values."},{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"tas_per","schema":{"type":"object","subtype":"datacube"},"description":"First quartile of daily mean temperature computed by month."},{"name":"pr_per","schema":{"type":"object","subtype":"datacube"},"description":"First quartile of daily total precipitation computed by month."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"cold_and_wet_days","summary":"Cold and wet days","description":"Number of days with temperature below a given percentile and precipitation above a given percentile.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature values."},{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"tas_per","schema":{"type":"object","subtype":"datacube"},"description":"First quartile of daily mean temperature computed by month."},{"name":"pr_per","schema":{"type":"object","subtype":"datacube"},"description":"Third quartile of daily total precipitation computed by month."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"cold_spell_days","summary":"Cold spell days","description":"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.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature below which a cold spell begins.","optional":true,"default":"-10 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature below the threshold to qualify as a cold spell.","optional":true,"default":5},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \"<\".","optional":true,"default":"<"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"cold_spell_duration_index","summary":"Cold Spell Duration Index (CSDI)","description":"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 a given number of consecutive days.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmin_per","schema":{"type":"object","subtype":"datacube"},"description":"The nth percentile of daily minimum temperature with `dayofyear` coordinate."},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature below threshold to qualify as a cold spell.","optional":true,"default":6},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true},{"name":"bootstrap","schema":{"type":"boolean"},"description":"Flag to run bootstrapping of percentiles. Used by percentile_bootstrap decorator. Bootstrapping is only useful when the percentiles are computed on a part of the studied sample. This period, common to percentiles and the sample must be bootstrapped to avoid inhomogeneities with the rest of the time series. Keep bootstrap to `False` when there is no common period, as bootstrapping is computationally expensive, and it might provide the wrong results.","optional":true,"default":false},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \"<\".","optional":true,"default":"<"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"cold_spell_frequency","summary":"Cold spell frequency","description":"The frequency of cold periods of `N` days or more, during which the temperature over a given time window of days is below a given threshold.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature below which a cold spell begins.","optional":true,"default":"-10 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature below the threshold to qualify as a cold spell.","optional":true,"default":5},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \"<\".","optional":true,"default":"<"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"cold_spell_max_length","summary":"Cold spell maximum length","description":"The maximum length of a cold period of `N` days or more, during which the temperature over a given time window of days is below a given threshold.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"The temperature threshold needed to trigger a cold spell.","optional":true,"default":"-10 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperatures below the threshold to qualify as a cold spell.","optional":true,"default":1},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \"<\".","optional":true,"default":"<"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"cold_spell_total_length","summary":"Cold spell total length","description":"The total length of cold periods of `N` days or more, during which the temperature over a given time window of days is below a given threshold.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"The temperature threshold needed to trigger a cold spell.","optional":true,"default":"-10 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperatures below the threshold to qualify as a cold spell.","optional":true,"default":3},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \"<\".","optional":true,"default":"<"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"compute_anomaly","summary":"Climate anomaly (observed − climatological normal)","description":"Compute observed − climatological normal, aligning the normal by day-of-year/month.\n\nearthkit indexes the normal's ordinal axis (``dayofyear`` or ``month``) by each observed\ntimestep's calendar value and combines per ``method``; the result keeps the observed\ntime axis and stays lazy/dask-backed. The observed temporal resolution must match the\nnormal's ordinal axis (daily observed ↔ ``dayofyear`` normal, monthly observed ↔\n``month`` normal); a mismatch is rejected rather than silently resampled.","parameters":[{"name":"observed","schema":{},"description":"Observed cube with a datetime time axis (e.g. era5land_temperature_daily)."},{"name":"normal","schema":{},"description":"Climatological normal with a `dayofyear` or `month` ordinal axis."},{"name":"method","schema":{"type":"string"},"description":"'absolute' (observed − normal, default) or 'relative' (percent: 100·(observed − normal)/normal). 'relative' is only meaningful for a ratio-scale variable such as precipitation, not temperature. 'standardised' (z-score) needs a standard-deviation normal — not yet supported (see CLIM-887).","optional":true,"default":"absolute"}],"returns":{"schema":{}}},{"id":"consecutive_frost_days","summary":"Consecutive frost days","description":"Maximum number of consecutive days where the daily minimum temperature is below 0°C","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature.","optional":true,"default":"0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"consecutive_frost_free_days","summary":"Maximum consecutive frost free days","description":"Maximum number of consecutive frost-free days: where the daily minimum temperature is above or equal to 0°C","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature.","optional":true,"default":"0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"constant","summary":"Define a constant value","description":"Defines a constant value that can be reused in multiple places of a process.","categories":["math > constants"],"parameters":[{"name":"x","description":"The value of the constant.","schema":{"description":"Any data type."}}],"returns":{"description":"The value of the constant.","schema":{"description":"Any data type."}}},{"id":"cool_night_index","summary":"Cool night index","description":"A night coolness variable which takes into account the mean minimum night temperatures during the month when ripening usually occurs beyond the ripening period.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"lat","schema":{"type":"object","subtype":"datacube"},"description":"Latitude coordinate as an array, float or string. If None, a CF-conformant \"latitude\" field must be available within the passed DataArray.","optional":true},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"cooling_degree_days","summary":"Cooling degree days","description":"The cumulative degree days for days when the mean daily temperature is above a given threshold and buildings must be air conditioned.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Temperature threshold above which air is cooled.","optional":true,"default":"18.0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"cooling_degree_days_approximation","summary":"Cooling degree days approximation","description":"The cumulative degree days for days when temperatures are above a given threshold and buildings must be air conditioned. This method integrates mean, minimum, and maximum temperatures, accounting for asymmetry in the distributions of temperatures throughout the diurnal cycle.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Temperature threshold above which air is cooled.","optional":true,"default":"18.0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"corn_heat_units","summary":"Corn heat units","description":"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.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh_tasmin","schema":{"type":"string"},"description":"The minimum temperature threshold needed for corn growth.","optional":true,"default":"4.44 degC"},{"name":"thresh_tasmax","schema":{"type":"string"},"description":"The maximum temperature threshold needed for corn growth.","optional":true,"default":"10 degC"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"cos","summary":"Cosine","description":"Computes the cosine of `x`.\n\nWorks on radians only.\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"An angle in radians.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed cosine of `x`.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":1}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Cosine.html","title":"Cosine explained by Wolfram MathWorld"}]},{"id":"cosh","summary":"Hyperbolic cosine","description":"Computes the hyperbolic cosine of `x`.\n\nWorks on radians only.\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"An angle in radians.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed hyperbolic cosine of `x`.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":1}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/HyperbolicCosine.html","title":"Hyperbolic cosine explained by Wolfram MathWorld"}]},{"id":"count","summary":"Count the number of elements","description":"Gives the number of elements in an array that matches the specified condition.\n\n**Remarks:**\n\n* Counts the number of valid elements by default (`condition` is set to `null`). A valid element is every element for which ``is_valid()`` returns `true`.\n* To count all elements in a list set the `condition` parameter to boolean `true`.","categories":["arrays","math > statistics","reducer"],"parameters":[{"name":"data","description":"An array with elements of any data type.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"condition","description":"A condition consists of one or more processes, which in the end return a boolean value. It is evaluated against each element in the array. An element is counted only if the condition returns `true`. Defaults to count valid elements in a list (see ``is_valid()``). Setting this parameter to boolean `true` counts all elements in the list. `false` is not a valid value for this parameter.","schema":[{"title":"Condition","description":"A logical expression that is evaluated against each element in the array.","type":"object","subtype":"process-graph","parameters":[{"name":"x","description":"The value of the current element being processed.","schema":{"description":"Any data type."}},{"name":"context","description":"Additional data passed by the user.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"`true` if the element should increase the counter, otherwise `false`.","schema":{"type":"boolean"}}},{"title":"All elements","description":"Boolean `true` counts all elements in the list.","type":"boolean","const":true},{"title":"Valid elements","description":"`null` counts valid elements in the list.","type":"null"}],"default":null,"optional":true},{"name":"context","description":"Additional data to be passed to the condition.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"The counted number of elements.","schema":{"type":"number"}},"examples":[{"arguments":{"data":[]},"returns":0},{"arguments":{"data":[1,0,3,2]},"returns":4},{"arguments":{"data":["ABC",null]},"returns":1},{"arguments":{"data":[false,null],"condition":true},"returns":2},{"arguments":{"data":[0,1,2,3,4,5,null],"condition":{"gt":{"process_id":"gt","arguments":{"x":{"from_parameter":"element"},"y":2},"result":true}}},"returns":3}]},{"id":"cp","summary":"Chill portions","description":"Chill portions are a measure to estimate the bud breaking potential of different crops. The constants and functions are taken from Luedeling et al. (2009) which formalises the method described in Fishman et al. (1987). The model computes the accumulation of cold temperatures in a two-step process. First, cold temperatures contribute to an intermediate product that is transformed to a chill portion once it exceeds a certain concentration. The intermediate product can be broken down at higher temperatures but the final product is stable even at higher temperature. Thus the dynamic model is more accurate than other chill models like the Chilling hours or Utah model, especially in moderate climates like Israel, California or Spain.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Hourly temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"create_data_cube","summary":"Create an empty data cube","description":"Creates a new data cube without dimensions. Dimensions can be added with ``add_dimension()``.","categories":["cubes"],"parameters":[],"returns":{"description":"An empty data cube with no dimensions.","schema":{"type":"object","subtype":"datacube"}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html","rel":"about","title":"Data Cubes explained in the openEO documentation"}]},{"id":"cu","summary":"Chill units","description":"Chill units are a measure to estimate the bud breaking potential of different crop based on Richardson et al. (1974). The Utah model assigns a weight to each hour depending on the temperature recognising that high temperatures can actual decrease, the potential for bud breaking. Providing `positive_only=True` will ignore days with negative chill units.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Hourly temperature."},{"name":"positive_only","schema":{"type":"boolean"},"description":"If `True`, only positive daily chill units are aggregated.","optional":true,"default":false},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"cummax","summary":"cummax","description":"","parameters":[],"returns":{"description":"Result.","schema":{}},"links":[{"rel":"about","href":"https://processes.openeo.org/#cummax"}]},{"id":"cummin","summary":"cummin","description":"","parameters":[],"returns":{"description":"Result.","schema":{}},"links":[{"rel":"about","href":"https://processes.openeo.org/#cummin"}]},{"id":"cumproduct","summary":"cumproduct","description":"","parameters":[],"returns":{"description":"Result.","schema":{}},"links":[{"rel":"about","href":"https://processes.openeo.org/#cumproduct"}]},{"id":"cumsum","summary":"cumsum","description":"","parameters":[],"returns":{"description":"Result.","schema":{}},"links":[{"rel":"about","href":"https://processes.openeo.org/#cumsum"}]},{"id":"cwd","summary":"Maximum consecutive wet days","description":"The longest number of consecutive days where daily precipitation is at or above a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily precipitation flux."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold precipitation on which to base evaluation.","optional":true,"default":"1 mm/day"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"days_over_precip_doy_thresh","summary":"Number of days with precipitation above a given daily percentile","description":"Number of days in a period where precipitation is above a given daily percentile and a fixed threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily precipitation flux."},{"name":"pr_per","schema":{"type":"object","subtype":"datacube"},"description":"Percentile of wet day precipitation flux. Either computed daily (one value per day of year) or computed over a period (one value per spatial point)."},{"name":"thresh","schema":{"type":"string"},"description":"Precipitation value over which a day is considered wet.","optional":true,"default":"1 mm/day"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"bootstrap","schema":{"type":"boolean"},"description":"Flag to run bootstrapping of percentiles. Used by percentile_bootstrap decorator. Bootstrapping is only useful when the percentiles are computed on a part of the studied sample. This period, common to percentiles and the sample must be bootstrapped to avoid inhomogeneities with the rest of the time series. Do not enable bootstrap when there is no common period, otherwise it will provide the wrong results. Note that bootstrapping is computationally expensive.","optional":true,"default":false},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"days_over_precip_thresh","summary":"Number of days with precipitation above a given percentile","description":"Number of days in a period where precipitation is above a given percentile, calculated over a given period and a fixed threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily precipitation flux."},{"name":"pr_per","schema":{"type":"object","subtype":"datacube"},"description":"Percentile of wet day precipitation flux. Either computed daily (one value per day of year) or computed over a period (one value per spatial point)."},{"name":"thresh","schema":{"type":"string"},"description":"Precipitation value over which a day is considered wet.","optional":true,"default":"1 mm/day"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"bootstrap","schema":{"type":"boolean"},"description":"Flag to run bootstrapping of percentiles. Used by percentile_bootstrap decorator. Bootstrapping is only useful when the percentiles are computed on a part of the studied sample. This period, common to percentiles and the sample must be bootstrapped to avoid inhomogeneities with the rest of the time series. Do not enable bootstrap when there is no common period, otherwise it will provide the wrong results. Note that bootstrapping is computationally expensive.","optional":true,"default":false},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"days_with_snow","summary":"Days with snowfall","description":"Number of days with snow between a lower and upper limit.","parameters":[{"name":"prsn","schema":{"type":"object","subtype":"datacube"},"description":"Snowfall flux."},{"name":"low","schema":{"type":"string"},"description":"Minimum threshold snowfall flux or liquid water equivalent snowfall rate.","optional":true,"default":"0 kg m-2 s-1"},{"name":"high","schema":{"type":"string"},"description":"Maximum threshold snowfall flux or liquid water equivalent snowfall rate.","optional":true,"default":"1E6 kg m-2 s-1"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"dc","summary":"Daily drought code","description":"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.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Noon temperature."},{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Rain fall in open over previous 24 hours, at noon."},{"name":"lat","schema":{"type":"object","subtype":"datacube"},"description":"Latitude coordinate."},{"name":"snd","schema":{"type":"object","subtype":"datacube"},"description":"Noon snow depth.","optional":true},{"name":"dc0","schema":{"type":"object","subtype":"datacube"},"description":"Initial values of the drought code.","optional":true},{"name":"season_mask","schema":{"type":"object","subtype":"datacube"},"description":"Boolean mask, True where/when the fire season is active.","optional":true},{"name":"season_method","schema":{"type":"string"},"description":"How to compute the start-up and shutdown of the fire season. If \"None\", no start-ups or shutdowns are computed, similar to the R fire function. Ignored if `season_mask` is given.","optional":true,"default":null},{"name":"overwintering","schema":{"type":"boolean"},"description":"Whether to activate DC overwintering or not. If True, either season_method or season_mask must be given.","optional":true,"default":false},{"name":"dry_start","schema":{"type":"string"},"description":"Whether to activate the DC and DMC \"dry start\" mechanism and which method to use. See :py:func:`fire_weather_ufunc`.","optional":true,"default":null},{"name":"initial_start_up","schema":{"type":"boolean"},"description":"If True (default), grid points where the fire season is active on the first timestep go through a start_up phase for that time step. Otherwise, previous codes must be given as a continuing fire season is assumed for those points.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"ddmc","summary":"Detecting Deep Moist Convection","description":"Deep moist convection (DC) is associated with dangerous weather phenomena such as torrential rain, flash floods, large hail and tornadoes. The release of latent heat inside deep convective clouds often plays a crucial role. Studies have shown that DC and overshooting cloud tops penetrate into the lowest stratosphere and enable the exchange of gases from the troposphere deep into the stratosphere. The Sentinel satellites offer the possibility to monitor DC around the globe, independent of the emissivity of the ground. Detecting Deep Moist Convection is a combination of Deep Moist Convection, low- and mid-level cloudiness. \nThe `data` parameter expects a raster data cube with a dimension, by default, the dimension is the band dimension otherwise another `target_band ` must be specified. By default, the dimension must have at least five bands with the common names `nir08`, `nir09`, `cirrus`, `swir16` and `swir22` assigned. Otherwise, the user has to specify the parameters. The common names for each band are specified in the collection's band metadata and are *not* equal to the band names.\n\nBy default, the dimension of type `bands` is renamed by this process. To keep the dimension, specify a new band name in the parameter `target_band`. This adds a new dimension label with the specified name to the dimension, which can be used to access the computed values.","categories":["cubes","math > indices","disaster management and prevention algorithms"],"experimental":true,"parameters":[{"name":"data","description":"A raster data cube with five bands that have the common names `nir08`, `nir09`, `cirrus`,  `swir16` and `swir22` assigned.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]},{"type":"bands"}]}},{"name":"nir08","description":"The name of the NIR band. Defaults to the band that has the common name `nir` assigned.\n\nEither the unique band name (metadata field `name` in bands) or one of the common band names (metadata field `common_name` in bands) can be specified. If the unique band name and the common name conflict, the unique band name has a higher priority.","schema":{"type":"string","subtype":"band-name"},"default":"nir08","optional":true},{"name":"nir09","description":"The name of the Water vapour band. Defaults to the band that has the common name `nir09` assigned.\n\nEither the unique band name (metadata field `name` in bands) or one of the common band names (metadata field `common_name` in bands) can be specified. If the unique band name and the common name conflict, the unique band name has a higher priority.","schema":{"type":"string","subtype":"band-name"},"default":"nir09","optional":true},{"name":"cirrus","description":"The name of the SWIR – Cirrus band. Defaults to the band that has the common name `cirrus` assigned.\n\nEither the unique band name (metadata field `name` in bands) or one of the common band names (metadata field `common_name` in bands) can be specified. If the unique band name and the common name conflict, the unique band name has a higher priority.","schema":{"type":"string","subtype":"band-name"},"default":"cirrus","optional":true},{"name":"swir16","description":"The name of the SWIR (ca 1600 nm) band. Defaults to the band that has the common name `swir16` assigned.\n\nEither the unique band name (metadata field `name` in bands) or one of the common band names (metadata field `common_name` in bands) can be specified. If the unique band name and the common name conflict, the unique band name has a higher priority.","schema":{"type":"string","subtype":"band-name"},"default":"swir16","optional":true},{"name":"swir22","description":"The name of the SWIR (ca 2200 nm) band. Defaults to the band that has the common name `swir22` assigned.\n\nEither the unique band name (metadata field `name` in bands) or one of the common band names (metadata field `common_name` in bands) can be specified. If the unique band name and the common name conflict, the unique band name has a higher priority.","schema":{"type":"string","subtype":"band-name"},"default":"swir22","optional":true},{"name":"target_band","description":"By default, the dimension is the band dimension. You can specify a new dimension name in this parameter so that a new dimension label with the specified name will be added for the computed values.","schema":[{"type":"string","pattern":"^\\w+$"},{"type":"null"}],"default":"band","optional":true},{"name":"gain","description":"The value by which the indices are to be multiplied. By default, gain is 2.5.","schema":{"type":["number","null"]},"default":2.5,"optional":true}],"returns":{"description":"A raster data cube containing the computed DDMC values. The structure of the data cube differs depending on the value passed to `target_band`:\n `target_band` is a string: The data cube keeps the same dimensions. The dimension properties remain unchanged, but the number of dimension labels for the dimension of type `target_band` increases to three. The label is named as specified in `target_band`.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},"links":[{"rel":"about","href":"https://custom-scripts.sentinel-hub.com/custom-scripts/sentinel-2/deep_moist_convection/","title":"DDMC explained by sentinelhub"},{"rel":"about","href":"https://earthobservatory.nasa.gov/features/MeasuringVegetation/measuring_vegetation_2.php","title":"NDVI explained by NASA"}]},{"id":"degree_days_exceedance_date","summary":"Degree day exceedance date","description":"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.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base degree-days evaluation.","optional":true,"default":"0 degC"},{"name":"sum_thresh","schema":{"type":"string"},"description":"Threshold of the degree days sum.","optional":true,"default":"25 K days"},{"name":"op","schema":{"type":"string"},"description":"If equivalent to '>', degree days are computed as `tas - thresh` and if equivalent to '<', they are computed as `thresh - tas`.","optional":true,"default":">"},{"name":"after_date","schema":{"type":"string"},"description":"Date at which to start the cumulative sum. In \"MM-DD\" format, defaults to the start of the sampling period.","optional":true,"default":null},{"name":"never_reached","schema":{"type":"string"},"description":"What to do when `sum_thresh` is never exceeded. If an int, the value to assign as a day-of-year. If a string, must be in \"MM-DD\" format, the day-of-year of that date is assigned. Default (None) assigns \"NaN\".","optional":true,"default":null},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency. If `after_date` is given, `freq` should be annual.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"dewpoint_from_relative_humidity","summary":"Compute the dewpoint temperature from relative humidity.","description":"Compute the dewpoint temperature from relative humidity.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\nr: array-like | xarray.DataArray | FieldList | Field\n    Relative humidity (%)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Dewpoint temperature (K). For zero ``r`` values returns nan.\n\n\nThe computation starts with determining the the saturation vapour pressure over\nwater at the dewpoint temperature:\n\n.. math::\n\n    e_{wsat}(td) = \\frac{r e_{wsat}(t)}{100}\n\nwhere:\n\n* :math:`e_{wsat}` is the :func:`saturation_vapour_pressure` over water\n* :math:`td` is the dewpoint.\n\nThen :math:`td` is computed from :math:`e_{wsat}(td)` by inverting the\nequations used in :func:`saturation_vapour_pressure`.","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"r","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: % (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"dewpoint_from_specific_humidity","summary":"Compute the dewpoint temperature from specific humidity.","description":"Compute the dewpoint temperature from specific humidity.\n\nParameters\n----------\nq: array-like | xarray.DataArray | FieldList | Field\n    Specific humidity (kg/kg)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Dewpoint temperature (K). For zero ``q`` values returns nan.\n\n\nThe computation starts with determining the the saturation vapour pressure over\nwater at the dewpoint temperature:\n\n.. math::\n\n    e_{wsat}(td) = e(q, p)\n\nwhere:\n\n    * :math:`e` is the vapour pressure (see :func:`vapour_pressure_from_specific_humidity`)\n    * :math:`e_{wsat}` is the :func:`saturation_vapour_pressure` over water\n    * :math:`td` is the dewpoint\n\nThen :math:`td` is computed from :math:`e_{wsat}(td)` by inverting the equations\nused in :func:`saturation_vapour_pressure`.","parameters":[{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: kg/kg (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"df","summary":"Griffiths drought factor based on the soil moisture deficit.","description":"The drought factor is a numeric indicator of the forest fire fuel availability in the deep litter bed. It is often used in the calculation of the McArthur Forest Fire Danger Index. The method implemented here follows :cite:t:`ffdi-finkele_2006`.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Total rainfall over previous 24 hours [mm/day]."},{"name":"smd","schema":{"type":"object","subtype":"datacube"},"description":"Daily soil moisture deficit (often KBDI) [mm/day]."},{"name":"limiting_func","schema":{"type":"string"},"description":"How to limit the values of the drought factor. If \"xlim\" (default), use equation (14) in :cite:t:`ffdi-finkele_2006`. If \"discrete\", use equation Eq (13) in :cite:t:`ffdi-finkele_2006`, but with the lower limit of each category bound adjusted to match the upper limit of the previous bound.","optional":true,"default":"xlim"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"dimension_labels","summary":"Get the dimension labels","description":"Gives all labels for a dimension in the data cube. The labels have the same order as in the data cube.\n\nIf a dimension with the specified name does not exist, the process fails with a `DimensionNotAvailable` exception.","categories":["cubes"],"parameters":[{"name":"data","description":"The data cube.","schema":{"type":"object","subtype":"datacube"}},{"name":"dimension","description":"The name of the dimension to get the labels for.","schema":{"type":"string"}}],"returns":{"description":"The labels as an array.","schema":{"type":"array","items":{"type":["number","string"]}}},"exceptions":{"DimensionNotAvailable":{"message":"A dimension with the specified name does not exist."}}},{"id":"divide","summary":"Division of two numbers","description":"Divides argument `x` by the argument `y` (*`x / y`*) and returns the computed result.\n\nNo-data values are taken into account so that `null` is returned if any element is such a value.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it. Therefore, a division by zero results in ±infinity if the processing environment supports it. Otherwise, a `DivisionByZero` exception must the thrown.","categories":["math"],"parameters":[{"name":"x","description":"The dividend.","schema":{"type":["number","null"]}},{"name":"y","description":"The divisor.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed result.","schema":{"type":["number","null"]}},"exceptions":{"DivisionByZero":{"message":"Division by zero is not supported."}},"examples":[{"arguments":{"x":5,"y":2.5},"returns":2},{"arguments":{"x":-2,"y":4},"returns":-0.5},{"arguments":{"x":1,"y":null},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Division.html","title":"Division explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"dlyfrzthw","summary":"Daily freeze-thaw cycles","description":"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.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh_tasmin","schema":{"type":"string"},"description":"The temperature threshold needed to trigger a freeze event.","optional":true,"default":"0 degC"},{"name":"thresh_tasmax","schema":{"type":"string"},"description":"The temperature threshold needed to trigger a thaw event.","optional":true,"default":"0 degC"},{"name":"op_tasmin","schema":{"type":"string"},"description":"Comparison operation for tasmin. Default: \"<=\".","optional":true,"default":"<="},{"name":"op_tasmax","schema":{"type":"string"},"description":"Comparison operation for tasmax. Default: \">\".","optional":true,"default":">"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"dmc","summary":"Duff moisture code (FWI component).","description":"The duff moisture code is part of the Canadian Forest Fire Weather Index System. It is a numeric rating of the average moisture content of loosely compacted organic layers of moderate depth.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Noon temperature."},{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Rain fall in open over previous 24 hours, at noon."},{"name":"hurs","schema":{"type":"object","subtype":"datacube"},"description":"Noon relative humidity."},{"name":"lat","schema":{"type":"object","subtype":"datacube"},"description":"Latitude coordinate."},{"name":"snd","schema":{"type":"object","subtype":"datacube"},"description":"Noon snow depth.","optional":true},{"name":"dmc0","schema":{"type":"object","subtype":"datacube"},"description":"Initial values of the duff moisture code.","optional":true},{"name":"season_mask","schema":{"type":"object","subtype":"datacube"},"description":"Boolean mask, True where/when the fire season is active.","optional":true},{"name":"season_method","schema":{"type":"string"},"description":"How to compute the start-up and shutdown of the fire season. If \"None\", no start-ups or shutdowns are computed, similar to the R fire function. Ignored if `season_mask` is given.","optional":true,"default":null},{"name":"dry_start","schema":{"type":"string"},"description":"Whether to activate the DC and DMC \"dry start\" mechanism and which method to use. See :py:func:`fire_weather_ufunc`.","optional":true,"default":null},{"name":"initial_start_up","schema":{"type":"boolean"},"description":"If True (default), grid points where the fire season is active on the first timestep go through a start_up phase for that time step. Otherwise, previous codes must be given as a continuing fire season is assumed for those points.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"doy_qmax","summary":"Day of year of the maximum streamflow","description":"","parameters":[{"name":"da","schema":{"type":"object","subtype":"datacube"},"description":"Input data."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency defining the periods as defined in :ref:`timeseries.resampling`.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"doy_qmin","summary":"Day of year of the minimum streamflow","description":"","parameters":[{"name":"da","schema":{"type":"object","subtype":"datacube"},"description":"Input data."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency defining the periods as defined in :ref:`timeseries.resampling`.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"drop_dimension","summary":"Remove a dimension","description":"Drops a dimension from the data cube.\n\nDropping a dimension only works on dimensions with a single dimension label left, otherwise the process fails with a `DimensionLabelCountMismatch` exception. Dimension values can be reduced to a single value with a filter such as ``filter_bands()`` or the ``reduce_dimension()`` process. If a dimension with the specified name does not exist, the process fails with a `DimensionNotAvailable` exception.","categories":["cubes"],"parameters":[{"name":"data","description":"The data cube to drop a dimension from.","schema":{"type":"object","subtype":"datacube"}},{"name":"name","description":"Name of the dimension to drop.","schema":{"type":"string"}}],"returns":{"description":"A data cube without the specified dimension. The number of dimensions decreases by one, but the dimension properties (name, type, labels, reference system and resolution) for all other dimensions remain unchanged.","schema":{"type":"object","subtype":"datacube"}},"exceptions":{"DimensionLabelCountMismatch":{"message":"The number of dimension labels exceeds one, which requires a reducer."},"DimensionNotAvailable":{"message":"A dimension with the specified name does not exist."}}},{"id":"dry_days","summary":"Number of dry days","description":"The number of days with daily precipitation under a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold precipitation on which to base evaluation.","optional":true,"default":"0.2 mm/d"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \"<\".","optional":true,"default":"<"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"dry_spell_frequency","summary":"Dry spell frequency","description":"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.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"thresh","schema":{"type":"string"},"description":"Precipitation amount under which a period is considered dry. The value against which the threshold is compared depends on `op`.","optional":true,"default":"1.0 mm"},{"name":"window","schema":{"type":"number"},"description":"Minimum length of the spells.","optional":true,"default":3},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true},{"name":"op","schema":{"type":"string"},"description":"Operation to perform on the window. Default is \"sum\", which checks that the sum of accumulated precipitation over the whole window is less than the threshold. \"max\" checks that the maximal daily precipitation amount within the window is less than the threshold. This is the same as verifying that each individual day is below the threshold.","optional":true,"default":"sum"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"dry_spell_max_length","summary":"Dry spell maximum length","description":"The maximum length of a dry period of `N` days or more, during which the accumulated or maximum precipitation over a given time window of days is below a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"thresh","schema":{"type":"string"},"description":"Accumulated precipitation value under which a period is considered dry.","optional":true,"default":"1.0 mm"},{"name":"window","schema":{"type":"number"},"description":"Number of days when the maximum or accumulated precipitation is under the threshold.","optional":true,"default":1},{"name":"op","schema":{"type":"string"},"description":"Reduce operation.","optional":true,"default":"sum"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"dry_spell_total_length","summary":"Dry spell total length","description":"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.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"thresh","schema":{"type":"string"},"description":"Accumulated precipitation value under which a period is considered dry.","optional":true,"default":"1.0 mm"},{"name":"window","schema":{"type":"number"},"description":"Number of days when the maximum or accumulated precipitation is under the threshold.","optional":true,"default":3},{"name":"op","schema":{"type":"string"},"description":"Operation to perform on the window. Default is \"sum\", which checks that the sum of accumulated precipitation over the whole window is less than the threshold. \"max\" checks that the maximal daily precipitation amount within the window is less than the threshold. This is the same as verifying that each individual day is below the threshold.","optional":true,"default":"sum"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"dryness_index","summary":"Dryness index","description":"The dryness index is a characterization of the water component in winegrowing regions which considers the precipitation and evapotranspiration factors without deduction for surface runoff or drainage. Metric originally published in Riou et al. (1994).","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Precipitation."},{"name":"evspsblpot","schema":{"type":"object","subtype":"datacube"},"description":"Potential evapotranspiration."},{"name":"lat","schema":{"type":"object","subtype":"datacube"},"description":"Latitude coordinate as an array, float or string. If None, a CF-conformant \"latitude\" field must be available within the passed DataArray.","optional":true},{"name":"wo","schema":{"type":"string"},"description":"The initial soil water reserve accessible to root systems [length]. Default: 200 mm.","optional":true,"default":"200 mm"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"dtr","summary":"Mean of daily temperature range","description":"The average difference between the daily maximum and minimum temperatures.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"dtrmax","summary":"Maximum of daily temperature range","description":"The maximum difference between the daily maximum and minimum temperatures.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"dtrvar","summary":"Variability of daily temperature range","description":"The average day-to-day variation in daily temperature range.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"ept_from_dewpoint","summary":"Compute the equivalent potential temperature from dewpoint.","description":"Compute the equivalent potential temperature from dewpoint.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\ntd: array-like | xarray.DataArray | FieldList | Field\n    Dewpoint (K)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\nmethod: str, optional\n    Specify the computation method. The possible values are: \"ifs\", \"bolton35\", \"bolton39\", \"bolton43\".\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Equivalent potential temperature (K)\n\n\nThe actual computation is based on the value of ``method``:\n\n* \"ifs\": the formula from the IFS model [IFS-CY47R3-PhysicalProcesses]_ (Chapter 6.11) is used:\n\n    .. math::\n\n        \\Theta_{e} = \\Theta \\operatorname{exp}(\\frac{L_{v} q}{c_{pd} t_{LCL}})\n\n* \"bolton35\": Eq (35) from [Bolton1980]_ is used:\n\n    .. math::\n\n        \\Theta_{e} = \\Theta (\\frac{10^{5}}{p})^{\\kappa 0.28 w} \\operatorname{exp}(\\frac{2675 w}{t_{LCL}})\n\n* \"bolton39\": Eq (39) from [Bolton1980]_ is used:\n\n    .. math::\n\n        \\Theta_{e} =\n        t (\\frac{10^{5}}{p-e})^{\\kappa} (\\frac{t}{t_{LCL}})^{0.28 w} \\operatorname{exp}[(\\frac{3036}{t_{LCL}} -\n        1.78)w(1+0.448 w)]\n\n* \"bolton43\": Eq (43) from [Bolton1980]_ is used:\n\n    .. math::\n\n        \\Theta_{e} =\n        t (\\frac{10^{5}}{p})^{\\kappa (1-0.28\\; 10^{-3}w)} exp[(\\frac{3376}{t_{LCL}} -\n        2.54)w(1+0.81w)]\n\nwhere:\n\n    * :math:`\\Theta` is the :func:`potential_temperature`\n    * :math:`t_{LCL}` is the temperature at the Lifting Condensation Level computed\n      with :func:`lcl_temperature` using option:\n\n        * method=\"davis\" when ``method`` is \"ifs\"\n        * method=\"bolton\" when ``method`` is \"bolton35\", \"bolton39\", or \"bolton43\"\n    * :math:`q` is the specific humidity computed with :func:`specific_humidity_from_dewpoint`\n    * :math:`w`: is the mixing ratio computed with :func:`mixing_ratio_from_dewpoint`\n    * :math:`e` is the vapour pressure computed with :func:`vapour_pressure_from_mixing_ratio`\n    * :math:`L_{v}`: is the latent heat of vaporisation\n      (see :data:`earthkit.meteo.constants.Lv`)\n    * :math:`c_{pd}` is the specific heat of dry air on constant pressure\n      (see :data:`earthkit.meteo.constants.c_pd`)\n    * :math:`\\kappa = R_{d}/c_{pd}` (see :data:`earthkit.meteo.constants.kappa`)","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"td","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"method","schema":{"type":"string"},"optional":true,"default":"ifs"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"ept_from_specific_humidity","summary":"Compute the equivalent potential temperature from specific humidity.","description":"Compute the equivalent potential temperature from specific humidity.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\nq: array-like | xarray.DataArray | FieldList | Field\n    Specific humidity (kg/kg)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\nmethod: str, optional\n    Specify the computation method. The possible values are: \"ifs\",\n    \"bolton35\", \"bolton39\", \"bolton43\". See :func:`ept_from_dewpoint` for details.\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Equivalent potential temperature (K)\n\n\nThe computations are the same as in :func:`ept_from_dewpoint`\n(the dewpoint is computed from q with :func:`dewpoint_from_specific_humidity`).","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: kg/kg (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"method","schema":{"type":"string"},"optional":true,"default":"ifs"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"eq","summary":"Equal to comparison","description":"Compares whether `x` is strictly equal to `y`.\n\n**Remarks:**\n\n* Data types MUST be checked strictly. For example, a string with the content *1* is not equal to the number *1*. Nevertheless, an integer *1* is equal to a floating-point number *1.0* as `integer` is a sub-type of `number`.\n* If any operand is `null`, the return value is `null`.\n* Temporal strings are normal strings. To compare temporal strings as dates/times, use ``date_difference()``.","categories":["texts","comparison"],"parameters":[{"name":"x","description":"First operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"y","description":"Second operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"delta","description":"Only applicable for comparing two numbers. If this optional parameter is set to a positive non-zero number the equality of two numbers is checked against a delta value. This is especially useful to circumvent problems with floating-point inaccuracy in machine-based computation.\n\nThis option is basically an alias for the following computation: `lte(abs(minus([x, y]), delta)`","schema":{"type":["number","null"]},"default":null,"optional":true},{"name":"case_sensitive","description":"Only applicable for comparing two strings. Case sensitive comparison can be disabled by setting this parameter to `false`.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"`true` if `x` is equal to `y`, `null` if any operand is `null`, otherwise `false`.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":1,"y":null},"returns":null},{"arguments":{"x":null,"y":null},"returns":null},{"arguments":{"x":1,"y":1},"returns":true},{"arguments":{"x":1,"y":"1"},"returns":false},{"arguments":{"x":0,"y":false},"returns":false},{"arguments":{"x":1.02,"y":1,"delta":0.01},"returns":false},{"arguments":{"x":-1,"y":-1.001,"delta":0.01},"returns":true},{"arguments":{"x":115,"y":110,"delta":10},"returns":true},{"arguments":{"x":"Test","y":"test"},"returns":false},{"arguments":{"x":"Test","y":"test","case_sensitive":false},"returns":true},{"arguments":{"x":"Ä","y":"ä","case_sensitive":false},"returns":true},{"arguments":{"x":"2018-01-01T00:00:00Z","y":"2018-01-01T00:00:00+00:00"},"returns":false},{"arguments":{"x":null,"y":null},"returns":null}]},{"id":"etr","summary":"Extreme temperature range","description":"The maximum of the maximum temperature minus the minimum of the minimum temperature.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"exp","summary":"Exponentiation to the base e","description":"Exponential function to the base *e* raised to the power of `p`.\n\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > exponential & logarithmic"],"parameters":[{"name":"p","description":"The numerical exponent.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed value for *e* raised to the power of `p`.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"p":0},"returns":1},{"arguments":{"p":null},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/ExponentialFunction.html","title":"Exponential function explained by Wolfram MathWorld"}],"process_graph":{"e":{"process_id":"e","arguments":{}},"power":{"process_id":"power","arguments":{"base":{"from_node":"e"},"p":{"from_parameter":"p"}},"result":true}}},{"id":"extrema","summary":"Minimum and maximum values","description":"Two element array containing the minimum and the maximum values of `data`.\n\nThis process is basically an alias for calling both ``min()`` and ``max()``, but may be implemented more performant by back-ends as it only needs to iterate over the data once instead of twice.","categories":["math > statistics"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not. Ignores them by default. Setting this flag to `false` considers no-data values so that an array with two `null` values is returned if any value is such a value.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"An array containing the minimum and maximum values for the specified numbers. The first element is the minimum, the second element is the maximum. If the input array is empty both elements are set to `null`.","schema":[{"type":"array","minItems":2,"maxItems":2,"items":{"type":"number"}},{"type":"array","minItems":2,"maxItems":2,"items":{"type":"null"}}]},"examples":[{"arguments":{"data":[1,0,3,2]},"returns":[0,3]},{"arguments":{"data":[5,2.5,null,-0.7]},"returns":[-0.7,5]},{"arguments":{"data":[1,0,3,null,2],"ignore_nodata":false},"returns":[null,null]},{"description":"The input array is empty: return two `null` values.","arguments":{"data":[]},"returns":[null,null]}]},{"id":"ffdi","summary":"McArthur forest fire danger index (FFDI) Mark 5.","description":"The FFDI is a numeric indicator of the potential danger of a forest fire.","parameters":[{"name":"drought_factor","schema":{"type":"object","subtype":"datacube"},"description":"The drought factor, often the daily Griffiths drought factor (see :py:func:`griffiths_drought_factor`)."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"The daily maximum temperature near the surface, or similar. Different applications have used different inputs here, including the previous/current day's maximum daily temperature at a height of 2m, and the daily mean temperature at a height of 2m."},{"name":"hurs","schema":{"type":"object","subtype":"datacube"},"description":"The relative humidity near the surface and near the time of the maximum daily temperature, or similar. Different applications have used different inputs here, including the mid-afternoon relative humidity at a height of 2m, and the daily mean relative humidity at a height of 2m."},{"name":"sfcWind","schema":{"type":"object","subtype":"datacube"},"description":"The wind speed near the surface and near the time of the maximum daily temperature, or similar. Different applications have used different inputs here, including the mid-afternoon wind speed at a height of 10m, and the daily mean wind speed at a height of 10m."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"filter_bands","summary":"Filter the bands by names","description":"Filters the bands in the data cube so that bands that don't match any of the criteria are dropped from the data cube. The data cube is expected to have only one dimension of type `bands`. Fails with a `DimensionMissing` exception if no such dimension exists.\n\nThe following criteria can be used to select bands:\n\n* `bands`: band name or common band name (e.g. `B01`, `B8A`, `red` or `nir`)\n* `wavelengths`: ranges of wavelengths in micrometers (μm) (e.g. 0.5 - 0.6)\n\nAll these information are exposed in the band metadata of the collection. To keep algorithms interoperable it is recommended to prefer the common band names or the wavelengths over band names that are specific to the collection and/or back-end.\n\nIf multiple criteria are specified, any of them must match and not all of them, i.e. they are combined with an OR-operation. If no criteria are specified, the `BandFilterParameterMissing` exception must be thrown.\n\n**Important:** The order of the specified array defines the order of the bands in the data cube, which can be important for subsequent processes. If multiple bands are matched by a single criterion (e.g. a range of wavelengths), they stay in the original order.","categories":["cubes","filter"],"parameters":[{"name":"data","description":"A data cube with bands.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"bands"}]}},{"name":"bands","description":"A list of band names. Either the unique band name (metadata field `name` in bands) or one of the common band names (metadata field `common_name` in bands). If the unique band name and the common name conflict, the unique band name has a higher priority.\n\nThe order of the specified array defines the order of the bands in the data cube. If multiple bands match a common name, all matched bands are included in the original order.","schema":{"type":"array","items":{"type":"string","subtype":"band-name"}},"default":[],"optional":true}],"returns":{"description":"A data cube limited to a subset of its original bands. The dimensions and dimension properties (name, type, labels, reference system and resolution) remain unchanged, except that the dimension of type `bands` has less (or the same) dimension labels.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"bands"}]}},"exceptions":{"BandFilterParameterMissing":{"message":"The process `filter_bands` requires any of the parameters `bands`, `common_names` or `wavelengths` to be set."},"DimensionMissing":{"message":"A band dimension is missing."}},"links":[{"rel":"about","href":"https://github.com/radiantearth/stac-spec/tree/master/extensions/eo#common-band-names","title":"List of common band names as specified by the STAC specification"},{"href":"https://openeo.org/documentation/1.0/datacubes.html#filter","rel":"about","title":"Filters explained in the openEO documentation"}]},{"id":"filter_bbox","summary":"Spatial filter using a bounding box","description":"Limits the data cube to the specified bounding box.\n\n* For raster data cubes, the filter retains a pixel in the data cube if the point at the pixel center intersects with the bounding box (as defined in the Simple Features standard by the OGC). Alternatively, ``filter_spatial()`` can be used to filter by geometry.\n* For vector data cubes, the filter retains the geometry in the data cube if the geometry is fully within the bounding box (as defined in the Simple Features standard by the OGC). All geometries that were empty or not contained fully within the bounding box will be removed from the data cube.\n\nAlternatively, ``filter_vector()`` can be used to filter by geometry.","categories":["cubes","filter"],"parameters":[{"name":"data","description":"A data cube.","schema":[{"title":"Raster data cube","type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]},{"title":"Vector data cube","type":"object","subtype":"datacube","dimensions":[{"type":"geometry"}]}]},{"name":"extent","description":"A bounding box, which may include a vertical axis (see `base` and `height`).","schema":{"type":"object","subtype":"bounding-box","required":["west","south","east","north"],"properties":{"west":{"description":"West (lower left corner, coordinate axis 1).","type":"number"},"south":{"description":"South (lower left corner, coordinate axis 2).","type":"number"},"east":{"description":"East (upper right corner, coordinate axis 1).","type":"number"},"north":{"description":"North (upper right corner, coordinate axis 2).","type":"number"},"base":{"description":"Base (optional, lower left corner, coordinate axis 3).","type":["number","null"],"default":null},"height":{"description":"Height (optional, upper right corner, coordinate axis 3).","type":["number","null"],"default":null},"crs":{"description":"Coordinate reference system of the extent, specified as as [EPSG code](http://www.epsg-registry.org/) or [WKT2 CRS string](http://docs.opengeospatial.org/is/18-010r7/18-010r7.html). Defaults to `4326` (EPSG code 4326) unless the client explicitly requests a different coordinate reference system.","anyOf":[{"title":"EPSG Code","type":"integer","subtype":"epsg-code","minimum":1000,"examples":[3857]},{"title":"WKT2","type":"string","subtype":"wkt2-definition"}],"default":4326}}}}],"returns":{"description":"A data cube restricted to the bounding box. The dimensions and dimension properties (name, type, labels, reference system and resolution) remain unchanged, except that the spatial dimensions have less (or the same) dimension labels.","schema":[{"title":"Raster data cube","type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]},{"title":"Vector data cube","type":"object","subtype":"datacube","dimensions":[{"type":"geometry"}]}]},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#filter","rel":"about","title":"Filters explained in the openEO documentation"},{"rel":"about","href":"https://proj.org/usage/projections.html","title":"PROJ parameters for cartographic projections"},{"rel":"about","href":"http://www.epsg-registry.org","title":"Official EPSG code registry"},{"rel":"about","href":"http://www.epsg.io","title":"Unofficial EPSG code database"},{"href":"http://www.opengeospatial.org/standards/sfa","rel":"about","title":"Simple Features standard by the OGC"}]},{"id":"filter_labels","summary":"Filter dimension labels based on a condition","description":"Filters the dimension labels in the data cube for the given dimension. Only the dimension labels that match the specified condition are preserved, all other labels with their corresponding data get removed.","categories":["cubes","filter"],"experimental":true,"parameters":[{"name":"data","description":"A data cube.","schema":{"type":"object","subtype":"datacube"}},{"name":"condition","description":"A condition that is evaluated against each dimension label in the specified dimension. A dimension label and the corresponding data is preserved for the given dimension, if the condition returns `true`.","schema":{"type":"object","subtype":"process-graph","parameters":[{"name":"value","description":"A single dimension label to compare against. The data type of the parameter depends on the dimension labels set for the dimension. Please note that for some dimension types a representation is used, e.g.\n\n* dates and/or times are usually strings compliant to [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601),\n* geometries can be a WKT string or an identifier.","schema":[{"type":"number"},{"type":"string"}]},{"name":"context","description":"Additional data passed by the user.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"`true` if the dimension label should be kept in the data cube, otherwise `false`.","schema":{"type":"boolean"}}}},{"name":"dimension","description":"The name of the dimension to filter on. Fails with a `DimensionNotAvailable` exception if the specified dimension does not exist.","schema":{"type":"string"}},{"name":"context","description":"Additional data to be passed to the condition.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"A data cube with the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged, except that the given dimension has less (or the same) dimension labels.","schema":{"type":"object","subtype":"datacube"}},"exceptions":{"DimensionNotAvailable":{"message":"A dimension with the specified name does not exist."}},"examples":[{"description":"Filters the data cube to only contain data from platform Sentinel-2A. This example assumes that the data cube has a dimension `platform` so that computations can distinguish between Sentinel-2A and Sentinel-2B data.","arguments":{"data":{"from_parameter":"sentinel2_data"},"condition":{"process_graph":{"eq":{"process_id":"eq","arguments":{"x":{"from_parameter":"value"},"y":"Sentinel-2A","case_sensitive":false},"result":true}}},"dimension":"platform"}}],"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#filter","rel":"about","title":"Filters explained in the openEO documentation"}]},{"id":"filter_spatial","summary":"Spatial filter raster data cubes using geometries","description":"Limits the raster data cube over the spatial dimensions to the specified geometries.\n\n- For **polygons**, the filter retains a pixel in the data cube if the point at the pixel center intersects with at least one of the polygons (as defined in the Simple Features standard by the OGC).\n- For **points**, the process considers the closest pixel center.\n- For **lines** (line strings), the process considers all the pixels whose centers are closest to at least one point on the line.\n\nMore specifically, pixels outside of the bounding box of the given geometry will not be available after filtering. All pixels inside the bounding box that are not retained will be set to `null` (no data).\n\n Alternatively, use ``filter_bbox()`` to filter by bounding box.","categories":["cubes","filter"],"parameters":[{"name":"data","description":"A raster data cube.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},{"name":"geometries","description":"One or more geometries used for filtering, given as GeoJSON or vector data cube. If multiple geometries are provided, the union of them is used. Empty geometries are ignored.\n\nLimits the data cube to the bounding box of the given geometries. No implicit masking gets applied. To mask the pixels of the data cube use ``mask_polygon()``.","schema":[{"title":"Vector Data Cube","type":"object","subtype":"datacube","dimensions":[{"type":"geometry"}]},{"title":"GeoJSON","type":"object","subtype":"geojson","description":"Deprecated in favor of ``load_geojson()``. The GeoJSON type `GeometryCollection` is not supported.","deprecated":true}]}],"returns":{"description":"A raster data cube restricted to the specified geometries. The dimensions and dimension properties (name, type, labels, reference system and resolution) remain unchanged, except that the spatial dimensions have less (or the same) dimension labels.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#filter","rel":"about","title":"Filters explained in the openEO documentation"},{"href":"http://www.opengeospatial.org/standards/sfa","rel":"about","title":"Simple Features standard by the OGC"}]},{"id":"filter_temporal","summary":"Temporal filter based on temporal intervals","description":"Limits the data cube to the specified interval of dates and/or times.\n\nMore precisely, the filter checks whether each of the temporal dimension labels is greater than or equal to the lower boundary (start date/time) and less than the value of the upper boundary (end date/time). This corresponds to a left-closed interval, which contains the lower boundary but not the upper boundary.","categories":["cubes","filter"],"parameters":[{"name":"data","description":"A data cube.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"temporal"}]}},{"name":"extent","description":"Left-closed temporal interval, i.e. an array with exactly two elements:\n\n1. The first element is the start of the temporal interval. The specified time instant is **included** in the interval.\n2. The second element is the end of the temporal interval. The specified time instant is **excluded** from the interval.\n\nThe second element must always be greater/later than the first element. Otherwise, a `TemporalExtentEmpty` exception is thrown.\n\nAlso supports unbounded intervals by setting one of the boundaries to `null`, but never both.","schema":{"type":"array","subtype":"temporal-interval","minItems":2,"maxItems":2,"items":{"anyOf":[{"type":"string","format":"date-time","subtype":"date-time","description":"Date and time with a time zone."},{"type":"string","format":"date","subtype":"date","description":"Date only, formatted as `YYYY-MM-DD`. The time zone is UTC. Missing time components are all 0."},{"type":"null"}]},"examples":[["2015-01-01T00:00:00Z","2016-01-01T00:00:00Z"],["2015-01-01","2016-01-01"]]}},{"name":"dimension","description":"The name of the temporal dimension to filter on. If no specific dimension is specified, the filter applies to all temporal dimensions. Fails with a `DimensionNotAvailable` exception if the specified dimension does not exist.","schema":{"type":["string","null"]},"default":null,"optional":true}],"returns":{"description":"A data cube restricted to the specified temporal extent. The dimensions and dimension properties (name, type, labels, reference system and resolution) remain unchanged, except that the temporal dimensions (determined by `dimensions` parameter) may have less dimension labels.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"temporal"}]}},"exceptions":{"DimensionNotAvailable":{"message":"A dimension with the specified name does not exist."},"TemporalExtentEmpty":{"message":"The temporal extent is empty. The second instant in time must always be greater/later than the first instant in time."}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#filter","rel":"about","title":"Filters explained in the openEO documentation"},{"href":"https://www.rfc-editor.org/rfc/rfc3339.html","rel":"about","title":"RFC3339: Details about formatting temporal strings"}]},{"id":"fire_season","summary":"Fire season mask.","description":"Binary mask of the active fire season, defined by conditions on consecutive daily temperatures and, optionally, snow depths.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Daily surface temperature, cffdrs recommends using maximum daily temperature."},{"name":"snd","schema":{"type":"object","subtype":"datacube"},"description":"Snow depth, used with method == 'LA08'.","optional":true},{"name":"method","schema":{"type":"string"},"description":"Which method to use. \"LA08\"  and \"GFWED\" need the snow depth.","optional":true,"default":"WF93"},{"name":"freq","schema":{"type":"string"},"description":"If given only the longest fire season for each period defined by this frequency, Every \"seasons\" are returned if None, including the short shoulder seasons.","optional":true,"default":null},{"name":"temp_start_thresh","schema":{"type":"string"},"description":"Minimal temperature needed to start the season. Must be scalar.","optional":true,"default":"12 degC"},{"name":"temp_end_thresh","schema":{"type":"string"},"description":"Maximal temperature needed to end the season. Must be scalar.","optional":true,"default":"5 degC"},{"name":"temp_condition_days","schema":{"type":"number"},"description":"Number of days with temperature above or below the thresholds to trigger a start or an end of the fire season.","optional":true,"default":3},{"name":"snow_condition_days","schema":{"type":"number"},"description":"Parameters for the fire season determination. See :py:func:`fire_season`. Temperature is in degC, snow in m. The `snow_thresh` parameters is also used when `dry_start` is set to \"GFWED\".","optional":true,"default":3},{"name":"snow_thresh","schema":{"type":"string"},"description":"Minimal snow depth level to end a fire season, only used with method \"LA08\". Must be scalar.","optional":true,"default":"0.01 m"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"first","summary":"First element","description":"Gives the first element of an array.\n\nAn array without non-`null` elements resolves always with `null`.","categories":["arrays","reducer"],"parameters":[{"name":"data","description":"An array with elements of any data type.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not. Ignores them by default. Setting this flag to `false` considers no-data values so that `null` is returned if the first value is such a value.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"The first element of the input array.","schema":{"description":"Any data type is allowed."}},"examples":[{"arguments":{"data":[1,0,3,2]},"returns":1},{"arguments":{"data":[null,"A","B"]},"returns":"A"},{"arguments":{"data":[null,2,3],"ignore_nodata":false},"returns":null},{"description":"The input array is empty: return `null`.","arguments":{"data":[]},"returns":null}]},{"id":"first_day_tg_above","summary":"First day of temperatures superior to a given temperature threshold.","description":"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 1st).","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"0 degC"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"},{"name":"after_date","schema":{"type":"string"},"description":"Date of the year after which to look for the first event. Should have the format '%m-%d'.","optional":true,"default":"01-01"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature above the threshold needed for evaluation.","optional":true,"default":1},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"first_day_tg_below","summary":"First day of temperatures inferior to a given temperature threshold.","description":"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 1st).","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"0 degC"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":"<"},{"name":"after_date","schema":{"type":"string"},"description":"Date of the year after which to look for the first event. Should have the format '%m-%d'.","optional":true,"default":"07-01"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature below the threshold needed for evaluation.","optional":true,"default":1},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"first_day_tn_above","summary":"First day of temperatures superior to a given temperature threshold.","description":"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 1st).","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum surface temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"0 degC"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"},{"name":"after_date","schema":{"type":"string"},"description":"Date of the year after which to look for the first event. Should have the format '%m-%d'.","optional":true,"default":"01-01"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature above the threshold needed for evaluation.","optional":true,"default":1},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"first_day_tn_below","summary":"First day of temperatures inferior to a given temperature threshold.","description":"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 1st).","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum surface temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"0 degC"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":"<"},{"name":"after_date","schema":{"type":"string"},"description":"Date of the year after which to look for the first event. Should have the format '%m-%d'.","optional":true,"default":"07-01"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature below the threshold needed for evaluation.","optional":true,"default":1},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"first_day_tx_above","summary":"First day of temperatures superior to a given temperature threshold.","description":"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 1st).","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum surface temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"0 degC"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"},{"name":"after_date","schema":{"type":"string"},"description":"Date of the year after which to look for the first event. Should have the format '%m-%d'.","optional":true,"default":"01-01"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature above the threshold needed for evaluation.","optional":true,"default":1},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"first_day_tx_below","summary":"First day of temperatures inferior to a given temperature threshold.","description":"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 1st).","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum surface temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"0 degC"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":"<"},{"name":"after_date","schema":{"type":"string"},"description":"Date of the year after which to look for the first event. Should have the format '%m-%d'.","optional":true,"default":"07-01"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature below the threshold needed for evaluation.","optional":true,"default":1},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"first_snowfall","summary":"First day where snowfall exceeded a given threshold","description":"The first day where snowfall exceeded a given threshold during a time period (the threshold can be given as a snowfall flux or a liquid water equivalent snowfall rate).","parameters":[{"name":"prsn","schema":{"type":"object","subtype":"datacube"},"description":"Snowfall flux."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold snowfall flux or liquid water equivalent snowfall rate. (default: 1 mm/day).","optional":true,"default":"1 mm/day"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"floor","summary":"Round fractions down","description":"The greatest integer less than or equal to the number `x`.\n\nThis process is *not* an alias for the ``int()`` process as defined by some mathematicians, see the examples for negative numbers in both processes for differences.\n\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > rounding"],"parameters":[{"name":"x","description":"A number to round down.","schema":{"type":["number","null"]}}],"returns":{"description":"The number rounded down.","schema":{"type":["integer","null"]}},"examples":[{"arguments":{"x":0},"returns":0},{"arguments":{"x":3.5},"returns":3},{"arguments":{"x":-0.4},"returns":-1},{"arguments":{"x":-3.5},"returns":-4}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/FloorFunction.html","title":"Floor explained by Wolfram MathWorld"}]},{"id":"flow_index","summary":"Flow index","description":"Calculate the pth percentile of daily streamflow normalized by the median flow.","parameters":[{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Daily streamflow data."},{"name":"p","schema":{"type":"number"},"description":"Percentile for calculating the flow index, between 0 and 1. Default of 0.95 is for high flows.","optional":true,"default":0.95}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"fraction_over_precip_doy_thresh","summary":"Fraction of precipitation due to wet days with daily precipitation over a given daily percentile.","description":"The percentage of the total precipitation over a period occurring for days when the precipitation is above a threshold defining wet days and above a given percentile for that day.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily precipitation flux."},{"name":"pr_per","schema":{"type":"object","subtype":"datacube"},"description":"Percentile of wet day precipitation flux. Either computed daily (one value per day of year) or computed over a period (one value per spatial point)."},{"name":"thresh","schema":{"type":"string"},"description":"Precipitation value over which a day is considered wet.","optional":true,"default":"1 mm/day"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"bootstrap","schema":{"type":"boolean"},"description":"Flag to run bootstrapping of percentiles. Used by percentile_bootstrap decorator. Bootstrapping is only useful when the percentiles are computed on a part of the studied sample. This period, common to percentiles and the sample must be bootstrapped to avoid inhomogeneities with the rest of the time series. Do not enable bootstrap when there is no common period, otherwise it will provide the wrong results. Note that bootstrapping is computationally expensive.","optional":true,"default":false},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"fraction_over_precip_thresh","summary":"Fraction of precipitation due to wet days with daily precipitation over a given percentile.","description":"The percentage of the total precipitation over a period occurring for days when the precipitation is above a threshold defining wet days and above a given percentile for that day.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily precipitation flux."},{"name":"pr_per","schema":{"type":"object","subtype":"datacube"},"description":"Percentile of wet day precipitation flux. Either computed daily (one value per day of year) or computed over a period (one value per spatial point)."},{"name":"thresh","schema":{"type":"string"},"description":"Precipitation value over which a day is considered wet.","optional":true,"default":"1 mm/day"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"bootstrap","schema":{"type":"boolean"},"description":"Flag to run bootstrapping of percentiles. Used by percentile_bootstrap decorator. Bootstrapping is only useful when the percentiles are computed on a part of the studied sample. This period, common to percentiles and the sample must be bootstrapped to avoid inhomogeneities with the rest of the time series. Do not enable bootstrap when there is no common period, otherwise it will provide the wrong results. Note that bootstrapping is computationally expensive.","optional":true,"default":false},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"freezethaw_spell_frequency","summary":"Freeze-thaw spell frequency","description":"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.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh_tasmin","schema":{"type":"string"},"description":"The temperature threshold needed to trigger a freeze event.","optional":true,"default":"0 degC"},{"name":"thresh_tasmax","schema":{"type":"string"},"description":"The temperature threshold needed to trigger a thaw event.","optional":true,"default":"0 degC"},{"name":"window","schema":{"type":"number"},"description":"The minimal length of spells to be included in the statistics.","optional":true,"default":1},{"name":"op_tasmin","schema":{"type":"string"},"description":"Comparison operation for tasmin. Default: \"<=\".","optional":true,"default":"<="},{"name":"op_tasmax","schema":{"type":"string"},"description":"Comparison operation for tasmax. Default: \">\".","optional":true,"default":">"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"freezethaw_spell_max_length","summary":"Maximal length of freeze-thaw spells","description":"Maximal 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 a threshold, usually 0°C for both.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh_tasmin","schema":{"type":"string"},"description":"The temperature threshold needed to trigger a freeze event.","optional":true,"default":"0 degC"},{"name":"thresh_tasmax","schema":{"type":"string"},"description":"The temperature threshold needed to trigger a thaw event.","optional":true,"default":"0 degC"},{"name":"window","schema":{"type":"number"},"description":"The minimal length of spells to be included in the statistics.","optional":true,"default":1},{"name":"op_tasmin","schema":{"type":"string"},"description":"Comparison operation for tasmin. Default: \"<=\".","optional":true,"default":"<="},{"name":"op_tasmax","schema":{"type":"string"},"description":"Comparison operation for tasmax. Default: \">\".","optional":true,"default":">"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"freezethaw_spell_mean_length","summary":"Freeze-thaw spell mean length","description":"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 a given threshold, usually 0°C for both.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh_tasmin","schema":{"type":"string"},"description":"The temperature threshold needed to trigger a freeze event.","optional":true,"default":"0 degC"},{"name":"thresh_tasmax","schema":{"type":"string"},"description":"The temperature threshold needed to trigger a thaw event.","optional":true,"default":"0 degC"},{"name":"window","schema":{"type":"number"},"description":"The minimal length of spells to be included in the statistics.","optional":true,"default":1},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"freezing_degree_days","summary":"Freezing degree days","description":"The cumulative degree days for days when the average temperature is below a given threshold, typically 0°C.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"freshet_start","summary":"Day of year of spring freshet start","description":"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.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"0 degC"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"},{"name":"after_date","schema":{"type":"string"},"description":"Date of the year after which to look for the first event. Should have the format '%m-%d'.","optional":true,"default":"01-01"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature above the threshold needed for evaluation.","optional":true,"default":5},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"frost_days","summary":"Frost days","description":"Number of days where the daily minimum temperature is below a given threshold.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Freezing temperature.","optional":true,"default":"0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"frost_free_season_end","summary":"Frost free season end","description":"First day when the temperature is below a given threshold for a given number of consecutive days after a median calendar date.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"0 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature above/under the threshold to start/end the season.","optional":true,"default":5},{"name":"mid_date","schema":{"type":"string"},"description":"A date what must be included in the season. `None` removes that constraint.","optional":true,"default":"07-01"},{"name":"op","schema":{"type":"string"},"description":"How to compare tasmin and the threshold.","optional":true,"default":">="},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"frost_free_season_length","summary":"Frost free season length","description":"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.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"0 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature above/under the threshold to start/end the season.","optional":true,"default":5},{"name":"mid_date","schema":{"type":"string"},"description":"A date what must be included in the season. `None` removes that constraint.","optional":true,"default":"07-01"},{"name":"op","schema":{"type":"string"},"description":"How to compare tasmin and the threshold.","optional":true,"default":">="},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"frost_free_season_start","summary":"Frost free season start","description":"First day when minimum daily temperature exceeds a given threshold for a given number of consecutive days","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"0 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature above/under the threshold to start/end the season.","optional":true,"default":5},{"name":"mid_date","schema":{"type":"string"},"description":"A date that must be included in the season. `None` removes that constraint.","optional":true,"default":"07-01"},{"name":"op","schema":{"type":"string"},"description":"How to compare tasmin and the threshold.","optional":true,"default":">="},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"frost_free_spell_max_length","summary":"Frost free spell maximum length","description":"The maximum length of a frost free period of `N` days or more, during which the minimum temperature over a given time window of days is above a given threshold.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"The temperature threshold needed to trigger a frost-free spell.","optional":true,"default":"0.0 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperatures above thresholds to qualify as a frost-free day.","optional":true,"default":1},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">=\".","optional":true,"default":">="},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"frost_season_length","summary":"Frost season length","description":"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.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature below threshold to mark the beginning and end of frost season.","optional":true,"default":5},{"name":"mid_date","schema":{"type":"string"},"description":"The date must be included in the season. It is the earliest the end of the season can be. ``None`` removes that constraint.","optional":true,"default":"01-01"},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \"<\".","optional":true,"default":"<"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"growing_degree_days","summary":"Growing degree days","description":"The cumulative degree days for days when the average temperature is above a given threshold.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"4.0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"growing_season_end","summary":"Growing season end","description":"The first day when the temperature is below a certain threshold for a certain number of consecutive days after a given calendar date.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"5.0 degC"},{"name":"mid_date","schema":{"type":"string"},"description":"Date of the year after which to look for the end of the season. Should have the format '%m-%d'. ``None`` removes that constraint.","optional":true,"default":"07-01"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature below threshold needed for evaluation.","optional":true,"default":5},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\". Note that this comparison is what defines the season. The end of the season happens when the condition is NOT met for `window` consecutive days.","optional":true,"default":">="}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"growing_season_length","summary":"Growing season length","description":"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.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"5.0 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature above the threshold to mark the beginning and end of growing season.","optional":true,"default":6},{"name":"mid_date","schema":{"type":"string"},"description":"Date of the year before which the season must start and after which it can end. Should have the format '%m-%d'. Setting `None` removes that constraint.","optional":true,"default":"07-01"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">=\".","optional":true,"default":">="}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"growing_season_start","summary":"Growing season start","description":"The first day when the temperature exceeds a certain threshold for a given number of consecutive days.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"5.0 degC"},{"name":"mid_date","schema":{"type":"string"},"description":"Date of the year before which the season must start. Should have the format '%m-%d'. ``None`` removes that constraint.","optional":true,"default":"07-01"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature above threshold needed for evaluation.","optional":true,"default":5},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">=\".","optional":true,"default":">="}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"gt","summary":"Greater than comparison","description":"Compares whether `x` is strictly greater than `y`.\n\n**Remarks:**\n\n* If any operand is `null`, the return value is `null`.\n* If any operand is not a `number`, the process returns `false`.\n* Temporal strings are normal strings. To compare temporal strings as dates/times, use ``date_difference()``.","categories":["comparison"],"parameters":[{"name":"x","description":"First operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"y","description":"Second operand.","schema":{"type":["number","boolean","string","null"]}}],"returns":{"description":"`true` if `x` is strictly greater than `y` or `null` if any operand is `null`, otherwise `false`.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":1,"y":null},"returns":null},{"arguments":{"x":0,"y":0},"returns":false},{"arguments":{"x":2,"y":1},"returns":true},{"arguments":{"x":-0.5,"y":-0.6},"returns":true},{"arguments":{"x":"2018-01-02T00:00:00Z","y":"2018-01-01T00:00:00Z"},"returns":false},{"arguments":{"x":true,"y":0},"returns":false},{"arguments":{"x":true,"y":false},"returns":false},{"arguments":{"x":null,"y":null},"returns":null}]},{"id":"gte","summary":"Greater than or equal to comparison","description":"Compares whether `x` is greater than or equal to `y`.\n\n**Remarks:**\n\n* If any operand is `null`, the return value is `null`.\n* If the operands are not equal (see process ``eq()``) and any of them is not a `number`, the process returns `false`.\n* Temporal strings are normal strings. To compare temporal strings as dates/times, use ``date_difference()``.","categories":["comparison"],"parameters":[{"name":"x","description":"First operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"y","description":"Second operand.","schema":{"type":["number","boolean","string","null"]}}],"returns":{"description":"`true` if `x` is greater than or equal to `y`, `null` if any operand is `null`, otherwise `false`.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":1,"y":null},"returns":null},{"arguments":{"x":0,"y":0},"returns":true},{"arguments":{"x":1,"y":2},"returns":false},{"arguments":{"x":-0.5,"y":-0.6},"returns":true},{"arguments":{"x":"2018-01-01T00:00:00Z","y":"2018-01-01T00:00:00+00:00"},"returns":false},{"arguments":{"x":true,"y":false},"returns":false},{"arguments":{"x":null,"y":null},"returns":null}],"process_graph":{"eq":{"process_id":"eq","arguments":{"x":{"from_parameter":"x"},"y":{"from_parameter":"y"}}},"gt":{"process_id":"gt","arguments":{"x":{"from_parameter":"x"},"y":{"from_parameter":"y"}}},"or":{"process_id":"or","arguments":{"x":{"from_node":"gt"},"y":{"from_node":"eq"}},"result":true}}},{"id":"heat_spell_frequency","summary":"Heat spell frequency","description":"Number of heat spells. A heat spell occurs when rolling averages of daily minimum and maximumtemperatures exceed given thresholds for a number of days.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum surface temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum surface temperature."},{"name":"window","schema":{"type":"number"},"description":"Minimum length of a spell.","optional":true,"default":3},{"name":"win_reducer","schema":{"type":"string"},"description":"Reduction along the spell length to compute the spell value. Note that this does not matter when `window` is 1.","optional":true,"default":"mean"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"min_gap","schema":{"type":"number"},"description":"The shortest possible gap between two spells. Spells closer than this are merged by assigning the gap steps to the merged spell.","optional":true,"default":1},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true},{"name":"thresh_tasmin","schema":{"type":"string"},"description":"Threshold for tasmin","optional":true,"default":"20 °C"},{"name":"thresh_tasmax","schema":{"type":"string"},"description":"Threshold for tasmax","optional":true,"default":"33 °C"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"heat_spell_max_length","summary":"Heat spell maximum length","description":"The longest heat spell of a period. A heat spell occurs when rolling averages of daily minimum and maximum temperatures exceed given thresholds for a number of days.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum surface temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum surface temperature."},{"name":"window","schema":{"type":"number"},"description":"Minimum length of a spell.","optional":true,"default":3},{"name":"win_reducer","schema":{"type":"string"},"description":"Reduction along the spell length to compute the spell value. Note that this does not matter when `window` is 1.","optional":true,"default":"mean"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"min_gap","schema":{"type":"number"},"description":"The shortest possible gap between two spells. Spells closer than this are merged by assigning the gap steps to the merged spell.","optional":true,"default":1},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true},{"name":"thresh_tasmin","schema":{"type":"string"},"description":"Threshold for tasmin","optional":true,"default":"20 °C"},{"name":"thresh_tasmax","schema":{"type":"string"},"description":"Threshold for tasmax","optional":true,"default":"33 °C"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"heat_spell_total_length","summary":"Heat spell total length","description":"Total length of heat spells. A heat spell occurs when rolling averages of daily minimum and maximum temperatures exceed given thresholds for a number of days.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum surface temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum surface temperature."},{"name":"window","schema":{"type":"number"},"description":"Minimum length of a spell.","optional":true,"default":3},{"name":"win_reducer","schema":{"type":"string"},"description":"Reduction along the spell length to compute the spell value. Note that this does not matter when `window` is 1.","optional":true,"default":"mean"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"min_gap","schema":{"type":"number"},"description":"The shortest possible gap between two spells. Spells closer than this are merged by assigning the gap steps to the merged spell.","optional":true,"default":1},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true},{"name":"thresh_tasmin","schema":{"type":"string"},"description":"Threshold for tasmin","optional":true,"default":"20 °C"},{"name":"thresh_tasmax","schema":{"type":"string"},"description":"Threshold for tasmax","optional":true,"default":"33 °C"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"heat_wave_frequency","summary":"Heat wave frequency","description":"Number of heat waves. A heat wave occurs when daily minimum and maximum temperatures exceed given thresholds for a number of days.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh_tasmin","schema":{"type":"string"},"description":"The minimum temperature threshold needed to trigger a heatwave event.","optional":true,"default":"22.0 degC"},{"name":"thresh_tasmax","schema":{"type":"string"},"description":"The maximum temperature threshold needed to trigger a heatwave event.","optional":true,"default":"30 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperatures above thresholds to qualify as a heatwave.","optional":true,"default":3},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"heat_wave_index","summary":"Heat wave index","description":"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.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"The temperature threshold needed to trigger a hot spell.","optional":true,"default":"25 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperatures below the threshold to qualify as a hot spell.","optional":true,"default":5},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"heat_wave_max_length","summary":"Heat wave maximum length","description":"Maximal duration of heat waves. A heat wave occurs when daily minimum and maximum temperatures exceed given thresholds for a number of days.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh_tasmin","schema":{"type":"string"},"description":"The minimum temperature threshold needed to trigger a heatwave event.","optional":true,"default":"22.0 degC"},{"name":"thresh_tasmax","schema":{"type":"string"},"description":"The maximum temperature threshold needed to trigger a heatwave event.","optional":true,"default":"30 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperatures above thresholds to qualify as a heatwave.","optional":true,"default":3},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"heat_wave_total_length","summary":"Heat wave total length","description":"Total length of heat waves. A heat wave occurs when daily minimum and maximum temperatures exceed given thresholds for a number of days.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh_tasmin","schema":{"type":"string"},"description":"The minimum temperature threshold needed to trigger a heatwave event.","optional":true,"default":"22.0 degC"},{"name":"thresh_tasmax","schema":{"type":"string"},"description":"The maximum temperature threshold needed to trigger a heatwave event.","optional":true,"default":"30 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperatures above thresholds to qualify as a heatwave.","optional":true,"default":3},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"heating_degree_days","summary":"Heating degree days","description":"The cumulative degree days for days when the mean daily temperature is below a given threshold and buildings must be heated.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"17.0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"heating_degree_days_approximation","summary":"Heating degree days approximation","description":"The cumulative degree days for days where temperatures are below a given threshold and buildings must be heated. This method integrates mean, minimum, and maximum temperatures, accounting for asymmetry in the distributions of temperatures throughout the diurnal cycle.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"17.0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"high_flow_frequency","summary":"High flow frequency","description":"Calculate the number of days in a given period with flows greater than a specified threshold, given as a multiple of the median flow. By default, the period is the water year starting on 1st October and ending on 30th September, as commonly defined in North America.","parameters":[{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Daily streamflow data."},{"name":"threshold_factor","schema":{"type":"number"},"description":"Factor by which the median flow is multiplied to set the high flow threshold, default is 9.","optional":true,"default":9},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency, default is 'YS-OCT' for water year starting in October and ending in September.","optional":true,"default":"YS-OCT"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"high_precip_low_temp","summary":"Days with precipitation and cold temperature","description":"Number of days with precipitation above a given threshold and temperature below a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily precipitation flux."},{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Daily mean, minimum or maximum temperature."},{"name":"pr_thresh","schema":{"type":"string"},"description":"Precipitation threshold to exceed.","optional":true,"default":"0.4 mm/d"},{"name":"tas_thresh","schema":{"type":"string"},"description":"Temperature threshold not to exceed.","optional":true,"default":"-0.2 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"holiday_snow_and_snowfall_days","summary":"Perfect Christmas snow days","description":"The total number of days where there is a significant amount of snow on the ground and a measurable snowfall occurring on December 25th.","parameters":[{"name":"snd","schema":{"type":"object","subtype":"datacube"},"description":"Surface snow depth."},{"name":"prsn","schema":{"type":"object","subtype":"datacube"},"description":"Snowfall flux.","optional":true},{"name":"snd_thresh","schema":{"type":"string"},"description":"Threshold snow amount. Default: 20 mm.","optional":true,"default":"20 mm"},{"name":"prsn_thresh","schema":{"type":"string"},"description":"Threshold daily snowfall liquid-water equivalent thickness. Default: 1 mm.","optional":true,"default":"1 mm"},{"name":"snd_op","schema":{"type":"string"},"description":"Comparison operation for snow depth. Default: \">=\".","optional":true,"default":">="},{"name":"prsn_op","schema":{"type":"string"},"description":"Comparison operation for snowfall flux. Default: \">=\".","optional":true,"default":">="},{"name":"date_start","schema":{"type":"string"},"description":"Beginning of analysis period. Default: \"12-25\" (December 25th).","optional":true,"default":"12-25"},{"name":"date_end","schema":{"type":"string"},"description":"End of analysis period. If not provided, `date_start` is used. Default: None.","optional":true,"default":null},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency. Default: \"YS-JUL\". The default value is chosen for the northern hemisphere.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"holiday_snow_days","summary":"Christmas snow days","description":"The total number of days where there is a significant amount of snow on the ground on December 25th.","parameters":[{"name":"snd","schema":{"type":"object","subtype":"datacube"},"description":"Surface snow depth."},{"name":"snd_thresh","schema":{"type":"string"},"description":"Threshold snow amount. Default: 20 mm.","optional":true,"default":"20 mm"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">=\".","optional":true,"default":">="},{"name":"date_start","schema":{"type":"string"},"description":"Beginning of the analysis period. Default: \"12-25\" (December 25th).","optional":true,"default":"12-25"},{"name":"date_end","schema":{"type":"string"},"description":"End of analysis period. If not provided, `date_start` is used. Default: None.","optional":true,"default":null},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency. Default: \"YS\". The default value is chosen for the northern hemisphere.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"hot_days","summary":"Hot days","description":"Number of days where the daily maximum temperature is above a given threshold.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature.","optional":true,"default":"25 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"hot_spell_frequency","summary":"Hot spell frequency","description":"The frequency of hot periods of `N` days or more, during which the temperature over a given time window of days is above a given threshold.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature below which a hot spell begins.","optional":true,"default":"30 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature above the threshold to qualify as a hot spell.","optional":true,"default":3},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"hot_spell_max_length","summary":"Hot spell maximum length","description":"The maximum length of a hot period of `N` days or more, during which the temperature over a given time window of days is above a given threshold.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"The temperature threshold needed to trigger a hot spell.","optional":true,"default":"30 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperatures below thresholds to qualify as a hot spell.","optional":true,"default":1},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"hot_spell_max_magnitude","summary":"Hot spell maximum magnitude","description":"Magnitude of the most intensive heat wave per {freq}. A heat wave occurs when daily maximum temperatures exceed given thresholds for a number of days.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to designate a heatwave.","optional":true,"default":"25.0 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature above the threshold to qualify as a heatwave.","optional":true,"default":3},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"hot_spell_total_length","summary":"Hot spell total length","description":"The total length of hot periods of `N` days or more, during which the temperature over a given time window of days is above a given threshold.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"The temperature threshold needed to trigger a hot spell.","optional":true,"default":"30 degC"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperatures below the threshold to qualify as a hot spell.","optional":true,"default":3},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"huglin_index","summary":"Huglin heliothermal index","description":"Heat-summation index for agroclimatic suitability estimation, developed specifically for viticulture. Considers daily minimum and maximum temperature with a given base threshold, typically between 1 April and 30September, and integrates a day-length coefficient calculation for higher latitudes. Metric originally published in Huglin (1978). Day-length coefficient based on Hall & Jones (2010).","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"lat","schema":{"type":"object","subtype":"datacube"},"description":"Latitude coordinate. If None, a CF-conformant \"latitude\" field must be available within the passed DataArray."},{"name":"thresh","schema":{"type":"string"},"description":"The temperature threshold.","optional":true,"default":"10 degC"},{"name":"method","schema":{"type":"string"},"description":"The formula to use for the latitude coefficient calculation. The \"huglin\" method uses a stepwise latitude coefficient for values between 40° and 50° based on :cite:t:`huglin_nouveau_1978`. The \"interpolated\" method uses a smoothed curve latitude coefficient for values based on the intervals set in :cite:t:`huglin_nouveau_1978`. The \"jones\" method integrates axial tilt, latitude, and day-of-year based on :cite:t:`hall_spatial_2010`. The \"icclim\" method is deprecated but is identical to method \"huglin\".","optional":true,"default":"jones"},{"name":"cap_value","schema":{"type":"number"},"description":"The value to use for the latitude coefficient when latitude is above 50°N or below 50°S. Only applicable for methods \"huglin\", \"icclim\", and \"interpolated\" (default: 1.0).","optional":true,"default":1.0},{"name":"start_date","schema":{"type":"string"},"description":"The hemisphere-based start date to consider (north = April, south = October).","optional":true,"default":"04-01"},{"name":"end_date","schema":{"type":"string"},"description":"The hemisphere-based start date to consider (north = October, south = April). This date is non-inclusive.","optional":true,"default":"10-01"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency (default: \"YS\"; For Southern Hemisphere, should be \"YS-JUL\").","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"ice_days","summary":"Ice days","description":"Number of days where the daily maximum temperature is below 0°C","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Freezing temperature.","optional":true,"default":"0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"if","summary":"If-Then-Else conditional","description":"If the value passed is `true`, returns the value of the `accept` parameter, otherwise returns the value of the `reject` parameter.\n\nThis is basically an if-then-else construct as in other programming languages.","categories":["logic","comparison","masks"],"parameters":[{"name":"value","description":"A boolean value.","schema":{"type":["boolean","null"]}},{"name":"accept","description":"A value that is returned if the boolean value is `true`.","schema":{"description":"Any data type is allowed."}},{"name":"reject","description":"A value that is returned if the boolean value is **not** `true`. Defaults to `null`.","schema":{"description":"Any data type is allowed."},"default":null,"optional":true}],"returns":{"description":"Either the `accept` or `reject` argument depending on the given boolean value.","schema":{"description":"Any data type is allowed."}},"examples":[{"arguments":{"value":true,"accept":"A","reject":"B"},"returns":"A"},{"arguments":{"value":null,"accept":"A","reject":"B"},"returns":"B"},{"arguments":{"value":false,"accept":[1,2,3],"reject":[4,5,6]},"returns":[4,5,6]},{"arguments":{"value":true,"accept":123},"returns":123},{"arguments":{"value":false,"accept":1},"returns":null}]},{"id":"inspect","summary":"Add information to the logs","description":"This process can be used to add runtime information to the logs, e.g. for debugging purposes. This process should be used with caution and it is recommended to remove the process in production workflows. For example, logging each value or array individually in a process such as ``apply()`` or ``reduce_dimension()`` could lead to a (too) large number of log entries. Several data structures (e.g. data cubes) are too large to log and will only return summaries of their contents.\n\nThe data provided in the parameter `data` is returned without changes.","categories":["development"],"experimental":true,"parameters":[{"name":"data","description":"Data to log.","schema":{"description":"Any data type is allowed."}},{"name":"message","description":"A message to send in addition to the data.","schema":{"type":"string"},"default":"","optional":true},{"name":"code","description":"A label to help identify one or more log entries originating from this process in the list of all log entries. It can help to group or filter log entries and is usually not unique.","schema":{"type":"string"},"default":"User","optional":true},{"name":"level","description":"The severity level of this message, defaults to `info`.","schema":{"type":"string","enum":["error","warning","info","debug"]},"default":"info","optional":true}],"returns":{"description":"The data as passed to the `data` parameter without any modification.","schema":{"description":"Any data type is allowed."}}},{"id":"int","summary":"Integer part of a number","description":"The integer part of the real number `x`.\n\nThis process is *not* an alias for the ``floor()`` process as defined by some mathematicians, see the examples for negative numbers in both processes for differences.\n\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math","math > rounding"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"Integer part of the number.","schema":{"type":["integer","null"]}},"examples":[{"arguments":{"x":0},"returns":0},{"arguments":{"x":3.5},"returns":3},{"arguments":{"x":-0.4},"returns":0},{"arguments":{"x":-3.5},"returns":-3}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/IntegerPart.html","title":"Integer Part explained by Wolfram MathWorld"}]},{"id":"is_infinite","summary":"Value is an infinite number","description":"Checks whether the specified value `x` is an infinite number. The definition of infinite numbers follows the [IEEE Standard 754](https://ieeexplore.ieee.org/document/4610935). The special numerical value `NaN` (not a number) as defined by the [IEEE Standard 754](https://ieeexplore.ieee.org/document/4610935) is not an infinite number and must return `false`.","categories":["comparison"],"experimental":true,"parameters":[{"name":"x","description":"The data to check.","schema":{"description":"Any data type is allowed."}}],"returns":{"description":"`true` if the data is an infinite number, otherwise `false`.","schema":{"type":"boolean"}},"links":[{"rel":"about","href":"https://ieeexplore.ieee.org/document/4610935","title":"IEEE Standard 754-2008 for Floating-Point Arithmetic"}]},{"id":"is_nan","summary":"Value is not a number","description":"Checks whether the specified value `x` is *not* a number. Numbers are all integers and floating-point numbers, except for the special value `NaN` as defined by the [IEEE Standard 754](https://ieeexplore.ieee.org/document/4610935).","categories":["comparison","math > constants"],"parameters":[{"name":"x","description":"The data to check.","schema":{"description":"Any data type is allowed."}}],"returns":{"description":"Returns `true` for `NaN` and all non-numeric data types, otherwise returns `false`.","schema":{"type":"boolean"}},"examples":[{"arguments":{"x":1},"returns":false},{"arguments":{"x":"Test"},"returns":true},{"arguments":{"x":null},"returns":true}],"links":[{"rel":"about","href":"https://ieeexplore.ieee.org/document/4610935","title":"IEEE Standard 754-2008 for Floating-Point Arithmetic"},{"rel":"about","href":"http://mathworld.wolfram.com/NaN.html","title":"NaN explained by Wolfram MathWorld"}]},{"id":"is_nodata","summary":"Value is a no-data value","description":"Checks whether the specified data is missing data, i.e. equals to `null` or any of the no-data values specified in the metadata.\n\nThe special numerical value `NaN` (not a number) as defined by the [IEEE Standard 754](https://ieeexplore.ieee.org/document/4610935) is only considered as no-data value if specified as no-data value in the metadata.","categories":["comparison"],"parameters":[{"name":"x","description":"The data to check.","schema":{"description":"Any data type is allowed."}}],"returns":{"description":"`true` if the data is a no-data value, otherwise `false`.","schema":{"type":"boolean"}},"examples":[{"arguments":{"x":1},"returns":false},{"arguments":{"x":"Test"},"returns":false},{"arguments":{"x":null},"returns":true},{"arguments":{"x":[null,null]},"returns":false}]},{"id":"is_valid","summary":"Value is valid data","description":"Checks whether the specified value `x` is valid. The following values are considered valid:\n\n* Any finite numerical value (integers and floating-point numbers). The definition of finite numbers follows the [IEEE Standard 754](https://ieeexplore.ieee.org/document/4610935) and excludes the special value `NaN` (not a number).\n* Any other value that is not a no-data value according to ``is_nodata()``. Thus all arrays, objects and strings are valid, regardless of their content.","categories":["comparison"],"parameters":[{"name":"x","description":"The data to check.","schema":{"description":"Any data type is allowed."}}],"returns":{"description":"`true` if the data is valid, otherwise `false`.","schema":{"type":"boolean"}},"examples":[{"arguments":{"x":1},"returns":true},{"arguments":{"x":"Test"},"returns":true},{"arguments":{"x":null},"returns":false},{"arguments":{"x":[null,null]},"returns":true}],"links":[{"rel":"about","href":"https://ieeexplore.ieee.org/document/4610935","title":"IEEE Standard 754-2008 for Floating-Point Arithmetic"}]},{"id":"kbdi","summary":"Keetch-Byram drought index (KBDI) for soil moisture deficit.","description":"The KBDI indicates the amount of water necessary to bring the soil moisture content back to field capacity. It is often used in the calculation of the McArthur Forest Fire Danger Index. The method implemented here follows :cite:t:`ffdi-finkele_2006` but limits the maximum KBDI to 203.2 mm, rather than 200 mm, in order to align best with the majority of the literature.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Total rainfall over previous 24 hours [mm/day]."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum temperature near the surface over previous 24 hours [degC]."},{"name":"pr_annual","schema":{"type":"object","subtype":"datacube"},"description":"Mean (over years) annual accumulated rainfall [mm/year]."},{"name":"kbdi0","schema":{"type":"object","subtype":"datacube"},"description":"Previous KBDI values used to initialise the KBDI calculation [mm/day]. Defaults to 0.","optional":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"last","summary":"Last element","description":"Gives the last element of an array.\n\nAn array without non-`null` elements resolves always with `null`.","categories":["arrays","reducer"],"parameters":[{"name":"data","description":"An array with elements of any data type.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not. Ignores them by default. Setting this flag to `false` considers no-data values so that `null` is returned if the last value is such a value.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"The last element of the input array.","schema":{"description":"Any data type is allowed."}},"examples":[{"arguments":{"data":[1,0,3,2]},"returns":2},{"arguments":{"data":["A","B",null]},"returns":"B"},{"arguments":{"data":[0,1,null],"ignore_nodata":false},"returns":null},{"description":"The input array is empty: return `null`.","arguments":{"data":[]},"returns":null}]},{"id":"last_snowfall","summary":"Last day where snowfall exceeded a given threshold","description":"The last day where snowfall exceeded a given threshold during a time period (the threshold can be given as a snowfall flux or a liquid water equivalent snowfall rate).","parameters":[{"name":"prsn","schema":{"type":"object","subtype":"datacube"},"description":"Snowfall flux."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold snowfall flux or liquid water equivalent snowfall rate (default: 1 mm/day).","optional":true,"default":"1 mm/day"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"last_spring_frost","summary":"Last spring frost","description":"The last day when minimum temperature is below a given threshold for a certain number of days, limited by a final calendar date.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"0 degC"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \"<\".","optional":true,"default":"<"},{"name":"before_date","schema":{"type":"string"},"description":"Date of the year before which to look for the final frost event. Should have the format '%m-%d'.","optional":true,"default":"07-01"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature below the threshold needed for evaluation.","optional":true,"default":1},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"late_frost_days","summary":"Late frost days","description":"Number of days where the daily minimum temperature is below a given threshold between a givenstart date and a given end date.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Freezing temperature.","optional":true,"default":"0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"latitude_temperature_index","summary":"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 multiplied by the difference of latitude factor coefficient minus latitude. Metric originally published in Jackson, D. I., & Cherry, N. J. (1988).","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"lat","schema":{"type":"object","subtype":"datacube"},"description":"Latitude coordinate. If None, a CF-conformant \"latitude\" field must be available within the passed DataArray."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"lcl_temperature","summary":"Compute the Lifting Condensation Level (LCL) temperature from dewpoint.","description":"Compute the Lifting Condensation Level (LCL) temperature from dewpoint.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature at the start level (K)\ntd: array-like | xarray.DataArray | FieldList | Field\n    Dewpoint at the start level (K)\nmethod: str, optional\n    The computation method: \"davies\" or \"bolton\".\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Temperature of the LCL (K)\n\n\nThe actual computation is based on the ``method``:\n\n* \"davies\": the formula by [DaviesJones1983]_ is used (it is also used by the IFS model):\n\n    .. math::\n\n        t_{LCL} = td - (0.212 + 1.571\\times 10^{-3} (td - t_{0}) - 4.36\\times 10^{-4} (t - t_{0})) (t - td)\n\n  where :math:`t_{0}` is the triple point of water (see :data:`earthkit.meteo.constants.T0`).\n\n* \"bolton\": the formula by [Bolton1980]_ is used:\n\n    .. math::\n\n        t_{LCL} = 56.0 +  \\frac{1}{\\frac{1}{td - 56} + \\frac{log(\\frac{t}{td})}{800}}","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"td","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"method","schema":{"type":"string"},"optional":true,"default":"davies"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"linear_scale_range","summary":"Linear transformation between two ranges","description":"Performs a linear transformation between the input and output range.\n\nThe given number in `x` is clipped to the bounds specified in `inputMin` and `inputMax` so that the underlying formula *`((x - inputMin) / (inputMax - inputMin)) * (outputMax - outputMin) + outputMin`* never returns any value lower than `outputMin` or greater than `outputMax`.\n\nPotential use case include\n\n* scaling values to the 8-bit range (0 - 255) often used for numeric representation of values in one of the channels of the [RGB colour model](https://en.wikipedia.org/wiki/RGB_color_model#Numeric_representations) or\n* calculating percentages (0 - 100).\n\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math"],"parameters":[{"name":"x","description":"A number to transform. The number gets clipped to the bounds specified in `inputMin` and `inputMax`.","schema":{"type":["number","null"]}},{"name":"inputMin","description":"Minimum value the input can obtain.","schema":{"type":"number"}},{"name":"inputMax","description":"Maximum value the input can obtain.","schema":{"type":"number"}},{"name":"outputMin","description":"Minimum value of the desired output range.","schema":{"type":"number"},"default":0,"optional":true},{"name":"outputMax","description":"Maximum value of the desired output range.","schema":{"type":"number"},"default":1,"optional":true}],"returns":{"description":"The transformed number.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0.3,"inputMin":-1,"inputMax":1,"outputMin":0,"outputMax":255},"returns":165.75},{"arguments":{"x":25.5,"inputMin":0,"inputMax":255},"returns":0.1},{"arguments":{"x":null,"inputMin":0,"inputMax":100},"returns":null},{"description":"Shows that the input data is clipped.","arguments":{"x":1.12,"inputMin":0,"inputMax":1,"outputMin":0,"outputMax":255},"returns":255}],"process_graph":{"subtract1":{"process_id":"subtract","arguments":{"x":{"from_parameter":"x"},"y":{"from_parameter":"inputMin"}}},"subtract2":{"process_id":"subtract","arguments":{"x":{"from_parameter":"inputMax"},"y":{"from_parameter":"inputMin"}}},"subtract3":{"process_id":"subtract","arguments":{"x":{"from_parameter":"outputMax"},"y":{"from_parameter":"outputMin"}}},"divide":{"process_id":"divide","arguments":{"x":{"from_node":"subtract1"},"y":{"from_node":"subtract2"}}},"multiply":{"process_id":"multiply","arguments":{"x":{"from_node":"divide"},"y":{"from_node":"subtract3"}}},"add":{"process_id":"add","arguments":{"x":{"from_node":"multiply"},"y":{"from_parameter":"outputMin"}},"result":true}}},{"id":"liquid_precip_ratio","summary":"Fraction of liquid to total precipitation","description":"The ratio of total liquid precipitation over the total precipitation. Liquid precipitation is approximated from total precipitation on days where temperature is above a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily precipitation flux."},{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature under which precipitation is assumed to be solid.","optional":true,"default":"0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"QS-DEC"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"liquidprcpavg","summary":"Averaged liquid precipitation.","description":"Averaged liquid precipitation. Precipitation is considered liquid when the average daily temperature is above a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily precipitation flux."},{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean, maximum or minimum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold of `tas` over which the precipication is assumed to be liquid rain.","optional":true,"default":"0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"liquidprcptot","summary":"Total accumulated liquid precipitation.","description":"Total accumulated liquid precipitation. Precipitation is considered liquid when the average daily temperature is above a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily precipitation flux."},{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean, maximum or minimum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold of `tas` over which the precipication is assumed to be liquid rain.","optional":true,"default":"0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"ln","summary":"Natural logarithm","description":"The natural logarithm is the logarithm to the base *e* of the number `x`, which equals to using the *log* process with the base set to *e*. The natural logarithm is the inverse function of taking *e* to the power x.\n\nThe no-data value `null` is passed through.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it. Therefore, *`ln(0)`* results in ±infinity if the processing environment supports it or otherwise an exception is thrown.","categories":["math > exponential & logarithmic"],"parameters":[{"name":"x","description":"A number to compute the natural logarithm for.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed natural logarithm.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":1},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/NaturalLogarithm.html","title":"Natural logarithm explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}],"process_graph":{"e":{"process_id":"e","arguments":{}},"log":{"process_id":"log","arguments":{"x":{"from_parameter":"x"},"base":{"from_node":"e"}},"result":true}}},{"id":"load_features","summary":"Load a registered feature collection","description":"Load a registered feature collection as a GeoJSON FeatureCollection, reprojected to WGS 84.\n\nA fast local read of what is already registered, never a fetch -- materializing a collection\nfrom its provider is the separate, deliberate action `refresh_feature_collection_from_provider`\nperforms. Because this never fetches or writes, it behaves identically on a read-only instance\nand a writable one, exactly like `load_collection`: it serves a registered collection, and\nrefuses outright, with no other state, the one nothing has ever been registered for.\n\nGeoJSON has no CRS of its own -- RFC 7946 fixes it to WGS 84 -- so a collection stored in a\nprojected CRS is reprojected here before being handed to any downstream process such as\n`aggregate_spatial`. This is the permanent output contract of `load_features`, not a\ntemporary shim: every caller gets WGS 84 coordinates regardless of the collection's native\nstorage CRS.\n\nEach feature's `id_property` value is re-stamped onto the feature's top-level `id`, because\n`aggregate_spatial` reads its geometry labels from there rather than from `properties`.\n\nThe parameter remains named `id` because that is the public openEO process parameter used\nby process graphs.","parameters":[{"name":"id","schema":{"type":"string"},"description":"Feature collection id, as registered under GET /features."},{"name":"spatial_extent","schema":{},"description":"Bounding box filter: {west, south, east, north, crs}.","optional":true,"default":null},{"name":"version","schema":{"type":["string","null"]},"description":"Optional record timestamp that pins this read to the submitted collection version.","optional":true,"default":null}],"returns":{"schema":{}}},{"id":"load_stac","summary":"Loads data from STAC","description":"Loads data from a static STAC catalog or a STAC API Collection and returns the data as a processable data cube. A batch job result can be loaded by providing a reference to it.\n\nIf supported by the underlying metadata and file format, the data that is added to the data cube can be restricted with the parameters `spatial_extent`, `temporal_extent` and `bands`. If no data is available for the given extents, a `NoDataAvailable` exception is thrown.\n\n**Remarks:**\n\n* The bands (and all dimensions that specify nominal dimension labels) are expected to be ordered as specified in the metadata if the `bands` parameter is set to `null`.\n* If no additional parameter is specified this would imply that the whole data set is expected to be loaded. Due to the large size of many data sets, this is not recommended and may be optimized by back-ends to only load the data that is actually required after evaluating subsequent processes such as filters. This means that the values should be processed only after the data has been limited to the required extent and as a consequence also to a manageable size.","categories":["cubes","import"],"experimental":true,"parameters":[{"name":"url","description":"The URL to a static STAC catalog (STAC Item, STAC Collection, or STAC Catalog) or a specific STAC API Collection that allows to filter items and to download assets. This includes batch job results, which itself are compliant to STAC. For external URLs, authentication details such as API keys or tokens may need to be included in the URL.\n\nBatch job results can be specified in two ways:\n\n- For Batch job results at the same back-end, a URL pointing to the corresponding batch job results endpoint should be provided. The URL usually ends with `/jobs/{id}/results` and `{id}` is the corresponding batch job ID.\n- For external results, a signed URL must be provided. Not all back-ends support signed URLs, which are provided as a link with the link relation `canonical` in the batch job result metadata.","schema":{"title":"URL","type":"string","format":"uri","subtype":"uri","pattern":"^https?://"}},{"name":"spatial_extent","description":"Limits the data to load to the specified bounding box or polygons.\n\n* For raster data, the process loads the pixel into the data cube if the point at the pixel center intersects with the bounding box or any of the polygons (as defined in the Simple Features standard by the OGC).\n* For vector data, the process loads the geometry into the data cube if the geometry is fully within the bounding box or any of the polygons (as defined in the Simple Features standard by the OGC). Empty geometries may only be in the data cube if no spatial extent has been provided.\n\nThe GeoJSON can be one of the following feature types:\n\n* A `Polygon` or `MultiPolygon` geometry,\n* a `Feature` with a `Polygon` or `MultiPolygon` geometry, or\n* a `FeatureCollection` containing at least one `Feature` with `Polygon` or `MultiPolygon` geometries.\n\nSet this parameter to `null` to set no limit for the spatial extent. Be careful with this when loading large datasets! It is recommended to use this parameter instead of using ``filter_bbox()`` or ``filter_spatial()`` directly after loading unbounded data.","schema":[{"title":"Bounding Box","type":"object","subtype":"bounding-box","required":["west","south","east","north"],"properties":{"west":{"description":"West (lower left corner, coordinate axis 1).","type":"number"},"south":{"description":"South (lower left corner, coordinate axis 2).","type":"number"},"east":{"description":"East (upper right corner, coordinate axis 1).","type":"number"},"north":{"description":"North (upper right corner, coordinate axis 2).","type":"number"},"base":{"description":"Base (optional, lower left corner, coordinate axis 3).","type":["number","null"],"default":null},"height":{"description":"Height (optional, upper right corner, coordinate axis 3).","type":["number","null"],"default":null},"crs":{"description":"Coordinate reference system of the extent, specified as as [EPSG code](http://www.epsg-registry.org/) or [WKT2 CRS string](http://docs.opengeospatial.org/is/18-010r7/18-010r7.html). Defaults to `4326` (EPSG code 4326) unless the client explicitly requests a different coordinate reference system.","anyOf":[{"title":"EPSG Code","type":"integer","subtype":"epsg-code","minimum":1000,"examples":[3857]},{"title":"WKT2","type":"string","subtype":"wkt2-definition"}],"default":4326}}},{"title":"No filter","description":"Don't filter spatially. All data is included in the data cube.","type":"null"}],"default":null,"optional":true},{"name":"temporal_extent","description":"Limits the data to load to the specified left-closed temporal interval. Applies to all temporal dimensions. The interval has to be specified as an array with exactly two elements:\n\n1. The first element is the start of the temporal interval. The specified instance in time is **included** in the interval.\n2. The second element is the end of the temporal interval. The specified instance in time is **excluded** from the interval.\n\nThe second element must always be greater/later than the first element. Otherwise, a `TemporalExtentEmpty` exception is thrown.\n\nAlso supports open intervals by setting one of the boundaries to `null`, but never both.\n\nSet this parameter to `null` to set no limit for the temporal extent. Be careful with this when loading large datasets! It is recommended to use this parameter instead of using ``filter_temporal()`` directly after loading unbounded data.","schema":[{"type":"array","subtype":"temporal-interval","uniqueItems":true,"minItems":2,"maxItems":2,"items":{"anyOf":[{"type":"string","format":"date-time","subtype":"date-time","description":"Date and time with a time zone."},{"type":"string","format":"date","subtype":"date","description":"Date only, formatted as `YYYY-MM-DD`. The time zone is UTC. Missing time components are all 0."},{"type":"null"}]},"examples":[["2015-01-01T00:00:00Z","2016-01-01T00:00:00Z"],["2015-01-01","2016-01-01"]]},{"title":"No filter","description":"Don't filter temporally. All data is included in the data cube.","type":"null"}],"default":null,"optional":true},{"name":"bands","description":"Only adds the specified bands into the data cube so that bands that don't match the list of band names are not available. Applies to all dimensions of type `bands`.\n\nEither the unique band name (metadata field `name` in bands) or one of the common band names (metadata field `common_name` in bands) can be specified. If the unique band name and the common name conflict, the unique band name has a higher priority.\n\nThe order of the specified array defines the order of the bands in the data cube. If multiple bands match a common name, all matched bands are included in the original order.\n\nIt is recommended to use this parameter instead of using ``filter_bands()`` directly after loading unbounded data.","schema":[{"type":"array","minItems":1,"items":{"type":"string","subtype":"band-name"}},{"title":"No filter","description":"Don't filter bands. All bands are included in the data cube.","type":"null"}],"default":null,"optional":true},{"name":"properties","description":"Limits the data by metadata properties to include only data in the data cube which all given conditions return `true` for (AND operation).\n\nSpecify key-value-pairs with the key being the name of the metadata property, which can be retrieved with the openEO Data Discovery for Collections. The value must be a condition (user-defined process) to be evaluated against a STAC API. This parameter is not supported for static STAC.","schema":[{"type":"object","subtype":"metadata-filter","title":"Filters","description":"A list of filters to check against. Specify key-value-pairs with the key being the name of the metadata property name and the value being a process evaluated against the metadata values.","additionalProperties":{"type":"object","subtype":"process-graph","parameters":[{"name":"value","description":"The property value to be checked against.","schema":{"description":"Any data type."}}],"returns":{"description":"`true` if the data should be loaded into the data cube, otherwise `false`.","schema":{"type":"boolean"}}}},{"title":"No filter","description":"Don't filter by metadata properties.","type":"null"}],"default":null,"optional":true}],"returns":{"description":"A data cube for further processing.","schema":{"type":"object","subtype":"datacube"}},"examples":[{"title":"Load from a static STAC / batch job result","arguments":{"url":"https://example.com/api/v1.0/jobs/123/results"}},{"title":"Load from a STAC API","arguments":{"url":"https://example.com/collections/SENTINEL2","spatial_extent":{"west":16.1,"east":16.6,"north":48.6,"south":47.2},"temporal_extent":["2018-01-01","2019-01-01"],"properties":{"eo:cloud_cover":{"process_graph":{"cc":{"process_id":"between","arguments":{"x":{"from_parameter":"value"},"min":0,"max":50},"result":true}}},"platform":{"process_graph":{"pf":{"process_id":"eq","arguments":{"x":{"from_parameter":"value"},"y":"Sentinel-2B","case_sensitive":false},"result":true}}}}}}],"exceptions":{"NoDataAvailable":{"message":"There is no data available for the given extents."},"TemporalExtentEmpty":{"message":"The temporal extent is empty. The second instant in time must always be greater/later than the first instant in time."}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html","rel":"about","title":"Data Cubes explained in the openEO documentation"},{"rel":"about","href":"https://proj.org/usage/projections.html","title":"PROJ parameters for cartographic projections"},{"rel":"about","href":"http://www.epsg-registry.org","title":"Official EPSG code registry"},{"rel":"about","href":"http://www.epsg.io","title":"Unofficial EPSG code database"},{"href":"http://www.opengeospatial.org/standards/sfa","rel":"about","title":"Simple Features standard by the OGC"},{"rel":"about","href":"https://github.com/radiantearth/stac-spec/tree/master/extensions/eo#common-band-names","title":"List of common band names as specified by the STAC specification"},{"href":"https://www.rfc-editor.org/rfc/rfc3339.html","rel":"about","title":"RFC3339: Details about formatting temporal strings"}]},{"id":"log","summary":"Logarithm to a base","description":"Logarithm to the base `base` of the number `x` is defined to be the inverse function of taking b to the power of x.\n\nThe no-data value `null` is passed through and therefore gets propagated if any of the arguments is `null`.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it. Therefore, `log(0, 2)` results in ±infinity if the processing environment supports it or otherwise an exception is thrown.","categories":["math > exponential & logarithmic"],"parameters":[{"name":"x","description":"A number to compute the logarithm for.","schema":{"type":["number","null"]}},{"name":"base","description":"The numerical base.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed logarithm.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":10,"base":10},"returns":1},{"arguments":{"x":2,"base":2},"returns":1},{"arguments":{"x":4,"base":2},"returns":2},{"arguments":{"x":1,"base":16},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Logarithm.html","title":"Logarithm explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"low_flow_frequency","summary":"Low flow frequency","description":"Calculate the number of days in a given period with flows lower than a specified threshold, given by a fraction of the mean flow. By default, the period is the water year starting on 1st October and ending on 30th September, as commonly defined in North America.","parameters":[{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Daily streamflow data."},{"name":"threshold_factor","schema":{"type":"number"},"description":"Factor by which the mean flow is multiplied to set the low flow threshold, default is 0.2.","optional":true,"default":0.2},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency, default is 'YS-OCT' for water year starting in October and ending in September.","optional":true,"default":"YS-OCT"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"lt","summary":"Less than comparison","description":"Compares whether `x` is strictly less than `y`.\n\n**Remarks:**\n\n* If any operand is `null`, the return value is `null`.\n* If any operand is not a `number`, the process returns `false`.\n* Temporal strings are normal strings. To compare temporal strings as dates/times, use ``date_difference()``.","categories":["comparison"],"parameters":[{"name":"x","description":"First operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"y","description":"Second operand.","schema":{"type":["number","boolean","string","null"]}}],"returns":{"description":"`true` if `x` is strictly less than `y`, `null` if any operand is `null`, otherwise `false`.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":1,"y":null},"returns":null},{"arguments":{"x":0,"y":0},"returns":false},{"arguments":{"x":1,"y":2},"returns":true},{"arguments":{"x":-0.5,"y":-0.6},"returns":false},{"arguments":{"x":"2018-01-01T00:00:00Z","y":"2018-01-02T00:00:00Z"},"returns":false},{"arguments":{"x":0,"y":true},"returns":false},{"arguments":{"x":false,"y":true},"returns":false},{"arguments":{"x":null,"y":null},"returns":null}]},{"id":"lte","summary":"Less than or equal to comparison","description":"Compares whether `x` is less than or equal to `y`.\n\n**Remarks:**\n\n* If any operand is `null`, the return value is `null`.\n* If the operands are not equal (see process ``eq()``) and any of them is not a `number`, the process returns `false`.\n* Temporal strings are normal strings. To compare temporal strings as dates/times, use ``date_difference()``.","categories":["comparison"],"parameters":[{"name":"x","description":"First operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"y","description":"Second operand.","schema":{"type":["number","boolean","string","null"]}}],"returns":{"description":"`true` if `x` is less than or equal to `y`, `null` if any operand is `null`, otherwise `false`.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":1,"y":null},"returns":null},{"arguments":{"x":0,"y":0},"returns":true},{"arguments":{"x":1,"y":2},"returns":true},{"arguments":{"x":-0.5,"y":-0.6},"returns":false},{"arguments":{"x":"2018-01-01T00:00:00Z","y":"2018-01-01T00:00:00+00:00"},"returns":false},{"arguments":{"x":false,"y":true},"returns":false},{"arguments":{"x":null,"y":null},"returns":null}],"process_graph":{"eq":{"process_id":"eq","arguments":{"x":{"from_parameter":"x"},"y":{"from_parameter":"y"}}},"lt":{"process_id":"lt","arguments":{"x":{"from_parameter":"x"},"y":{"from_parameter":"y"}}},"or":{"process_id":"or","arguments":{"x":{"from_node":"lt"},"y":{"from_node":"eq"}},"result":true}}},{"id":"mask","summary":"Apply a raster mask","description":"Applies a mask to a raster data cube. To apply a polygon as a mask, use ``mask_polygon()``.\n\nA mask is a raster data cube for which corresponding pixels among `data` and `mask` are compared and those pixels in `data` are replaced whose pixels in `mask` are non-zero (for numbers) or `true` (for boolean values). The pixel values are replaced with the value specified for `replacement`, which defaults to `null` (no data).\n\nThe data cubes have to be compatible except that the horizontal spatial dimensions (axes `x` and `y`) will be aligned implicitly by ``resample_cube_spatial()``. `data` is the target data cube for resampling and the default parameters of ``resample_cube_spatial()`` apply. All other dimensions in the mask must also be available in the raster data cube with the same name, type, reference system, resolution and labels. Dimensions can be missing in the mask with the result that the mask is applied to each label of the dimension in `data` that is missing in the data cube of the mask. The process fails if there's an incompatibility found between the raster data cube and the mask.","categories":["cubes","masks"],"parameters":[{"name":"data","description":"A raster data cube.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},{"name":"mask","description":"A mask as a raster data cube. Every pixel in `data` must have a corresponding element in `mask`.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},{"name":"replacement","description":"The value used to replace masked values with.","schema":{"type":["number","boolean","string","null"]},"default":null,"optional":true}],"returns":{"description":"A masked raster data cube with the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}}},{"id":"mask_polygon","summary":"Apply a polygon mask","description":"Applies a (multi) polygon mask to a raster data cube. To apply a raster mask use ``mask()``.\n\nAll pixels for which the point at the pixel center **does not** intersect with any polygon (as defined in the Simple Features standard by the OGC) are replaced. This behavior can be inverted by setting the parameter `inside` to `true`. The pixel values are replaced with the value specified for `replacement`, which defaults to `null` (no data). No data values in `data` will be left untouched by the masking operation.","categories":["cubes","masks"],"parameters":[{"name":"data","description":"A raster data cube.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},{"name":"mask","description":"A GeoJSON object or a vector data cube containing at least one polygon. The provided vector data can be one of the following:\n\n* A `Polygon` or `MultiPolygon` geometry,\n* a `Feature` with a `Polygon` or `MultiPolygon` geometry, or\n* a `FeatureCollection` containing at least one `Feature` with `Polygon` or `MultiPolygon` geometries.\n* Empty geometries are ignored.","schema":[{"title":"Vector Data Cube","type":"object","subtype":"datacube","dimensions":[{"type":"geometry","geometry_type":["Polygon","MultiPolygon"]}]},{"title":"GeoJSON","type":"object","subtype":"geojson","description":"Deprecated in favor of ``load_geojson()``. The GeoJSON type `GeometryCollection` is not supported.","deprecated":true}]},{"name":"replacement","description":"The value used to replace masked values with.","schema":[{"type":"number"},{"type":"boolean"},{"type":"string"},{"type":"null"}],"default":null,"optional":true},{"name":"inside","description":"If set to `true` all pixels for which the point at the pixel center **does** intersect with any polygon are replaced.","schema":{"type":"boolean"},"default":false,"optional":true}],"returns":{"description":"A masked raster data cube with the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},"links":[{"href":"http://www.opengeospatial.org/standards/sfa","rel":"about","title":"Simple Features standard by the OGC"}]},{"id":"max","summary":"Maximum value","description":"Computes the largest value of an array of numbers, which is equal to the first element of a sorted (i.e., ordered) version of the array.\n\nAn array without non-`null` elements resolves always with `null`.","categories":["math","math > statistics","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not. Ignores them by default. Setting this flag to `false` considers no-data values so that `null` is returned if any value is such a value.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"The maximum value.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[1,0,3,2]},"returns":3},{"arguments":{"data":[5,2.5,null,-0.7]},"returns":5},{"arguments":{"data":[1,0,3,null,2],"ignore_nodata":false},"returns":null},{"description":"The input array is empty: return `null`.","arguments":{"data":[]},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Maximum.html","title":"Maximum explained by Wolfram MathWorld"}]},{"id":"max_n_day_precipitation_amount","summary":"maximum n-day total precipitation","description":"Maximum of the moving sum of daily precipitation for a given period.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation values."},{"name":"window","schema":{"type":"number"},"description":"Window size in days.","optional":true,"default":1},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"max_pr_intensity","summary":"Maximum precipitation intensity over time window","description":"Maximum precipitation intensity over a given rolling time window.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Hourly precipitation values."},{"name":"window","schema":{"type":"number"},"description":"Window size in hours.","optional":true,"default":1},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"maximum_consecutive_warm_days","summary":"Maximum consecutive warm days","description":"Maximum number of consecutive days where the maximum daily temperature exceeds a certain threshold.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Max daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature.","optional":true,"default":"25 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"mean","summary":"Arithmetic mean (average)","description":"The arithmetic mean of an array of numbers is the quantity commonly called the average. It is defined as the sum of all elements divided by the number of elements.\n\nAn array without non-`null` elements resolves always with `null`.","categories":["math > statistics","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not. Ignores them by default. Setting this flag to `false` considers no-data values so that `null` is returned if any value is such a value.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"The computed arithmetic mean.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[1,0,3,2]},"returns":1.5},{"arguments":{"data":[9,2.5,null,-2.5]},"returns":3},{"arguments":{"data":[1,null],"ignore_nodata":false},"returns":null},{"description":"The input array is empty: return `null`.","arguments":{"data":[]},"returns":null},{"description":"The input array has only `null` elements: return `null`.","arguments":{"data":[null,null]},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/ArithmeticMean.html","title":"Arithmetic mean explained by Wolfram MathWorld"}],"process_graph":{"count_condition":{"process_id":"if","arguments":{"value":{"from_parameter":"ignore_nodata"},"accept":null,"reject":true}},"count":{"process_id":"count","arguments":{"data":{"from_parameter":"data"},"condition":{"from_node":"count_condition"}}},"sum":{"process_id":"sum","arguments":{"data":{"from_parameter":"data"},"ignore_nodata":{"from_parameter":"ignore_nodata"}}},"divide":{"process_id":"divide","arguments":{"x":{"from_node":"sum"},"y":{"from_node":"count"}}},"neq":{"process_id":"neq","arguments":{"x":{"from_node":"count"},"y":0}},"if":{"process_id":"if","arguments":{"value":{"from_node":"neq"},"accept":{"from_node":"divide"}},"result":true}}},{"id":"median","summary":"Statistical median","description":"The statistical median of an array of numbers is the value separating the higher half from the lower half of the data.\n\nAn array without non-`null` elements resolves always with `null`.\n\n**Remarks:**\n\n* For symmetric arrays, the result is equal to the ``mean()``.\n* The median can also be calculated by computing the ``quantiles()`` with a probability of *0.5*.","categories":["math > statistics","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not. Ignores them by default. Setting this flag to `false` considers no-data values so that `null` is returned if any value is such a value.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"The computed statistical median.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[1,3,3,6,7,8,9]},"returns":6},{"arguments":{"data":[1,2,3,4,5,6,8,9]},"returns":4.5},{"arguments":{"data":[-1,-0.5,null,1]},"returns":-0.5},{"arguments":{"data":[-1,0,null,1],"ignore_nodata":false},"returns":null},{"description":"The input array is empty: return `null`.","arguments":{"data":[]},"returns":null},{"description":"The input array has only `null` elements: return `null`.","arguments":{"data":[null,null]},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/StatisticalMedian.html","title":"Statistical Median explained by Wolfram MathWorld"}],"process_graph":{"quantiles":{"process_id":"quantiles","arguments":{"data":{"from_parameter":"data"},"probabilities":[0.5],"ignore_nodata":{"from_parameter":"ignore_nodata"}}},"array_element":{"process_id":"array_element","arguments":{"data":{"from_node":"quantiles"},"return_nodata":true,"index":0},"result":true}}},{"id":"merge_cubes","summary":"Merge two data cubes","description":"The process merges two 'compatible' data cubes.\n\nThe data cubes have to be compatible, which means that they must share a common subset of equal dimensions. To conveniently get to such a subset of equal dimensions, the process tries to align the horizontal spatial dimensions (axes `x` and `y`) implicitly with ``resample_cube_spatial()`` if required. `cube1` is the target data cube for resampling and the default parameters of ``resample_cube_spatial()`` apply. The equality for geometries follows the definition in the Simple Features standard by the OGC.\n\nAll dimensions share the same properties, such as name, type, reference system, and resolution. Dimensions can have disjoint or overlapping labels. If there is any overlap between the dimension labels, the parameter `overlap_resolver` must be specified to combine the two values for these overlapping labels. A merge operation without overlap should be reversible with (a set of) filter operations for each of the two cubes, if no implicit resampling was applied.\n\nIt is not possible to merge a vector and a raster data cube. Merging vector data cubes with different base geometry types (points, lines/line strings, polygons) is not possible and throws the `IncompatibleGeometryTypes` exception. The base geometry types can be merged with their corresponding multi geometry types.\n\nAfter the merge, the dimensions with a natural/inherent label order (with a reference system this is each spatial and temporal dimensions) still have all dimension labels sorted. For other dimensions without inherent order, including bands, the dimension labels keep the order in which they are present in the original data cubes, and the dimension labels of `cube2` get appended to the dimension labels of `cube1`.\n\n**Examples for merging two data cubes:**\n\n1. Data cubes with the dimensions (`x`, `y`, `t`, `bands`) have the same dimension labels in `x`, `y` and `t`, but the labels for the dimension `bands` are `B1` and `B2` for the base data cube and `B3` and `B4` for the other. An overlap resolver is *not needed*. The merged data cube has the dimensions `x`, `y`, `t`, `bands`, and the dimension `bands` has four dimension labels: `B1`, `B2`, `B3`, `B4`.\n2. Data cubes with the dimensions (`x`, `y`, `t`, `bands`) have the same dimension labels in `x`, `y` and `t`, but the labels for the dimension `bands` are `B1` and `B2` for the base data cube and `B2` and `B3` for the other. An overlap resolver is *required* to resolve overlap in band `B2`. The merged data cube has the dimensions `x`, `y`, `t` and `bands` and the dimension `bands` has three dimension labels: `B1`, `B2`, `B3`.\n3. Data cubes with the dimensions (`x`, `y`, `t`) have the same dimension labels in `x`, `y` and `t`. There are two options:\n   1. Keep the overlapping values separately in the merged data cube: An overlap resolver is *not needed*, but for each data cube you need to add a new dimension using ``add_dimension()``. The new dimensions must be equal, except that the labels for the new dimensions must differ. The merged data cube has the same dimensions and labels as the original data cubes, plus the dimension added with ``add_dimension()``, which has the two dimension labels after the merge.\n   2. Combine the overlapping values into a single value: An overlap resolver is *required* to resolve the overlap for all values. The merged data cube has the same dimensions and labels as the original data cubes, but all values have been processed by the overlap resolver.\n4. A data cube with dimensions (`x`, `y`, `t` / `bands`) or (`x`, `y`, `t`, `bands`) and another data cube with dimensions (`x`, `y`) have the same dimension labels in `x` and `y`. Merging them will join dimensions `x` and `y`, so the lower dimension cube is merged with each time step and band available in the higher dimensional cube. A use case for this is applying a digital elevation model to a spatio-temporal data cube. An overlap resolver is *required* to resolve the overlap for all pixels.","categories":["cubes"],"parameters":[{"name":"cube1","description":"The base data cube.","schema":{"type":"object","subtype":"datacube"}},{"name":"cube2","description":"The other data cube to be merged with the base data cube.","schema":{"type":"object","subtype":"datacube"}},{"name":"overlap_resolver","description":"A reduction operator that resolves the conflict if the data overlaps. The reducer must return a value of the same data type as the input values are. The reduction operator may be a single process such as ``multiply()`` or consist of multiple sub-processes. `null` (the default) can be specified if no overlap resolver is required.","schema":{"type":"object","subtype":"process-graph","parameters":[{"name":"x","description":"The overlapping value from the base data cube `cube1`.","schema":{"description":"Any data type."}},{"name":"y","description":"The overlapping value from the other data cube `cube2`.","schema":{"description":"Any data type."}},{"name":"context","description":"Additional data passed by the user.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"The value to be set in the merged data cube.","schema":{"description":"Any data type."}}},"default":null,"optional":true},{"name":"context","description":"Additional data to be passed to the overlap resolver.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"The merged data cube. See the process description for details regarding the dimensions and dimension properties (name, type, labels, reference system and resolution).","schema":{"type":"object","subtype":"datacube"}},"exceptions":{"OverlapResolverMissing":{"message":"Overlapping data cubes, but no overlap resolver has been specified."},"IncompatibleGeometryTypes":{"message":"The geometry types are not compatible and can't be merged."}},"links":[{"rel":"about","href":"https://en.wikipedia.org/wiki/Reduction_Operator","title":"Background information on reduction operators (binary reducers) by Wikipedia"},{"href":"http://www.opengeospatial.org/standards/sfa","rel":"about","title":"Simple Features standard by the OGC"}]},{"id":"min","summary":"Minimum value","description":"Computes the smallest value of an array of numbers, which is equal to the last element of a sorted (i.e., ordered) version of the array.\n\nAn array without non-`null` elements resolves always with `null`.","categories":["math","math > statistics","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not. Ignores them by default. Setting this flag to `false` considers no-data values so that `null` is returned if any value is such a value.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"The minimum value.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[1,0,3,2]},"returns":0},{"arguments":{"data":[5,2.5,null,-0.7]},"returns":-0.7},{"arguments":{"data":[1,0,3,null,2],"ignore_nodata":false},"returns":null},{"arguments":{"data":[]},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Minimum.html","title":"Minimum explained by Wolfram MathWorld"}]},{"id":"mixing_ratio_from_dewpoint","summary":"Compute the mixing ratio from dewpoint.","description":"Compute the mixing ratio from dewpoint.\n\nParameters\n----------\ntd: array-like | xarray.DataArray | FieldList | Field\n    Dewpoint (K)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Specific humidity (kg/kg)\n\n\nThe computation starts with determining the vapour pressure:\n\n.. math::\n\n    e(w, p) = e_{wsat}(td)\n\nwhere:\n\n    * :math:`e` is the vapour pressure (see :func:`vapour_pressure_from_mixing_ratio`)\n    * :math:`e_{wsat}` is the :func:`saturation_vapour_pressure` over water\n    * :math:`w` is the mixing ratio\n\nThen `w` is computed from :math:`e` using :func:`mixing_ratio_from_vapour_pressure`.","parameters":[{"name":"td","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"mixing_ratio_from_specific_humidity","summary":"Compute the mixing ratio from specific humidity.","description":"Compute the mixing ratio from specific humidity.\n\nParameters\n----------\nq : array-like | xarray.DataArray | FieldList | Field\n    Specific humidity (kg/kg)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Mixing ratio (kg/kg)\n\n\nThe result is the mixing ratio in kg/kg units. The computation is based on\nthe following definition [Wallace2006]_:\n\n.. math::\n\n    w = \\frac {q}{1-q}","parameters":[{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: kg/kg (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"mixing_ratio_from_vapour_pressure","summary":"Compute the mixing ratio from vapour pressure.","description":"Compute the mixing ratio from vapour pressure.\n\nParameters\n----------\ne: array-like | xarray.DataArray | FieldList | Field\n    Vapour pressure (Pa)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\neps: number\n    Where p - e < ``eps`` nan is returned.\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Mixing ratio (kg/kg).\n\n\nThe computation is based on the following formula:\n\n.. math::\n\n   w = \\frac{\\epsilon e}{p - e}\n\nwith :math:`\\epsilon = R_{d}/R_{v}` (see :data:`earthkit.meteo.constants.epsilon`).","parameters":[{"name":"e","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"eps","schema":{"type":"number"},"optional":true,"default":0.0001}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"mod","summary":"Modulo","description":"Remainder after a division of `x` by `y` for both integers and floating-point numbers.\n\nThe result of a modulo operation has the sign of the divisor. The handling regarding the sign of the result [differs between programming languages](https://en.wikipedia.org/wiki/Modulo_operation#In_programming_languages) and needs careful consideration to avoid unexpected results.\n\nThe no-data value `null` is passed through and therefore gets propagated if any of the arguments is `null`. A modulo by zero results in ±infinity if the processing environment supports it. Otherwise, a `DivisionByZero` exception must the thrown.","categories":["math"],"parameters":[{"name":"x","description":"A number to be used as the dividend.","schema":{"type":["number","null"]}},{"name":"y","description":"A number to be used as the divisor.","schema":{"type":["number","null"]}}],"returns":{"description":"The remainder after division.","schema":{"type":["number","null"]}},"exceptions":{"DivisionByZero":{"message":"Division by zero is not supported."}},"examples":[{"arguments":{"x":27,"y":5},"returns":2},{"arguments":{"x":-27,"y":5},"returns":3},{"arguments":{"x":3.14,"y":-2},"returns":-0.86},{"arguments":{"x":-27,"y":-5},"returns":-2},{"arguments":{"x":27,"y":null},"returns":null},{"arguments":{"x":null,"y":5},"returns":null}],"links":[{"rel":"about","href":"https://en.wikipedia.org/wiki/Modulo_operation","title":"Modulo explained by Wikipedia"}]},{"id":"multiply","summary":"Multiplication of two numbers","description":"Multiplies the two numbers `x` and `y` (*`x * y`*) and returns the computed product.\n\nNo-data values are taken into account so that `null` is returned if any element is such a value.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it.","categories":["math"],"parameters":[{"name":"x","description":"The multiplier.","schema":{"type":["number","null"]}},{"name":"y","description":"The multiplicand.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed product of the two numbers.","schema":{"type":["number","null"]}},"exceptions":{"MultiplicandMissing":{"message":"Multiplication requires at least two numbers."}},"examples":[{"arguments":{"x":5,"y":2.5},"returns":12.5},{"arguments":{"x":-2,"y":-4},"returns":8},{"arguments":{"x":1,"y":null},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Product.html","title":"Product explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}],"process_graph":{"product":{"process_id":"product","arguments":{"data":[{"from_parameter":"x"},{"from_parameter":"y"}],"ignore_nodata":false},"result":true}}},{"id":"nan","summary":"Not a Number (NaN)","description":"`NaN` (not a number) is a symbolic floating-point representation which is neither a signed infinity nor a finite number.","categories":["math > constants"],"experimental":true,"parameters":[],"returns":{"description":"Returns `NaN`.","schema":{"description":"JSON Schema can't represent `NaN` and thus a schema can't be specified."}},"links":[{"rel":"about","href":"https://ieeexplore.ieee.org/document/4610935","title":"IEEE Standard 754-2008 for Floating-Point Arithmetic"},{"rel":"about","href":"http://mathworld.wolfram.com/NaN.html","title":"NaN explained by Wolfram MathWorld"}]},{"id":"ndvi","summary":"Normalized Difference Vegetation Index","description":"Computes the Normalized Difference Vegetation Index (NDVI). The NDVI is computed as *`(nir - red) / (nir + red)`*.\n\nThe `data` parameter expects a raster data cube with a dimension of type `bands` or a `DimensionAmbiguous` exception is thrown otherwise. By default, the dimension must have at least two bands with the common names `red` and `nir` assigned. Otherwise, the user has to specify the parameters `nir` and `red`. If neither is the case, either the exception `NirBandAmbiguous` or `RedBandAmbiguous` is thrown. The common names for each band are specified in the collection's band metadata and are *not* equal to the band names.\n\nBy default, the dimension of type `bands` is dropped by this process. To keep the dimension specify a new band name in the parameter `target_band`. This adds a new dimension label with the specified name to the dimension, which can be used to access the computed values. If a band with the specified name exists, a `BandExists` is thrown.\n\nThis process is very similar to the process ``normalized_difference()``, but determines the bands automatically based on the common names (`red`/`nir`) specified in the metadata.","categories":["cubes","math > indices","vegetation indices"],"parameters":[{"name":"data","description":"A raster data cube with two bands that have the common names `red` and `nir` assigned.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]},{"type":"bands"}]}},{"name":"nir","description":"The name of the NIR band. Defaults to the band that has the common name `nir` assigned.\n\nEither the unique band name (metadata field `name` in bands) or one of the common band names (metadata field `common_name` in bands) can be specified. If the unique band name and the common name conflict, the unique band name has a higher priority.","schema":{"type":"string","subtype":"band-name"},"default":"nir","optional":true},{"name":"red","description":"The name of the red band. Defaults to the band that has the common name `red` assigned.\n\nEither the unique band name (metadata field `name` in bands) or one of the common band names (metadata field `common_name` in bands) can be specified. If the unique band name and the common name conflict, the unique band name has a higher priority.","schema":{"type":"string","subtype":"band-name"},"default":"red","optional":true},{"name":"target_band","description":"By default, the dimension of type `bands` is dropped. To keep the dimension specify a new band name in this parameter so that a new dimension label with the specified name will be added for the computed values.","schema":[{"type":"string","pattern":"^\\w+$"},{"type":"null"}],"default":null,"optional":true}],"returns":{"description":"A raster data cube containing the computed NDVI values. The structure of the data cube differs depending on the value passed to `target_band`:\n\n* `target_band` is `null`: The data cube does not contain the dimension of type `bands`, the number of dimensions decreases by one. The dimension properties (name, type, labels, reference system and resolution) for all other dimensions remain unchanged.\n* `target_band` is a string: The data cube keeps the same dimensions. The dimension properties remain unchanged, but the number of dimension labels for the dimension of type `bands` increases by one. The additional label is named as specified in `target_band`.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},"exceptions":{"NirBandAmbiguous":{"message":"The NIR band can't be resolved, please specify the specific NIR band name."},"RedBandAmbiguous":{"message":"The red band can't be resolved, please specify the specific red band name."},"DimensionAmbiguous":{"message":"dimension of type `bands` is not available or is ambiguous.."},"BandExists":{"message":"A band with the specified target name exists."}},"links":[{"rel":"about","href":"https://en.wikipedia.org/wiki/Normalized_difference_vegetation_index","title":"NDVI explained by Wikipedia"},{"rel":"about","href":"https://earthobservatory.nasa.gov/features/MeasuringVegetation/measuring_vegetation_2.php","title":"NDVI explained by NASA"},{"rel":"about","href":"https://github.com/radiantearth/stac-spec/tree/master/extensions/eo#common-band-names","title":"List of common band names as specified by the STAC specification"}]},{"id":"neq","summary":"Not equal to comparison","description":"Compares whether `x` is **not** strictly equal to `y`.\n\n**Remarks:**\n\n* Data types MUST be checked strictly. For example, a string with the content *1* is not equal to the number *1*. Nevertheless, an integer *1* is equal to a floating-point number *1.0* as `integer` is a sub-type of `number`.\n* If any operand is `null`, the return value is `null`.\n* Strings are expected to be encoded in UTF-8 by default.\n* Temporal strings are normal strings. To compare temporal strings as dates/times, use ``date_difference()``.","categories":["texts","comparison"],"parameters":[{"name":"x","description":"First operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"y","description":"Second operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"delta","description":"Only applicable for comparing two numbers. If this optional parameter is set to a positive non-zero number the non-equality of two numbers is checked against a delta value. This is especially useful to circumvent problems with floating-point inaccuracy in machine-based computation.\n\nThis option is basically an alias for the following computation: `gt(abs(minus([x, y]), delta)`","schema":{"type":["number","null"]},"default":null,"optional":true},{"name":"case_sensitive","description":"Only applicable for comparing two strings. Case sensitive comparison can be disabled by setting this parameter to `false`.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"`true` if `x` is *not* equal to `y`, `null` if any operand is `null`, otherwise `false`.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":1,"y":null},"returns":null},{"arguments":{"x":1,"y":1},"returns":false},{"arguments":{"x":1,"y":"1"},"returns":true},{"arguments":{"x":0,"y":false},"returns":true},{"arguments":{"x":1.02,"y":1,"delta":0.01},"returns":true},{"arguments":{"x":-1,"y":-1.001,"delta":0.01},"returns":false},{"arguments":{"x":115,"y":110,"delta":10},"returns":false},{"arguments":{"x":"Test","y":"test"},"returns":true},{"arguments":{"x":"Test","y":"test","case_sensitive":false},"returns":false},{"arguments":{"x":"Ä","y":"ä","case_sensitive":false},"returns":false},{"arguments":{"x":"2018-01-01T00:00:00Z","y":"2018-01-01T00:00:00+00:00"},"returns":true},{"arguments":{"x":null,"y":null},"returns":null}],"process_graph":{"eq":{"process_id":"eq","arguments":{"x":{"from_parameter":"x"},"y":{"from_parameter":"y"},"delta":{"from_parameter":"delta"},"case_sensitive":{"from_parameter":"case_sensitive"}}},"not":{"process_id":"not","arguments":{"x":{"from_node":"eq"}},"result":true}}},{"id":"normalized_difference","summary":"Normalized difference","description":"Computes the normalized difference for two bands. The normalized difference is computed as *`(x - y) / (x + y)`*.\n\nThis process could be used for a number of remote sensing indices such as:\n\n* [NDVI](https://eos.com/ndvi/): `x` = NIR band, `y` = red band\n* [NDWI](https://eos.com/ndwi/): `x` = NIR band, `y` = SWIR band\n* [NDSI](https://eos.com/ndsi/): `x` = green band, `y` = SWIR band\n\nSome back-ends may have native processes such as ``ndvi()`` available for convenience.","categories":["math > indices","vegetation indices"],"parameters":[{"name":"x","description":"The value for the first band.","schema":{"type":"number"}},{"name":"y","description":"The value for the second band.","schema":{"type":"number"}}],"returns":{"description":"The computed normalized difference.","schema":{"type":"number","minimum":-1,"maximum":1}},"links":[{"rel":"related","href":"https://eos.com/ndvi/","title":"NDVI explained by EOS"},{"rel":"related","href":"https://eos.com/ndwi/","title":"NDWI explained by EOS"},{"rel":"related","href":"https://eos.com/ndsi/","title":"NDSI explained by EOS"}],"process_graph":{"subtract":{"process_id":"subtract","arguments":{"x":{"from_parameter":"x"},"y":{"from_parameter":"y"}}},"add":{"process_id":"add","arguments":{"x":{"from_parameter":"x"},"y":{"from_parameter":"y"}}},"divide":{"process_id":"divide","arguments":{"x":{"from_node":"subtract"},"y":{"from_node":"add"}},"result":true}}},{"id":"not","summary":"Inverting a boolean","description":"Inverts a single boolean so that `true` gets `false` and `false` gets `true`.\n\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["logic"],"parameters":[{"name":"x","description":"Boolean value to invert.","schema":{"type":["boolean","null"]}}],"returns":{"description":"Inverted boolean value.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":null},"returns":null},{"arguments":{"x":false},"returns":true},{"arguments":{"x":true},"returns":false}]},{"id":"or","summary":"Logical OR","description":"Checks if **at least one** of the values is true. Evaluates parameter `x` before `y` and stops once the outcome is unambiguous. If a component is `null`, the result will be `null` if the outcome is ambiguous.\n\n**Truth table:**\n\n```\na \\ b || null | false | true\n----- || ---- | ----- | ----\nnull  || null | null  | true\nfalse || null | false | true\ntrue  || true | true  | true\n```","categories":["logic"],"parameters":[{"name":"x","description":"A boolean value.","schema":{"type":["boolean","null"]}},{"name":"y","description":"A boolean value.","schema":{"type":["boolean","null"]}}],"returns":{"description":"Boolean result of the logical OR.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":true,"y":true},"returns":true},{"arguments":{"x":false,"y":false},"returns":false},{"arguments":{"x":true,"y":null},"returns":true},{"arguments":{"x":null,"y":true},"returns":true},{"arguments":{"x":false,"y":null},"returns":null}],"process_graph":{"any":{"process_id":"any","arguments":{"data":[{"from_parameter":"x"},{"from_parameter":"y"}],"ignore_nodata":false},"result":true}}},{"id":"order","summary":"Get the order of array elements","description":"Computes the ranked (sorted) element positions in the original list (i.e., a permutation), either in ascending or descending order. The process ``rearrange()`` allows sorting the data based on the computed permutation.\n\n**Remarks:**\n\n* The positions in the result are zero-based.\n* The ordering of ties is implementation-dependent.\n* Temporal strings can *not* be compared based on their string representation due to the time zone/time-offset representations.","categories":["arrays","sorting"],"parameters":[{"name":"data","description":"An array to compute the order for.","schema":{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"null"},{"type":"string","format":"date-time","subtype":"date-time"},{"type":"string","format":"date","subtype":"date"}]}}},{"name":"asc","description":"The default sort order is ascending, with smallest values first. To sort in reverse (descending) order, set this parameter to `false`.","schema":{"type":"boolean"},"default":true,"optional":true},{"name":"nodata","description":"Controls the handling of no-data values (`null`). By default, they are removed. If set to `true`, missing values in the data are put last; if set to `false`, they are put first.","schema":{"type":["boolean","null"]},"default":null,"optional":true}],"returns":{"description":"The computed permutation.","schema":{"type":"array","items":{"type":"integer","minimum":0}}},"examples":[{"arguments":{"data":[6,-1,2,null,7,4,null,8,3,9,9]},"returns":[1,2,8,5,0,4,7,9,10]},{"arguments":{"data":[6,-1,2,null,7,4,null,8,3,9,9],"nodata":true},"returns":[1,2,8,5,0,4,7,9,10,3,6]},{"arguments":{"data":[6,-1,2,null,7,4,null,8,3,9,9],"asc":false,"nodata":true},"returns":[9,10,7,4,0,5,8,2,1,3,6]},{"arguments":{"data":[6,-1,2,null,7,4,null,8,3,9,9],"asc":false,"nodata":false},"returns":[3,6,9,10,7,4,0,5,8,2,1]}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Permutation.html","title":"Permutation explained by Wolfram MathWorld"}]},{"id":"pi","summary":"Pi (π)","description":"The real number Pi (π) is a mathematical constant that is the ratio of the circumference of a circle to its diameter. The numerical value is approximately *3.14159*.","categories":["math > constants","math > trigonometric"],"parameters":[],"returns":{"description":"The numerical value of Pi.","schema":{"type":"number"}},"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Pi.html","title":"Mathematical constant Pi explained by Wolfram MathWorld"}]},{"id":"potential_temperature","summary":"Compute the potential temperature.","description":"Compute the potential temperature.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Potential temperature (K)\n\n\nThe computation is based on the following formula [Wallace2006]_:\n\n.. math::\n\n   \\theta = t \\left(\\frac{10^{5}}{p}\\right)^{\\kappa}\n\nwith :math:`\\kappa = R_{d}/c_{pd}` (see :data:`earthkit.meteo.constants.kappa`).","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit).","optional":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"power","summary":"Exponentiation","description":"Computes the exponentiation for the base `base` raised to the power of `p`.\n\nThe no-data value `null` is passed through and therefore gets propagated if any of the arguments is `null`.","categories":["math","math > exponential & logarithmic"],"parameters":[{"name":"base","description":"The numerical base.","schema":{"type":["number","null"]}},{"name":"p","description":"The numerical exponent.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed value for `base` raised to the power of `p`.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"base":0,"p":2},"returns":0},{"arguments":{"base":2.5,"p":0},"returns":1},{"arguments":{"base":3,"p":3},"returns":27},{"arguments":{"base":5,"p":-1},"returns":0.2},{"arguments":{"base":1,"p":0.5},"returns":1},{"arguments":{"base":1,"p":null},"returns":null},{"arguments":{"base":null,"p":2},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Power.html","title":"Power explained by Wolfram MathWorld"}]},{"id":"prcpavg","summary":"Averaged precipitation (solid and liquid)","description":"Averaged 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 threshold (and vice versa).","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily precipitation flux."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold of `tas` over which the precipication is assumed to be liquid rain.","optional":true,"default":"0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"prcptot","summary":"Total accumulated precipitation (solid and liquid)","description":"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).","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily precipitation flux."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"pressure_on_dry_adiabat","summary":"Compute the pressure on a dry adiabat.","description":"Compute the pressure on a dry adiabat.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature on the dry adiabat (K)\nt_def: array-like | xarray.DataArray | FieldList | Field\n    Temperature defining the dry adiabat (K)\np_def: array-like | xarray.DataArray | FieldList | Field\n    Pressure defining the dry adiabat (Pa)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Pressure on the dry adiabat (Pa)\n\n\nThe computation is based on the following formula:\n\n.. math::\n\n   p = p_{def} (\\frac{t}{t_{def}})^{\\frac{1}{\\kappa}}\n\nwith :math:`\\kappa =  R_{d}/c_{pd}` (see :data:`earthkit.meteo.constants.kappa`).","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"t_def","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"p_def","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"product","summary":"Compute the product by multiplying numbers","description":"Multiplies all elements in a sequential array of numbers and returns the computed product.\n\nBy default no-data values are ignored. Setting `ignore_nodata` to `false` considers no-data values so that `null` is returned if any element is such a value.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it.","categories":["math","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not. Ignores them by default. Setting this flag to `false` considers no-data values so that `null` is returned if any value is such a value.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"The computed product of the sequence of numbers.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[5,0]},"returns":0},{"arguments":{"data":[-2,4,2.5]},"returns":-20},{"arguments":{"data":[1,null],"ignore_nodata":false},"returns":null},{"arguments":{"data":[-1]},"returns":-1},{"arguments":{"data":[null],"ignore_nodata":false},"returns":null},{"arguments":{"data":[]},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Product.html","title":"Product explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"quantiles","summary":"Quantiles","description":"Calculates quantiles, which are cut points dividing the range of a sample distribution into either\n\n1. intervals corresponding to the given probabilities *or*\n2. equal-sized intervals (q-quantiles).\n\nEither the parameter `probabilities` or `q` must be specified, otherwise the `QuantilesParameterMissing` exception is thrown. If both parameters are set the `QuantilesParameterConflict` exception is thrown.\n\nSample quantiles can be computed with several different algorithms. Hyndman and Fan (1996) have concluded on nine different types, which are commonly implemented in statistical software packages. This process is implementing type 7, which is implemented widely and often also the default type (e.g. in Excel, Julia, Python, R and S).","categories":["math > statistics"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}},{"name":"probabilities","description":"Quantiles to calculate. Either a list of probabilities or the number of intervals:\n\n* Provide an array with a sorted list of probabilities in ascending order to calculate quantiles for. The probabilities must be between 0 and 1 (inclusive). If not sorted in ascending order, an `AscendingProbabilitiesRequired` exception is thrown.\n* Provide an integer to specify the number of intervals to calculate quantiles for. Calculates q-quantiles with equal-sized intervals.","schema":[{"title":"List of probabilities","type":"array","uniqueItems":true,"items":{"type":"number","minimum":0,"maximum":1}},{"title":"Number of intervals (q-quantiles)","type":"integer","minimum":2}],"optional":true},{"name":"q","description":"Number of intervals to calculate quantiles for. Calculates q-quantiles with equal-sized intervals.\n\nThis parameter has been **deprecated**. Please use the parameter `probabilities` instead.","deprecated":true,"schema":{"type":"integer","minimum":2},"optional":true},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not. Ignores them by default. Setting this flag to `false` considers no-data values so that an array with `null` values is returned if any element is such a value.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"An array with the computed quantiles. The list has either\n\n* as many elements as the given list of `probabilities` had or\n* *`q`-1* elements.\n\nIf the input array is empty the resulting array is filled with as many `null` values as required according to the list above. See the 'Empty array' example for an example.","schema":{"type":"array","items":{"type":["number","null"]}}},"exceptions":{"QuantilesParameterMissing":{"message":"The process `quantiles` requires either the `probabilities` or `q` parameter to be set."},"QuantilesParameterConflict":{"message":"The process `quantiles` only allows that either the `probabilities` or the `q` parameter is set."},"AscendingProbabilitiesRequired":{"message":"The values passed for parameter `probabilities` must be sorted in ascending order."}},"examples":[{"arguments":{"data":[2,4,4,4,5,5,7,9],"probabilities":[0.005,0.01,0.02,0.05,0.1,0.5]},"returns":[2.07,2.14,2.28,2.7,3.4,4.5]},{"arguments":{"data":[2,4,4,4,5,5,7,9],"probabilities":4},"returns":[4,4.5,5.5]},{"arguments":{"data":[-1,-0.5,null,1],"probabilities":2},"returns":[-0.5]},{"arguments":{"data":[-1,-0.5,null,1],"probabilities":4,"ignore_nodata":false},"returns":[null,null,null]},{"title":"Empty array","arguments":{"data":[],"probabilities":[0.1,0.5]},"returns":[null,null]}],"links":[{"rel":"about","href":"https://en.wikipedia.org/wiki/Quantile","title":"Quantiles explained by Wikipedia"},{"rel":"about","href":"https://www.amherst.edu/media/view/129116/original/Sample+Quantiles.pdf","type":"application/pdf","title":"Hyndman and Fan (1996): Sample Quantiles in Statistical Packages"}]},{"id":"rain_frzgr","summary":"Number of rain on frozen ground days","description":"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.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily precipitation flux."},{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Precipitation threshold to consider a day as a rain event.","optional":true,"default":"1 mm/d"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days below freezing temperature needed to consider the ground frozen.","optional":true,"default":7},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"rb_flashiness_index","summary":"Richards-Baker Flashiness Index","description":"Measurement of flow oscillations relative to average flow, quantifying the frequency and speed of flow changes.","parameters":[{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Rate of river discharge."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"rearrange","summary":"Sort an array based on a permutation","description":"Rearranges an array based on a ranked list of element positions in the original list (i.e., a permutation). The positions must be zero-based. The process ``order()`` can compute such a permutation.","categories":["arrays","sorting"],"parameters":[{"name":"data","description":"The array to rearrange.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"order","description":"The permutation used for rearranging.","schema":{"type":"array","items":{"type":"integer","minimum":0}}}],"returns":{"description":"The rearranged array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},"examples":[{"title":"Reverse a list","arguments":{"data":[5,4,3],"order":[2,1,0]},"returns":[3,4,5]},{"title":"Remove two elements","arguments":{"data":[5,4,3,2],"order":[1,3]},"returns":[4,2]},{"title":"Swap two elements","arguments":{"data":[5,4,3,2],"order":[0,2,1,3]},"returns":[5,3,4,2]}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Permutation.html","title":"Permutation explained by Wolfram MathWorld"}]},{"id":"reduce_by_method","summary":"Reduce pixel values by a named method","description":"Reduce an array of values by a named method.\n\nA spec-compliant alternative to parameterising a reducer's ``process_id``: workflows\npass ``method`` as an ordinary string argument (mean/sum/min/max/median) while\n``process_id`` stays the literal ``\"reduce_by_method\"``, so standard openEO tooling\ncan validate the graph. Used as the reducer in the ``aggregate_*`` workflows, where\nit receives the (already NaN-dropped, 1-D) pixel values within each geometry.","parameters":[{"name":"data","schema":{},"description":"The array of values to reduce."},{"name":"method","schema":{"type":"string"},"description":"Reduction method: mean (default), sum, min, max or median.","optional":true,"default":"mean"}],"returns":{"schema":{}}},{"id":"reduce_dimension","summary":"Reduce dimensions","description":"Applies a reducer to a data cube dimension by collapsing all the values along the specified dimension into an output value computed by the reducer.\n\nThe dimension is dropped. To avoid this, use ``apply_dimension()`` instead.","categories":["cubes","reducer"],"parameters":[{"name":"data","description":"A data cube.","schema":{"type":"object","subtype":"datacube"}},{"name":"reducer","description":"A reducer to apply on the specified dimension. A reducer is a single process such as ``mean()`` or a set of processes, which computes a single value for a list of values, see the category 'reducer' for such processes.","schema":{"type":"object","subtype":"process-graph","parameters":[{"name":"data","description":"A labeled array with elements of any type.","schema":{"type":"array","subtype":"labeled-array","items":{"description":"Any data type."}}},{"name":"context","description":"Additional data passed by the user.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"The value to be set in the new data cube.","schema":{"description":"Any data type."}}}},{"name":"dimension","description":"The name of the dimension over which to reduce. Fails with a `DimensionNotAvailable` exception if the specified dimension does not exist.","schema":{"type":"string"}},{"name":"context","description":"Additional data to be passed to the reducer.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"A data cube with the newly computed values. It is missing the given dimension, the number of dimensions decreases by one. The dimension properties (name, type, labels, reference system and resolution) for all other dimensions remain unchanged.","schema":{"type":"object","subtype":"datacube"}},"exceptions":{"DimensionNotAvailable":{"message":"A dimension with the specified name does not exist."}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#reduce","rel":"about","title":"Reducers explained in the openEO documentation"}]},{"id":"reduce_spatial","summary":"Reduce spatial dimensions 'x' and 'y'","description":"Applies a reducer to a data cube by collapsing all the pixel values along the horizontal spatial dimensions (i.e. axes `x` and `y`) into an output value computed by the reducer. The horizontal spatial dimensions are dropped.\n\nAn aggregation over certain spatial areas can be computed with the process ``aggregate_spatial()``.\n\nThis process passes a list of values to the reducer. The list of values has an undefined order, therefore processes such as ``last()`` and ``first()`` that depend on the order of the values will lead to unpredictable results.","categories":["aggregate","cubes","reducer"],"experimental":true,"parameters":[{"name":"data","description":"A raster data cube.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},{"name":"reducer","description":"A reducer to apply on the horizontal spatial dimensions. A reducer is a single process such as ``mean()`` or a set of processes, which computes a single value for a list of values, see the category 'reducer' for such processes.","schema":{"type":"object","subtype":"process-graph","parameters":[{"name":"data","description":"An array with elements of any type.","schema":{"type":"array","items":{"description":"Any data type."}}},{"name":"context","description":"Additional data passed by the user.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"The value to be set in the new data cube.","schema":{"description":"Any data type."}}}},{"name":"context","description":"Additional data to be passed to the reducer.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"A data cube with the newly computed values. It is missing the horizontal spatial dimensions, the number of dimensions decreases by two. The dimension properties (name, type, labels, reference system and resolution) for all other dimensions remain unchanged.","schema":{"type":"object","subtype":"datacube"}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#reduce","rel":"about","title":"Reducers explained in the openEO documentation"}]},{"id":"relative_humidity_from_dewpoint","summary":"Compute the relative humidity from dewpoint temperature.","description":"Compute the relative humidity from dewpoint temperature.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\ntd: array-like | xarray.DataArray | FieldList | Field\n    Dewpoint (K)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Relative humidity (%)\n\n\nThe computation is based on the following formula:\n\n.. math::\n\n    r = 100 \\frac {e_{wsat}(td)}{e_{wsat}(t)}\n\nwhere :math:`e_{wsat}` is the :func:`saturation_vapour_pressure` over water.","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"td","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"relative_humidity_from_specific_humidity","summary":"Compute the relative humidity from specific humidity.","description":"Compute the relative humidity from specific humidity.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\nq: array-like | xarray.DataArray | FieldList | Field\n    Specific humidity (kg/kg)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Relative humidity (%)\n\n\nThe computation is based on the following formula:\n\n.. math::\n\n    r = 100 \\frac {e(q, p)}{e_{msat}(t)}\n\nwhere:\n\n    * :math:`e` is the vapour pressure (see :func:`vapour_pressure_from_specific_humidity`)\n    * :math:`e_{msat}` is the :func:`saturation_vapour_pressure` based on the \\\"mixed\\\" phase","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: kg/kg (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"rename_dimension","summary":"Rename a dimension","description":"Renames a dimension in the data cube while preserving all other properties.","categories":["cubes"],"parameters":[{"name":"data","description":"The data cube.","schema":{"type":"object","subtype":"datacube"}},{"name":"source","description":"The current name of the dimension. Fails with a `DimensionNotAvailable` exception if the specified dimension does not exist.","schema":{"type":"string"}},{"name":"target","description":"A new Name for the dimension. Fails with a `DimensionExists` exception if a dimension with the specified name exists.","schema":{"type":"string"}}],"returns":{"description":"A data cube with the same dimensions, but the name of one of the dimensions changes. The old name can not be referred to any longer. The dimension properties (name, type, labels, reference system and resolution) remain unchanged.","schema":{"type":"object","subtype":"datacube"}},"exceptions":{"DimensionNotAvailable":{"message":"A dimension with the specified name does not exist."},"DimensionExists":{"message":"A dimension with the specified name already exists."}}},{"id":"rename_labels","summary":"Rename dimension labels","description":"Renames the labels of the specified dimension in the data cube from `source` to `target`.\n\nIf the array for the source labels is empty (the default), the dimension labels are expected to be enumerated with zero-based numbering (0,1,2,3,...) so that the dimension labels directly map to the indices of the array specified for the parameter `target`. Otherwise, the number of the source and target labels must be equal. If none of these requirements is fulfilled, the `LabelMismatch` exception is thrown.\n\nThis process doesn't change the order of the labels and their corresponding data.","categories":["cubes"],"parameters":[{"name":"data","description":"The data cube.","schema":{"type":"object","subtype":"datacube"}},{"name":"dimension","description":"The name of the dimension to rename the labels for.","schema":{"type":"string"}},{"name":"target","description":"The new names for the labels.\n\nIf a target dimension label already exists in the data cube, a `LabelExists` exception is thrown.","schema":{"type":"array","items":{"type":["number","string"]}}},{"name":"source","description":"The original names of the labels to be renamed to corresponding array elements in the parameter `target`. It is allowed to only specify a subset of labels to rename, as long as the `target` and `source` parameter have the same length. The order of the labels doesn't need to match the order of the dimension labels in the data cube. By default, the array is empty so that the dimension labels in the data cube are expected to be enumerated.\n\nIf the dimension labels are not enumerated and the given array is empty, the `LabelsNotEnumerated` exception is thrown. If one of the source dimension labels doesn't exist, the `LabelNotAvailable` exception is thrown.","schema":{"type":"array","items":{"type":["number","string"]}},"default":[],"optional":true}],"returns":{"description":"The data cube with the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged, except that for the given dimension the labels change. The old labels can not be referred to any longer. The number of labels remains the same.","schema":{"type":"object","subtype":"datacube"}},"exceptions":{"LabelsNotEnumerated":{"message":"The dimension labels are not enumerated."},"LabelMismatch":{"message":"The number of labels in the parameters `source` and `target` don't match."},"LabelNotAvailable":{"message":"A label with the specified name does not exist."},"LabelExists":{"message":"A label with the specified name exists."}},"examples":[{"title":"Rename named labels","description":"Renaming the bands from `B1` to `red`, from `B2` to `green` and from `B3` to `blue`.","arguments":{"data":{"from_parameter":"data"},"dimension":"bands","source":["B1","B2","B3"],"target":["red","green","blue"]}}]},{"id":"resample_cube_spatial","summary":"Resample the spatial dimensions to match a target data cube","description":"Resamples the spatial dimensions (x,y) from a source data cube to align with the corresponding dimensions of the given target data cube. Returns a new data cube with the resampled dimensions.\n\nTo resample a data cube to a specific resolution or projection regardless of an existing target data cube, refer to ``resample_spatial()``.","categories":["cubes","reproject"],"parameters":[{"name":"data","description":"A raster data cube.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},{"name":"target","description":"A raster data cube that describes the spatial target resolution.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},{"name":"method","description":"Resampling method to use. The following options are available and are meant to align with [`gdalwarp`](https://gdal.org/programs/gdalwarp.html#cmdoption-gdalwarp-r):\n\n* `average`: average (mean) resampling, computes the weighted average of all valid pixels\n* `bilinear`: bilinear resampling\n* `cubic`: cubic resampling\n* `cubicspline`: cubic spline resampling\n* `lanczos`: Lanczos windowed sinc resampling\n* `max`: maximum resampling, selects the maximum value from all valid pixels\n* `med`: median resampling, selects the median value of all valid pixels\n* `min`: minimum resampling, selects the minimum value from all valid pixels\n* `mode`: mode resampling, selects the value which appears most often of all the sampled points\n* `near`: nearest neighbour resampling (default)\n* `q1`: first quartile resampling, selects the first quartile value of all valid pixels\n* `q3`: third quartile resampling, selects the third quartile value of all valid pixels\n* `rms` root mean square (quadratic mean) of all valid pixels\n* `sum`: compute the weighted sum of all valid pixels\n\nValid pixels are determined based on the function ``is_valid()``.","schema":{"type":"string","enum":["average","bilinear","cubic","cubicspline","lanczos","max","med","min","mode","near","q1","q3","rms","sum"]},"default":"near","optional":true}],"returns":{"description":"A raster data cube with the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged, except for the resolution and dimension labels of the spatial dimensions.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#resample","rel":"about","title":"Resampling explained in the openEO documentation"}]},{"id":"resample_cube_temporal","summary":"resample_cube_temporal","description":"","parameters":[],"returns":{"description":"Result.","schema":{}},"links":[{"rel":"about","href":"https://processes.openeo.org/#resample_cube_temporal"}]},{"id":"resample_spatial","summary":"Resample and warp the spatial dimensions","description":"Resamples the spatial dimensions (x,y) of the data cube to a specified resolution and/or warps the data cube to the target projection. At least `resolution` or `projection` must be specified.\n\nRelated processes:\n\n* Use ``filter_bbox()`` to set the target spatial extent.\n* To spatially align two data cubes with each other (e.g. for merging), better use the process ``resample_cube_spatial()``.","categories":["cubes","reproject"],"parameters":[{"name":"data","description":"A raster data cube.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},{"name":"resolution","description":"Resamples the data cube to the target resolution, which can be specified either as separate values for x and y or as a single value for both axes. Specified in the units of the target projection. Doesn't change the resolution by default (`0`).","schema":[{"description":"A single number used as the resolution for both x and y.","type":"number","minimum":0},{"description":"A two-element array to specify separate resolutions for x (first element) and y (second element).","type":"array","minItems":2,"maxItems":2,"items":{"type":"number","minimum":0}}],"default":0,"optional":true},{"name":"projection","description":"Warps the data cube to the target projection, specified as as [EPSG code](http://www.epsg-registry.org/) or [WKT2 CRS string](http://docs.opengeospatial.org/is/18-010r7/18-010r7.html). By default (`null`), the projection is not changed.","schema":[{"title":"EPSG Code","type":"integer","subtype":"epsg-code","minimum":1000,"examples":[3857]},{"title":"WKT2","type":"string","subtype":"wkt2-definition"},{"title":"Don't change projection","type":"null"}],"default":null,"optional":true},{"name":"method","description":"Resampling method to use. The following options are available and are meant to align with [`gdalwarp`](https://gdal.org/programs/gdalwarp.html#cmdoption-gdalwarp-r):\n\n* `average`: average (mean) resampling, computes the weighted average of all valid pixels\n* `bilinear`: bilinear resampling\n* `cubic`: cubic resampling\n* `cubicspline`: cubic spline resampling\n* `lanczos`: Lanczos windowed sinc resampling\n* `max`: maximum resampling, selects the maximum value from all valid pixels\n* `med`: median resampling, selects the median value of all valid pixels\n* `min`: minimum resampling, selects the minimum value from all valid pixels\n* `mode`: mode resampling, selects the value which appears most often of all the sampled points\n* `near`: nearest neighbour resampling (default)\n* `q1`: first quartile resampling, selects the first quartile value of all valid pixels\n* `q3`: third quartile resampling, selects the third quartile value of all valid pixels\n* `rms` root mean square (quadratic mean) of all valid pixels\n* `sum`: compute the weighted sum of all valid pixels\n\nValid pixels are determined based on the function ``is_valid()``.","schema":{"type":"string","enum":["average","bilinear","cubic","cubicspline","lanczos","max","med","min","mode","near","q1","q3","rms","sum"]},"default":"near","optional":true}],"returns":{"description":"A raster data cube with values warped onto the new projection. It has the same dimensions and the same dimension properties (name, type, labels, reference system and resolution) for all non-spatial or vertical spatial dimensions. For the horizontal spatial dimensions the name and type remain unchanged, but reference system, labels and resolution may change depending on the given parameters.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#resample","rel":"about","title":"Resampling explained in the openEO documentation"},{"rel":"about","href":"https://proj.org/usage/projections.html","title":"PROJ parameters for cartographic projections"},{"rel":"about","href":"http://www.epsg-registry.org","title":"Official EPSG code registry"},{"rel":"about","href":"http://www.epsg.io","title":"Unofficial EPSG code database"},{"href":"https://gdal.org/programs/gdalwarp.html#cmdoption-gdalwarp-r","rel":"about","title":"gdalwarp resampling methods"}]},{"id":"round","summary":"Round to a specified precision","description":"Rounds a real number `x` to specified precision `p`.\n\nIf `x` is halfway between closest numbers of precision `p`, it is rounded to the closest even number of precision `p`.\nThis behavior follows [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) and is often called \"round to nearest (even)\" or \"banker's rounding\". It minimizes rounding errors that result from consistently rounding a midpoint value in a single direction.\n\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > rounding"],"parameters":[{"name":"x","description":"A number to round.","schema":{"type":["number","null"]}},{"name":"p","description":"A positive number specifies the number of digits after the decimal point to round to. A negative number means rounding to a power of ten, so for example *-2* rounds to the nearest hundred. Defaults to *0*.","schema":{"type":"integer"},"default":0,"optional":true}],"returns":{"description":"The rounded number.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0},{"arguments":{"x":3.56,"p":1},"returns":3.6},{"arguments":{"x":-0.4444444,"p":2},"returns":-0.44},{"arguments":{"x":-2.5},"returns":-2},{"arguments":{"x":-3.5},"returns":-4},{"arguments":{"x":0.25,"p":1},"returns":0.2},{"arguments":{"x":0.35,"p":1},"returns":0.4},{"arguments":{"x":1234.5,"p":-2},"returns":1200}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/AbsoluteValue.html","title":"Absolute value explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"rprctot","summary":"Proportion of accumulated precipitation arising from convective processes","description":"The proportion of total precipitation due to convective processes. Only days with surpassing a minimum precipitation flux are considered.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"prc","schema":{"type":"object","subtype":"datacube"},"description":"Daily convective precipitation."},{"name":"thresh","schema":{"type":"string"},"description":"Precipitation value over which a day is considered wet.","optional":true,"default":"1.0 mm/day"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">=\".","optional":true,"default":">="}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"run_udf","summary":"run_udf","description":"","parameters":[],"returns":{"description":"Result.","schema":{}},"links":[{"rel":"about","href":"https://processes.openeo.org/#run_udf"}]},{"id":"rx1day","summary":"Maximum 1-day total precipitation","description":"Maximum total daily precipitation for a given period.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation values."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"saturation_ept","summary":"Compute the saturation equivalent potential temperature.","description":"Compute the saturation equivalent potential temperature.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\nmethod: str, optional\n    Specifies the computation method. The possible values are: \"ifs\", \"bolton35\", \"bolton39\".\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Saturation equivalent potential temperature (K)\n\n\nThe actual computation is based on the ``method``:\n\n* \"ifs\": The formula is based on the equivalent potential temperature definition used\n   in the IFS model [IFS-CY47R3-PhysicalProcesses]_ (see Chapter 6.11) :\n\n    .. math::\n\n        \\Theta_{esat} = \\Theta \\operatorname{exp}(\\frac{L_{v} q_{sat}}{c_{pd} t})\n\n* \"bolton35\": Eq (35) from [Bolton1980]_ is used:\n\n    .. math::\n\n        \\Theta_{e} = \\Theta (\\frac{10^{5}}{p})^{\\kappa 0.28 w_{sat}} \\operatorname{exp}(\\frac{2675 w_{sat}}{t})\n\n* \"bolton39\": Eq (39) from [Bolton1980]_ is used:\n\n    .. math::\n\n        \\Theta_{e} =\n        t (\\frac{10^{5}}{p-e_{sat}})^{\\kappa} \\operatorname{exp}[(\\frac{3036}{t} - 1.78)w_{sat}(1+0.448 w_{sat})]\n\nwhere:\n\n    * :math:`\\Theta` is the :func:`potential_temperature`\n    * :math:`e_{sat}` is the :func:`saturation_vapor_pressure`\n    * :math:`q_{sat}` is the :func:`saturation_specific_humidity`\n    * :math:`w_{sat}` is the :func:`saturation_mixing_ratio`\n    * :math:`L_{v}` is the specific latent heat of vaporization (see :data:`earthkit.meteo.constants.Lv`)\n    * :math:`c_{pd}` is the specific heat of dry air on constant pressure\n      (see :data:`earthkit.meteo.constants.c_pd`)","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"method","schema":{"type":"string"},"optional":true,"default":"ifs"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"saturation_mixing_ratio","summary":"Compute the saturation mixing ratio from temperature with respect to a phase.","description":"Compute the saturation mixing ratio from temperature with respect to a phase.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\nphase: str\n    Define the phase with respect to the :func:`saturation_vapour_pressure` is computed.\n    It is either “water”, “ice” or “mixed”.\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Saturation mixing ratio (kg/kg)\n\n\nEquivalent to the following code:\n\n.. code-block:: python\n\n    e = saturation_vapour_pressure(t, phase=phase)\n    return mixing_ratio_from_vapour_pressure(e, p)","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"phase","schema":{"type":"string"},"optional":true,"default":"mixed"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"saturation_mixing_ratio_slope","summary":"Compute the slope of saturation mixing ratio with respect to temperature.","description":"Compute the slope of saturation mixing ratio with respect to temperature.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\nes: array-like | xarray.DataArray | FieldList | Field or None, optional\n    :func:`saturation_vapour_pressure` pre-computed for the given ``phase`` (Pa)\nes_slope: array-like | xarray.DataArray | FieldList | Field or None, optional\n    :func:`saturation_vapour_pressure_slope` pre-computed for the given ``phase`` (Pa/K)\nphase: str, optional\n    Define the phase with respect to the computation will be performed.\n    It is either “water”, “ice” or “mixed”. See :func:`saturation_vapour_pressure`\n    for details.\neps: number\n    Where p - es < ``eps`` nan is returned.\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Slope of saturation mixing ratio (:math:`kg kg^{-1} K^{-1}`)\n\n\nThe computation is based on the following formula:\n\n.. math::\n\n    \\frac{\\partial w_{s}}{\\partial t} = \\frac{\\epsilon p}{(p-e_{s})^{2}} \\frac{d e_{s}}{d t}\n\nwhere\n\n    * :math:`\\epsilon = R_{d}/R_{v}` (see :data:`earthkit.meteo.constants.epsilon`).\n    * :math:`e_{s}` is the :func:`saturation_vapour_pressure` for the given ``phase``","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"es","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit).","optional":true},{"name":"es_slope","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa/K (converted automatically when the cube declares a compatible CF unit).","optional":true},{"name":"phase","schema":{"type":"string"},"optional":true,"default":"mixed"},{"name":"eps","schema":{"type":"number"},"optional":true,"default":0.0001}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"saturation_specific_humidity","summary":"Compute the saturation specific humidity from temperature with respect to a phase.","description":"Compute the saturation specific humidity from temperature with respect to a phase.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\nphase: str, optional\n    Define the phase with respect to the :func:`saturation_vapour_pressure` is computed.\n    It is either “water”, “ice” or “mixed”.\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Saturation specific humidity (kg/kg)\n\n\nEquivalent to the following code:\n\n.. code-block:: python\n\n    e = saturation_vapour_pressure(t, phase=phase)\n    return specific_humidity_from_vapour_pressure(e, p)","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"phase","schema":{"type":"string"},"optional":true,"default":"mixed"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"saturation_specific_humidity_slope","summary":"Compute the slope of saturation specific humidity with respect to temperature.","description":"Compute the slope of saturation specific humidity with respect to temperature.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\nes: array-like | xarray.DataArray | FieldList | Field or None, optional\n    :func:`saturation_vapour_pressure` pre-computed for the given ``phase`` (Pa)\nes_slope: array-like | xarray.DataArray | FieldList | Field or None, optional\n    :func:`saturation_vapour_pressure_slope` pre-computed for the given ``phase`` (Pa/K)\nphase: str, optional\n    Define the phase with respect to the computation will be performed.\n    It is either “water”, “ice” or “mixed”. See :func:`saturation_vapour_pressure`\n    for details.\neps: number\n    Where p - es < ``eps`` nan is returned.\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Slope of saturation specific humidity (:math:`kg kg^{-1} K^{-1}`)\n\n\nThe computation is based on the following formula:\n\n.. math::\n\n    \\frac{\\partial q_{s}}{\\partial t} =\n    \\frac{\\epsilon p}{(p+e_{s}(\\epsilon - 1))^{2}} \\frac{d e_{s}}{d t}\n\nwhere\n\n    * :math:`\\epsilon = R_{d}/R_{v}` (see :data:`earthkit.meteo.constants.epsilon`).\n    * :math:`e_{s}` is the :func:`saturation_vapour_pressure` for the given ``phase``","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"es","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit).","optional":true},{"name":"es_slope","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa/K (converted automatically when the cube declares a compatible CF unit).","optional":true},{"name":"phase","schema":{"type":"string"},"optional":true,"default":"mixed"},{"name":"eps","schema":{"type":"number"},"optional":true,"default":0.0001}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"saturation_vapour_pressure","summary":"Compute the saturation vapour pressure from temperature with respect to a phase.","description":"Compute the saturation vapour pressure from temperature with respect to a phase.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\nphase: str, optional\n    Define the phase with respect to the saturation vapour pressure is computed.\n    It is either “water”, “ice” or “mixed”.\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Saturation vapour pressure (Pa)\n\n\nThe algorithm was taken from the IFS model [IFS-CY47R3-PhysicalProcesses]_ (see Chapter 12).\nIt uses the following formula when ``phase`` is \\\"water\\\" or \\\"ice\\\":\n\n.. math::\n\n    e_{sat} = a_{1}\\operatorname{exp} \\left(a_{3}\\frac{t-273.16}{t-a_{4}}\\right)\n\nwhere the parameters are set as follows:\n\n* ``phase`` = \\\"water\\\": :math:`a_{1}` =611.21 Pa, :math:`a_{3}` =17.502 and :math:`a_{4}` =32.19 K\n* ``phase`` = \\\"ice\\\": :math:`a_{1}` =611.21 Pa, :math:`a_{3}` =22.587 and :math:`a_{4}` =-0.7 K\n\nWhen ``phase`` is \\\"mixed\\\" the formula is based on the value of ``t``:\n\n* if :math:`t <= t_{i}`: the formula for ``phase`` = \\\"ice\\\" is used (:math:`t_{i} = 250.16 K`)\n* if :math:`t >= t_{0}`: the formula for ``phase`` = \\\"water\\\" is used (:math:`t_{0} = 273.16 K`)\n* for the range :math:`t_{i} < t < t_{0}` an interpolation is used\n  between the \\\"ice\\\" and \\\"water\\\" phases:\n\n.. math::\n\n    \\alpha(t) e_{wsat}(t) + (1 - \\alpha(t)) e_{isat}(t)\n\nwith :math:`\\alpha(t) = (\\frac{t-t_{i}}{t_{0}-t_{i}})^2`.","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"phase","schema":{"type":"string"},"optional":true,"default":"mixed"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"saturation_vapour_pressure_slope","summary":"Compute the slope of saturation vapour pressure with respect to temperature.","description":"Compute the slope of saturation vapour pressure with respect to temperature.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\nphase: str, optional\n    Define the phase with respect to the computation will be performed.\n    It is either “water”, “ice” or “mixed”. See :func:`saturation_vapour_pressure`\n    for details.\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Slope of saturation vapour pressure (Pa/K)","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"phase","schema":{"type":"string"},"optional":true,"default":"mixed"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"sd","summary":"Standard deviation","description":"Computes the sample standard deviation, which quantifies the amount of variation of an array of numbers. It is defined to be the square root of the corresponding variance (see ``variance()``).\n\nA low standard deviation indicates that the values tend to be close to the expected value, while a high standard deviation indicates that the values are spread out over a wider range.\n\nAn array without non-`null` elements resolves always with `null`.","categories":["math > statistics","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not. Ignores them by default. Setting this flag to `false` considers no-data values so that `null` is returned if any value is such a value.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"The computed sample standard deviation.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[-1,1,3,null]},"returns":2},{"arguments":{"data":[-1,1,3,null],"ignore_nodata":false},"returns":null},{"description":"The input array is empty: return `null`.","arguments":{"data":[]},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/StandardDeviation.html","title":"Standard deviation explained by Wolfram MathWorld"}],"process_graph":{"variance":{"process_id":"variance","arguments":{"data":{"from_parameter":"data"},"ignore_nodata":{"from_parameter":"ignore_nodata"}}},"power":{"process_id":"power","arguments":{"base":{"from_node":"variance"},"p":0.5},"result":true}}},{"id":"sdii","summary":"Simple Daily Intensity Index","description":"Average precipitation for days with daily precipitation above a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"thresh","schema":{"type":"string"},"description":"Precipitation value over which a day is considered wet.","optional":true,"default":"1 mm/day"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">=\".","optional":true,"default":">="}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"sea_ice_area","summary":"Sea ice area","description":"A measure of total ocean surface covered by sea ice.","parameters":[{"name":"siconc","schema":{"type":"object","subtype":"datacube"},"description":"Sea ice concentration (area fraction)."},{"name":"areacello","schema":{"type":"object","subtype":"datacube"},"description":"Grid cell area (usually over the ocean)."},{"name":"thresh","schema":{"type":"string"},"description":"Minimum sea ice concentration for a grid cell to contribute to the sea ice extent.","optional":true,"default":"15 %"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"sea_ice_extent","summary":"Sea ice extent","description":"A measure of the extent of all areas where sea ice concentration exceeds a threshold.","parameters":[{"name":"siconc","schema":{"type":"object","subtype":"datacube"},"description":"Sea ice concentration (area fraction)."},{"name":"areacello","schema":{"type":"object","subtype":"datacube"},"description":"Grid cell area."},{"name":"thresh","schema":{"type":"string"},"description":"Minimum sea ice concentration for a grid cell to contribute to the sea ice extent.","optional":true,"default":"15 %"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"sfcWind_max","summary":"Maximum near-surface mean wind speed","description":"Maximum of daily mean near-surface wind speed.","parameters":[{"name":"sfcWind","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily wind speed."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"sfcWind_mean","summary":"Mean near-surface wind speed","description":"Mean of daily near-surface wind speed.","parameters":[{"name":"sfcWind","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily wind speed."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"sfcWind_min","summary":"Minimum near-surface mean wind speed","description":"Minimum of daily mean near-surface wind speed.","parameters":[{"name":"sfcWind","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily wind speed."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"sfcWindmax_max","summary":"Maximum near-surface maximum wind speed","description":"Maximum of daily maximum near-surface wind speed.","parameters":[{"name":"sfcWindmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily wind speed."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"sfcWindmax_mean","summary":"Mean near-surface maximum wind speed","description":"Mean of daily maximum near-surface wind speed.","parameters":[{"name":"sfcWindmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily wind speed."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"sfcWindmax_min","summary":"Minimum near-surface maximum wind speed","description":"Minimum of daily maximum near-surface wind speed.","parameters":[{"name":"sfcWindmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily wind speed."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"sgi","summary":"Standardized Groundwater Index (SGI)","description":"Groundwater over a moving window, normalized such that SGI averages to 0 for the calibration data. The window unit `X` is the minimal time period defined by the resampling frequency.","parameters":[{"name":"gwl","schema":{"type":"object","subtype":"datacube"},"description":"Groundwater head level."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency. A monthly or daily frequency is expected. Option `None` assumes that the desired resampling has already been applied input dataset and will skip the resampling step.","optional":true,"default":"MS"},{"name":"window","schema":{"type":"number"},"description":"Averaging window length relative to the resampling frequency. For example, if `freq=\"MS\"`, i.e. a monthly resampling, the window is an integer number of months.","optional":true,"default":1},{"name":"dist","schema":{"type":"string"},"description":"Name of the univariate distribution, or a callable `rv_continuous` (see :py:mod:`scipy.stats`).","optional":true,"default":"genextreme"},{"name":"method","schema":{"type":"string"},"description":"Name of the fitting method, such as `ML` (maximum likelihood), `APP` (approximate). The approximate method uses a deterministic function that does not involve any optimization. `PWM` should be used with a `lmoments3` distribution.","optional":true,"default":"ML"},{"name":"fitkwargs","schema":{},"description":"Kwargs passed to ``xclim.indices.stats.fit`` used to impose values of certain parameters (`floc`, `fscale`).","optional":true,"default":null},{"name":"cal_start","schema":{"type":"string"},"description":"Start date of the calibration period. A `DateStr` is expected, that is a `str` in format `\"YYYY-MM-DD\"`. Default option `None` means that the calibration period begins at the start of the input dataset.","optional":true,"default":null},{"name":"cal_end","schema":{"type":"string"},"description":"End date of the calibration period. A `DateStr` is expected, that is a `str` in format `\"YYYY-MM-DD\"`. Default option `None` means that the calibration period finishes at the end of the input dataset.","optional":true,"default":null},{"name":"params","schema":{"type":"string"},"description":"Fit parameters. The `params` can be computed using ``xclim.indices.stats.standardized_index_fit_params`` in advance. The output can be given here as input, and it overrides other options.","optional":true,"default":null}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"sgn","summary":"Signum","description":"The signum (also known as *sign*) of `x` is defined as:\n\n* *1* if *x > 0*\n* *0* if *x = 0*\n* *-1* if *x < 0*\n\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed signum value of `x`.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":-2},"returns":-1},{"arguments":{"x":3.5},"returns":1},{"arguments":{"x":0},"returns":0},{"arguments":{"x":null},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Sign.html","title":"Sign explained by Wolfram MathWorld"}],"process_graph":{"gt0":{"process_id":"gt","arguments":{"x":{"from_parameter":"x"},"y":0}},"lt0":{"process_id":"lt","arguments":{"x":{"from_parameter":"x"},"y":0}},"if_gt0":{"process_id":"if","arguments":{"value":{"from_node":"gt0"},"accept":1,"reject":{"from_parameter":"x"}}},"if_lt0":{"process_id":"if","arguments":{"value":{"from_node":"lt0"},"accept":-1,"reject":{"from_node":"if_gt0"}},"result":true}}},{"id":"sin","summary":"Sine","description":"Computes the sine of `x`.\n\nWorks on radians only.\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"An angle in radians.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed sine of `x`.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Sine.html","title":"Sine explained by Wolfram MathWorld"}]},{"id":"sinh","summary":"Hyperbolic sine","description":"Computes the hyperbolic sine of `x`.\n\nWorks on radians only.\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"An angle in radians.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed hyperbolic sine of `x`.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/HyperbolicSine.html","title":"Hyperbolic sine explained by Wolfram MathWorld"}]},{"id":"snd_days_above","summary":"Days with snow (depth)","description":"Number of days when the snow depth is greater than or equal to a given threshold.","parameters":[{"name":"snd","schema":{"type":"object","subtype":"datacube"},"description":"Surface snow thickness."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold snow thickness.","optional":true,"default":"2 cm"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency. The default value is chosen for the Northern Hemisphere.","optional":true,"default":"YS-JUL"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">=\".","optional":true,"default":">="}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snd_max_doy","summary":"Day of year of maximum snow depth","description":"Day of the year when snow depth reaches its maximum value.","parameters":[{"name":"snd","schema":{"type":"object","subtype":"datacube"},"description":"Surface snow depth."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snd_season_end","summary":"Snow cover end date (depth).","description":"The first date on which snow depth is below a given threshold for a given number of consecutive days.","parameters":[{"name":"snd","schema":{"type":"object","subtype":"datacube"},"description":"Surface snow thickness."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold snow thickness.","optional":true,"default":"2 cm"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with snow depth below the threshold.","optional":true,"default":14},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency. Default: \"YS-JUL\". The default value is chosen for the northern hemisphere.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snd_season_length","summary":"Snow cover duration (depth).","description":"The season starts when snow depth is above a threshold for at least `N` consecutive days and stops when it drops below the same threshold for the same number of days.","parameters":[{"name":"snd","schema":{"type":"object","subtype":"datacube"},"description":"Surface snow thickness."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold snow thickness.","optional":true,"default":"2 cm"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with snow depth above and below threshold.","optional":true,"default":14},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency. The default value is chosen for the northern hemisphere.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snd_season_start","summary":"Snow cover start date (depth).","description":"The first date on which snow depth is greater than or equal to a given threshold for a given number of consecutive days.","parameters":[{"name":"snd","schema":{"type":"object","subtype":"datacube"},"description":"Surface snow thickness."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold snow thickness.","optional":true,"default":"2 cm"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with snow depth above or equal to the threshold.","optional":true,"default":14},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency. The default value is chosen for the Northern Hemisphere.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snd_storm_days","summary":"Winter storm days","description":"Number of days with snowfall depth accumulation greater or equal to threshold (default: 25 cm).","parameters":[{"name":"snd","schema":{"type":"object","subtype":"datacube"},"description":"Surface snow depth."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold on snowfall depth accumulation require to label an event a `snd storm`.","optional":true,"default":"25 cm"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snow_depth","summary":"Mean snow depth","description":"Mean of daily snow depth.","parameters":[{"name":"snd","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily snow depth."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snow_melt_we_max","summary":"Maximum snow melt","description":"The water equivalent of the maximum snow melt.","parameters":[{"name":"snw","schema":{"type":"object","subtype":"datacube"},"description":"Snow amount (mass per area)."},{"name":"window","schema":{"type":"number"},"description":"Number of days during which the melt is accumulated.","optional":true,"default":3},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snowfall_frequency","summary":"Snowfall frequency","description":"Percentage of days with snowfall above a given threshold (either a snowfall flux or a liquid water equivalent snowfall rate).","parameters":[{"name":"prsn","schema":{"type":"object","subtype":"datacube"},"description":"Snowfall flux."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold snowfall flux or liquid water equivalent snowfall rate (default: 1 mm/day).","optional":true,"default":"1 mm/day"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snowfall_intensity","summary":"Snowfall intensity","description":"Mean daily liquid water equivalent snowfall rate above threshold (either a snowfall flux or a liquid water equivalent snowfall rate)","parameters":[{"name":"prsn","schema":{"type":"object","subtype":"datacube"},"description":"Snowfall flux."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold snowfall flux or liquid water equivalent snowfall rate (default: 1 mm/day).","optional":true,"default":"1 mm/day"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snw_days_above","summary":"Days with snow (amount)","description":"Number of days when the snow amount is greater than or equal to a given threshold.","parameters":[{"name":"snw","schema":{"type":"object","subtype":"datacube"},"description":"Surface snow amount."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold snow amount.","optional":true,"default":"4 kg m-2"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency. The default value is chosen for the Northern hemisphere.","optional":true,"default":"YS-JUL"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">=\".","optional":true,"default":">="}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snw_max","summary":"Maximum snow amount","description":"The maximum snow amount equivalent on the surface.","parameters":[{"name":"snw","schema":{"type":"object","subtype":"datacube"},"description":"Snow amount (mass per area)."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snw_max_doy","summary":"Day of year of maximum snow amount","description":"The day of year when snow amount equivalent on the surface reaches its maximum.","parameters":[{"name":"snw","schema":{"type":"object","subtype":"datacube"},"description":"Surface snow amount."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snw_season_end","summary":"Snow cover end date (amount).","description":"The first date on which snow amount is below a given threshold for a given number of consecutive days.","parameters":[{"name":"snw","schema":{"type":"object","subtype":"datacube"},"description":"Surface snow amount."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold snow amount.","optional":true,"default":"4 kg m-2"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with snow water below the threshold.","optional":true,"default":14},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency. The default value is chosen for the Northern Hemisphere.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snw_season_length","summary":"Snow cover duration (amount).","description":"The season starts when the snow amount is above a threshold for at least `N` consecutive days and stops when it drops below the same threshold for the same number of days.","parameters":[{"name":"snw","schema":{"type":"object","subtype":"datacube"},"description":"Surface snow amount."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold snow amount.","optional":true,"default":"4 kg m-2"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with snow amount above and below threshold.","optional":true,"default":14},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency. The default value is chosen for the northern hemisphere.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snw_season_start","summary":"Snow cover start date (amount).","description":"The first date on which snow amount is greater than or equal to a given threshold for a given number of consecutive days.","parameters":[{"name":"snw","schema":{"type":"object","subtype":"datacube"},"description":"Surface snow amount."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold snow amount.","optional":true,"default":"4 kg m-2"},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with snow amount above or equal to the threshold.","optional":true,"default":14},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snw_storm_days","summary":"Winter storm days","description":"Number of days with snowfall amount accumulation greater or equal to threshold (default: 10 kg m-2).","parameters":[{"name":"snw","schema":{"type":"object","subtype":"datacube"},"description":"Surface snow amount."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold on snowfall amount accumulation require to label an event a `snw storm`.","optional":true,"default":"10 kg m-2"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS-JUL"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"snw_to_snd","summary":"Surface snow depth","description":"","parameters":[{"name":"snw","schema":{"type":"object","subtype":"datacube"},"description":"Snow amount."},{"name":"snr","schema":{"type":"string"},"description":"Snow density.","optional":true,"default":null},{"name":"const","schema":{"type":"string"},"description":"Constant snow density. `const` is only used if `snr` is `None`.","optional":true,"default":"312 kg m-3"},{"name":"out_units","schema":{"type":"string"},"description":"Desired units of the snow depth output. If `None`, output units simply follow from `snw / snr`.","optional":true,"default":null}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"solidprcpavg","summary":"Averaged solid precipitation.","description":"Averaged solid precipitation. Precipitation is considered solid when the average daily temperature is at or below a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily precipitation flux."},{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean, maximum or minimum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold of `tas` over which the precipication is assumed to be liquid rain.","optional":true,"default":"0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"solidprcptot","summary":"Total accumulated solid precipitation.","description":"Total accumulated solid precipitation. Precipitation is considered solid when the average daily temperature is at or below a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily precipitation flux."},{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean, maximum or minimum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold of `tas` over which the precipication is assumed to be liquid rain.","optional":true,"default":"0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"sort","summary":"Sort data","description":"Sorts an array into ascending (default) or descending order.\n\n**Remarks:**\n\n* The ordering of ties is implementation-dependent.\n* Temporal strings can *not* be compared based on their string representation due to the time zone/time-offset representations.","categories":["arrays","sorting"],"parameters":[{"name":"data","description":"An array with data to sort.","schema":{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"null"},{"type":"string","format":"date-time","subtype":"date-time"},{"type":"string","format":"date","subtype":"date"}]}}},{"name":"asc","description":"The default sort order is ascending, with smallest values first. To sort in reverse (descending) order, set this parameter to `false`.","schema":{"type":"boolean"},"default":true,"optional":true},{"name":"nodata","description":"Controls the handling of no-data values (`null`). By default, they are removed. If set to `true`, missing values in the data are put last; if set to `false`, they are put first.","schema":{"type":["boolean","null"]},"default":null,"optional":true}],"returns":{"description":"The sorted array.","schema":{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"null"},{"type":"string","format":"date-time","subtype":"date-time"},{"type":"string","format":"date","subtype":"date"}]}}},"examples":[{"arguments":{"data":[6,-1,2,null,7,4,null,8,3,9,9]},"returns":[-1,2,3,4,6,7,8,9,9]},{"arguments":{"data":[6,-1,2,null,7,4,null,8,3,9,9],"asc":false,"nodata":true},"returns":[9,9,8,7,6,4,3,2,-1,null,null]}],"process_graph":{"order":{"process_id":"order","arguments":{"data":{"from_parameter":"data"},"asc":{"from_parameter":"asc"},"nodata":{"from_parameter":"nodata"}}},"rearrange":{"process_id":"rearrange","arguments":{"data":{"from_parameter":"data"},"order":{"from_node":"order"}},"result":true}}},{"id":"specific_gas_constant","summary":"Compute the specific gas constant of moist air.","description":"Compute the specific gas constant of moist air.\n\nSpecific content of cloud particles and hydrometeors are neglected.\n\nParameters\n----------\nq: array-like | xarray.DataArray | FieldList | Field\n    Specific humidity (kg/kg)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Specific gas constant of moist air (J kg-1 K-1)\n\n\nThe computation is based on the following formula:\n\n.. math::\n\n    R = R_{d} + (R_{v} - R_{d}) q\n\nwhere:\n\n    * :math:`R_{d}` is the gas constant for dry air (see :data:`earthkit.meteo.constants.Rd`)\n    * :math:`R_{v}` is the gas constant for water vapour (see :data:`earthkit.meteo.constants.Rv`)","parameters":[{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: kg/kg (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"specific_humidity_from_dewpoint","summary":"Compute the specific humidity from dewpoint.","description":"Compute the specific humidity from dewpoint.\n\nParameters\n----------\ntd: array-like | xarray.DataArray | FieldList | Field\n    Dewpoint (K)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Specific humidity (kg/kg)\n\n\nThe computation starts with determining the vapour pressure:\n\n.. math::\n\n    e(q, p) = e_{wsat}(td)\n\nwhere:\n\n    * :math:`e` is the vapour pressure (see :func:`vapour_pressure_from_specific_humidity`)\n    * :math:`e_{wsat}` is the :func:`saturation_vapour_pressure` over water\n    * :math:`q` is the specific humidity\n\nThen `q` is computed from :math:`e` using :func:`specific_humidity_from_vapour_pressure`.","parameters":[{"name":"td","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"specific_humidity_from_mixing_ratio","summary":"Compute the specific humidity from mixing ratio.","description":"Compute the specific humidity from mixing ratio.\n\nParameters\n----------\nw : array-like | xarray.DataArray | FieldList | Field\n    Mixing ratio (kg/kg)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Specific humidity (kg/kg)\n\n\nThe result is the specific humidity in kg/kg units. The computation is based on\nthe following definition [Wallace2006]_:\n\n.. math::\n\n    q = \\frac {w}{1+w}","parameters":[{"name":"w","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: kg/kg (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"specific_humidity_from_relative_humidity","summary":"Compute the specific humidity from relative_humidity.","description":"Compute the specific humidity from relative_humidity.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\nr: array-like | xarray.DataArray | FieldList | Field\n    Relative humidity(%)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Specific humidity (kg/kg) units\n\n\nThe computation starts with determining the the vapour pressure:\n\n.. math::\n\n    e(q, p) = r \\frac{e_{msat}(t)}{100}\n\nwhere:\n\n    * :math:`e` is the vapour pressure (see :func:`vapour_pressure`)\n    * :math:`e_{msat}` is the :func:`saturation_vapour_pressure` based on the \\\"mixed\\\" phase\n    * :math:`q` is the specific humidity\n\nThen :math:`q` is computed from :math:`e` using :func:`specific_humidity_from_vapour_pressure`.","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"r","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: % (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"specific_humidity_from_vapour_pressure","summary":"Compute the specific humidity from vapour pressure.","description":"Compute the specific humidity from vapour pressure.\n\nParameters\n----------\ne: array-like | xarray.DataArray | FieldList | Field\n    Vapour pressure (Pa)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\neps: number\n    Where p - e < ``eps`` nan is returned.\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Specific humidity (kg/kg)\n\n\nThe computation is based on the following formula:\n\n.. math::\n\n   q = \\frac{\\epsilon e}{p + e(\\epsilon-1)}\n\nwith :math:`\\epsilon = R_{d}/R_{v}` (see :data:`earthkit.meteo.constants.epsilon`).","parameters":[{"name":"e","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"eps","schema":{"type":"number"},"optional":true,"default":0.0001}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"spei","summary":"Standardized Precipitation Evapotranspiration Index (SPEI)","description":"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.","parameters":[{"name":"wb","schema":{"type":"object","subtype":"datacube"},"description":"Daily water budget (pr - pet)."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency. A monthly or daily frequency is expected. Option `None` assumes that the desired resampling has already been applied input dataset and will skip the resampling step.","optional":true,"default":"MS"},{"name":"window","schema":{"type":"number"},"description":"Averaging window length relative to the resampling frequency. For example, if `freq=\"MS\"`, i.e. a monthly resampling, the window is an integer number of months.","optional":true,"default":1},{"name":"dist","schema":{"type":"string"},"description":"Name of the univariate distribution, or a callable `rv_continuous` (see :py:mod:`scipy.stats`).","optional":true,"default":"gamma"},{"name":"method","schema":{"type":"string"},"description":"Name of the fitting method, such as `ML` (maximum likelihood), `APP` (approximate). The approximate method uses a deterministic function that does not involve any optimization, which can be sensitive to noise. `PWM` should be used with a `lmoments3` distribution.","optional":true,"default":"ML"},{"name":"fitkwargs","schema":{},"description":"Kwargs passed to ``xclim.indices.stats.fit`` used to impose values of certains parameters (`floc`, `fscale`). If method is `PWM`, `fitkwargs` should be empty, except for `floc` with `dist`=`gamma` which is allowed.","optional":true,"default":null},{"name":"cal_start","schema":{"type":"string"},"description":"Start date of the calibration period. A `DateStr` is expected, that is a `str` in format `\"YYYY-MM-DD\"`. Default option `None` means that the calibration period begins at the start of the input dataset.","optional":true,"default":null},{"name":"cal_end","schema":{"type":"string"},"description":"End date of the calibration period. A `DateStr` is expected, that is a `str` in format `\"YYYY-MM-DD\"`. Default option `None` means that the calibration period finishes at the end of the input dataset.","optional":true,"default":null},{"name":"params","schema":{"type":"string"},"description":"Fit parameters. The `params` can be computed using ``xclim.indices.stats.standardized_index_fit_params`` in advance. The output can be given here as input, and it overrides other options.","optional":true,"default":null}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"spi","summary":"Standardized Precipitation Index (SPI)","description":"Standardized Precipitation Index.\n\nComputes SPI at a given accumulation timescale using a gamma distribution\nfitted to the calibration period. Values below -1 indicate drought conditions;\nvalues above +1 indicate wet conditions.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"window","schema":{"type":"integer"},"description":"Accumulation window in months (1 = SPI-1, 3 = SPI-3, 6 = SPI-6).","optional":true,"default":1},{"name":"cal_start","schema":{"type":["string","null"]},"description":"Start date of the calibration period. A `DateStr` is expected, that is a `str` in format `\"YYYY-MM-DD\"`. Default option `None` means that the calibration period begins at the start of the input dataset.","optional":true,"default":null},{"name":"cal_end","schema":{"type":["string","null"]},"description":"End date of the calibration period. A `DateStr` is expected, that is a `str` in format `\"YYYY-MM-DD\"`. Default option `None` means that the calibration period finishes at the end of the input dataset.","optional":true,"default":null},{"name":"freq","schema":{"type":["string","null"]},"description":"Resampling frequency. A monthly or daily frequency is expected. Option `None` assumes that the desired resampling has already been applied input dataset and will skip the resampling step.","optional":true,"default":"MS"}],"returns":{"schema":{}}},{"id":"sqrt","summary":"Square root","description":"Computes the square root of a real number `x`, which is equal to calculating `x` to the power of *0.5*.\n\nA square root of x is a number a such that *`a² = x`*. Therefore, the square root is the inverse function of a to the power of 2, but only for *a >= 0*.\n\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math","math > exponential & logarithmic"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed square root.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0},{"arguments":{"x":1},"returns":1},{"arguments":{"x":9},"returns":3},{"arguments":{"x":null},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/SquareRoot.html","title":"Square root explained by Wolfram MathWorld"}],"process_graph":{"power":{"process_id":"power","arguments":{"base":{"from_parameter":"x"},"p":0.5},"result":true}}},{"id":"ssi","summary":"Standardized Streamflow Index (SSI)","description":"Streamflow over a moving window, normalized such that SSI averages to 0 for the calibration data. The window unit `X` is the minimal time period defined by the resampling frequency.","parameters":[{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Rate of river discharge."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency. A monthly or daily frequency is expected. Option `None` assumes that the desired resampling has already been applied input dataset and will skip the resampling step.","optional":true,"default":"MS"},{"name":"window","schema":{"type":"number"},"description":"Averaging window length relative to the resampling frequency. For example, if `freq=\"MS\"`, i.e. a monthly resampling, the window is an integer number of months.","optional":true,"default":1},{"name":"dist","schema":{"type":"string"},"description":"Name of the univariate distribution, or a callable `rv_continuous` (see :py:mod:`scipy.stats`).","optional":true,"default":"genextreme"},{"name":"method","schema":{"type":"string"},"description":"Name of the fitting method, such as `ML` (maximum likelihood), `APP` (approximate). The approximate method uses a deterministic function that does not involve any optimization. `PWM` should be used with a `lmoments3` distribution.","optional":true,"default":"ML"},{"name":"fitkwargs","schema":{},"description":"Kwargs passed to ``xclim.indices.stats.fit`` used to impose values of certain parameters (`floc`, `fscale`).","optional":true,"default":null},{"name":"cal_start","schema":{"type":"string"},"description":"Start date of the calibration period. A `DateStr` is expected, that is a `str` in format `\"YYYY-MM-DD\"`. Default option `None` means that the calibration period begins at the start of the input dataset.","optional":true,"default":null},{"name":"cal_end","schema":{"type":"string"},"description":"End date of the calibration period. A `DateStr` is expected, that is a `str` in format `\"YYYY-MM-DD\"`. Default option `None` means that the calibration period finishes at the end of the input dataset.","optional":true,"default":null},{"name":"params","schema":{"type":"string"},"description":"Fit parameters. The `params` can be computed using ``xclim.indices.stats.standardized_index_fit_params`` in advance. The output can be given here as input, and it overrides other options.","optional":true,"default":null}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"subtract","summary":"Subtraction of two numbers","description":"Subtracts argument `y` from the argument `x` (*`x - y`*) and returns the computed result.\n\nNo-data values are taken into account so that `null` is returned if any element is such a value.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it.","categories":["math"],"parameters":[{"name":"x","description":"The minuend.","schema":{"type":["number","null"]}},{"name":"y","description":"The subtrahend.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed result.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":5,"y":2.5},"returns":2.5},{"arguments":{"x":-2,"y":4},"returns":-6},{"arguments":{"x":1,"y":null},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Subtraction.html","title":"Subtraction explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"sum","summary":"Compute the sum by adding up numbers","description":"Sums up all elements in a sequential array of numbers and returns the computed sum.\n\nBy default no-data values are ignored. Setting `ignore_nodata` to `false` considers no-data values so that `null` is returned if any element is such a value.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it.","categories":["math","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not. Ignores them by default. Setting this flag to `false` considers no-data values so that `null` is returned if any value is such a value.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"The computed sum of the sequence of numbers.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[5,1]},"returns":6},{"arguments":{"data":[-2,4,2.5]},"returns":4.5},{"arguments":{"data":[1,null],"ignore_nodata":false},"returns":null},{"arguments":{"data":[100]},"returns":100},{"arguments":{"data":[null],"ignore_nodata":false},"returns":null},{"arguments":{"data":[]},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Sum.html","title":"Sum explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"tan","summary":"Tangent","description":"Computes the tangent of `x`. The tangent is defined to be the sine of x divided by the cosine of x.\n\nWorks on radians only.\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"An angle in radians.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed tangent of `x`.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Tangent.html","title":"Tangent explained by Wolfram MathWorld"}]},{"id":"tanh","summary":"Hyperbolic tangent","description":"Computes the hyperbolic tangent of `x`. The tangent is defined to be the hyperbolic sine of x divided by the hyperbolic cosine of x.\n\nWorks on radians only.\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"An angle in radians.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed hyperbolic tangent of `x`.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/HyperbolicTangent.html","title":"Hyperbolic tangent explained by Wolfram MathWorld"}]},{"id":"temperature_from_potential_temperature","summary":"Compute the temperature from potential temperature.","description":"Compute the temperature from potential temperature.\n\nParameters\n----------\nth: array-like | xarray.DataArray | FieldList | Field\n    Potential temperature (K)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\n\n\nThe computation is based on the following formula:\n\n.. math::\n\n   t = \\theta (\\frac{p}{10^{5}})^{\\kappa}\n\nwith :math:`\\kappa = R_{d}/c_{pd}` (see :data:`earthkit.meteo.constants.kappa`).","parameters":[{"name":"th","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit).","optional":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"temperature_from_saturation_vapour_pressure","summary":"Compute the temperature from saturation vapour pressure.","description":"Compute the temperature from saturation vapour pressure.\n\nParameters\n----------\nes: array-like | xarray.DataArray | FieldList | Field\n    :func:`saturation_vapour_pressure` (Pa)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Temperature (K). For zero ``es`` values returns nan.\n\n\nThe computation is always based on the \"water\" phase of\nthe :func:`saturation_vapour_pressure` formulation irrespective of the\nphase ``es`` was computed to.","parameters":[{"name":"es","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"temperature_on_dry_adiabat","summary":"Compute the temperature on a dry adiabat.","description":"Compute the temperature on a dry adiabat.\n\nParameters\n----------\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure on the dry adiabat (Pa)\nt_def: array-like | xarray.DataArray | FieldList | Field\n    Temperature defining the dry adiabat (K)\np_def: array-like | xarray.DataArray | FieldList | Field\n    Pressure defining the dry adiabat (Pa)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Temperature on the dry adiabat (K)\n\n\nThe computation is based on the following formula:\n\n.. math::\n\n   t = t_{def} (\\frac{p}{p_{def}})^{\\kappa}\n\nwith :math:`\\kappa =  R_{d}/c_{pd}` (see :data:`earthkit.meteo.constants.kappa`).","parameters":[{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"t_def","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"p_def","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"temperature_on_moist_adiabat","summary":"Compute the temperature on a moist adiabat (pseudoadiabat).","description":"Compute the temperature on a moist adiabat (pseudoadiabat).\n\nParameters\n----------\nept: array-like | xarray.DataArray | FieldList | Field\n    Equivalent potential temperature defining the moist adiabat (K)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure on the moist adiabat (Pa)\nept_method: str, optional\n    Specifies the computation method that was used to compute ``ept``. The possible\n    values are: \"ifs\", \"bolton35\", \"bolton39\".\n    (See :func:`ept_from_dewpoint` for details.)\nt_method: str, optional\n    Specifies the iteration method along the moist adiabat to find the temperature\n    for the given ``p`` pressure. The possible values are as follows:\n\n    * \"bisect\": a bisection method is used as defined in [Stipanuk1973]_\n    * \"newton\": Newtons's method is used as defined by Eq (2.6) in [DaviesJones2008]_.\n      For extremely hot and humid conditions (``ept`` > 800 K) depending on\n      ``ept_method`` the computation might not be carried out\n      and nan will be returned.\n\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Temperature on the moist adiabat (K). For values where the computation cannot\n    be carried out nan is returned.","parameters":[{"name":"ept","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"ept_method","schema":{"type":"string"},"optional":true,"default":"ifs"},{"name":"t_method","schema":{"type":"string"},"optional":true,"default":"bisect"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"text_begins","summary":"Text begins with another text","description":"Checks whether the text (also known as *string*) specified for `data` contains the text specified for `pattern` at the beginning. Both are expected to be encoded in UTF-8 by default. The no-data value `null` is passed through and therefore gets propagated.","categories":["texts","comparison"],"parameters":[{"name":"data","description":"Text in which to find something at the beginning.","schema":{"type":["string","null"]}},{"name":"pattern","description":"Text to find at the beginning of `data`. Regular expressions are not supported.","schema":{"type":"string"}},{"name":"case_sensitive","description":"Case sensitive comparison can be disabled by setting this parameter to `false`.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"`true` if `data` begins with `pattern`, false` otherwise.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"amet"},"returns":false},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"Lorem"},"returns":true},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"lorem"},"returns":false},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"lorem","case_sensitive":false},"returns":true},{"arguments":{"data":"Ä","pattern":"ä","case_sensitive":false},"returns":true},{"arguments":{"data":null,"pattern":"null"},"returns":null}]},{"id":"text_concat","summary":"Concatenate elements to a single text","description":"Merges text representations (also known as *string*) of a set of elements to a single text, having the separator between each element.","categories":["texts"],"parameters":[{"name":"data","description":"A set of elements. Numbers, boolean values and null values get converted to their (lower case) string representation. For example: `1` (integer), `-1.5` (number), `true` / `false` (boolean values)","schema":{"type":"array","items":{"type":["string","number","boolean","null"]}}},{"name":"separator","description":"A separator to put between each of the individual texts. Defaults to an empty string.","schema":{"type":["string","number","boolean","null"]},"default":"","optional":true}],"returns":{"description":"A string containing a string representation of all the array elements in the same order, with the separator between each element.","schema":{"type":"string"}},"examples":[{"arguments":{"data":["Hello","World"],"separator":" "},"returns":"Hello World"},{"arguments":{"data":[1,2,3,4,5,6,7,8,9,0]},"returns":"1234567890"},{"arguments":{"data":[null,true,false,1,-1.5,"ß"],"separator":"\n"},"returns":"null\ntrue\nfalse\n1\n-1.5\nß"},{"arguments":{"data":[2,0],"separator":1},"returns":"210"},{"arguments":{"data":[]},"returns":""}]},{"id":"text_contains","summary":"Text contains another text","description":"Checks whether the text (also known as *string*) specified for `data` contains the text specified for `pattern`. Both are expected to be encoded in UTF-8 by default. The no-data value `null` is passed through and therefore gets propagated.","categories":["texts","comparison"],"parameters":[{"name":"data","description":"Text in which to find something in.","schema":{"type":["string","null"]}},{"name":"pattern","description":"Text to find in `data`. Regular expressions are not supported.","schema":{"type":"string"}},{"name":"case_sensitive","description":"Case sensitive comparison can be disabled by setting this parameter to `false`.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"`true` if `data` contains the `pattern`, false` otherwise.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"openEO"},"returns":false},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"ipsum dolor"},"returns":true},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"Ipsum Dolor"},"returns":false},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"SIT","case_sensitive":false},"returns":true},{"arguments":{"data":"ÄÖÜ","pattern":"ö","case_sensitive":false},"returns":true},{"arguments":{"data":null,"pattern":"null"},"returns":null}]},{"id":"text_ends","summary":"Text ends with another text","description":"Checks whether the text (also known as *string*) specified for `data` contains the text specified for `pattern` at the end. Both are expected to be encoded in UTF-8 by default. The no-data value `null` is passed through and therefore gets propagated.","categories":["texts","comparison"],"parameters":[{"name":"data","description":"Text in which to find something at the end.","schema":{"type":["string","null"]}},{"name":"pattern","description":"Text to find at the end of `data`. Regular expressions are not supported.","schema":{"type":"string"}},{"name":"case_sensitive","description":"Case sensitive comparison can be disabled by setting this parameter to `false`.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"`true` if `data` ends with `pattern`, false` otherwise.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"amet"},"returns":true},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"AMET"},"returns":false},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"Lorem"},"returns":false},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"AMET","case_sensitive":false},"returns":true},{"arguments":{"data":"Ä","pattern":"ä","case_sensitive":false},"returns":true},{"arguments":{"data":null,"pattern":"null"},"returns":null}]},{"id":"tg10p","summary":"Days with mean temperature below the 10th percentile","description":"Number of days with mean temperature below the 10th percentile.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"tas_per","schema":{"type":"object","subtype":"datacube"},"description":"10th percentile of daily mean temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"bootstrap","schema":{"type":"boolean"},"description":"Flag to run bootstrapping of percentiles. Used by percentile_bootstrap decorator. Bootstrapping is only useful when the percentiles are computed on a part of the studied sample. This period, common to percentiles and the sample must be bootstrapped to avoid inhomogeneities with the rest of the time series. Do not enable bootstrap when there is no common period, otherwise it will provide the wrong results. Note that bootstrapping is computationally expensive.","optional":true,"default":false},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \"<\".","optional":true,"default":"<"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tg90p","summary":"Days with mean temperature above the 90th percentile","description":"Number of days with mean temperature above the 90th percentile.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"tas_per","schema":{"type":"object","subtype":"datacube"},"description":"90th percentile of daily mean temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"bootstrap","schema":{"type":"boolean"},"description":"Flag to run bootstrapping of percentiles. Used by percentile_bootstrap decorator. Bootstrapping is only useful when the percentiles are computed on a part of the studied sample. This period, common to percentiles and the sample must be bootstrapped to avoid inhomogeneities with the rest of the time series. Do not enable bootstrap when there is no common period, otherwise it will provide the wrong results. Note that bootstrapping is computationally expensive.","optional":true,"default":false},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tg_days_above","summary":"Number of days with mean temperature above a given threshold","description":"The number of days with mean temperature above a given threshold.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"10.0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tg_days_below","summary":"Number of days with mean temperature below a given threshold","description":"The number of days with mean temperature below a given threshold.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"10.0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \"<\".","optional":true,"default":"<"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tg_max","summary":"Maximum of mean temperature","description":"Maximum of daily mean temperature.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tg_mean","summary":"Mean temperature","description":"Mean of daily mean temperature.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tg_min","summary":"Minimum of mean temperature","description":"Minimum of daily mean temperature.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"thawing_degree_days","summary":"Thawing degree days","description":"The cumulative degree days for days when the average temperature is above a given threshold, typically 0°C.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tn10p","summary":"Days with minimum temperature below the 10th percentile","description":"Number of days with minimum temperature below the 10th percentile.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature."},{"name":"tasmin_per","schema":{"type":"object","subtype":"datacube"},"description":"10th percentile of daily minimum temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"bootstrap","schema":{"type":"boolean"},"description":"Flag to run bootstrapping of percentiles. Used by percentile_bootstrap decorator. Bootstrapping is only useful when the percentiles are computed on a part of the studied sample. This period, common to percentiles and the sample must be bootstrapped to avoid inhomogeneities with the rest of the time series. Do not enable bootstrap when there is no common period, otherwise it will provide the wrong results. Note that bootstrapping is computationally expensive.","optional":true,"default":false},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \"<\".","optional":true,"default":"<"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tn90p","summary":"Days with minimum temperature above the 90th percentile","description":"Number of days with minimum temperature above the 90th percentile.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmin_per","schema":{"type":"object","subtype":"datacube"},"description":"90th percentile of daily minimum temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"bootstrap","schema":{"type":"boolean"},"description":"Flag to run bootstrapping of percentiles. Used by percentile_bootstrap decorator. Bootstrapping is only useful when the percentiles are computed on a part of the studied sample. This period, common to percentiles and the sample must be bootstrapped to avoid inhomogeneities with the rest of the time series. Do not enable bootstrap when there is no common period, otherwise it will provide the wrong results. Note that bootstrapping is computationally expensive.","optional":true,"default":false},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tn_days_above","summary":"Number of days with minimum temperature above a given threshold","description":"The number of days with minimum temperature above a given threshold.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"20.0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tn_days_below","summary":"Number of days with minimum temperature below a given threshold","description":"The number of days with minimum temperature below a given threshold.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"-10.0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \"<\".","optional":true,"default":"<"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tn_max","summary":"Maximum of minimum temperature","description":"Maximum of daily minimum temperature.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tn_mean","summary":"Mean of minimum temperature","description":"Mean of daily minimum temperature.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tn_min","summary":"Minimum temperature","description":"Minimum of daily minimum temperature.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"trim_cube","summary":"Remove dimension labels with no-data values","description":"Removes dimension labels solely containing no-data values. If the dimension is irregular categorical then dimension labels in the middle can be removed.","categories":["cubes"],"parameters":[{"name":"data","description":"A data cube to trim.","schema":{"type":"object","subtype":"datacube"}}],"returns":{"description":"A trimmed data cube with the same dimensions. The dimension properties name, type, reference system and resolution remain unchanged. The number of dimension labels may decrease.","schema":{"type":"object","subtype":"datacube"}}},{"id":"tropical_nights","summary":"Tropical nights","description":"Number of days where minimum temperature is above a given threshold.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"20.0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tx10p","summary":"Days with maximum temperature below the 10th percentile","description":"Number of days with maximum temperature below the 10th percentile.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"tasmax_per","schema":{"type":"object","subtype":"datacube"},"description":"10th percentile of daily maximum temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"bootstrap","schema":{"type":"boolean"},"description":"Flag to run bootstrapping of percentiles. Used by percentile_bootstrap decorator. Bootstrapping is only useful when the percentiles are computed on a part of the studied sample. This period, common to percentiles and the sample must be bootstrapped to avoid inhomogeneities with the rest of the time series. Do not enable bootstrap when there is no common period, otherwise it will provide the wrong results. Note that bootstrapping is computationally expensive.","optional":true,"default":false},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \"<\".","optional":true,"default":"<"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tx90p","summary":"Days with maximum temperature above the 90th percentile","description":"Number of days with maximum temperature above the 90th percentile.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"tasmax_per","schema":{"type":"object","subtype":"datacube"},"description":"90th percentile of daily maximum temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"bootstrap","schema":{"type":"boolean"},"description":"Flag to run bootstrapping of percentiles. Used by percentile_bootstrap decorator. Bootstrapping is only useful when the percentiles are computed on a part of the studied sample. This period, common to percentiles and the sample must be bootstrapped to avoid inhomogeneities with the rest of the time series. Do not enable bootstrap when there is no common period, otherwise it will provide the wrong results. Note that bootstrapping is computationally expensive.","optional":true,"default":false},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tx_days_above","summary":"Number of days with maximum temperature above a given threshold","description":"The number of days with maximum temperature above a given threshold.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"25.0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tx_days_below","summary":"Number of days with maximum temperature below a given threshold","description":"The number of days with maximum temperature below a given threshold.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold temperature on which to base evaluation.","optional":true,"default":"25.0 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \"<\".","optional":true,"default":"<"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tx_max","summary":"Maximum temperature","description":"Maximum of daily maximum temperature.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tx_mean","summary":"Mean of maximum temperature","description":"Mean of daily maximum temperature.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tx_min","summary":"Minimum of maximum temperature","description":"Minimum of daily maximum temperature.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"tx_tn_days_above","summary":"Number of days with daily minimum and maximum temperatures exceeding thresholds","description":"Number of days with daily maximum and minimum temperatures above given thresholds.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum daily temperature."},{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"thresh_tasmin","schema":{"type":"string"},"description":"Threshold temperature for tasmin on which to base evaluation.","optional":true,"default":"22 degC"},{"name":"thresh_tasmax","schema":{"type":"string"},"description":"Threshold temperature for tasmax on which to base evaluation.","optional":true,"default":"30 degC"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"usda_hardiness_zones","summary":"USDA hardiness zones","description":"A climate indice based on a multi-year rolling average of the annual minimum temperature. Developed specifically to aid in determining plant suitability of geographic regions. The USDA classificationscheme divides categories into 10 degree Fahrenheit zones, with 5-degree Fahrenheit half-zones, starting from -65 degrees Fahrenheit and ending at 65 degrees Fahrenheit.","parameters":[{"name":"tasmin","schema":{"type":"object","subtype":"datacube"},"description":"Minimum temperature."},{"name":"window","schema":{"type":"number"},"description":"The length of the averaging window, in years.","optional":true,"default":30},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"vapour_pressure_from_mixing_ratio","summary":"Compute the vapour pressure from mixing ratio.","description":"Compute the vapour pressure from mixing ratio.\n\nParameters\n----------\nw: array-like | xarray.DataArray | FieldList | Field\n    Mixing ratio (kg/kg)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Vapour pressure (Pa)\n\n\nThe computation is based on the following formula:\n\n.. math::\n\n    e = \\frac{pw}{\\epsilon + w}\n\nwith :math:`\\epsilon =  R_{d}/R_{v}` (see :data:`earthkit.meteo.constants.epsilon`).","parameters":[{"name":"w","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: kg/kg (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"vapour_pressure_from_specific_humidity","summary":"Compute the vapour pressure from specific humidity.","description":"Compute the vapour pressure from specific humidity.\n\nParameters\n----------\nq: array-like | xarray.DataArray | FieldList | Field\n    Specific humidity (kg/kg)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Vapour pressure (Pa)\n\n\nThe computation is based on the following formula [Wallace2006]_:\n\n.. math::\n\n    e = \\frac{pq}{\\epsilon (1 + q(\\frac{1}{\\epsilon} -1 ))}\n\nwith :math:`\\epsilon =  R_{d}/R_{v}` (see :data:`earthkit.meteo.constants.epsilon`).","parameters":[{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: kg/kg (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"variance","summary":"Variance","description":"Computes the sample variance of an array of numbers by calculating the square of the standard deviation (see ``sd()``). It is defined to be the expectation of the squared deviation of a random variable from its expected value. Basically, it measures how far the numbers in the array are spread out from their average value.\n\nAn array without non-`null` elements resolves always with `null`.","categories":["math > statistics","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not. Ignores them by default. Setting this flag to `false` considers no-data values so that `null` is returned if any value is such a value.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"The computed sample variance.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[-1,1,3]},"returns":4},{"arguments":{"data":[2,3,3,null,4,4,5]},"returns":1.1},{"arguments":{"data":[-1,1,null,3],"ignore_nodata":false},"returns":null},{"description":"The input array is empty: return `null`.","arguments":{"data":[]},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Variance.html","title":"Variance explained by Wolfram MathWorld"}],"process_graph":{"mean":{"process_id":"mean","arguments":{"data":{"from_parameter":"data"}}},"apply":{"process_id":"apply","arguments":{"data":{"from_parameter":"data"},"process":{"process-graph":{"subtract":{"process_id":"subtract","arguments":{"x":{"from_parameter":"x"},"y":{"from_parameter":"context"}}},"power":{"process_id":"power","arguments":{"base":{"from_node":"subtract"},"p":2},"result":true}}},"context":{"from_node":"mean"}}},"mean2":{"process_id":"mean","arguments":{"data":{"from_node":"apply"},"ignore_nodata":{"from_parameter":"ignore_nodata"}},"result":true}}},{"id":"virtual_potential_temperature","summary":"Compute the virtual potential temperature from temperature and specific humidity.","description":"Compute the virtual potential temperature from temperature and specific humidity.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\nq: array-like | xarray.DataArray | FieldList | Field\n    Specific humidity (kg/kg)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Virtual potential temperature (K)\n\n\nThe computation is based on the following formula:\n\n.. math::\n\n    \\Theta_{v} = \\theta (1 + \\frac{1 - \\epsilon}{\\epsilon} q)\n\nwhere:\n\n    * :math:`\\Theta` is the :func:`potential_temperature`\n    * :math:`\\epsilon = R_{d}/R_{v}` (see :data:`earthkit.meteo.constants.epsilon`).","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: kg/kg (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"virtual_temperature","summary":"Compute the virtual temperature from temperature and specific humidity.","description":"Compute the virtual temperature from temperature and specific humidity.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)s\nq: array-like | xarray.DataArray | FieldList | Field\n    Specific humidity (kg/kg)\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Virtual temperature (K)\n\n\nThe computation is based on the following formula [Wallace2006]_:\n\n.. math::\n\n    t_{v} = t (1 + \\frac{1 - \\epsilon}{\\epsilon} q)\n\nwith :math:`\\epsilon = R_{d}/R_{v}` (see :data:`earthkit.meteo.constants.epsilon`).","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: kg/kg (converted automatically when the cube declares a compatible CF unit)."}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"warm_and_dry_days","summary":"Warm and dry days","description":"Number of days with temperature above a given percentile and precipitation below a given percentile.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature values."},{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"tas_per","schema":{"type":"object","subtype":"datacube"},"description":"Third quartile of daily mean temperature computed by month."},{"name":"pr_per","schema":{"type":"object","subtype":"datacube"},"description":"First quartile of daily total precipitation computed by month."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"warm_and_wet_days","summary":"Warm and wet days","description":"Number of days with temperature above a given percentile and precipitation above a given percentile.","parameters":[{"name":"tas","schema":{"type":"object","subtype":"datacube"},"description":"Mean daily temperature values."},{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"tas_per","schema":{"type":"object","subtype":"datacube"},"description":"Third quartile of daily mean temperature computed by month."},{"name":"pr_per","schema":{"type":"object","subtype":"datacube"},"description":"Third quartile of daily total precipitation computed by month."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"warm_spell_duration_index","summary":"Warm spell duration index","description":"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.","parameters":[{"name":"tasmax","schema":{"type":"object","subtype":"datacube"},"description":"Maximum daily temperature."},{"name":"tasmax_per","schema":{"type":"object","subtype":"datacube"},"description":"Percentile(s) of daily maximum temperature."},{"name":"window","schema":{"type":"number"},"description":"Minimum number of days with temperature above threshold to qualify as a warm spell.","optional":true,"default":6},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true},{"name":"bootstrap","schema":{"type":"boolean"},"description":"Flag to run bootstrapping of percentiles. Used by percentile_bootstrap decorator. Bootstrapping is only useful when the percentiles are computed on a part of the studied sample. This period, common to percentiles and the sample must be bootstrapped to avoid inhomogeneities with the rest of the time series. Do not enable bootstrap when there is no common period, otherwise it will provide the wrong results. Note that bootstrapping is computationally expensive.","optional":true,"default":false},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">\".","optional":true,"default":">"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"water_cycle_intensity","summary":"Water cycle intensity","description":"The sum of precipitation and actual evapotranspiration.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Precipitation flux."},{"name":"evspsbl","schema":{"type":"object","subtype":"datacube"},"description":"Actual evapotranspiration flux."},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"wet_bulb_potential_temperature_from_dewpoint","summary":"Compute the pseudo adiabatic wet bulb potential temperature from dewpoint.","description":"Compute the pseudo adiabatic wet bulb potential temperature from dewpoint.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\ntd: array-like | xarray.DataArray | FieldList | Field\n    Dewpoint (K)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\nept_method: str, optional\n    Specifies the computation method for the equivalent potential temperature.\n    The possible values are: \"ifs\", \"bolton35\", \"bolton39\".\n    (See :func:`ept_from_dewpoint` for details.)\nt_method: str, optional\n    Specifies the method to find the temperature along the moist adiabat defined\n    by the equivalent potential temperature. The possible values are as follows:\n\n    * \"direct\": the rational formula defined by Eq (3.8) in [DaviesJones2008]_ is used\n    * \"bisect\": :func:`temperature_on_moist_adiabat` with ``t_method`` = \"bisect\" is used\n    * \"newton\": :func:`temperature_on_moist_adiabat` with ``t_method`` = \"newton\" is used\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Wet bulb potential temperature (K)\n\n\nThe computation is based on Normand's rule [Wallace2006]_ (Chapter 3.5.6):\n\n* first the equivalent potential temperature is computed with the given\n  ``ept_method`` (using :func:`ept_from_dewpoint`). This defines the moist adiabat.\n* then the wet bulb potential temperature is determined as the temperature at\n  pressure :math:`10^{5}` Pa on the moist adiabat with the given ``t_method``.","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"td","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"ept_method","schema":{"type":"string"},"optional":true,"default":"ifs"},{"name":"t_method","schema":{"type":"string"},"optional":true,"default":"direct"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"wet_bulb_potential_temperature_from_specific_humidity","summary":"Compute the pseudo adiabatic wet bulb potential temperature from specific humidity.","description":"Compute the pseudo adiabatic wet bulb potential temperature from specific humidity.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\nq: array-like | xarray.DataArray | FieldList | Field\n    Specific humidity (kg/kg)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\nept_method: str, optional\n    Specifies the computation method for the equivalent potential temperature.\n    The possible values are: \"ifs\", \"bolton35\", \"bolton39\".\n    (See :func:`ept_from_dewpoint` for details.)\nt_method: str, optional\n    Specifies the method to find the temperature along the moist adiabat\n    defined by the equivalent potential temperature. The possible values are as follows:\n\n    * \"direct\": the rational formula defined by Eq (3.8) in [DaviesJones2008]_ is used\n    * \"bisect\": :func:`temperature_on_moist_adiabat` with ``t_method`` = \"bisect\" is used\n    * \"newton\": :func:`temperature_on_moist_adiabat` with ``t_method`` = \"newton\" is used\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Wet bulb potential temperature (K)\n\n\nThe computations are the same as in\n:func:`wet_bulb_potential_temperature_from_dewpoint`\n(the dewpoint is computed from q with :func:`dewpoint_from_specific_humidity`).","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: kg/kg (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"ept_method","schema":{"type":"string"},"optional":true,"default":"ifs"},{"name":"t_method","schema":{"type":"string"},"optional":true,"default":"direct"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"wet_bulb_temperature_from_dewpoint","summary":"Compute the pseudo adiabatic wet bulb temperature from dewpoint.","description":"Compute the pseudo adiabatic wet bulb temperature from dewpoint.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\ntd: array-like | xarray.DataArray | FieldList | Field\n    Dewpoint (K)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\nept_method: str, optional\n    Specifies the computation method for the equivalent potential temperature.\n    The possible values are: \"ifs\", \"bolton35\", \"bolton39\".\n    (See :func:`ept_from_dewpoint` for details.)\nt_method: str, optional\n    Specifies the method to find the temperature along the moist adiabat defined\n    by the equivalent potential temperature. The possible values are as follows:\n\n    * \"bisect\": :func:`temperature_on_moist_adiabat` with ``t_method`` = \"bisect\" is used\n    * \"newton\": :func:`temperature_on_moist_adiabat` with ``t_method`` = \"newton\" is used\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Wet bulb temperature (K)\n\n\nThe computation is based on Normand's rule [Wallace2006]_ (Chapter 3.5.6):\n\n* first the equivalent potential temperature is computed with the given\n  ``ept_method`` (using :func:`ept_from_dewpoint`). This defines the moist adiabat.\n* then the wet bulb potential temperature is determined as the temperature at\n  pressure ``p`` on the moist adiabat with the given ``t_method``.","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"td","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"ept_method","schema":{"type":"string"},"optional":true,"default":"ifs"},{"name":"t_method","schema":{"type":"string"},"optional":true,"default":"bisect"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"wet_bulb_temperature_from_specific_humidity","summary":"Compute the pseudo adiabatic wet bulb temperature from specific humidity.","description":"Compute the pseudo adiabatic wet bulb temperature from specific humidity.\n\nParameters\n----------\nt: array-like | xarray.DataArray | FieldList | Field\n    Temperature (K)\nq: array-like | xarray.DataArray | FieldList | Field\n    Specific humidity (kg/kg)\np: array-like | xarray.DataArray | FieldList | Field\n    Pressure (Pa)\nept_method: str, optional\n    Specifies the computation method for the equivalent potential temperature.\n    The possible values are: \"ifs\", \"bolton35\", \"bolton39\".\n    (See :func:`ept_from_dewpoint` for details.)\nt_method: str, optional\n    Specifies the method to find the temperature along the moist adiabat\n    defined by the equivalent potential temperature. The possible values are\n    as follows:\n\n    * \"bisect\": :func:`temperature_on_moist_adiabat` with ``t_method`` = \"bisect\" is used\n    * \"newton\": :func:`temperature_on_moist_adiabat` with ``t_method`` = \"newton\" is used\n\nReturns\n-------\narray-like | xarray.DataArray | FieldList | Field\n    Wet bulb temperature (K)\n\n\nThe computation is based on Normand's rule [Wallace2006]_ (Chapter 3.5.6):\n\n* first the equivalent potential temperature is computed with the given\n  ``ept_method`` (using :func:`ept_from_dewpoint`). This defines the moist adiabat.\n* then the wet bulb potential temperature is determined as the temperature at\n  pressure ``p`` on the moist adiabat with the given ``t_method``.","parameters":[{"name":"t","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: K (converted automatically when the cube declares a compatible CF unit)."},{"name":"q","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: kg/kg (converted automatically when the cube declares a compatible CF unit)."},{"name":"p","schema":{"type":"object","subtype":"datacube"},"description":"Expected unit: Pa (converted automatically when the cube declares a compatible CF unit)."},{"name":"ept_method","schema":{"type":"string"},"optional":true,"default":"ifs"},{"name":"t_method","schema":{"type":"string"},"optional":true,"default":"bisect"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"wet_prcptot","summary":"Total accumulated precipitation (solid and liquid) during wet days","description":"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.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Total precipitation flux [mm d-1], [mm week-1], [mm month-1] or similar."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold over which precipitation starts being cumulated.","optional":true,"default":"1 mm/day"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"wet_spell_frequency","summary":"Wet spell frequency","description":"The frequency of wet periods of `N` days or more, during which the accumulated or maximum precipitation over a given time window of days is equal or above a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"thresh","schema":{"type":"string"},"description":"Precipitation amount over which a period is considered dry. The value against which the threshold is compared depends on `op`.","optional":true,"default":"1.0 mm"},{"name":"window","schema":{"type":"number"},"description":"Minimum length of the spells.","optional":true,"default":3},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true},{"name":"op","schema":{"type":"string"},"description":"Operation to perform on the window. Default is \"sum\", which checks that the sum of accumulated precipitation over the whole window is more than the threshold. \"min\" checks that the maximal daily precipitation amount within the window is more than the threshold. This is the same as verifying that each individual day is above the threshold.","optional":true,"default":"sum"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"wet_spell_max_length","summary":"Wet spell maximum length","description":"The maximum length of a wet period of `N` days or more, during which the accumulated or maximum precipitation over a given time window of days is equal or above a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"thresh","schema":{"type":"string"},"description":"Accumulated precipitation value over which a period is considered wet.","optional":true,"default":"1.0 mm"},{"name":"window","schema":{"type":"number"},"description":"Number of days when the maximum or accumulated precipitation is over threshold.","optional":true,"default":1},{"name":"op","schema":{"type":"string"},"description":"Reduce operation. `min` means that all days within the minimum window must exceed the threshold. `sum` means that the accumulated precipitation within the window must exceed the threshold. In all cases, the whole window is marked a part of a wet spell.","optional":true,"default":"sum"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"wet_spell_total_length","summary":"Wet spell total length","description":"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 equal or above a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"thresh","schema":{"type":"string"},"description":"Accumulated precipitation value over which a period is considered wet.","optional":true,"default":"1.0 mm"},{"name":"window","schema":{"type":"number"},"description":"Number of days when the maximum or accumulated precipitation is over the threshold.","optional":true,"default":3},{"name":"op","schema":{"type":"string"},"description":"Reduce operation. `min` means that all days within the minimum window must exceed the threshold. `sum` means that the accumulated precipitation within the window must exceed the threshold. In all cases, the whole window is marked a part of a wet spell.","optional":true,"default":"sum"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"resample_before_rl","schema":{"type":"boolean"},"description":"Determines if the resampling should take place before or after the run length encoding (or a similar algorithm) is applied to runs.","optional":true,"default":true}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"wetdays","summary":"Number of wet days","description":"The number of days with daily precipitation at or above a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"thresh","schema":{"type":"string"},"description":"Precipitation value over which a day is considered wet.","optional":true,"default":"1.0 mm/day"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">=\".","optional":true,"default":">="}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"wetdays_prop","summary":"Proportion of wet days","description":"The proportion of days with daily precipitation at or above a given threshold.","parameters":[{"name":"pr","schema":{"type":"object","subtype":"datacube"},"description":"Daily precipitation."},{"name":"thresh","schema":{"type":"string"},"description":"Precipitation value over which a day is considered wet.","optional":true,"default":"1.0 mm/day"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"YS"},{"name":"op","schema":{"type":"string"},"description":"Comparison operation. Default: \">=\".","optional":true,"default":">="}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"windy_days","summary":"Windy days","description":"Number of days with surface wind speed at or above threshold.","parameters":[{"name":"sfcWind","schema":{"type":"object","subtype":"datacube"},"description":"Daily average near-surface wind speed."},{"name":"thresh","schema":{"type":"string"},"description":"Threshold average near-surface wind speed on which to base evaluation.","optional":true,"default":"10.8 m s-1"},{"name":"freq","schema":{"type":"string"},"description":"Resampling frequency.","optional":true,"default":"MS"}],"returns":{"schema":{"type":"object","subtype":"datacube"}}},{"id":"xor","summary":"Logical XOR (exclusive or)","description":"Checks if **exactly one** of the values is true. If a component is `null`, the result will be `null` if the outcome is ambiguous.\n\n**Truth table:**\n\n```\na \\ b || null | false | true\n----- || ---- | ----- | -----\nnull  || null | null  | null\nfalse || null | false | true\ntrue  || null | true  | false\n```","categories":["logic"],"parameters":[{"name":"x","description":"A boolean value.","schema":{"type":["boolean","null"]}},{"name":"y","description":"A boolean value.","schema":{"type":["boolean","null"]}}],"returns":{"description":"Boolean result of the logical XOR.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":true,"y":true},"returns":false},{"arguments":{"x":false,"y":false},"returns":false},{"arguments":{"x":true,"y":false},"returns":true},{"arguments":{"x":true,"y":null},"returns":null},{"arguments":{"x":false,"y":null},"returns":null}],"process_graph":{"not_x":{"process_id":"not","arguments":{"x":{"from_parameter":"x"}}},"not_y":{"process_id":"not","arguments":{"x":{"from_parameter":"y"}}},"and1":{"process_id":"and","arguments":{"x":{"from_node":"not_x"},"y":{"from_parameter":"y"}}},"and2":{"process_id":"and","arguments":{"x":{"from_parameter":"x"},"y":{"from_node":"not_y"}}},"or":{"process_id":"or","arguments":{"x":{"from_node":"and1"},"y":{"from_node":"and2"}},"result":true}}}],"links":[{"rel":"self","href":"https://climate-demo.dhis2.org/ocs/processes","type":"application/json"}]}