Skip to content

Commit

Permalink
Add profiles (#82)
Browse files Browse the repository at this point in the history
* Add profiles
  • Loading branch information
m-mohr authored Dec 12, 2023
1 parent 172284c commit 10b68ce
Show file tree
Hide file tree
Showing 8 changed files with 926 additions and 5 deletions.
15 changes: 11 additions & 4 deletions .vuepress/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,24 @@ const versions = [
{text: 'Service Providers', items: [
{text: 'Getting Started', link: 'developers/backends/getting-started.html'},
{text: 'Performance Guide', link: 'developers/backends/performance.html'},
{text: 'Open Data Cube', link: 'developers/backends/opendatacube.html'}
{text: 'Open Data Cube', link: 'developers/backends/opendatacube.html'},
{text: 'Profiles', link: 'developers/profiles/index.html'}
]},
{text: 'Client Developers', items: [
{text: 'Getting Started', link: 'developers/clients/getting-started.html'},
{text: 'Library Guidelines', link: 'developers/clients/library-guidelines.html'}
]},
{text: 'API', link: 'developers/api/reference.html'},
{text: 'Processes', link: 'processes.html'},
{text: 'API', items: [
{text: 'Reference', link: 'developers/api/reference.html'},
{text: 'Profiles', link: 'developers/profiles/api.html'}
]},
{text: 'Processes', items: [
{text: 'Reference', link: 'processes.html'},
{text: 'Profiles', link: 'developers/profiles/processes.html'}
]},
{text: 'Error Codes', link: 'developers/api/errors.html'},
{text: 'Authentication', link: 'authentication.html'},
{text: 'UDFs', link: 'udfs.html'}
{text: 'UDFs', link: 'udfs.html'},
]
},
{
Expand Down
3 changes: 2 additions & 1 deletion documentation/1.0/developers/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@ As an overview, the openEO API specifies how to
- download (intermediate) results, and
- manage user content including billing.


The API is defined as an [OpenAPI 3.0](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.1.md) YAML file.

The API and processes are grouped into [compliance profiles](./profiles/README.md).

## Additional information

* [Code of Conduct](/documentation/code-of-conduct.md)
Expand Down
2 changes: 2 additions & 0 deletions documentation/1.0/developers/backends/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ For example, you could start by implementing the following endpoints in the firs
* Data processing: `POST /result`
* Authentication (if required): `GET /credentials/basic`

A more detailed recommendation about the endpoints and processes to implement can be found in the [API and Processes profiles](../profiles/README.md).

Afterwards you can already start experimenting with your first process graphs and process EO data with our client libraries on your back-end.

*More information will follow soon, for example about back-end compliance testing.*
6 changes: 6 additions & 0 deletions documentation/1.0/developers/profiles/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# openEO Profiles

We've defined requirements grouped into a set of profiles for the openEO API and the openEO Processes. This helps to classify the implementation status of an openEO instance and gives recommendations to implementors which functionality to prioritize.

* [API Profiles](api.md)
* [Process Profiles](processes.md)
576 changes: 576 additions & 0 deletions documentation/1.0/developers/profiles/api.md

Large diffs are not rendered by default.

Binary file added documentation/1.0/developers/profiles/api.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
329 changes: 329 additions & 0 deletions documentation/1.0/developers/profiles/processes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,329 @@
# Process Profiles

The following image provides an overview of the openEO Processes profiles.
The minimal profile that allows an openEO implementation to be called "openEO-compliant" is *L1 Minimal*.

<figure>
<img src="./processes.png" alt="The hierarchy of openEO Processes profiles: L1 Minimal -> L2 Recommended (with sub-profiles) -> L2A/B Raster/Vector -> L3 Advanced (with sub-profiles) -> L4 Above and Beyond">
<figcaption>An overview of the openEO Processes profiles.</figcaption>
</figure>

- *L1 Minimal* ensures that the openEO implementation has a minimal set of functionality which allow users to execute basic use-cases.
- *L2 Recommended* add functionality that we recommend to be available so that users can more effectively make use of the openEO implementation.
- *L3 Advanced* allows users to execute more advanced use cases.
- *L4 Above and Beyond* adds very specific and complex requirements for very specific and highly advanced use cases.

There are various sub-profiles in L2 (e.g., L2-Date) and L3 (e.g., L3-ML) that add a specific set of functionalities centered around specific needs such as date/time manipulation or execution of machine learning workflows.

In the following chapter you can find a list of requirements per profile.

## Requirements per Profile

::: tip Note
Missing experimental processes should (by default) lead to a "warning", but not lead to a rejection of that level in openEO.
:::

### L1: Minimal

- **`absolute`**
- **`add`**
- **`and`**
- **`apply`**
- **`apply_dimension`**
- All dimensions that your datacubes can include are supported - x and y can usually be excluded
- **`arccos`**
- **`arcsin`**
- **`arctan`**
- **`array_concat`**
- **`array_create`**
- **`array_element`**
- **`between`**
- **`ceil`**
- **`clip`**
- **`constant`**
- **`cos`**
- **`divide`**
- **`e`**
- **`eq`**
- **`exp`**
- **`first`**
- **`floor`**
- **`gt`**
- **`gte`**
- **`int`**
- **`last`**
- **`ln`**
- **`load_collection`**
- Parameter `temporal_extent`: All temporal formats are supported (date-time and date)
- **`log`**
- **`lt`**
- **`lte`**
- **`max`**
- **`mean`**
- **`median`**
- **`min`**
- **`mod`**
- **`multiply`**
- **`neq`**
- **`not`**
- **`or`**
- **`pi`**
- **`power`**
- **`product`**
- **`quantiles`**
- **`reduce_dimension`**
- Parameter `reducer`: At least all processes (up to L1) in the category `reducer` that accept an array as input and return a single value as output can be used (also in a chain of processes).
- Parameter `dimension`: All dimensions that your datacubes can include are supported - x and y are excluded as they are handled with reduce_spatial
- **`round`**
- **`save_result`**
- **`sd`**
- **`sgn`**
- **`sin`**
- **`sqrt`**
- **`subtract`**
- **`sum`**
- **`tan`**
- **`variance`**

### L2: Recommended

- **`add_dimension`**
- Parameter `name`: All suitable dimensions are supported
- **`aggregate_temporal`**
- Parameter `reducer`: At least all processes (up to the level of this requirement) in the category `reducer` that accept an array as input and return a single value as output can be used (also in a chain of processes).
- Parameter `reducer`: Supports access to labels in the callback
- Parameter `dimension`: All suitable dimensions are supported
- **`aggregate_temporal_period`**
- Parameter `reducer`: At least all processes (up to the level of this requirement) in the category `reducer` that accept an array as input and return a single value as output can be used (also in a chain of processes).
- Parameter `reducer`: Supports access to labels in the callback
- Parameter `dimension`: All suitable dimensions are supported
- Parameter `period`: `enum` reflects implemention (all values are supported)
- **`all`**
- **`any`**
- **`apply_dimension`**
- Parameter `process`: Supports access to labels in the callback
- **`arcosh`**
- **`arctan2`**
- **`array_element`**
- Supports labeled arrays
- **`array_find`**
- **`arsinh`**
- **`artanh`**
- **`cosh`**
- **`count`**
- **`dimension_labels`**
- Parameter `dimension`: All suitable dimensions are supported
- **`drop_dimension`**
- Parameter `name`: All suitable dimensions are supported
- **`extrema`**
- **`filter_bbox`**
- **`filter_temporal`**
- Parameter `dimension`: All suitable dimensions are supported
- All temporal formats are supported (date-time and date)
- **`if`**
- **`inspect`** (experimental)
- Parameter `level`: `enum` reflects implemention (all values are supported)
- **`is_nan`**
- **`is_nodata`**
- **`is_valid`**
- **`linear_scale_range`**
- **`nan`** (experimental)
- **`normalized_difference`**
- **`reduce_dimension`**
- Parameter `reducer`: At least all processes (up to L2) in the category `reducer` that accept an array as input and return a single value as output can be used (also in a chain of processes).
- Parameter `reducer`: Supports access to labels in the callback
- **`rename_dimension`**
- **`rename_labels`**
- Parameter `dimension`: All dimensions that your datacubes can include are supported - x and y can usually be excluded
- **`sinh`**
- **`sort`**
- **`tanh`**
- **`xor`**

### L2A: Recommended Raster

- **`aggregate_spatial`**
- Parameter `reducer`: At least all processes (up to the level of this requirement) in the category `reducer` that accept an array as input and return a single value as output can be used (also in a chain of processes).
- **`apply_kernel`**
- Parameter `border`: `enum` reflects implemention (all values are supported)
- **`filter_bands`**
- Supports filtering by band name
- **`filter_spatial`**
- **`load_collection`**
- Parameter `bands`: Supports filtering by band name and common name
- **`mask`**
- **`mask_polygon`**
- **`resample_spatial`**
- Parameter `method`: `enum` reflects implemention (all values are supported)

### L2B: Recommended Vector

- **`filter_vector`** (experimental)
- **`vector_buffer`** (experimental)
- **`vector_reproject`** (experimental)

### L2-Date: Date & Time manipulation

- **`date_between`** (experimental)
- **`date_difference`** (experimental)
- **`date_shift`** (experimental)

### L2-Text: Text manipulation

- **`text_begins`**
- **`text_concat (text_merge)`**
- **`text_contains`**
- **`text_ends`**

### L3: Advanced

- **`add_dimension`**
- Parameter `type`: `enum` reflects implemention (all values are supported)
- **`aggregate_spatial`**
- Parameter `reducer`: Supports access to labels in the callback
- Parameter `context`: is supported and passed to the callback
- **`aggregate_spatial_window`** (experimental)
- **`aggregate_temporal`**
- Parameter `context`: is supported and passed to the callback
- All temporal formats are supported (date-time, date and time)
- **`aggregate_temporal_period`**
- Parameter `context`: is supported and passed to the callback
- **`apply`**
- Parameter `process`: At least all processes (up to the level of this requirement) in the categories `comparison`, `logic` and `math` can be used (also in a chain of processes).
- Parameter `context`: is supported and passed to the callback
- **`apply_dimension`**
- Parameter `process`: At least all processes (up to the level of this requirement) in the categories `array`, `comparison`, `logic` and `math` can be used (also in a chain of processes).
- Parameter `context`: is supported and passed to the callback
- **`apply_neighborhood`**
- Parameter `process`: Supports access to labels in the callback
- Parameter `context`: is supported and passed to the callback
- Parameter `data`: All listed label types supported.
- Parameter `size` / `overlap`: Units `m`, `px` and `null` are supported
- **`array_append`**
- Supports labeled arrays
- **`array_apply`**
- Parameter `process`: Supports access to labels in the callback
- Parameter `context`: is supported and passed to the callback
- Supports labeled arrays
- **`array_concat`**
- Supports labeled arrays
- **`array_contains`**
- **`array_create_labeled`** (experimental)
- **`array_filter`**
- Parameter `context`: is supported and passed to the callback
- Supports labeled arrays
- **`array_find_label`** (experimental)
- **`array_interpolate_linear`**
- Supports labeled arrays
- **`array_labels`**
- **`array_modify`** (experimental)
- Supports labeled arrays
- **`cloud_detection`** (experimental)
- **`count`**
- Parameter `context`: is supported and passed to the callback
- **`create_data_cube (create_raster_cube)`**
- **`cummax`** (experimental)
- **`cummin`** (experimental)
- **`cumproduct`** (experimental)
- **`cumsum`** (experimental)
- **`filter_bands`**
- Supports filtering by common name
- **`filter_labels`** (experimental)
- Parameter `context`: is supported and passed to the callback
- Parameter `dimension`: All suitable dimensions are supported
- **`flatten_dimensions`** (experimental)
- **`is_infinite`** (experimental)
- **`load_collection`**
- Parameter `properties`: Supports querying by queryables defined via the API.
- **`load_geojson`** (experimental)
- **`load_stac (load_result)`** (experimental)
- Supports loading from STAC API - Features.
- Supports loading from STAC API - Item Search.
- Supports loading from static STAC.
- Parameter `temporal_extent`: All temporal formats are supported (date-time and date)
- Parameter `bands`: Supports filtering by band name and common name
- **`merge_cubes`**
- Parameter `context`: is supported and passed to the callback
- **`ndvi`**
- Supports common names as band names
- **`order`**
- **`rearrange`**
- **`reduce_dimension`**
- Parameter `context`: is supported and passed to the callback
- **`reduce_spatial`** (experimental)
- Parameter `reducer`: At least all processes (up to the level of this requirement) in the category `reducer` that accept an array as input and return a single value as output can be used (also in a chain of processes).
- Parameter `reducer`: Supports access to labels in the callback
- Parameter `context`: is supported and passed to the callback
- **`resample_cube_spatial`**
- Parameter `method`: `enum` reflects implemention (all values are supported)
- **`resample_cube_temporal`**
- Parameter `dimension`: All suitable dimensions are supported
- **`resample_spatial`**
- Parameter `align`: `enum` reflects implemention (all values are supported)
- **`trim_cube`**
- **`unflatten_dimensions`** (experimental)
- **`vector_to_random_points`** (experimental)
- **`vector_to_regular_points`** (experimental)

### L3-ML: Machine Learning

- **`fit_curve`** (experimental)
- **`fit_regr_random_forest`**
- **`load_ml_model`** (experimental)
- **`predict_curve`** (experimental)
- **`save_ml_model`** (experimental)

### L3-UDF: User-Defined Functions

- **`run_udf`**
- Parameter `context`: is supported and passed to the callback
- **`run_udf_externally`** (experimental)

### L3-Clim: Cimatology

- **`anomaly`**
- **`climatological_normal`**

### L3-ARD: Analysis-Ready Data

- **`ard_normalized_radar_backscatter`** (experimental)
- has been tested on > 100x100km at 10m resolution (or equivalent)
- Custom parameters are provided via the `options` parameter
- **`ard_surface_reflectance`** (experimental)
- Parameter `atmospheric_correction_method`: `enum` reflects implemention (all values are supported)
- Parameter `cloud_detection_method`: `enum` reflects implemention (all values are supported)
- Custom parameters are provided via the `atmospheric_correction_options` and/or `cloud_detection_options` parameters

### L4: Above and Beyond

- **`aggregate_spatial`**
- Parameter `reducer`: At least all processes (up to the level of this requirement) in the categories `array`, `comparison`, `logic` and `math` can be used (also in a chain of processes).
- **`aggregate_temporal`**
- Parameter `reducer`: At least all processes (up to the level of this requirement) in the categories `array`, `comparison`, `logic` and `math` can be used (also in a chain of processes).
- **`aggregate_temporal_period`**
- Parameter `reducer`: At least all processes (up to the level of this requirement) in the categories `array`, `comparison`, `logic` and `math` can be used (also in a chain of processes).
- **`apply_neighborhood`**
- Parameter `process`: At least all processes (up to the level of this requirement) in the categories `array`, `comparison`, `logic` and `math` can be used (also in a chain of processes).
- **`apply_polygon (chunk_polygon)`** (experimental)
- **`array_apply`**
- Parameter `process`: At least all processes (up to the level of this requirement) in the categories `comparison`, `logic` and `math` can be used (also in a chain of processes).
- **`atmospheric_correction`** (experimental)
- Parameter `method`: `enum` reflects implemention (all values are supported)
- Custom parameters are provided via the `options` parameter
- **`filter_bands`**
- Supports filtering by wavelength
- **`filter_bbox`**
- Parameter `extent`: Supports filtering by base/height
- **`load_collection`**
- Parameter `spatial_extent`: Supports filtering by base/height
- **`load_stac (load_result)`** (experimental)
- Parameter `spatial_extent`: Supports filtering by base/height
- **`load_uploaded_files`** (experimental)
- **`load_url`** (experimental)
- **`reduce_dimension`**
- Parameter `reducer`: At least all processes (up to the level of this requirement) in the categories `array`, `comparison`, `logic` and `math` can be used (also in a chain of processes).
- **`reduce_spatial`** (experimental)
- Parameter `reducer`: At least all processes (up to the level of this requirement) in the categories `array`, `comparison`, `logic` and `math` can be used (also in a chain of processes).
- **`sar_backscatter`** (experimental)
- Parameter `coefficient`: `enum` reflects implemention (all values are supported)
- Custom parameters are provided via the `options` parameter
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 10b68ce

Please sign in to comment.