From cbb9a6df7592a6cc4042b5f877483d5e168a70eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Tue, 17 Sep 2024 11:49:52 +0200 Subject: [PATCH 01/18] feat: semantic pre-evaluation of temporal filter ops :gift: --- demo/extras/filter_tests.ipynb | 1071 ++++++++++++++ demo/figures/semantic_temp_filter_I.png | Bin 0 -> 114598 bytes demo/figures/semantic_temp_filter_II.png | Bin 0 -> 94946 bytes demo/processor.ipynb | 25 +- semantique/processor/arrays.py | 1618 ++++++++++++++++++++-- semantique/processor/core.py | 434 +++++- semantique/processor/operators.py | 133 +- semantique/recipe.py | 230 +-- 8 files changed, 3224 insertions(+), 287 deletions(-) create mode 100644 demo/extras/filter_tests.ipynb create mode 100644 demo/figures/semantic_temp_filter_I.png create mode 100644 demo/figures/semantic_temp_filter_II.png diff --git a/demo/extras/filter_tests.ipynb b/demo/extras/filter_tests.ipynb new file mode 100644 index 00000000..8fa33f98 --- /dev/null +++ b/demo/extras/filter_tests.ipynb @@ -0,0 +1,1071 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# test suite for filter option\n", + "import copy\n", + "import json\n", + "import geopandas as gpd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "import warnings\n", + "import xarray as xr\n", + "\n", + "import semantique as sq\n", + "from semantique.processor.core import QueryProcessor, FilterProcessor" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# data cube connection with specific timestamps\n", + "import pystac\n", + "from pystac_client import Client\n", + "from shapely.geometry import box\n", + "\n", + "# define temporal & spatial range to perform STAC query\n", + "xmin, ymin, xmax, ymax = -2.75, 47.25, -2.25, 47.75\n", + "aoi = box(xmin, ymin, xmax, ymax)\n", + "t_range = [\"2019-07-15\", \"2020-08-01\"]\n", + "\n", + "# STAC-based metadata retrieval\n", + "catalog = Client.open(\"https://earth-search.aws.element84.com/v1\")\n", + "query = catalog.search(\n", + " collections=\"sentinel-2-l2a\", \n", + " datetime=t_range, \n", + " limit=100, \n", + " intersects=aoi\n", + ")\n", + "stac_json = query.item_collection_as_dict()\n", + "gdf = gpd.GeoDataFrame.from_features(stac_json, \"epsg:4326\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "class TestSuite:\n", + " def __init__(self):\n", + " # create an empty list to store test cases\n", + " self.tests = []\n", + " # define the maximum number of items in the result\n", + " self.max_items = None\n", + " # define general context config\n", + " with open(\"../files/mapping.json\", \"r\") as file:\n", + " mapping = sq.mapping.Semantique(json.load(file))\n", + " with open(\"../files/layout_gtiff.json\", \"r\") as file:\n", + " dc = sq.datacube.GeotiffArchive(json.load(file), src = \"../files/layers_gtiff.zip\")\n", + " space = sq.SpatialExtent(gpd.read_file(\"../files/footprint.geojson\"))\n", + " time = sq.TemporalExtent(\"2019-01-01\", \"2020-12-31\")\n", + " self.context = {\n", + " \"datacube\": dc, \n", + " \"mapping\": mapping,\n", + " \"space\": space,\n", + " \"time\": time,\n", + " \"crs\": 3035, \n", + " \"tz\": \"UTC\", \n", + " \"spatial_resolution\": [-10, 10],\n", + " \"track_types\": False,\n", + " # \"meta_timestamps\": gdf.datetime.drop_duplicates()\n", + " }\n", + " \n", + " def populate(self):\n", + " # define base entities\n", + " recipe = sq.QueryRecipe()\n", + " red_band = sq.reflectance(\"s2_band04\")\n", + " green_band = sq.reflectance(\"s2_band03\")\n", + " blue_band = sq.reflectance(\"s2_band02\")\n", + "\n", + " # define test no. 1\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " filter(sq.entity(\"cloud\").evaluate(\"not\"))\n", + " result = {\n", + " 'atmosphere_colortype': self.max_items,\n", + " 'reflectance_s2_band02': self.max_items,\n", + " 'reflectance_s2_band03': self.max_items,\n", + " 'reflectance_s2_band04': self.max_items\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.1\",\n", + " \"desc\": \"No temporal filter\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 2a \n", + " # test recipe\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(\n", + " blue_band.filter(sq.self().extract(\"time\").evaluate(\"during\", sq.time_interval(\"2021-01-01\", \"2021-12-31\"))),\n", + " green_band.filter_time(\"year\", \"greater\", 2020).filter_time(\"year\", \"less\", 2022), \n", + " red_band.filter(sq.self().extract(\"time\", \"year\").evaluate(\"less\", 2015)) \n", + " ).\\\n", + " concatenate(\"band\")\n", + " # expected number of items in result\n", + " result = {\n", + " 'reflectance_s2_band02': 8737,\n", + " 'reflectance_s2_band03': 8760,\n", + " 'reflectance_s2_band04': 482136\n", + " }\n", + " # test & expected result + test description\n", + " self.tests.append({\n", + " \"name\": \"no.2a\",\n", + " \"desc\": \"Various temporal filters applied directly to data layers\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 2b\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"blue_I\"] = sq.collection(\n", + " blue_band.filter(sq.self().extract(\"time\").evaluate(\"during\", sq.time_interval(\"2021-01-01\", \"2021-12-31\"))),\n", + " blue_band.filter(sq.self().extract(\"time\").evaluate(\"before\", sq.time_instant(\"2021-01-01\"))),\n", + " ).\\\n", + " concatenate(\"band\")\n", + " recipe[\"blue_II\"] = sq.collection(\n", + " blue_band.filter(sq.self().extract(\"time\").evaluate(\"after\", sq.time_instant(\"2021-12-31\")))\n", + " ).\\\n", + " concatenate(\"band\")\n", + " recipe[\"red_green\"] = sq.collection(\n", + " green_band.filter_time(\"year\", \"less\", 2015),\n", + " red_band.filter_time(\"year\", \"greater\", 2010).filter_time(\"year\", \"less\", 2020)\n", + " ).\\\n", + " concatenate(\"band\")\n", + " result = {\n", + " 'reflectance_s2_band02': self.max_items,\n", + " 'reflectance_s2_band03': 482136,\n", + " 'reflectance_s2_band04': 78888\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.2b\",\n", + " \"desc\": \"Temporal filters across different results\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 3a\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " filter(sq.entity(\"cloud\").evaluate(\"not\")).\\\n", + " evaluate(\"subtract\", blue_band.filter_time(\"before\", sq.time_instant(\"2019-12-31\")))\n", + " result = {\n", + " 'atmosphere_colortype': 525936,\n", + " 'reflectance_s2_band02': 525936,\n", + " 'reflectance_s2_band03': 525936,\n", + " 'reflectance_s2_band04': 525936\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.3a\",\n", + " \"desc\": \"Temporal filter applied indirectly via evaluate as part of filter object (algebraic operators)\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 3b\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band).\\\n", + " concatenate(\"band\").\\\n", + " filter(sq.entity(\"cloud\").evaluate(\"not\")).\\\n", + " evaluate(\"or\", blue_band.filter_time(\"before\", sq.time_instant(\"2019-12-31\")))\n", + " result = {\n", + " 'atmosphere_colortype': self.max_items,\n", + " 'reflectance_s2_band02': 525936,\n", + " 'reflectance_s2_band03': self.max_items,\n", + " 'reflectance_s2_band04': self.max_items\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.3b\",\n", + " \"desc\": \"Temporal filter applied indirectly via evaluate as part of filter object (boolean/relational/membership operators)\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + " \n", + " # define test no. 3c\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " filter(sq.entity(\"cloud\").evaluate(\"not\")).\\\n", + " filter_time(\"before\", sq.time_instant(\"2019-12-31\")).\\\n", + " evaluate(\"subtract\", blue_band)\n", + " result = {\n", + " 'atmosphere_colortype': 525936,\n", + " 'reflectance_s2_band02': 525936,\n", + " 'reflectance_s2_band03': 525936,\n", + " 'reflectance_s2_band04': 525936\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.3c\",\n", + " \"desc\": \"Temporal filter applied indirectly via evaluate as part of object to be filtered (algebraic operators), output equivalent to 3a\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 3d\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band).\\\n", + " concatenate(\"band\").\\\n", + " filter(sq.entity(\"cloud\").evaluate(\"not\")).\\\n", + " filter_time(\"before\", sq.time_instant(\"2019-12-31\")).\\\n", + " evaluate(\"or\", blue_band)\n", + " result = {\n", + " 'atmosphere_colortype': 525936,\n", + " 'reflectance_s2_band02': self.max_items,\n", + " 'reflectance_s2_band03': 525936,\n", + " 'reflectance_s2_band04': 525936\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.3d\",\n", + " \"desc\": \"Temporal filter applied indirectly via evaluate as part of object to be filtered (boolean/relational/membership operators), output should be equivalent to 3b but is not due to the way NaNs are handled (https://github.com/ZGIS/semantique/issues/54)\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 3e\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(green_band).\\\n", + " concatenate(\"band\").\\\n", + " filter(sq.entity(\"cloud\").filter_time(\"before\", sq.time_instant(\"2019-12-31\")).evaluate(\"not\")).\\\n", + " evaluate(\"subtract\", blue_band)\n", + " result = {\n", + " 'atmosphere_colortype': 525936,\n", + " 'reflectance_s2_band02': 525936,\n", + " 'reflectance_s2_band03': 525936\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.3e\",\n", + " \"desc\": \"Temporal filter applied indirectly via filter with entity\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 3f\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " filter(sq.entity(\"cloud\").filter_time(\"before\", sq.time_instant(\"2019-12-31\")).evaluate(\"not\")).\\\n", + " evaluate(\"subtract\", blue_band)\n", + " recipe[\"composite_II\"] = sq.collection(red_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " filter(sq.entity(\"cloud\").evaluate(\"not\")).\\\n", + " evaluate(\"or\", blue_band.filter_time(\"before\", sq.time_instant(\"2019-12-31\")))\n", + " result = {\n", + " 'atmosphere_colortype': self.max_items,\n", + " 'reflectance_s2_band02': self.max_items,\n", + " 'reflectance_s2_band03': 525936,\n", + " 'reflectance_s2_band04': self.max_items\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.3f\",\n", + " \"desc\": \"Temporal filter applied indirectly via filter with entity\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 4a\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " filter(\n", + " sq.collection(\n", + " sq.self().extract(\"time\", \"year\").evaluate(\"greater\", 2015),\n", + " sq.self().extract(\"time\", \"year\").evaluate(\"less\", 2020),\n", + " ).merge(\"all\")\n", + " ).\\\n", + " filter(sq.entity(\"cloud\").evaluate(\"not\")).\\\n", + " evaluate(\"subtract\", blue_band)\n", + " result = {\n", + " 'atmosphere_colortype': 35064,\n", + " 'reflectance_s2_band02': 35064,\n", + " 'reflectance_s2_band03': 35064,\n", + " 'reflectance_s2_band04': 35064\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.4a\",\n", + " \"desc\": \"multiple temporal filter organised in a collection\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 4b\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " filter(\n", + " sq.collection(\n", + " sq.self().extract(\"time\", \"year\").evaluate(\"greater\", 2015),\n", + " sq.self().extract(\"time\", \"year\").evaluate(\"less\", 2020),\n", + " sq.self().evaluate(\"less\", 1)\n", + " ).merge(\"all\")\n", + " ).\\\n", + " filter(sq.entity(\"cloud\").evaluate(\"not\")).\\\n", + " evaluate(\"subtract\", blue_band)\n", + " result = {\n", + " 'atmosphere_colortype': 35064,\n", + " 'reflectance_s2_band02': 35064,\n", + " 'reflectance_s2_band03': 35064,\n", + " 'reflectance_s2_band04': 35064\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.4b\",\n", + " \"desc\": \"multiple temporal filter and non-blocking non-temporal filter organised in a collection\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 4c\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " filter(\n", + " sq.collection(\n", + " sq.self().extract(\"time\", \"year\").evaluate(\"less\", 2000),\n", + " sq.self().extract(\"time\", \"year\").evaluate(\"greater\", 2020),\n", + " sq.self().evaluate(\"less\", 1)\n", + " ).merge(\"any\")\n", + " ).\\\n", + " filter(sq.entity(\"cloud\").evaluate(\"not\")).\\\n", + " evaluate(\"subtract\", blue_band)\n", + " result = {\n", + " 'atmosphere_colortype': self.max_items,\n", + " 'reflectance_s2_band02': self.max_items,\n", + " 'reflectance_s2_band03': self.max_items,\n", + " 'reflectance_s2_band04': self.max_items\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.4c\",\n", + " \"desc\": \"multiple temporal filter and blocking non-temporal filter organised in a collection\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 5a\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " filter_time(\"before\", sq.time_instant(\"2019-12-31\")).\\\n", + " fill(\"time\", \"nearest\")\n", + " result = {\n", + " 'reflectance_s2_band02': 525936,\n", + " 'reflectance_s2_band03': 525936,\n", + " 'reflectance_s2_band04': 525936\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.5a\",\n", + " \"desc\": \"temporal filter followed by fill operation\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 5b\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " fill(\"time\", \"nearest\").\\\n", + " filter_time(\"before\", sq.time_instant(\"2019-12-31\"))\n", + " result = {\n", + " 'reflectance_s2_band02': self.max_items,\n", + " 'reflectance_s2_band03': self.max_items,\n", + " 'reflectance_s2_band04': self.max_items,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.5b\",\n", + " \"desc\": \"fill operation followed by temporal filter\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 5c\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " filter_time(\"before\", sq.time_instant(\"2019-12-31\")).\\\n", + " smooth(\"mean\", \"time\", 3)\n", + " result = {\n", + " 'reflectance_s2_band02': 525936,\n", + " 'reflectance_s2_band03': 525936,\n", + " 'reflectance_s2_band04': 525936\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.5c\",\n", + " \"desc\": \"temporal filter followed by smooth operation\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 5d\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " smooth(\"mean\", \"time\", 3).\\\n", + " filter_time(\"before\", sq.time_instant(\"2019-12-31\"))\n", + " result = {\n", + " 'reflectance_s2_band02': self.max_items,\n", + " 'reflectance_s2_band03': self.max_items,\n", + " 'reflectance_s2_band04': self.max_items,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.5d\",\n", + " \"desc\": \"smooth operation followed by temporal filter\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 6a\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " filter_time(\"before\", sq.time_instant(\"2019-12-31\")).\\\n", + " assign(0, at = sq.self().evaluate(\"less\", 2))\n", + " result = {\n", + " 'reflectance_s2_band02': 525936,\n", + " 'reflectance_s2_band03': 525936,\n", + " 'reflectance_s2_band04': 525936,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.6a\",\n", + " \"desc\": \"temporal filter followed by assign operation\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 6b\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " filter_time(\"before\", sq.time_instant(\"2019-12-31\")).\\\n", + " assign(-99)\n", + " result = {\n", + " 'reflectance_s2_band02': 525936,\n", + " 'reflectance_s2_band03': 525936,\n", + " 'reflectance_s2_band04': 525936,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.6b\",\n", + " \"desc\": \"temporal filter followed by assign operation\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 6c\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " filter_time(\"before\", sq.time_instant(\"2019-12-31\")).\\\n", + " assign_time(\"month\")\n", + " result = {\n", + " 'reflectance_s2_band02': 525936,\n", + " 'reflectance_s2_band03': 525936,\n", + " 'reflectance_s2_band04': 525936,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.6c\",\n", + " \"desc\": \"temporal filter followed by assign operation\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + "\n", + " # define test no. 7a\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"objects\"] = sq.reflectance(\"s2_band04\").\\\n", + " delineate().\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " reduce(\"mean\", \"time\")\n", + " result = {\n", + " 'reflectance_s2_band04': 525960,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.7a\",\n", + " \"desc\": \"temporal filter before reduce\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 7b\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"objects\"] = sq.reflectance(\"s2_band04\").\\\n", + " delineate().\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " reduce(\"mean\")\n", + " result = {\n", + " 'reflectance_s2_band04': 525960,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.7b\",\n", + " \"desc\": \"temporal filter before reduce\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 7c\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"objects\"] = sq.reflectance(\"s2_band04\").\\\n", + " delineate().\\\n", + " reduce(\"mean\", \"space\").\\\n", + " filter_time(\"year\", \"less\", 2020)\n", + " result = {\n", + " 'reflectance_s2_band04': 525960,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.7c\",\n", + " \"desc\": \"temporal filter after reduce-over-space\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 7d\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"vegetation_count_per_season\"] = sq.reflectance(\"s2_band04\").\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " groupby(sq.collection(\n", + " sq.self().\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " extract(\"time\", \"month\"), \n", + " sq.self().\\\n", + " extract(\"time\", \"month\").\\\n", + " evaluate(\"not_in\", sq.interval(6, 11))\n", + " ).compose()).\\\n", + " reduce(\"count\", \"time\")\n", + " result = {\n", + " 'reflectance_s2_band04': 525960,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.7d\",\n", + " \"desc\": \"temporal filter with reduce on collection\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + " \n", + " # define test no. 8a\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"objects\"] = sq.reflectance(\"s2_band04\").delineate().filter_time(\"year\", \"less\", 2020)\n", + " recipe[\"map\"] = sq.collection(blue_band, green_band, red_band).\\\n", + " concatenate(\"band\").\\\n", + " groupby(sq.result(\"objects\"))\n", + " result = {\n", + " 'reflectance_s2_band02': 525960,\n", + " 'reflectance_s2_band03': 525960,\n", + " 'reflectance_s2_band04': 525960,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.8a\",\n", + " \"desc\": \"temporal filter indirectly via groupby\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 8b\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"objects\"] = sq.reflectance(\"s2_band04\").\\\n", + " delineate().\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " reduce(\"mean\", \"time\")\n", + " recipe[\"map\"] = sq.collection(blue_band, green_band, red_band).\\\n", + " concatenate(\"band\").\\\n", + " groupby(sq.result(\"objects\"))\n", + " result = {\n", + " 'reflectance_s2_band02': self.max_items,\n", + " 'reflectance_s2_band03': self.max_items,\n", + " 'reflectance_s2_band04': self.max_items,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.8b\",\n", + " \"desc\": \"temporal filter via groupby inactive due to reduce\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # # note: the same tests as 8a/8b could be written for filter_time\n", + " # # however due to issue #55, the test will currently result in unexpected results\n", + " # # src:\n", + " # recipe[\"res1\"] = sq.reflectance(\"s2_band03\").\\\n", + " # delineate().\\\n", + " # filter_time(\"year\", \"less\", 2020)\n", + " # # reduce(\"mean\", \"time\")\n", + " # recipe[\"res2\"] = sq.reflectance(\"s2_band03\").\\\n", + " # filter(sq.result(\"res1\"))\n", + "\n", + " # define test no. 9a\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"res1\"] = sq.reflectance(\"s2_band03\").\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " reduce(\"mean\", \"time\")\n", + " recipe[\"res2\"] = sq.reflectance(\"s2_band03\").\\\n", + " filter_time(\"year\", \"greater_equal\", 2020)\n", + " recipe[\"result\"] = sq.collection(sq.result(\"res1\"), sq.result(\"res2\")).\\\n", + " concatenate(\"band\")\n", + " result = {\n", + " 'reflectance_s2_band03': self.max_items,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.9a\",\n", + " \"desc\": \"temporally filtered results in concatenation\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 9b\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"res1\"] = sq.reflectance(\"s2_band03\").\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " reduce(\"mean\", \"time\")\n", + " recipe[\"res2\"] = sq.reflectance(\"s2_band04\").\\\n", + " filter_time(\"year\", \"greater_equal\", 2020).\\\n", + " filter_time(\"year\", \"less_equal\", 2020)\n", + " recipe[\"result\"] = sq.collection(sq.result(\"res1\"), sq.result(\"res2\")).\\\n", + " concatenate(\"band\")\n", + " result = {\n", + " 'reflectance_s2_band03': 525960,\n", + " 'reflectance_s2_band04': 8784\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.9b\",\n", + " \"desc\": \"temporally filtered results in concatenation\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + " \n", + " # define test no. 10a\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " groupby_space(\"feature\").\\\n", + " reduce(\"count\", \"space\")\n", + " result = {\n", + " 'reflectance_s2_band02': 525960,\n", + " 'reflectance_s2_band03': 525960,\n", + " 'reflectance_s2_band04': 525960,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.10a\",\n", + " \"desc\": \"temporally filtered results with spatial ops\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 10b\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(red_band, green_band, blue_band).\\\n", + " concatenate(\"band\").\\\n", + " filter_space(\"feature\", \"equal\", 0).\\\n", + " filter_time(\"year\", \"less\", 2020)\n", + " result = {\n", + " 'reflectance_s2_band02': 525960,\n", + " 'reflectance_s2_band03': 525960,\n", + " 'reflectance_s2_band04': 525960,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.10b\",\n", + " \"desc\": \"temporally filtered results with spatial ops\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 11\n", + " def make_true(obj, track_types = True, **kwargs):\n", + " newobj = obj.copy(deep = True)\n", + " newobj.values = np.ones_like(newobj)\n", + " if track_types:\n", + " newobj.sq.value_type = \"binary\"\n", + " del obj.sq.value_labels\n", + " return newobj\n", + " def modulus(x, y, track_types = True, **kwargs):\n", + " if track_types:\n", + " manual = {\"continuous\": {\"continuous\": \"continuous\"}, \"__preserve_labels\": 0}\n", + " promoter = TypePromoter(x, y, manual = manual)\n", + " promoter.check()\n", + " f = lambda x, y: np.mod(x, y)\n", + " y = xr.DataArray(y).sq.align_with(x)\n", + " out = xr.apply_ufunc(f, x, y)\n", + " if track_types:\n", + " out = promoter.promote(out)\n", + " return out\n", + " def sum_of_squares(x, track_types = False, **kwargs):\n", + " if track_types:\n", + " promoter = TypePromoter(x, function = \"sum\")\n", + " promoter.check()\n", + " f = lambda x, axis = None: np.sum(np.square(x), axis)\n", + " out = x.reduce(f, **kwargs)\n", + " if track_types:\n", + " promoter.promote(out)\n", + " return out\n", + " new_context = copy.deepcopy(self.context)\n", + " new_context[\"custom_verbs\"] = {\"make_true\": make_true}\n", + " new_context[\"custom_operators\"] = {\"modulus\": modulus}\n", + " new_context[\"custom_reducers\"] = {\"sum_of_squares\": sum_of_squares}\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"vals\"] = sq.reflectance(\"s2_band04\").filter_time(\"year\", \"less\", 2020)\n", + " recipe[\"ones\"] = sq.result(\"vals\").apply_custom(\"make_true\")\n", + " recipe[\"mod\"] = sq.result(\"vals\").evaluate(\"modulus\", 2)\n", + " recipe[\"foo\"] = sq.result(\"vals\").reduce(\"sum_of_squares\", \"space\")\n", + " result = {\n", + " 'reflectance_s2_band04': 525960,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.11\",\n", + " \"desc\": \"temporal filter with custom verbs/ops/reducers\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": new_context\n", + " })\n", + "\n", + " # define test no. 99a\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"res1\"] = sq.reflectance(\"s2_band04\").\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " evaluate(\"subtract\", sq.reflectance(\"s2_band03\").reduce(\"mean\", \"time\"))\n", + " recipe[\"res2\"] = sq.reflectance(\"s2_band08\").\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " shift(\"time\", 1)\n", + " recipe[\"res3\"] = sq.reflectance(\"s2_band02\").\\\n", + " evaluate(\"less\", sq.result(\"res1\"))\n", + " recipe[\"result\"] = sq.collection(sq.result(\"res1\"), sq.result(\"res2\"), sq.result(\"res3\")).\\\n", + " concatenate(\"band\").\\\n", + " filter_time(\"year\", \"less\", 2019).\\\n", + " reduce(\"mean\", \"band\")\n", + " result = {\n", + " 'reflectance_s2_band02': self.max_items,\n", + " 'reflectance_s2_band03': self.max_items,\n", + " 'reflectance_s2_band04': 525960,\n", + " 'reflectance_s2_band08': 525960\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.99a\",\n", + " \"desc\": \"complex series of filter & concatenate operations\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " \n", + " # define test no. 99b\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"result\"] = sq.collection(\n", + " (sq.reflectance(\"s2_band04\").\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " evaluate(\"subtract\", sq.reflectance(\"s2_band03\").reduce(\"mean\", \"time\"))),\n", + " (sq.reflectance(\"s2_band08\").\\\n", + " filter_time(\"year\", \"greater\", 2020)).\\\n", + " filter_time(\"year\", \"less\", 2023).\\\n", + " shift(\"time\", 1)).\\\n", + " concatenate(\"band\").\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " reduce(\"mean\", \"band\")\n", + " result = {\n", + " 'reflectance_s2_band03': self.max_items,\n", + " 'reflectance_s2_band04': 525960,\n", + " 'reflectance_s2_band08': 17520\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.99b\",\n", + " \"desc\": \"complex series of filter & concatenate operations\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 99c\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"result\"] = sq.collection(\n", + " (sq.reflectance(\"s2_band04\").\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " evaluate(\"subtract\", sq.reflectance(\"s2_band03\").reduce(\"mean\", \"time\"))),\n", + " (sq.reflectance(\"s2_band08\").\\\n", + " filter_time(\"year\", \"greater\", 2020))).\\\n", + " concatenate(\"band\").\\\n", + " filter_time(\"year\", \"less\", 2019).\\\n", + " reduce(\"mean\", \"band\")\n", + " result = {\n", + " 'reflectance_s2_band03': self.max_items,\n", + " 'reflectance_s2_band04': 517200,\n", + " 'reflectance_s2_band08': 0\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.99c\",\n", + " \"desc\": \"complex series of filter & concatenate operations\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 99d\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"res1\"] = sq.reflectance(\"s2_band04\").\\\n", + " evaluate(\"subtract\", \n", + " sq.reflectance(\"s2_band03\").\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " reduce(\"mean\", \"time\")\n", + " )\n", + " recipe[\"res2\"] = sq.reflectance(\"s2_band03\").\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " reduce(\"mean\", \"time\").\\\n", + " evaluate(\"subtract\", sq.reflectance(\"s2_band04\").reduce(\"mean\", \"time\"))\n", + " result = {\n", + " 'reflectance_s2_band03': 525960, \n", + " 'reflectance_s2_band04': self.max_items,\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.99d\",\n", + " \"desc\": \"complex series of filter & evaluate operations\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 99e\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"res\"] = sq.collection(\n", + " sq.collection(\n", + " blue_band.filter(sq.self().extract(\"time\").evaluate(\"during\", sq.time_interval(\"2021-01-01\", \"2021-12-31\"))),\n", + " green_band \n", + " ).\\\n", + " compose().\\\n", + " filter_time(\"year\", \"greater\", 2010),\n", + " red_band \n", + " ).\\\n", + " merge(\"any\").\\\n", + " filter(sq.self().extract(\"time\", \"year\").evaluate(\"less\", 2015))\n", + " result = {\n", + " 'reflectance_s2_band02': 0,\n", + " 'reflectance_s2_band03': 35064,\n", + " 'reflectance_s2_band04': 482136\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.99e\",\n", + " \"desc\": \"complex series of filter & compose/merge operations\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + "\n", + " def execute(self):\n", + " for test in self.tests:\n", + " print(f\"Running test : {test['name']}\")\n", + " # run recipe with QueryProcessor\n", + " try:\n", + " if \"meta_timestamps\" in test[\"context\"]:\n", + " qp_context = copy.deepcopy(test[\"context\"])\n", + " del qp_context[\"meta_timestamps\"]\n", + " else:\n", + " qp_context = test[\"context\"]\n", + " with warnings.catch_warnings():\n", + " warnings.simplefilter(\"ignore\")\n", + " fp = QueryProcessor.parse(test['recipe'], **qp_context)\n", + " except Exception as e:\n", + " print(\"Recipe not executable with usual QueryProcessor\")\n", + " print(\"Error message: \", e)\n", + " # run recipe with FilterProcessor\n", + " with warnings.catch_warnings():\n", + " warnings.simplefilter(\"ignore\")\n", + " fp = FilterProcessor.parse(test['recipe'], **test['context'])\n", + " self.max_items = len(fp.meta_timestamps)\n", + " response = fp.optimize().execute()\n", + " # check result\n", + " try:\n", + " res_shape = {k:len(v) for k,v in response.items()}\n", + " for key, value in test[\"result\"].items():\n", + " if value is None:\n", + " test[\"result\"][key] = self.max_items\n", + " if \"meta_timestamps\" in test[\"context\"]:\n", + " print(f\"Resulting shape: {res_shape}\")\n", + " else:\n", + " assert res_shape == test[\"result\"]\n", + " except Exception as e:\n", + " print(\"Test failed\")\n", + " print(f\"Expected shape: {test['result']}\")\n", + " print(f\"Resulting shape: {res_shape}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running test : no.1\n", + "Running test : no.2a\n", + "Running test : no.2b\n", + "Running test : no.3a\n", + "Running test : no.3b\n", + "Running test : no.3c\n", + "Running test : no.3d\n", + "Running test : no.3e\n", + "Running test : no.3f\n", + "Running test : no.4a\n", + "Running test : no.4b\n", + "Running test : no.4c\n", + "Running test : no.5a\n", + "Running test : no.5b\n", + "Running test : no.5c\n", + "Running test : no.5d\n", + "Running test : no.6a\n", + "Running test : no.6b\n", + "Running test : no.6c\n", + "Running test : no.7a\n", + "Running test : no.7b\n", + "Running test : no.7c\n", + "Running test : no.7d\n", + "Running test : no.8a\n", + "Running test : no.8b\n", + "Running test : no.9a\n", + "Running test : no.9b\n", + "Running test : no.10a\n", + "Running test : no.10b\n", + "Running test : no.11\n", + "Running test : no.99a\n", + "Running test : no.99b\n", + "Running test : no.99c\n", + "Running test : no.99d\n", + "Running test : no.99e\n" + ] + } + ], + "source": [ + "# run all tests\n", + "tests = TestSuite()\n", + "tests.populate()\n", + "tests.execute()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# To-Do\n", + "# inclusion of FilterProcessor in the main branch with connection to datacubes \n", + "# https://datacube-core.readthedocs.io/en/latest/api/indexed-data/generate/datacube.Datacube.list_measurements.html#datacube.Datacube.list_measurements\n", + "\n", + "# Wednesday & Thursday: refactor/adjust reauth (resign function)\n", + "# Friday: paper writing & re-run of application examples" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'reflectance_s2_band03': 525960}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# to create a new test or assess an individual one\n", + "recipe = sq.QueryRecipe()\n", + "\n", + "tests = TestSuite()\n", + "qp_context = copy.deepcopy(tests.context)\n", + "if \"meta_timestamps\" in qp_context:\n", + " del qp_context[\"meta_timestamps\"]\n", + " qp_context[\"track_types\"] = True\n", + "\n", + "red_band = sq.reflectance(\"s2_band04\")\n", + "green_band = sq.reflectance(\"s2_band03\")\n", + "blue_band = sq.reflectance(\"s2_band02\")\n", + "\n", + "recipe[\"res1\"] = sq.reflectance(\"s2_band03\").\\\n", + " evaluate(\"in\", sq.label(\"test\")).\\\n", + " filter_time(\"year\", \"less\", 2020)\n", + "\n", + "# to try new filter processor\n", + "# fp = QueryProcessor.parse(recipe, **qp_context)\n", + "fp = FilterProcessor.parse(recipe, **qp_context)\n", + "response = fp.optimize().execute()\n", + "# response\n", + "\n", + "# np.isnan(response[\"composite\"]).sum(('x', 'y'))\n", + "# np.all(np.isnan(response[\"composite\"].isel(time=1)))\n", + "{k:len(v) for k,v in response.items()}\n", + "\n", + "# np.isnan(response[\"composite\"]).sum(('x', 'y'))\n", + "# np.all(np.isnan(response[\"composite\"].isel(time=1)))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "semantique", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/demo/figures/semantic_temp_filter_I.png b/demo/figures/semantic_temp_filter_I.png new file mode 100644 index 0000000000000000000000000000000000000000..23991a0fcc9ff13f67917064ac9c0ed29011348b GIT binary patch literal 114598 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 O<<`v(*4H{G;Ju~y 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

oct_-ZjrS8Om^XEJsJ(CXaV7es7!=Pq>gar`YIr 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 z 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%0Af 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 Filtering (= passing of NaNs) regardless if y is active. + twoway_ops = [ + "add_", + "subtract_", + "multiply_", + "divide_", + "power_", + "normalized_difference_" + ] + if y.sqm.active: + if self.active or operator.__name__ in twoway_ops: + out = operator(*operands, track_types = track_types, meta = True, **kwargs) + out.sqm.vault = self._merge_arrays_vaults(list(operands)) + else: + out = y + out.sqm.vault = y.sqm.vault + out.sqm.active = True + out.sqm.locked = True if any([self.locked, y.sqm.locked]) else False + else: + if operator.__name__ in twoway_ops: + out = operator(*operands, track_types = track_types, meta = True, **kwargs) + if self.active: + out.sqm.active = True + else: + out.sqm.active = False + out.sqm.locked = True if any([self.locked, y.sqm.locked]) else False + out.sqm.vault = self._merge_arrays_vaults(list(operands)) + else: + out = self._obj + else: + out = self._obj + return out + + + def extract(self, dimension, component = None, **kwargs): + """Apply the extract verb to the array. + + The extract verb extracts coordinate labels of a dimension as a new + array. + + Parameters + ----------- + dimension : :obj:`str` + Name of the dimension to be extracted. + component : :obj:`str`, optional + Name of a specific component of the dimension coordinates to be + extracted, e.g. *year*, *month* or *day* for temporal dimension + coordinates. + **kwargs: + Ignored. + + Returns + -------- + :obj:`xarray.DataArray` + + Raises + ------- + :obj:`exceptions.UnknownDimensionError` + If a dimension with the given name is not present in the array. + :obj:`exceptions.UnknownComponentError` + If the given dimension does not contain the given component. + + """ + # Get array. + obj = self._obj + # Extract spatial or temporal dimension(s). + if dimension == TIME: + out = self._extract_time(obj, component) + out.sqm.active = self.active + out.sqm.locked = self.locked + out.sqm.vault = self.vault + return out + if dimension == SPACE: + out = self._extract_space(obj, component) + out.sqm.active = self.active + out.sqm.locked = self.locked + out.sqm.vault = self.vault + return out + # Extract any other dimension. + try: + out = obj[dimension] + except KeyError: + raise exceptions.UnknownDimensionError( + f"Dimension '{dimension}' is not present in the array" + ) + if component is not None: + try: + out = out[component] + except KeyError: + raise exceptions.UnknownComponentError( + f"Component '{component}' is not defined for dimension '{dimension}'" + ) + out.sqm.active = self.active + out.sqm.locked = self.locked + out.sqm.vault = self.vault + return out + + @staticmethod + def _extract_space(obj, component = None): + if component is None: + try: + out = obj.sqm.stack_spatial_dims()[SPACE] + except KeyError: + raise exceptions.UnknownDimensionError( + f"Spatial dimensions '{X}' and '{Y}' are not present in the array" + ) + out._variable = out._variable.to_base_variable() + out = out.sqm.unstack_spatial_dims() + out.sqm.value_type = "coords" + else: + # Component FEATURE should extract spatial feature indices. + if component == components.space.FEATURE: + cname = "spatial_feats" + else: + cname = component + try: + out = obj[cname] + except KeyError: + raise exceptions.UnknownComponentError( + f"Component '{cname}' is not defined for dimension '{SPACE}'" + ) + return out + + @staticmethod + def _extract_time(obj, component = None): + try: + out = obj[TIME] + except KeyError: + raise exceptions.UnknownDimensionError( + f"Dimension '{TIME}' is not present in the array" + ) + if component is not None: + try: + out = out[component] + except KeyError: + aliases = { + "day_of_week": "dayofweek", + "day_of_year": "dayofyear" + } + try: + component = aliases[component] + except KeyError: + pass + try: + out = getattr(out.dt, component) + except AttributeError: + raise exceptions.UnknownComponentError( + f"Component '{component}' is not defined for dimension '{TIME}'" + ) + else: + out = utils.parse_datetime_component(component, out) + return out + + def filter(self, filterer, track_types = False, **kwargs): + """Apply the filter verb to the array. + + The filter verb filters the values in an array. + + Parameters + ----------- + filterer : :obj:`xarray.DataArray` + Binary array which can be aligned to the same shape as the input array. + Each pixel in the input array will be kept if the pixel in the filterer + with the same dimension coordinates is true, and dropped otherwise + (i.e. assigned a nodata value). + track_types : :obj:`bool` + Should it be checked that the filterer has value type *binary*? + **kwargs: + Ignored. + + Returns + -------- + :obj:`xarray.DataArray` + + """ + # Xarray treats null values as True but they should not pass the filter. + filterer.values = utils.null_as_zero(filterer) + # Apply filter only if not locked. + if any([self.locked, filterer.sqm.locked]): + out = self._obj + else: + out = self._obj.where(filterer.sqm.align_with(self._obj)) + out.sqm.active = any([self.active, filterer.sqm.active]) + out.sqm.locked = False + out.sqm.vault = self._merge_arrays_vaults([self._obj, filterer]) + return out + + def assign(self, y, at = None, track_types = False, **kwargs): + """Apply the assign verb to the array. This method is structured the same + way as it is structured for Array objects but effectively muted, i.e. the + current object is simply handed back. + + Parameters + ---------- + y : + Value(s) to be assigned. May be a constant, meaning that the same value + is assigned to every pixel. May also be another array which can be + aligned to the same shape as the input array. In the latter case, the + value assigned to a pixel in the input array is the value of the pixel in + array ``y`` that has the same dimension coordinates. + at : :obj:`xarray.DataArray`, optional + Binary array which can be aligned to the same shape as the input array. + To be used for conditional assignment, in which a pixel in the input will + only be assigned a new value if the if the pixel in ``at`` with the same + dimension coordinates is true. + track_types : :obj:`bool` + Should the value type of the output object be promoted, and should it be + checked that ``at`` has value type *binary*? + **kwargs: + Ignored. + + Returns + -------- + :obj:`xarray.DataArray` + + """ + out = self._obj + return out + + def groupby(self, grouper, labels_as_names = True, **kwargs): + """Apply the groupby verb to the array. + + The groupby verb groups the values in an array. + + Parameters + ----------- + grouper : :obj:`xarray.DataArray` or :obj:`Collection` + Array which can be aligned to the same shape as the input array. Pixels + in the input array that have equal values in the grouper will be + grouped together. Alternatively, it may be a collection of such arrays. + Then, pixels in the input array that have equal values in all of the + grouper arrays will be grouped together. + labels_as_names : :obj:`bool` + If value labels are defined, should they be used as group names instead + of the values themselves? + **kwargs: + Ignored. + + Returns + -------- + :obj:`Collection` + + Raises + ------- + :obj:`exceptions.MissingDimensionError` + If the grouper is zero-dimensional. + :obj:`exceptions.UnknownDimensionError` + If the grouper contains dimensions that are not present in the input. + :obj:`exceptions.MixedDimensionsError` + If the grouper is a collection and its elements don't all have the same + dimensions. + + """ + # Get dimensions of the input. + obj = self._obj + odims = obj.dims + # Get dimensions of the grouper(s). + if isinstance(grouper, list): + is_list = True + gdims = [x.dims for x in grouper] + if not all([x == gdims[0] for x in gdims]): + raise exceptions.MixedDimensionsError( + "Dimensions of grouper arrays do not match" + ) + else: + is_list = False + gdims = [grouper.dims] + grouper = [grouper] + # Parse grouper. + # When grouper is multi-dimensional, dimensions should be stacked. + if len(gdims[0]) == 0: + raise exceptions.MissingDimensionError( + "Cannot group with a zero-dimensional grouper" + ) + elif len(gdims[0]) == 1: + is_spatial = False + is_multidim = False + if not gdims[0][0] in odims: + raise exceptions.UnknownDimensionError( + f"Grouper dimension '{gdims[0][0]}' is not present in the array" + ) + elif len(gdims[0]) == 2 and X in gdims[0] and Y in gdims[0]: + is_spatial = True + is_multidim = False + grouper = [x.sqm.stack_spatial_dims() for x in grouper] + try: + obj = obj.sqm.stack_spatial_dims() + except KeyError: + raise exceptions.UnknownDimensionError( + f"Spatial dimensions '{X}' and '{Y}' are not present in the array" + ) + else: + is_spatial = False + is_multidim = True + if not all(x in odims for x in gdims[0]): + raise exceptions.UnknownDimensionError( + "Not all grouper dimensions are present in the array" + ) + grouper = [x.sqm.align_with(obj).sqm.stack_all_dims() for x in grouper] + obj = obj.sqm.stack_all_dims() + # Split input into groups based on unique grouper values. + if is_list: + idx = pd.MultiIndex.from_arrays([x.data for x in grouper]) + dim = grouper[0].dims + partition = list(obj.groupby(xr.IndexVariable(dim, idx), squeeze=False)) + # Use value labels as group names if defined. + if labels_as_names: + labs = [x.sqm.value_labels for x in grouper] + names = [i[0] for i in partition] + for i, x in enumerate(labs): + if x is None: + pass + else: + for j, y in enumerate(names): + y = list(y) + y[i] = x[y[i]] + names[j] = tuple(y) + groups = [i[1].rename(j) for i, j in zip(partition, names)] + else: + groups = [i[1].rename(i[0]) for i in partition] + else: + partition = list(obj.groupby(grouper[0], squeeze=False)) + # Use value labels as group names if defined. + if labels_as_names: + labs = grouper[0].sqm.value_labels + if labs is not None: + groups = [i[1].rename(labs[i[0]]) for i in partition] + else: + groups = [i[1].rename(i[0]) for i in partition] + else: + groups = [i[1].rename(i[0]) for i in partition] + # Post-process. + # Stacked arrays must be unstacked again. + if is_spatial: + groups = [x.sqm.unstack_spatial_dims() for x in groups] + elif is_multidim: + # Multi-dimensional grouping may create irregular spatial dimensions. + # Therefore besides unstacking we also need to regularize the arrays. + groups = [x.sqm.unstack_all_dims().sqm.regularize() for x in groups] + # Stacking messes up the spatial feature indices coordinate. + # We need to re-create this coordinate for each group array. + if "spatial_feats" in self._obj.coords: + def fix(x, y): + x["spatial_feats"] = y["spatial_feats"].reindex_like(x) + return x + groups = [fix(x, self._obj) for x in groups] + # Collect and return. + out = MetaCollection(groups) + out.active = True if any([x.sqm.active for x in groups]) else False + out.locked = True if any([x.sqm.locked for x in groups]) else False + out.vault = self._merge_arrays_vaults(groups) + return out + + def reduce( + self, + reducer, + dimension = None, + track_types = False, + keep_attrs = True, + **kwargs + ): + """Apply the reduce verb to the array. + + The reduce verb reduces the dimensionality of an array. + + Parameters + ----------- + reducer : :obj:`callable` + The reducer function to be applied. + dimension : :obj:`str` + Name of the dimension to apply the reduction function to. If + :obj:`None`, all dimensions are reduced. + track_types : :obj:`bool` + Should the reducer promote the value type of the output object, based + on the value type of the input object? + keep_attrs: :obj:`bool` + Should the variable's attributes (attrs) be copied from the + original object to the new one? + **kwargs: + Additional keyword arguments passed on to the reducer function. These + should not include a keyword argument "dim", which is reserved for + specifying the dimension to reduce over. + + Returns + -------- + :obj:`xarray.DataArray` + + Raises + ------ + :obj:`exceptions.UnknownDimensionError` + If a dimension with the given name is not present in the array. + + """ + # Get array and set reduction dimension. + obj = self._obj + if dimension is not None: + if dimension == SPACE: + if X not in obj.dims or Y not in obj.dims: + raise exceptions.UnknownDimensionError( + f"Spatial dimensions '{X}' and '{Y}' are not present in the array" + ) + obj = self.stack_spatial_dims() + else: + if dimension not in obj.dims: + raise exceptions.UnknownDimensionError( + f"Dimension '{dimension}' is not present in the array" + ) + kwargs["dim"] = dimension + # If reduce-over-time persist temporal indices in vault. + # Rationale: temporal indices are lost when reducing over time but + # are needed as part of the response object. + if ( + self.active and + (dimension == TIME or (dimension is None and TIME in obj.dims)) + ): + # Reduce additional dimensions first. + if obj.ndim > 3: + dim = [x for x in obj.dims if x not in [TIME, X, Y]] + assert len(dim) == 1, "Only one dimension can be reduced" + obj_to_save = obj.sqm.reduce( + reducers.any_, + dim[0], + track_types = track_types + ) + else: + obj_to_save = obj + # Extract valid temporal indices & set as attrs. + t_idxs = obj_to_save.time[obj_to_save.isnull().sum((X, Y)) == 0] + obj.sqm.vault = t_idxs + # Reduce. + out = reducer( + obj, + track_types = track_types, + keep_attrs = keep_attrs, + **kwargs + ) + return out + + def shift(self, dimension, steps, **kwargs): + """Apply the shift verb to the array. This method is structured the same way + as it is structured for Array objects but effectively muted, + i.e. the current object is simply handed back. + + The shift verb shifts the values in an array a given amount of steps along + a dimension. + + Parameters + ----------- + dimension : :obj:`str` + Name of the dimension to shift along. + steps : :obj:`int` + Amount of steps each value should be shifted. A negative integer will + result in a shift to the left, while a positive integer will result in + a shift to the right. A shift along the spatial dimension follows the + pixel order defined by the CRS, e.g. starting in the top-left and + moving down each column. + **kwargs: + Ignored. + + Returns + -------- + :obj:`xarray.DataArray` + + """ + out = self._obj + out.sqm.locked = True + return out + + def smooth(self, reducer, dimension, size, limit = 2, fill = False, + track_types = False, **kwargs): + """Apply the smooth verb to the array. This method is structured the same way + as it is structured for Array objects but effectively muted, + i.e. the current object is simply handed back. + + The smooth verb smoothes the values in an array by applying a reducer + function to a rolling window along a dimension. + + Parameters + ----------- + reducer : :obj:`callable` + The reducer function to be applied to the rolling window. + dimension : :obj:`str` + Name of the dimension to smooth along. + size : :obj:`int` + Size k defining the extent of the rolling window. The pixel being + smoothed will always be in the center of the window, with k pixels at + its left and k pixels at its right. If the dimension to smooth over is + the spatial dimension, the size will be used for both the X and Y + dimension, forming a sqmuare window with the smoothed pixel in the + middle. + limit : :obj:`int` + Minimum number of valid data values inside a window. If the window + contains less than this number of data values (excluding nodata) the + smoothed value will be nodata. + fill : :obj:`bool` + Should pixels with a nodata value also be smoothed? + track_types : :obj:`bool` + Should the reducer promote the value type of the output object, based + on the value type of the input object? + **kwargs: + Additional keyword arguments passed on to the reducer function. These + should not include a keyword argument "dim", which is reserved for + specifying the dimension to reduce over. + + Returns + -------- + :obj:`xarray.DataArray` + + """ + out = self._obj + out.sqm.locked = True + return out + + def trim(self, dimension = None, **kwargs): + """Apply the trim verb to the array. This method is structured the same way + as it is structured for Array objects but effectively muted, + i.e. the current object is simply handed back. + + The trim verb trims the dimensions of an array, meaning that all dimension + coordinates for which all values are missing are removed from the array. + The spatial dimensions are only trimmed at their edges, to preserve their + regularity. + + Parameters + ---------- + dimension : :obj:`str` + Name of the dimension to be trimmed. If :obj:`None`, all dimensions + will be trimmed. + + Returns + ------- + :obj:`xarray.DataArray` + + """ + return self._obj + + def delineate(self, track_types = False, **kwargs): + """Apply the delineate verb to the array. This method is structured the same way + as it is structured for Array objects but effectively muted, + i.e. the current object is simply handed back. + + The delineate verb deliniates spatio-temporal objects in a binary array. + + Parameters + ----------- + track_types : :obj:`bool` + Should the value type of the output object be promoted, and should it be + checked that the input has value type *binary*? + **kwargs: + Ignored. + + Returns + -------- + :obj:`xarray.DataArray` + + """ + return self._obj + + def fill(self, dimension, method, extrapolate = True, track_types = False, + **kwargs): + """Apply the fill verb to the array. This method is structured the same way + as it is structured for Array objects but effectively muted, + i.e. the current object is simply handed back. + + The fill verb fills nodata values by interpolating valid data values. + + Parameters + ----------- + dimension : :obj:`str` + Name of the dimension along which to interpolate. + method : :obj:`str` + Interpolation method to use. One of nearest, linear or cubic. When + interpolation along the stacked space dimensions, the two-dimensional + versions of these interpolation methods are used, i.e. 2D nearest + neighbour, bilinear and bicubic. + extrapolate : :obj:`bool` + Should nodata values at the edge be extrapolated? Only applied to + one-dimensional interpolation. + track_types : :obj:`bool` + Should the value type(s) of the input(s) be checked, and the value + type of the output be promoted, whenever applicable? + **kwargs" + Additional keyword arguments passed on to the interpolation function. + When interpolating along a single dimension, the interpolation function + is :meth:`xarray.DataArray.interpolate_na`. + When interpolation along the stacked space dimension, the interpolation + funtion is :meth:`rioxarray.raster_array.RasterArray.interpolate_na`. + + Returns + -------- + :obj:`xarray.DataArray` + + """ + out = self._obj + out.sqm.locked = True + return out + + def name(self, value, **kwargs): + """Apply the name verb to the array. + + The name verb assigns a name to an array. + + Parameters + ----------- + value : :obj:`str` + Character sting to be assigned as name to the input array. + **kwargs: + Ignored. + + Returns + -------- + :obj:`xarray.DataArray` + + """ + out = self._obj.rename(value) + return out + + def apply_custom(self, verb, track_types = False, **kwargs): + """Apply a user-defined verb to the array. This method is structured the + same way as it is structured for Array objects but effectively muted, + i.e. the current object is simply handed back. + + Parameters + ----------- + verb : :obj:`callable` + Implementation of the custom verb which will be provided to + :meth:`xarray.DataArray.pipe`. + track_types : :obj:`bool` + Should the value type(s) of the input(s) be checked, and the value + type of the output be promoted, whenever applicable? + **kwargs: + Additional keyword arguments passed on to the verb function. + + Returns + -------- + :obj:`xarray.DataArray` + + """ + out = self._obj + return out + + def align_with(self, other): + """Align the array to the shape of another array. + + An input array is alinged to another array if the pixel at position *i* in + the input array has the same coordinates as the pixel at position *i* in the + other array. Aligning can be done in several ways: + + * Consider the case where the input array has exactly the same dimensions + and coordinates as the other array, but the order of them is different. + In that case, the input array is simply re-ordered to match the other + array. + + * Consider the case where the input array has the same dimensions as the + other array, but not all coordinates match. In that case, the coordinates + that are in the input array but not in the other array are removed from the + input array, and at the same time the coordinates that are in the other + array but not in the input array are added to the input array, with nodata + values assigned. + + * Consider the case where all dimensions of the input array are also present + in the other array, but not all dimensions of the other array are present + in the input array. In that case, the pixels of the input array are + duplicated along those dimensions that are missing. + + Alignment may also be a combination of more than one of these ways. + + Parameters + ----------- + other : :obj:`xarray.DataArray` + Array to which the input array should be aligned. + + Returns + -------- + :obj:`xarray.DataArray` + The aligned input array. + + Raises + ------- + :obj:`exceptions.AlignmentError` + If the input array cannot be aligned to the other array, for example when + the two arrays have no dimensions in common at all, or when the input + array has dimensions that are not present in the other array. + + """ + # Reintroduce time dimension if it was removed. + if ( + TIME in other.dims and + TIME not in self._obj.dims and + self._obj.sqm.vault is not None + ): + self._obj = self._obj.expand_dims({'time': self._obj.sqm.vault}) + # Carry out alignment. + out = xr.align(other, self._obj, join = "left")[1].broadcast_like(other) + if not out.shape == other.shape: + raise exceptions.AlignmentError( + f"Array '{other.name if other.name is not None else 'y'}' " + f"cannot be aligned with " + f"input array '{self._obj.name if self._obj.name is not None else 'x'}'" + ) + return out + + def _merge_arrays_vaults(self, arrays): + """Merge vaults of arrays by taking the union of their elements.""" + if any([x.sqm.active and x.sqm.vault is not None for x in arrays]): + vaults = [x.sqm.vault for x in arrays if (x.sqm.active and x.sqm.vault is not None)] + vault = np.unique(np.concatenate(vaults)) + out = xr.DataArray(vault, dims=TIME, name=TIME) + else: + out = None + return out + + class Collection(list): """Internal representation of a collection of multiple arrays. + To be used in conjunction with the `semantique.processor.QueryProcessor` or + `semantique.processor.FakeProcessor`. + + Parameters + ---------- + list_obj : :obj:`list` of :obj:`xarray.DataArray` + The elements of the collection stored in a list. + + """ + + def __init__(self, list_obj): + super(Collection, self).__init__(list_obj) + + @property + def sq(self): + """self: Semantique accessor. + + This is merely provided to ensure compatible behaviour with + :obj:`Array ` objects, which are + modelled as an accessor to :obj:`xarray.DataArray` objects. It allows to + call all other properties and methods through the prefix ``.sq``. + + """ + return self + + @property + def is_empty(self): + """:obj:`bool`: Are all elements of the collection empty arrays.""" + return all([x.sq.is_empty for x in self]) + + def compose(self, track_types = True, **kwargs): + """Apply the compose verb to the collection. + + The compose verb creates a categorical composition from the arrays in the + collection. + + Parameters + ----------- + track_types : :obj:`bool` + Should it be checked if all arrays in the collection have value type + *binary*? + **kwargs: + Ignored. + + Returns + -------- + :obj:`xarray.DataArray` + + Raises + ------ + :obj:`exceptions.InvalidValueTypeError` + If ``track_types = True`` and the value type of at least one of the + arrays in the collection is not *binary*. + + """ + if track_types: + value_types = [x.sq.value_type for x in self] + if not all([x is None or x == "binary" for x in value_types]): + raise exceptions.InvalidValueTypeError( + f"Element value types for 'compose' should all be 'binary', " + f"not {np.unique(value_types).tolist()} " + ) + def index_(idx, obj): + return xr.where(obj, idx + 1, np.nan).where(obj.notnull()) + enumerated = enumerate(self) + indexed = [index_(i, x) for i, x in enumerated] + out = indexed[0] + for x in indexed[1:]: + out = out.combine_first(x) + labels = [x.name for x in self] + idxs = range(1, len(labels) + 1) + out.sq.value_type = "nominal" + out.sq.value_labels = {k:v for k, v in zip(idxs, labels)} + return out + + def concatenate(self, dimension, track_types = True, + vtype = "nominal", **kwargs): + """Apply the concatenate verb to the collection. + + The concatenate verb concatenates the arrays in the collection along a new + or existing dimension. + + Parameters + ----------- + dimension : :obj:`str` + Name of the dimension to concatenate along. To concatenate along an + existing dimension, it should be a dimension that exists in all + collection members. To concatenate along a new dimension, it should be + a dimension that does not exist in any of the collection members. + track_types : :obj:`bool` + Should it be checked if all arrays in the collection have the same value + type? + vtype : :obj:`str`: + If the arrays are concatenated along a new dimension, what should the + value type of its dimension coordinates be? Valid options are + "continuous", "discrete", "nominal", "ordinal" and "binary". + **kwargs: + Ignored. + + Returns + -------- + :obj:`xarray.DataArray` + + Raises + ------ + :obj:`exceptions.InvalidValueTypeError` + If ``track_types = True`` and the value types of the arrays in the + collection are not all equal to each other. + + :obj:`exceptions.MissingDimensionError` + If the dimension to concatenate along exists in some but not all + arrays in the collection. + + :obj:`exceptions.ReservedDimensionError` + If the new dimension to concatenate along has one of the names that + semantique reserves for the temporal dimension or spatial dimensions. + + """ + # Check value types. + if track_types: + value_types = [x.sq.value_type for x in self] + if not all([x is None or x == value_types[0] for x in value_types]): + raise exceptions.InvalidValueTypeError( + f"Element value types for 'concatenate' should all be the same, " + f"not {np.unique(value_types).tolist()} " + ) + # Concatenate. + has_dim = [dimension in x.dims for x in self] + if any(has_dim): + if all(has_dim): + # Concatenate over existing dimension. + raw = xr.concat([x for x in self], dimension) + has_duplicated_coords = any(raw.get_index(dimension).duplicated()) + if has_duplicated_coords: + # If arrays have overlapping coordinates for this dimension: + # --> Choose the first non-missing value to be in the output. + # Do this by: + # --> Creating groups for each coordinate value. + # --> Merge these groups using the "first" reducer. + # --> Concatenate the merged groups back together. + def _merge_dups(obj): + coords = obj.get_index(dimension).values + if len(coords) > 1: + dups = [obj.isel({dimension: i}) for i, x in enumerate(coords)] + return Collection(dups).sq.merge(reducers.first_) + else: + return obj + groups = list(raw.groupby(dimension, squeeze=False)) + clean = xr.concat([_merge_dups(x[1]) for x in groups], dimension) + else: + clean = raw + out = clean.sortby(dimension) + else: + raise exceptions.MissingDimensionError( + f"Concatenation dimension '{dimension}' exists in some but not all " + "arrays in the collection" + ) + else: + # Concatenate over new dimension. + if dimension in [TIME, SPACE, X, Y]: + raise exceptions.ReservedDimensionError( + f"Dimension name '{dimension}' is reserved and should not be used " + "as a new dimension name" + ) + names = [x.name for x in self] + coords = pd.Index(names, name = dimension, tupleize_cols = False) + out = xr.concat([x for x in self], coords) + out[dimension].sq.value_type = vtype + out[dimension].sq.value_labels = {x:x for x in names} + # Update value labels. + if track_types: + orig_labs = [x.sq.value_labels for x in self] + if None not in orig_labs: + # If keys are duplicated first array should be prioritized. + # Therefore we first reverse the list of value label dictionaries. + orig_labs.reverse() + new_labs = {k:v for x in orig_labs for k,v in x.items()} + out.sq.value_labels = new_labs + else: + del out.sq.value_labels + else: + del out.sq.value_labels + # Return. + return out + + def merge(self, reducer, track_types = True, **kwargs): + """Apply the merge verb to the collection. + + The merge verb merges the pixel values of all arrays in the collection into + a single value per pixel. + + Parameters + ----------- + reducer : :obj:`str` + Name of the reducer function to be applied in order to reduce multiple + values per pixel into a single value. Should either be one of the + built-in reducers of semantique, or a user-defined reducer which will + be provided to the query processor when executing the query recipe. + track_types : :obj:`bool` + Should it be checked if all arrays in the collection have the same value + type, and should the reducer promote the value type of the output + object, based on the value type of the input objects? + **kwargs: + Additional keyword arguments passed on to the reducer function. + + Returns + -------- + :obj:`xarray.DataArray` + + Raises + ------ + :obj:`exceptions.InvalidValueTypeError` + If ``track_types = True`` and the value types of the arrays in the + collection are not all equal to each other. + + """ + if track_types: + value_types = [x.sq.value_type for x in self] + if not all([x is None or x == value_types[0] for x in value_types]): + raise exceptions.InvalidValueTypeError( + f"Element value types for 'merge' should all be the same, " + f"not {np.unique(value_types).tolist()} " + ) + dim = "__sq__" # Temporary dimension. + concat = self.concatenate(dim, track_types = False) + out = concat.sq.reduce(reducer, dim, track_types, **kwargs) + return out + + def evaluate(self, operator, y = None, track_types = True, **kwargs): + """Apply the evaluate verb to all arrays in the collection. + + See :meth:`Array.evaluate` + + Returns + ------- + :obj:`Collection` + + """ + args = tuple([operator, y, track_types]) + out = copy.deepcopy(self) + out[:] = [x.sq.evaluate(*args, **kwargs) for x in out] + return out + + def extract(self, dimension, component = None, **kwargs): + """Apply the extract verb to all arrays in the collection. + + See :meth:`Array.extract` + + Returns + ------- + :obj:`Collection` + + """ + args = tuple([dimension, component]) + out = copy.deepcopy(self) + out[:] = [x.sq.extract(*args, **kwargs) for x in out] + return out + + def filter(self, filterer, track_types = True, **kwargs): + """Apply the filter verb to all arrays in the collection. + + See :meth:`Array.filter` + + Returns + ------- + :obj:`Collection` + + """ + args = tuple([filterer, track_types]) + out = copy.deepcopy(self) + out[:] = [x.sq.filter(*args, **kwargs) for x in out] + return out + + def assign(self, y, at = None, track_types = True, **kwargs): + """Apply the assign verb to all arrays in the collection. + + See :meth:`Array.assign` + + Returns + ------- + :obj:`Collection` + + """ + args = tuple([y, at, track_types]) + out = copy.deepcopy(self) + out[:] = [x.sq.assign(*args, **kwargs) for x in out] + return out + + def reduce(self, reducer, dimension = None, track_types = True, **kwargs): + """Apply the reduce verb to all arrays in the collection. + + See :meth:`Array.reduce` + + Returns + ------- + :obj:`Collection` + + """ + args = tuple([reducer, dimension, track_types]) + out = copy.deepcopy(self) + out[:] = [x.sq.reduce(*args, **kwargs) for x in out] + return out + + def shift(self, dimension, steps, **kwargs): + """Apply the shift verb to all arrays in the collection. + + See :meth:`Array.shift` + + Returns + ------- + :obj:`Collection` + + """ + args = tuple([dimension, steps]) + out = copy.deepcopy(self) + out[:] = [x.sq.shift(*args, **kwargs) for x in out] + return out + + def smooth(self, reducer, dimension, size, limit = 2, fill = False, + track_types = True, **kwargs): + """Apply the smooth verb to all arrays in the collection. + + See :meth:`Array.smooth` + + Returns + ------- + :obj:`Collection` + + """ + args = tuple([reducer, dimension, size, limit, fill, track_types]) + out = copy.deepcopy(self) + out[:] = [x.sq.smooth(*args, **kwargs) for x in out] + return out + + def trim(self, dimension = None, **kwargs): + """Apply the trim verb to all arrays in the collection. + + See :meth:`Array.trim` + + Returns + ------- + :obj:`Collection` + + """ + out = copy.deepcopy(self) + out[:] = [x.sq.trim(dimension, **kwargs) for x in out] + return out + + def delineate(self, track_types = True, **kwargs): + """Apply the delineate verb to all arrays in the collection. + + See :meth:`Array.delineate` + + Returns + ------- + :obj:`Collection` + + """ + out = copy.deepcopy(self) + out[:] = [x.sq.delineate(track_types, **kwargs) for x in out] + return out + + def fill(self, dimension, method, track_types = True, **kwargs): + """Apply the fill verb to all arrays in the collection. + + See :meth:`Array.fill` + + Returns + ------- + :obj:`Collection` + + """ + args = tuple([dimension, method, track_types]) + out = copy.deepcopy(self) + out[:] = [x.sq.fill(*args, **kwargs) for x in out] + return out + + def name(self, value, **kwargs): + """Apply the name verb to all arrays in the collection. + + See :meth:`Array.name` + + Returns + ------- + :obj:`Collection` + + """ + out = copy.deepcopy(self) + out[:] = [x.sq.name(value, **kwargs) for x in out] + return out + + def apply_custom(self, verb, track_types = True, **kwargs): + """Apply a user-defined verb to all arrays in the collection. + + See :meth:`Array.apply_custom` + + Returns + ------- + :obj:`Collection` + + """ + args = tuple([verb, track_types]) + out = copy.deepcopy(self) + out[:] = [x.sq.apply_custom(*args, **kwargs) for x in out] + return out + + def regularize(self): + """Regularize the spatial dimension of all arrays in the collection. + + See :meth:`Array.regularize` + + Returns + ------- + :obj:`Collection` + + """ + out = copy.deepcopy(self) + out[:] = [x.sq.regularize() for x in out] + return out + + def stack_spatial_dims(self): + """Stack the spatial dimensions for all arrays in the collection. + + See :meth:`Array.stack_spatial_dims` + + Returns + ------- + :obj:`Collection` + + """ + out = copy.deepcopy(self) + out[:] = [x.sq.stack_spatial_dims() for x in out] + return out + + def unstack_spatial_dims(self): + """Unstack the spatial dimensions for all arrays in the collection. + + See :meth:`Array.unstack_spatial_dims` + + Returns + ------- + :obj:`Collection` + + """ + out = copy.deepcopy(self) + out[:] = [x.sq.unstack_spatial_dims() for x in out] + return out + +class MetaCollection(Collection): + """Internal representation of a collection of multiple arrays. + To be used in conjunction with the `semantique.processor.FilterProcessor`. + + Note: Track-type attributes are kept to have a compatible structure with the + `semantique.processor.Collection` but are effectively ignored. Parameters ---------- @@ -1479,26 +2805,109 @@ class Collection(list): """ def __init__(self, list_obj): - super(Collection, self).__init__(list_obj) + # Only active objects should be given any weight when processing MetaCollections + # Init merges active objects & sets values of inactive obj to extent of active obj + if any([x.sqm.active for x in list_obj]): + # Create empty response obj. + tidxs = [] + for arr in list_obj: + if arr.sqm.active: + # Reduce arrays to 3 dimensions. + if arr.ndim > 3: + dim = [x for x in arr.dims if x not in ["time", "x", "y"]] + assert len(dim) == 1, "Only one dimension can be reduced" + arr = arr.sqm.reduce(reducers.any_, dim[0], track_types=False) + # Extract temporal indices from array itself. + if "time" in arr.dims: + reduce_dims = [x for x in arr.dims if x != "time"] + tidxs.append(arr.time[arr.isnull().sum(reduce_dims) == 0]) + # Extract saved results from vault. + if arr.sqm.vault is not None: + tidxs.append(arr.sqm.vault) + # Combine results. + if len(tidxs) > 1: + tidxs = np.concatenate(tidxs) + tidxs = xr.DataArray(np.unique(tidxs), dims="time", name="time") + # Broadcast to equal time dimension. + if ( + any(["time" in x.dims for x in list_obj]) and + not all(["time" in x.dims for x in list_obj]) + ): + for i,arr in enumerate(list_obj): + if "time" not in arr.dims: + list_obj[i] = arr.expand_dims({'time': tidxs}) + # Fill inactive arrays with ones at coords where tidxs are given, else NaN. + for x in list_obj: + if not x.sqm.active: + x.values = xr.where(x.time.isin(tidxs), xr.ones_like(x), xr.full_like(x, np.NaN)) + # Create response object. + super(MetaCollection, self).__init__(list_obj) + self._active = True + self._vault = self._merge_arrays_vaults(list_obj) + else: + # Create response object. + super(MetaCollection, self).__init__(list_obj) + self._active = False + self._vault = None + self._locked = True if any([x.sqm.locked for x in list_obj]) else False @property - def sq(self): - """self: Semantique accessor. - - This is merely provided to ensure compatible behaviour with - :obj:`Array ` objects, which are - modelled as an accessor to :obj:`xarray.DataArray` objects. It allows to - call all other properties and methods through the prefix ``.sq``. - - """ + def sqm(self): + """self: Semantique accessor. This is merely provided to ensure compatible + behaviour with :obj:`Array ` objects.""" return self @property def is_empty(self): """:obj:`bool`: Are all elements of the collection empty arrays.""" - return all([x.sq.is_empty for x in self]) + return all([x.sqm.is_empty for x in self]) - def compose(self, track_types = True, **kwargs): + @property + def active(self): + """:obj:`bool`: Is the current object actively monitored? + This guides how the object is evaluated in some operations + Active objects should be those that contain data from the + current `watch_layer` (processor.core.FilterProcessor). + """ + return self._active + + @active.setter + def active(self, value): + self._active = value + + @active.deleter + def active(self): + self._active = None + + @property + def locked(self): + """:obj:`bool`: Is the evaluation of filter operations restricted? + If locked, filter operations will be ignored.""" + return self._locked + + @locked.setter + def locked(self, value): + self._locked = value + + @locked.deleter + def locked(self): + self._locked = None + + @property + def vault(self): + """:obj:`list`: Tresor which can be used to store timestamps + if the time dimension in the array itself has been reduced away.""" + return self._vault + + @vault.setter + def vault(self, value): + self._vault = value + + @vault.deleter + def vault(self): + self._vault = None + + def compose(self, track_types = False, **kwargs): """Apply the compose verb to the collection. The compose verb creates a categorical composition from the arrays in the @@ -1516,34 +2925,11 @@ def compose(self, track_types = True, **kwargs): -------- :obj:`xarray.DataArray` - Raises - ------ - :obj:`exceptions.InvalidValueTypeError` - If ``track_types = True`` and the value type of at least one of the - arrays in the collection is not *binary*. - """ - if track_types: - value_types = [x.sq.value_type for x in self] - if not all([x is None or x == "binary" for x in value_types]): - raise exceptions.InvalidValueTypeError( - f"Element value types for 'compose' should all be 'binary', " - f"not {np.unique(value_types).tolist()} " - ) - def index_(idx, obj): - return xr.where(obj, idx + 1, np.nan).where(obj.notnull()) - enumerated = enumerate(self) - indexed = [index_(i, x) for i, x in enumerated] - out = indexed[0] - for x in indexed[1:]: - out = out.combine_first(x) - labels = [x.name for x in self] - idxs = range(1, len(labels) + 1) - out.sq.value_type = "nominal" - out.sq.value_labels = {k:v for k, v in zip(idxs, labels)} + out = self.sqm.merge(reducers.any_, track_types=track_types) return out - def concatenate(self, dimension, track_types = True, + def concatenate(self, dimension, track_types = False, vtype = "nominal", **kwargs): """Apply the concatenate verb to the collection. @@ -1573,10 +2959,6 @@ def concatenate(self, dimension, track_types = True, Raises ------ - :obj:`exceptions.InvalidValueTypeError` - If ``track_types = True`` and the value types of the arrays in the - collection are not all equal to each other. - :obj:`exceptions.MissingDimensionError` If the dimension to concatenate along exists in some but not all arrays in the collection. @@ -1586,74 +2968,18 @@ def concatenate(self, dimension, track_types = True, semantique reserves for the temporal dimension or spatial dimensions. """ - # Check value types. - if track_types: - value_types = [x.sq.value_type for x in self] - if not all([x is None or x == value_types[0] for x in value_types]): - raise exceptions.InvalidValueTypeError( - f"Element value types for 'concatenate' should all be the same, " - f"not {np.unique(value_types).tolist()} " - ) - # Concatenate. - has_dim = [dimension in x.dims for x in self] - if any(has_dim): - if all(has_dim): - # Concatenate over existing dimension. - raw = xr.concat([x for x in self], dimension) - has_duplicated_coords = any(raw.get_index(dimension).duplicated()) - if has_duplicated_coords: - # If arrays have overlapping coordinates for this dimension: - # --> Choose the first non-missing value to be in the output. - # Do this by: - # --> Creating groups for each coordinate value. - # --> Merge these groups using the "first" reducer. - # --> Concatenate the merged groups back together. - def _merge_dups(obj): - coords = obj.get_index(dimension).values - if len(coords) > 1: - dups = [obj.isel({dimension: i}) for i, x in enumerate(coords)] - return Collection(dups).sq.merge(reducers.first_) - else: - return obj - groups = list(raw.groupby(dimension, squeeze=False)) - clean = xr.concat([_merge_dups(x[1]) for x in groups], dimension) - else: - clean = raw - out = clean.sortby(dimension) - else: - raise exceptions.MissingDimensionError( - f"Concatenation dimension '{dimension}' exists in some but not all " - "arrays in the collection" - ) - else: - # Concatenate over new dimension. - if dimension in [TIME, SPACE, X, Y]: - raise exceptions.ReservedDimensionError( - f"Dimension name '{dimension}' is reserved and should not be used " - "as a new dimension name" - ) - names = [x.name for x in self] - coords = pd.Index(names, name = dimension, tupleize_cols = False) - out = xr.concat([x for x in self], coords) - out[dimension].sq.value_type = vtype - out[dimension].sq.value_labels = {x:x for x in names} - # Update value labels. - if track_types: - orig_labs = [x.sq.value_labels for x in self] - if None not in orig_labs: - # If keys are duplicated first array should be prioritized. - # Therefore we first reverse the list of value label dictionaries. - orig_labs.reverse() - new_labs = {k:v for x in orig_labs for k,v in x.items()} - out.sq.value_labels = new_labs - else: - del out.sq.value_labels - else: - del out.sq.value_labels - # Return. + out = super(MetaCollection, self).concatenate( + dimension, + track_types=track_types, + vtype=vtype, + **kwargs + ) + out.sqm.active = self.active + out.sqm.locked = self.locked + out.sqm.vault = self.vault return out - def merge(self, reducer, track_types = True, **kwargs): + def merge(self, reducer, track_types = False, **kwargs): """Apply the merge verb to the collection. The merge verb merges the pixel values of all arrays in the collection into @@ -1677,26 +3003,13 @@ def merge(self, reducer, track_types = True, **kwargs): -------- :obj:`xarray.DataArray` - Raises - ------ - :obj:`exceptions.InvalidValueTypeError` - If ``track_types = True`` and the value types of the arrays in the - collection are not all equal to each other. - """ - if track_types: - value_types = [x.sq.value_type for x in self] - if not all([x is None or x == value_types[0] for x in value_types]): - raise exceptions.InvalidValueTypeError( - f"Element value types for 'merge' should all be the same, " - f"not {np.unique(value_types).tolist()} " - ) - dim = "__sq__" # Temporary dimension. - concat = self.concatenate(dim, track_types = False) - out = concat.sq.reduce(reducer, dim, track_types, **kwargs) + dim = "__sqm__" # Temporary dimension. + concat = self.concatenate(dim, track_types = track_types) + out = concat.sqm.reduce(reducer, dim, track_types, **kwargs) return out - def evaluate(self, operator, y = None, track_types = True, **kwargs): + def evaluate(self, operator, y = None, track_types = False, **kwargs): """Apply the evaluate verb to all arrays in the collection. See :meth:`Array.evaluate` @@ -1708,7 +3021,7 @@ def evaluate(self, operator, y = None, track_types = True, **kwargs): """ args = tuple([operator, y, track_types]) out = copy.deepcopy(self) - out[:] = [x.sq.evaluate(*args, **kwargs) for x in out] + out[:] = [x.sqm.evaluate(*args, **kwargs) for x in out] return out def extract(self, dimension, component = None, **kwargs): @@ -1723,10 +3036,10 @@ def extract(self, dimension, component = None, **kwargs): """ args = tuple([dimension, component]) out = copy.deepcopy(self) - out[:] = [x.sq.extract(*args, **kwargs) for x in out] + out[:] = [x.sqm.extract(*args, **kwargs) for x in out] return out - def filter(self, filterer, track_types = True, **kwargs): + def filter(self, filterer, track_types = False, **kwargs): """Apply the filter verb to all arrays in the collection. See :meth:`Array.filter` @@ -1738,10 +3051,10 @@ def filter(self, filterer, track_types = True, **kwargs): """ args = tuple([filterer, track_types]) out = copy.deepcopy(self) - out[:] = [x.sq.filter(*args, **kwargs) for x in out] + out[:] = [x.sqm.filter(*args, **kwargs) for x in out] return out - def assign(self, y, at = None, track_types = True, **kwargs): + def assign(self, y, at = None, track_types = False, **kwargs): """Apply the assign verb to all arrays in the collection. See :meth:`Array.assign` @@ -1753,10 +3066,10 @@ def assign(self, y, at = None, track_types = True, **kwargs): """ args = tuple([y, at, track_types]) out = copy.deepcopy(self) - out[:] = [x.sq.assign(*args, **kwargs) for x in out] + out[:] = [x.sqm.assign(*args, **kwargs) for x in out] return out - def reduce(self, reducer, dimension = None, track_types = True, **kwargs): + def reduce(self, reducer, dimension = None, track_types = False, **kwargs): """Apply the reduce verb to all arrays in the collection. See :meth:`Array.reduce` @@ -1768,7 +3081,8 @@ def reduce(self, reducer, dimension = None, track_types = True, **kwargs): """ args = tuple([reducer, dimension, track_types]) out = copy.deepcopy(self) - out[:] = [x.sq.reduce(*args, **kwargs) for x in out] + list_obj = [x.sqm.reduce(*args, **kwargs) for x in out] + out = MetaCollection(list_obj) return out def shift(self, dimension, steps, **kwargs): @@ -1783,11 +3097,11 @@ def shift(self, dimension, steps, **kwargs): """ args = tuple([dimension, steps]) out = copy.deepcopy(self) - out[:] = [x.sq.shift(*args, **kwargs) for x in out] + out[:] = [x.sqm.shift(*args, **kwargs) for x in out] return out def smooth(self, reducer, dimension, size, limit = 2, fill = False, - track_types = True, **kwargs): + track_types = False, **kwargs): """Apply the smooth verb to all arrays in the collection. See :meth:`Array.smooth` @@ -1799,7 +3113,7 @@ def smooth(self, reducer, dimension, size, limit = 2, fill = False, """ args = tuple([reducer, dimension, size, limit, fill, track_types]) out = copy.deepcopy(self) - out[:] = [x.sq.smooth(*args, **kwargs) for x in out] + out[:] = [x.sqm.smooth(*args, **kwargs) for x in out] return out def trim(self, dimension = None, **kwargs): @@ -1813,10 +3127,10 @@ def trim(self, dimension = None, **kwargs): """ out = copy.deepcopy(self) - out[:] = [x.sq.trim(dimension, **kwargs) for x in out] + out[:] = [x.sqm.trim(dimension, **kwargs) for x in out] return out - def delineate(self, track_types = True, **kwargs): + def delineate(self, track_types = False, **kwargs): """Apply the delineate verb to all arrays in the collection. See :meth:`Array.delineate` @@ -1827,10 +3141,10 @@ def delineate(self, track_types = True, **kwargs): """ out = copy.deepcopy(self) - out[:] = [x.sq.delineate(track_types, **kwargs) for x in out] + out[:] = [x.sqm.delineate(track_types, **kwargs) for x in out] return out - def fill(self, dimension, method, track_types = True, **kwargs): + def fill(self, dimension, method, track_types = False, **kwargs): """Apply the fill verb to all arrays in the collection. See :meth:`Array.fill` @@ -1842,7 +3156,7 @@ def fill(self, dimension, method, track_types = True, **kwargs): """ args = tuple([dimension, method, track_types]) out = copy.deepcopy(self) - out[:] = [x.sq.fill(*args, **kwargs) for x in out] + out[:] = [x.sqm.fill(*args, **kwargs) for x in out] return out def name(self, value, **kwargs): @@ -1856,10 +3170,10 @@ def name(self, value, **kwargs): """ out = copy.deepcopy(self) - out[:] = [x.sq.name(value, **kwargs) for x in out] + out[:] = [x.sqm.name(value, **kwargs) for x in out] return out - def apply_custom(self, verb, track_types = True, **kwargs): + def apply_custom(self, verb, track_types = False, **kwargs): """Apply a user-defined verb to all arrays in the collection. See :meth:`Array.apply_custom` @@ -1871,7 +3185,7 @@ def apply_custom(self, verb, track_types = True, **kwargs): """ args = tuple([verb, track_types]) out = copy.deepcopy(self) - out[:] = [x.sq.apply_custom(*args, **kwargs) for x in out] + out[:] = [x.sqm.apply_custom(*args, **kwargs) for x in out] return out def regularize(self): @@ -1885,7 +3199,7 @@ def regularize(self): """ out = copy.deepcopy(self) - out[:] = [x.sq.regularize() for x in out] + out[:] = [x.sqm.regularize() for x in out] return out def stack_spatial_dims(self): @@ -1899,7 +3213,7 @@ def stack_spatial_dims(self): """ out = copy.deepcopy(self) - out[:] = [x.sq.stack_spatial_dims() for x in out] + out[:] = [x.sqm.stack_spatial_dims() for x in out] return out def unstack_spatial_dims(self): @@ -1913,5 +3227,15 @@ def unstack_spatial_dims(self): """ out = copy.deepcopy(self) - out[:] = [x.sq.unstack_spatial_dims() for x in out] + out[:] = [x.sqm.unstack_spatial_dims() for x in out] + return out + + def _merge_arrays_vaults(self, arrays): + """Merge vaults of arrays by taking the union of their elements.""" + if any([x.sqm.active and x.sqm.vault is not None for x in arrays]): + vaults = [x.sqm.vault for x in arrays if (x.sqm.active and x.sqm.vault is not None)] + vault = np.unique(np.concatenate(vaults)) + out = xr.DataArray(vault, dims="time", name="time") + else: + out = None return out \ No newline at end of file diff --git a/semantique/processor/core.py b/semantique/processor/core.py index 10a307e5..bd147c06 100644 --- a/semantique/processor/core.py +++ b/semantique/processor/core.py @@ -1,5 +1,6 @@ import geopandas as gpd import numpy as np +import pandas as pd import copy import inspect import logging @@ -8,7 +9,9 @@ import warnings import xarray as xr +from datetime import datetime from semantique import exceptions +from semantique.dimensions import TIME, SPACE, X, Y from semantique.processor import arrays, operators, reducers, values, utils logger = logging.getLogger(__name__) @@ -67,9 +70,9 @@ def __init__(self, recipe, datacube, mapping, extent, custom_verbs = None, self.custom_reducers = custom_reducers self.preview = preview if cache is None: - self.cache = Cache() + self.cache = Cache() else: - self.cache = cache + self.cache = cache @property def response(self): @@ -1331,6 +1334,433 @@ def handle_layer(self, block): self._cache.build(block["reference"]) return xr.full_like(self._extent, np.nan) +class FilterProcessor(QueryProcessor): + """ + Worker that processes a semantic query recipe to retrieve the required temporal + extent of all layers that are used in the recipe. + + Parameters + ---------- + recipe : QueryRecipe + The query recipe to be processed. + datacube : Datacube + The datacube instance to process the query against. + mapping : Mapping + The mapping instance to process the query against. + extent : :obj:`xarray.DataArray` + The spatio-temporal extent in which the query should be processed. Should + be given as an array with a temporal dimension and two spatial dimensions + such as returned by + :func:`parse_extent `. + custom_verbs : :obj:`dict`, optional + User-defined verbs that may be used when executing the query recipe in + addition to the built-in verbs in semantique. + custom_operators : :obj:`dict`, optional + User-defined operator functions that may be used when evaluating + expressions with the evaluate verb in addition to the built-in operators + in semantique. Built-in operators with the same name will be overwritten. + custom_reducers : :obj:`dict`, optional + User-defined reducer functions that may be used when reducing array + dimensions with the reduce verb in addition to the built-in reducers in + semantique. Built-in reducers with the same name will be overwritten. + track_types : :obj:`bool` + Should the query processor keep track of the value type of arrays + when applying processes, and promote them if necessary? This option is + always disabled for the FakeProcessor since it doesn't evaualte processes + and therefore can't check the validity of the types of the arrays. + preview : :obj:`bool` + Run the query processor with reduced resolution to test the recipe execution. + Preview-runs are necessary if cache should be used. + cache : :obj:`Cache` + The cache object that is used to store data layers. + watch_layer : :obj:`str` + The layer that is currently being focussed on. All temporal filter operations + are analyzed regarding the effect they are having on this layer. + meta_timestamps : :obj:`DatetimeIndex` or :obj:`Series` + The timestamps that are used as a starting point to determine the final + temporal extent. The timestamps will be filtered by the temporal filters. + If not provided, a default range from 1960 to the current time in hourly + intervals is used to evaluate the temporal filters. + """ + def __init__(self, recipe, datacube, mapping, extent, custom_verbs = None, + custom_operators = None, custom_reducers = None, track_types = True, + preview = False, cache = None, watch_layer = None, meta_timestamps = None): + super(FilterProcessor, self).__init__( + recipe, datacube, mapping, extent, custom_verbs=custom_verbs, + custom_operators=custom_operators, custom_reducers=custom_reducers, + track_types=track_types, preview=preview, cache=cache + ) + self.track_types = False + self.watch_layer = watch_layer + if meta_timestamps is not None: + self.meta_timestamps = meta_timestamps + else: + self.meta_timestamps = pd.date_range( + start = '1960-01-01', + end = datetime.now(), + freq = 'h' + ) + self.meta_timestamps = pd.to_datetime(self.meta_timestamps).sort_values() + + @property + def crs(self): + """:obj:`pyproj.crs.CRS`: Spatial coordinate reference system in which the + query should be processed.""" + return self._extent.sqm.crs + + @property + def spatial_resolution(self): + """:obj:`list`: Spatial resolution in which the query should be + processed.""" + return self._extent.sqm.spatial_resolution + + @property + def tz(self): + """:obj:`datetime.tzinfo`: Time zone in which the query should be + processed.""" + return self._extent.sqm.tz + + @property + def watch_layer(self): + """:obj:`str`: The layer that is currently being focussed on.""" + return self._watch_layer + + @watch_layer.setter + def watch_layer(self, value): + self._watch_layer = value + + @property + def meta_timestamps(self): + """:obj:`DatetimeIndex` or :obj:`Series`: The timestamps that are used as + a starting point to determine the final temporal extent.""" + return self._meta_timestamps + + @meta_timestamps.setter + def meta_timestamps(self, value): + self._meta_timestamps = value + + def execute(self): + """Execute a semantic query. + + During query execution, the query processor executes the result + instructions of the query recipe. It solves all references, evaluates them + into arrays, and applies the defined actions to them. + + Returns + ------- + :obj:`FilterProcessor` + An updated filter processor instance, with a :attr:`response` property + containing the resulting timestamps that are processed in the recipe. + + """ + logger.info("Started executing the semantic query") + # Run fake processor to get a dict of all layers to init response object + self.fp = FakeProcessor( + recipe=self.recipe, + datacube=self.datacube, + mapping=self.mapping, + extent=self.extent, + track_types=self.track_types, + custom_verbs=self.custom_verbs, + custom_operators=self.custom_operators, + custom_reducers=self.custom_reducers, + preview=self.preview, + cache=self.cache + ) + _ = self.fp.optimize().execute() + lyrs = [list(x) for x in set(tuple(x) for x in self.fp.cache.seq)] + self._response = {"_".join(x): {} for x in lyrs} + if self._contains_filter(self.recipe): + # Execute instructions for each layer & result in the recipe. + for lyr in lyrs: + self.watch_layer = "_".join(lyr) + logger.info(f"Evaluate temporal filter for layer: '{lyr}'") + for x in self._recipe: + logger.info(f"Started executing result: '{x}'") + result = self.call_handler(self._recipe[x]) + result.name = x + self._response[self.watch_layer][x] = result + logger.info(f"Finished executing result: '{x}'") + logger.info("Finished executing the semantic query") + # Omit non-active results. + for lyr,arr_dict in self._response.items(): + self._response[lyr] = { + k: v for k, v in arr_dict.items() if v.sqm.active + } + # Combine temporal extents of Collections. + for lyr,arr_dict in self._response.items(): + for k,v in arr_dict.items(): + if type(v.sqm).__name__ == 'MetaCollection': + self._response[lyr][k] = v.sqm.merge(reducers.any_, track_types=False) + # Retrieve valid temporal indices per layer and result. + # Valid indices are those that are not null. + for lyr,arr_dict in self._response.items(): + for res,arr in arr_dict.items(): + # Create empty response obj. + out = [] + # Reduce arrays to at most 3 dimensions. + if arr.ndim > 3: + dim = [x for x in arr.dims if x not in ["time", "x", "y"]] + assert len(dim) == 1, "Only one dimension can be reduced" + arr = arr.sqm.reduce(reducers.any_, dim[0], track_types=False) + # Extract temporal indices from array itself. + if "time" in arr.dims: + reduce_dims = [x for x in arr.dims if x != "time"] + out.append(arr.time[arr.isnull().sum(reduce_dims) == 0]) + # Extract saved results from vault. + if arr.sqm.vault is not None: + out.append(arr.sqm.vault) + # Combine results from array and vault. + if len(out) > 1: + out = xr.DataArray(np.unique(np.concatenate(out)), dims="time", name="time") + else: + out = out[0] + self._response[lyr][res] = out + # Create temporal extents' union over results for each layer. + for lyr,arr_dict in self._response.items(): + time_coords = [arr_dict[key].values for key in arr_dict] + merged_time = np.unique(np.concatenate(time_coords)) + merged_time.sort() + self._response[lyr] = pd.to_datetime(merged_time) + else: + # Shortcut if no temporal filter is present. + for lyr in lyrs: + self._response["_".join(lyr)] = pd.to_datetime(self.meta_timestamps) + # Return result. + self._response = {k: v for k, v in sorted(self._response.items())} + out = self._response + logger.debug(f"Responding:\n{out}") + return out + + def call_verb(self, name, params): + """Apply a verb to the active evaluation object. + + Parameters + ----------- + name : :obj:`str` + Name of the verb. + params : :obj:`dict` + Parameters to be forwarded to the verb. + + Returns + ------- + :obj:`xarray.DataArray` or + :obj:`MetaCollection ` + + """ + # Get the object to apply the verb to. + obj = self._get_eval_obj() + # Apply the verb. + verb = getattr(obj.sqm, name) + out = verb(**params) + # Warn when output array is empty. + try: + is_empty = out.sqm.is_empty + except AttributeError: + is_empty = out.is_empty + if is_empty: + warnings.warn( + f"Verb '{name}' returned an empty array" + ) + logger.debug(f"Applied verb {name}:\n{out}") + return out + + + def handle_concept(self, block): + """Handler for semantic concept references. + + Parameters + ---------- + block : :obj:`dict` + Textual representation of a building block of type "concept". + + Returns + ------- + :obj:`xarray.DataArray` + + """ + logger.debug(f"Translating concept {block['reference']}") + out = self._mapping.translate( + *block["reference"], + property = block["property"] if "property" in block else None, + extent = self._extent, + datacube = self._datacube, + eval_obj = self._get_eval_obj(), + processor = FilterProcessor, + preview = self._preview, + cache = self._cache, + custom_verbs = self._custom_verbs, + custom_operators = self._custom_operators, + custom_reducers = self._custom_reducers, + track_types = self._track_types, + watch_layer = self._watch_layer, + meta_timestamps = self._meta_timestamps, + ) + logger.debug(f"Translated concept {block['reference']}:\n{out}") + return out + + def handle_collection(self, block): + """Handler for collection references. + + Parameters + ---------- + block : :obj:`dict` + Textual representation of a building block of type "collection". + + Returns + ------- + :obj:`processor.arrays.MetaCollection` + + """ + logger.debug("Constructing collection of arrays") + list_obj = [self.call_handler(x) for x in block["elements"]] + out = arrays.MetaCollection(list_obj) + logger.debug(f"Constructed collection of:\n{[x.name for x in out]}") + return out + + def handle_label(self, block): + """Handler for value labels. + + Parameters + ---------- + block : :obj:`dict` + Textual representation of a building block of type "label". + + Returns + ------- + :obj:None + """ + return None + + def handle_layer(self, block): + """Handler for data layer references. + + Parameters + ---------- + block : :obj:`dict` + Textual representation of a building block of type "layer". + + Returns + ------- + :obj:`xarray.DataArray` + """ + self._cache.build(block["reference"]) + # Create a data array with the same shape as temporal extent. + x_coords = [0, 1] + y_coords = [0, 1] + data = np.ones((len(self.meta_timestamps), len(y_coords), len(x_coords))) + data_array = xr.DataArray( + data, + coords = { + TIME: self.meta_timestamps, + X: y_coords, + Y: x_coords, + "spatial_feats": ((Y, X), np.ones((len(y_coords), len(x_coords)))) + }, + dims = [TIME, Y, X] + ) + # Set relevant data array properties. + layer_key = "_".join(block["reference"]) + data_array.name = layer_key + if layer_key == self._watch_layer: + data_array.sqm.active = True + else: + data_array.sqm.active = False + data_array.sqm.locked = False + return data_array + + def handle_result(self, block): + """Handler for result references. + + Parameters + ---------- + block : :obj:`dict` + Textual representation of a building block of type "result". + + Returns + ------- + :obj:`xarray.DataArray` or + :obj:`MetaCollection ` + + Raises + ------ + :obj:`exceptions.UnknownResultError` + If the referenced result is not present in the query recipe. + + """ + name = block["name"] + logger.debug(f"Fetching result '{name}'") + # Process referenced result if it is not processed yet. + if name not in self._response[self.watch_layer]: + try: + instructions = self._recipe[name] + except KeyError: + raise exceptions.UnknownResultError( + f"Recipe does not contain result '{name}'" + ) + logger.info(f"Started executing result: '{name}'") + result = self.call_handler(instructions) + result.name = name + self._response[self.watch_layer][name] = result + logger.info(f"Finished executing result: '{name}'") + # Return referenced result. + out = self._response[self.watch_layer][name] + logger.debug(f"Fetched result '{name}':\n{out}") + return out + + def _contains_filter(self, params): + """Recursively check for temporal filter in nested dictionaries or lists. + + Parameters + ---------- + params : :obj:`dict` or :obj:`list` + The parameters to be checked. + + Returns + ------- + :obj:`bool` + True if temporal filter is found in the parameters, False otherwise. + """ + if isinstance(params, dict): + if params.get('type') == 'verb' and params.get('name') == 'filter': + if 'params' in params: + return self._contains_extract_time(params['params']) + for key, value in params.items(): + if isinstance(value, (dict, list)): + if self._contains_filter(value): + return True + elif isinstance(params, list): + for item in params: + if self._contains_filter(item): + return True + return False + + def _contains_extract_time(self, params): + """Recursively check for 'extract time' in nested dictionaries or lists. + + Parameters + ---------- + params : :obj:`dict` or :obj:`list` + The parameters to be checked. + + Returns + ------- + :obj:`bool` + True if 'extract time' is found in the parameters, False otherwise. + """ + if isinstance(params, dict): + if params.get('type') == 'verb' and params.get('name') == 'extract': + if 'params' in params and params['params'].get('dimension') == 'time': + return True + for key, value in params.items(): + if isinstance(value, (dict, list)): + if self._contains_extract_time(value): + return True + elif isinstance(params, list): + for item in params: + if self._contains_extract_time(item): + return True + return False class Cache: """Cache of retrieved data layers. diff --git a/semantique/processor/operators.py b/semantique/processor/operators.py index dbc8f7c2..d3ca2cff 100644 --- a/semantique/processor/operators.py +++ b/semantique/processor/operators.py @@ -7,6 +7,23 @@ from semantique.processor.values import Interval from semantique.dimensions import SPACE +def get_accessor(data, meta = False): + """Get the appropriate accessor for the data object. + + Parameters + ---------- + data : :obj:`xarray.DataArray` + The data object to get the accessor for. + meta : :obj:`bool` + Should the meta accessor be used? If False, the standard accessor is + used. The meta accessor is used to access MetaArray and MetaCollection + instead of Array and Collection objects. + """ + if meta: + return data.sqm + else: + return data.sq + # # UNIVARIATE OPERATORS # @@ -839,7 +856,7 @@ def to_radians_(x, track_types = True, **kwargs): # ALGEBRAIC OPERATORS # -def add_(x, y, track_types = True, **kwargs): +def add_(x, y, track_types = True, meta = False, **kwargs): """Add y to x. Parameters @@ -857,6 +874,8 @@ def add_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the MetaArray accessor be used? **kwargs: Ignored. @@ -887,13 +906,13 @@ def add_(x, y, track_types = True, **kwargs): promoter = TypePromoter(x, y, function = "add") promoter.check() f = lambda x, y: np.add(x, y) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) return out -def divide_(x, y, track_types = True, **kwargs): +def divide_(x, y, track_types = True, meta = False, **kwargs): """Divide x by y. Parameters @@ -911,6 +930,8 @@ def divide_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -941,13 +962,13 @@ def divide_(x, y, track_types = True, **kwargs): promoter = TypePromoter(x, y, function = "divide") promoter.check() f = lambda x, y: np.divide(x, np.where(np.equal(y, 0), np.nan, y)) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) return out -def multiply_(x, y, track_types = True, **kwargs): +def multiply_(x, y, track_types = True, meta = False, **kwargs): """Multiply x by y. Parameters @@ -965,6 +986,8 @@ def multiply_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -995,13 +1018,13 @@ def multiply_(x, y, track_types = True, **kwargs): promoter = TypePromoter(x, y, function = "multiply") promoter.check() f = lambda x, y: np.multiply(x, y) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) return out -def power_(x, y, track_types = True, **kwargs): +def power_(x, y, track_types = True, meta = False, **kwargs): """Raise x to the yth power. Parameters @@ -1019,6 +1042,8 @@ def power_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -1049,13 +1074,13 @@ def power_(x, y, track_types = True, **kwargs): promoter = TypePromoter(x, y, function = "power") promoter.check() f = lambda x, y: np.power(x, y) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) return out -def subtract_(x, y, track_types = True, **kwargs): +def subtract_(x, y, track_types = True, meta = False, **kwargs): """Subtract y from x. Parameters @@ -1073,6 +1098,8 @@ def subtract_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -1103,13 +1130,13 @@ def subtract_(x, y, track_types = True, **kwargs): promoter = TypePromoter(x, y, function = "subtract") promoter.check() f = lambda x, y: np.subtract(x, y) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) return out -def normalized_difference_(x, y, track_types = True, **kwargs): +def normalized_difference_(x, y, track_types = True, meta = False, **kwargs): """Compute the normalized difference between x and y. The normalized difference is used to calculate common indices in remote @@ -1131,6 +1158,8 @@ def normalized_difference_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -1161,7 +1190,7 @@ def normalized_difference_(x, y, track_types = True, **kwargs): promoter = TypePromoter(x, y, function = "normalized_difference") promoter.check() f = lambda x, y: np.divide(np.subtract(x, y), np.add(x, y)) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) @@ -1171,7 +1200,7 @@ def normalized_difference_(x, y, track_types = True, **kwargs): # BOOLEAN OPERATORS # -def and_(x, y, track_types = True, **kwargs): +def and_(x, y, track_types = True, meta = False, **kwargs): """Test if both x and y are true. Parameters @@ -1189,6 +1218,8 @@ def and_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -1221,13 +1252,13 @@ def and_(x, y, track_types = True, **kwargs): def f(x, y): y = utils.null_as_zero(y) return np.where(pd.notnull(x), np.logical_and(x, y), np.nan) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) return out -def or_(x, y, track_types = True, **kwargs): +def or_(x, y, track_types = True, meta = False, **kwargs): """Test if at least one of x and y are true. Parameters @@ -1245,6 +1276,8 @@ def or_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -1284,13 +1317,13 @@ def or_(x, y, track_types = True, **kwargs): def f(x, y): y = utils.null_as_zero(y) return np.where(pd.notnull(x), np.logical_or(x, y), np.nan) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) return out -def exclusive_or_(x, y, track_types = True, **kwargs): +def exclusive_or_(x, y, track_types = True, meta = False, **kwargs): """Test if either x or y is true but not both. Parameters @@ -1308,6 +1341,8 @@ def exclusive_or_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -1347,7 +1382,7 @@ def exclusive_or_(x, y, track_types = True, **kwargs): def f(x, y): y = utils.null_as_zero(y) return np.where(pd.notnull(x), np.logical_xor(x, y), np.nan) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) @@ -1357,7 +1392,7 @@ def f(x, y): # EQUALITY OPERATORS # -def equal_(x, y, track_types = True, **kwargs): +def equal_(x, y, track_types = True, meta = False, **kwargs): """Test if x is equal to y. Parameters @@ -1375,6 +1410,8 @@ def equal_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -1405,7 +1442,7 @@ def equal_(x, y, track_types = True, **kwargs): promoter = TypePromoter(x, y, function = "equal") promoter.check() f = lambda x, y: np.where(pd.notnull(x), np.equal(x, y), np.nan) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) @@ -1466,7 +1503,7 @@ def f(x, y): out = promoter.promote(out) return out -def not_equal_(x, y, track_types = True, **kwargs): +def not_equal_(x, y, track_types = True, meta = False, **kwargs): """Test if x is not equal to y. Parameters @@ -1484,6 +1521,8 @@ def not_equal_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -1514,7 +1553,7 @@ def not_equal_(x, y, track_types = True, **kwargs): promoter = TypePromoter(x, y, function = "not_equal") promoter.check() f = lambda x, y: np.where(pd.notnull(x), np.not_equal(x, y), np.nan) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) @@ -1579,7 +1618,7 @@ def f(x, y): # REGULAR RELATIONAL OPERATORS # -def greater_(x, y, track_types = True, **kwargs): +def greater_(x, y, track_types = True, meta = False, **kwargs): """Test if x is greater than y. Parameters @@ -1597,6 +1636,8 @@ def greater_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -1627,13 +1668,13 @@ def greater_(x, y, track_types = True, **kwargs): promoter = TypePromoter(x, y, function = "greater") promoter.check() f = lambda x, y: np.where(pd.notnull(x), np.greater(x, y), np.nan) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) return out -def greater_equal_(x, y, track_types = True, **kwargs): +def greater_equal_(x, y, track_types = True, meta = False, **kwargs): """Test if x is greater than or equal to y. Parameters @@ -1651,6 +1692,8 @@ def greater_equal_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -1681,13 +1724,13 @@ def greater_equal_(x, y, track_types = True, **kwargs): promoter = TypePromoter(x, y, function = "greater_equal") promoter.check() f = lambda x, y: np.where(pd.notnull(x), np.greater_equal(x, y), np.nan) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) return out -def less_(x, y, track_types = True, **kwargs): +def less_(x, y, track_types = True, meta = False, **kwargs): """Test if x is less than y. Parameters @@ -1705,6 +1748,8 @@ def less_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -1735,13 +1780,13 @@ def less_(x, y, track_types = True, **kwargs): promoter = TypePromoter(x, y, function = "less") promoter.check() f = lambda x, y: np.where(pd.notnull(x), np.less(x, y), np.nan) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) return out -def less_equal_(x, y, track_types = True, **kwargs): +def less_equal_(x, y, track_types = True, meta = False, **kwargs): """Test if x is less than or equal to y. Parameters @@ -1759,6 +1804,8 @@ def less_equal_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -1789,7 +1836,7 @@ def less_equal_(x, y, track_types = True, **kwargs): promoter = TypePromoter(x, y, function = "less_equal") promoter.check() f = lambda x, y: np.where(pd.notnull(x), np.less_equal(x, y), np.nan) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) @@ -1799,7 +1846,7 @@ def less_equal_(x, y, track_types = True, **kwargs): # SPATIAL RELATIONAL OPERATORS # -def intersects_(x, y, track_types = True, **kwargs): +def intersects_(x, y, track_types = True, meta = False, **kwargs): """Test if x spatially intersects with y. This is a specific spatial relational operator meant to be evaluated with @@ -1822,6 +1869,8 @@ def intersects_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -1858,10 +1907,10 @@ def intersects_(x, y, track_types = True, **kwargs): try: y = y.unary_union except AttributeError: - y = y.sq.trim().sq.grid_points.envelope.unary_union - values = x.sq.grid_points.intersects(y).astype(int) - coords = x.sq.stack_spatial_dims()[SPACE].coords - out = xr.DataArray(values, coords = coords).sq.unstack_spatial_dims() + y = get_accessor(get_accessor(y, meta).trim(), meta).grid_points.envelope.unary_union + values = get_accessor(x, meta).grid_points.intersects(y).astype(int) + coords = get_accessor(x, meta).stack_spatial_dims()[SPACE].coords + out = get_accessor(xr.DataArray(values, coords = coords), meta).unstack_spatial_dims() if track_types: out = promoter.promote(out) return out @@ -2065,7 +2114,7 @@ def f(x, y): # Note: These are used by the assign verb. -def assign_(x, y, track_types = True, **kwargs): +def assign_(x, y, track_types = True, meta = False, **kwargs): """Replace x by y. Parameters @@ -2083,6 +2132,8 @@ def assign_(x, y, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -2113,13 +2164,13 @@ def assign_(x, y, track_types = True, **kwargs): promoter = TypePromoter(x, y, function = "assign") promoter.check() f = lambda x, y: np.where(pd.notnull(x), y, utils.get_null(y)) - y = xr.DataArray(y).sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) out = xr.apply_ufunc(f, x, y, keep_attrs = True) if track_types: out = promoter.promote(out) return out -def assign_at_(x, y, z, track_types = True, **kwargs): +def assign_at_(x, y, z, track_types = True, meta = False, **kwargs): """Replace x by y where z is true. Parameters @@ -2141,6 +2192,8 @@ def assign_at_(x, y, z, track_types = True, **kwargs): track_types : :obj:`bool` Should the operator promote the value type of the output object, based on the value type of the input objects? + meta : :obj:`bool` + Should the meta accessor be used? **kwargs: Ignored. @@ -2171,8 +2224,8 @@ def assign_at_(x, y, z, track_types = True, **kwargs): promoter = TypePromoter(x, y, function = "assign_at") promoter.check() f = lambda x, y, z: np.where(np.logical_and(pd.notnull(z), z), y, x) - y = xr.DataArray(y).sq.align_with(x) - z = z.sq.align_with(x) + y = get_accessor(xr.DataArray(y), meta).align_with(x) + z = get_accessor(z, meta).align_with(x) out = xr.apply_ufunc(f, x, y, z, keep_attrs = True) if track_types: out = promoter.promote(out) diff --git a/semantique/recipe.py b/semantique/recipe.py index 34d1d12a..7b1c8771 100644 --- a/semantique/recipe.py +++ b/semantique/recipe.py @@ -1,113 +1,153 @@ -from semantique.processor.core import QueryProcessor, FakeProcessor +import semantique as sq +from semantique.processor.core import QueryProcessor, FakeProcessor, FilterProcessor from semantique.visualiser.visualise import show + class QueryRecipe(dict): - """Dict-like container to store instructions of a query recipe. - - Parameters - ---------- - results : :obj:`dict` of :obj:`ArrayProxy` - Dictionary containing result names as keys and result instructions as - values. If :obj:`None`, an empty recipe is constructed. - - Returns - ------- - :obj:`dict` of :obj:`ArrayProxy`: - The query recipe as a dictionary containing result names as keys and - result instructions as values. - - Examples - -------- - >>> import semantique as sq - >>> recipe = sq.QueryRecipe() - >>> recipe["map"] = sq.entity("water").reduce("time", "count") - >>> recipe["series"] = sq.entity("water").reduce("space", "count") - - """ - def __init__(self, results = None): - obj = {} if results is None else results - super(QueryRecipe, self).__init__(obj) - - def execute(self, datacube, mapping, space, time, run_preview = False, - cache_data = True, **config): - """Execute a query recipe. - - This function initializes a :obj:`processor.core.QueryProcessor` instance - and uses it to process the query. It runs through all distinct phases of - query processing: parsing, optimization and execution. + """Dict-like container to store instructions of a query recipe. Parameters ---------- - datacube : Datacube - The datacube instance to process the query against. - mapping : Mapping - The mapping instance to process the query against. - space : SpatialExtent - The spatial extent in which the query should be processed. - time : TemporalExtent - The temporal extent in which the query should be processed. - run_preview : :obj:`bool` - Should a preview run with reduced spatial resolution be performed? - A preview run enables to test if the recipe execution succeeds - and allows to inspect the results. - cache_data : :obj:`bool` - Should the query processor cache the data references as provided by the - mapped concepts? Enabling caching increases the memory footprint while - reducing the I/O time to retrieve data if the same data layer is - referenced multiple times. - **config: - Additional configuration parameters forwarded to - :func:`QueryProcessor.parse `. + results : :obj:`dict` of :obj:`ArrayProxy` + Dictionary containing result names as keys and result instructions as + values. If :obj:`None`, an empty recipe is constructed. Returns ------- - :obj:`dict` of :obj:`xarray.DataArray`: - The response of the query processor as a dictionary containing result - names as keys and result arrays as values. + :obj:`dict` of :obj:`ArrayProxy`: + The query recipe as a dictionary containing result names as keys and + result instructions as values. Examples -------- >>> import semantique as sq - >>> import geopandas as pd - >>> recipe = sq.QueryRecipe() >>> recipe["map"] = sq.entity("water").reduce("time", "count") >>> recipe["series"] = sq.entity("water").reduce("space", "count") - >>> dc = sq.datacube.GeotiffArchive("files/layout_gtiff.json", src = "layers_gtiff.zip") - >>> mapping = sq.mapping.Semantique("files/mapping.json") - >>> space = sq.SpatialExtent(gpd.read_file("files/footprint.geojson")) - >>> time = sq.TemporalExtent("2019-01-01", "2020-12-31") - >>> config = {"crs": 3035, "tz": "UTC", "spatial_resolution": [-1800, 1800]} - - >>> recipe.execute(dc, mapping, space, time, **config) - - """ - if cache_data: - fp = FakeProcessor.parse(self, datacube, mapping, space, time, **config) - _ = fp.optimize().execute() - cache = fp.cache - else: - cache = None - - qp = QueryProcessor.parse( - self, - datacube, - mapping, - space, - time, - preview=run_preview, - cache=cache, - **config - ) - return qp.optimize().execute() - - def visualise(self): - """Visualise the recipe in a web browser. - - This method visualises the recipe in a web browser. - The visualisation is based on Blockly, a web-based visual programming - editor. The recipe is converted into Blockly XML format and served - to the browser. """ - show(self) + + def __init__(self, results=None): + obj = {} if results is None else results + super(QueryRecipe, self).__init__(obj) + + def execute( + self, + datacube, + mapping, + space, + time, + filter_check=True, + run_preview=False, + cache_data=True, + **config + ): + """Execute a query recipe. + + This function initializes a :obj:`processor.core.QueryProcessor` instance + and uses it to process the query. It runs through all distinct phases of + query processing: parsing, optimization and execution. + + Parameters + ---------- + datacube : Datacube + The datacube instance to process the query against. + mapping : Mapping + The mapping instance to process the query against. + space : SpatialExtent + The spatial extent in which the query should be processed. + time : TemporalExtent + The temporal extent in which the query should be processed. + filter_check : :obj:`bool` + Should the query processor evaluate possible temporal filter operations + upfront? This can reduce the amount of data to be processed in the + subsequent evaluation process. If the recipe doesn't contain any + temporal filter operations, this flag has no effect. + run_preview : :obj:`bool` + Should a preview run with reduced spatial resolution be performed? + A preview run enables to test if the recipe execution succeeds + and allows to inspect the results. + cache_data : :obj:`bool` + Should the query processor cache the data references as provided by the + mapped concepts? Enabling caching increases the memory footprint while + reducing the I/O time to retrieve data if the same data layer is + referenced multiple times. + **config: + Additional configuration parameters forwarded to + :func:`QueryProcessor.parse `. + + Returns + ------- + :obj:`dict` of :obj:`xarray.DataArray`: + The response of the query processor as a dictionary containing result + names as keys and result arrays as values. + + Examples + -------- + >>> import semantique as sq + >>> import geopandas as pd + + >>> recipe = sq.QueryRecipe() + >>> recipe["map"] = sq.entity("water").reduce("time", "count") + >>> recipe["series"] = sq.entity("water").reduce("space", "count") + + >>> dc = sq.datacube.GeotiffArchive("files/layout_gtiff.json", src = "layers_gtiff.zip") + >>> mapping = sq.mapping.Semantique("files/mapping.json") + >>> space = sq.SpatialExtent(gpd.read_file("files/footprint.geojson")) + >>> time = sq.TemporalExtent("2019-01-01", "2020-12-31") + >>> config = {"crs": 3035, "tz": "UTC", "spatial_resolution": [-1800, 1800]} + + >>> recipe.execute(dc, mapping, space, time, **config) + + """ + # Pre-evaluation + # For GeotiffArchive datacubes, subsetting data is not feasible + if type(datacube) == sq.datacube.GeotiffArchive: + filter_check = False + + if filter_check: + # Tbd: Add meta_timestamps as input to FilterProcessor, retrieved from datacube + # For STACCube, meta_timestamps can be retrieved from src + # For OpenDataCube, tbd + # Retrieve required timestamps according to filter operations + fp = FilterProcessor.parse( + self, datacube, mapping, space, time, **config + ) + valid_timestamps = fp.optimize().execute + if cache_data: + # FilterProcessor contains a FakeProcessor instance + cache = fp.fp.cache + else: + cache = None + else: + if cache_data: + fp = FakeProcessor.parse( + self, datacube, mapping, space, time, **config + ) + _ = fp.optimize().execute() + cache = fp.cache + else: + cache = None + + # Evaluation + qp = QueryProcessor.parse( + self, + datacube, + mapping, + space, + time, + preview=run_preview, + cache=cache, + **config + ) + return qp.optimize().execute() + + def visualise(self): + """Visualise the recipe in a web browser. + + This method visualises the recipe in a web browser. + The visualisation is based on Blockly, a web-based visual programming + editor. The recipe is converted into Blockly XML format and served + to the browser. + """ + show(self) From efa5887666659c682ab61cb973beb5370b1c821e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Fri, 20 Sep 2024 01:10:36 +0200 Subject: [PATCH 02/18] fix: trim & compose (fully working), evaluate (replace res by 1 & is_missing eval) :wrench: --- semantique/processor/arrays.py | 52 ++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/semantique/processor/arrays.py b/semantique/processor/arrays.py index 9d535ad9..4512828b 100644 --- a/semantique/processor/arrays.py +++ b/semantique/processor/arrays.py @@ -398,6 +398,7 @@ def groupby(self, grouper, labels_as_names = True, **kwargs): dimensions. """ + # Tbd: Is grouper vault forwarded? # Get dimensions of the input. obj = self._obj odims = obj.dims @@ -1656,8 +1657,16 @@ def evaluate(self, operator, y = None, track_types = False, **kwargs): out.sqm.vault = self._merge_arrays_vaults(list(operands)) else: out = self._obj + # replace all non-NaN values with 1 + out.values = np.where(~np.isnan(out.values), 1, np.nan) else: - out = self._obj + if operator.__name__ in ["is_missing_", "not_missing_"]: + out = operator(*operands, track_types = track_types, meta = True, **kwargs) + out.sqm.active = self.active + out.sqm.locked = self.locked + out.sqm.vault = self.vault + else: + out = self._obj return out @@ -1804,6 +1813,7 @@ def filter(self, filterer, track_types = False, **kwargs): """ # Xarray treats null values as True but they should not pass the filter. filterer.values = utils.null_as_zero(filterer) + # Tbd: What if after locking intersection with another layer (full extent) is made? # Apply filter only if not locked. if any([self.locked, filterer.sqm.locked]): out = self._obj @@ -2141,9 +2151,7 @@ def smooth(self, reducer, dimension, size, limit = 2, fill = False, return out def trim(self, dimension = None, **kwargs): - """Apply the trim verb to the array. This method is structured the same way - as it is structured for Array objects but effectively muted, - i.e. the current object is simply handed back. + """Apply the trim verb to the array. The trim verb trims the dimensions of an array, meaning that all dimension coordinates for which all values are missing are removed from the array. @@ -2160,8 +2168,34 @@ def trim(self, dimension = None, **kwargs): ------- :obj:`xarray.DataArray` + Raises + ------ + :obj:`exceptions.UnknownDimensionError` + If a dimension with the given name is not present in the array. + """ - return self._obj + obj = self._obj + dims = obj.dims + if dimension is None: + if X in dims and Y in dims: + regular_dims = [d for d in dims if d not in [X, Y]] + out = self._trim_space(self._trim(obj, regular_dims)) + else: + out = self._trim(obj, dims) + else: + if dimension == SPACE: + if X not in dims or Y not in dims: + raise exceptions.UnknownDimensionError( + f"Spatial dimensions '{X}' and '{Y}' are not present in the array" + ) + out = self._trim_space(obj) + else: + if dimension not in obj.dims: + raise exceptions.UnknownDimensionError( + f"Dimension '{dimension}' is not present in the array" + ) + out = self._trim(obj, [dimension]) + return out def delineate(self, track_types = False, **kwargs): """Apply the delineate verb to the array. This method is structured the same way @@ -2926,7 +2960,13 @@ def compose(self, track_types = False, **kwargs): :obj:`xarray.DataArray` """ - out = self.sqm.merge(reducers.any_, track_types=track_types) + out = super(MetaCollection, self).compose( + track_types=track_types, + **kwargs + ) + out.sqm.active = self.active + out.sqm.locked = self.locked + out.sqm.vault = self.vault return out def concatenate(self, dimension, track_types = False, From 55880ab640cc57a6bcef0f7afbeafbbbe158995f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Mon, 23 Sep 2024 00:09:37 +0200 Subject: [PATCH 03/18] fix: spatial outputs (ignore), collection dim broadcasting & matching :wrench: --- semantique/processor/arrays.py | 33 +++++---- semantique/processor/core.py | 132 ++++++++++++++++++++------------- 2 files changed, 98 insertions(+), 67 deletions(-) diff --git a/semantique/processor/arrays.py b/semantique/processor/arrays.py index 4512828b..f4b54b0f 100644 --- a/semantique/processor/arrays.py +++ b/semantique/processor/arrays.py @@ -398,7 +398,6 @@ def groupby(self, grouper, labels_as_names = True, **kwargs): dimensions. """ - # Tbd: Is grouper vault forwarded? # Get dimensions of the input. obj = self._obj odims = obj.dims @@ -1657,9 +1656,11 @@ def evaluate(self, operator, y = None, track_types = False, **kwargs): out.sqm.vault = self._merge_arrays_vaults(list(operands)) else: out = self._obj - # replace all non-NaN values with 1 + # Only NaN values should be passed through the filter. + # Others are result of content-based ops and should be reset to 1. out.values = np.where(~np.isnan(out.values), 1, np.nan) else: + # Missing ops invert the filter result and should be evaluated. if operator.__name__ in ["is_missing_", "not_missing_"]: out = operator(*operands, track_types = track_types, meta = True, **kwargs) out.sqm.active = self.active @@ -1813,7 +1814,6 @@ def filter(self, filterer, track_types = False, **kwargs): """ # Xarray treats null values as True but they should not pass the filter. filterer.values = utils.null_as_zero(filterer) - # Tbd: What if after locking intersection with another layer (full extent) is made? # Apply filter only if not locked. if any([self.locked, filterer.sqm.locked]): out = self._obj @@ -2064,7 +2064,8 @@ def reduce( else: obj_to_save = obj # Extract valid temporal indices & set as attrs. - t_idxs = obj_to_save.time[obj_to_save.isnull().sum((X, Y)) == 0] + reduce_dims = [x for x in obj_to_save.dims if x != TIME] + t_idxs = obj_to_save.time[obj_to_save.isnull().sum(reduce_dims) == 0] obj.sqm.vault = t_idxs # Reduce. out = reducer( @@ -2848,12 +2849,12 @@ def __init__(self, list_obj): if arr.sqm.active: # Reduce arrays to 3 dimensions. if arr.ndim > 3: - dim = [x for x in arr.dims if x not in ["time", "x", "y"]] + dim = [x for x in arr.dims if x not in [TIME, "x", "y"]] assert len(dim) == 1, "Only one dimension can be reduced" arr = arr.sqm.reduce(reducers.any_, dim[0], track_types=False) # Extract temporal indices from array itself. - if "time" in arr.dims: - reduce_dims = [x for x in arr.dims if x != "time"] + if TIME in arr.dims: + reduce_dims = [x for x in arr.dims if x != TIME] tidxs.append(arr.time[arr.isnull().sum(reduce_dims) == 0]) # Extract saved results from vault. if arr.sqm.vault is not None: @@ -2861,19 +2862,21 @@ def __init__(self, list_obj): # Combine results. if len(tidxs) > 1: tidxs = np.concatenate(tidxs) - tidxs = xr.DataArray(np.unique(tidxs), dims="time", name="time") + tidxs = xr.DataArray(np.unique(tidxs), dims=TIME, name=TIME) # Broadcast to equal time dimension. if ( - any(["time" in x.dims for x in list_obj]) and - not all(["time" in x.dims for x in list_obj]) + any([TIME in x.dims for x in list_obj]) and + not all([TIME in x.dims for x in list_obj]) ): for i,arr in enumerate(list_obj): - if "time" not in arr.dims: + if TIME not in arr.dims: list_obj[i] = arr.expand_dims({'time': tidxs}) # Fill inactive arrays with ones at coords where tidxs are given, else NaN. - for x in list_obj: - if not x.sqm.active: - x.values = xr.where(x.time.isin(tidxs), xr.ones_like(x), xr.full_like(x, np.NaN)) + if any([TIME in x.dims for x in list_obj]): + for x in list_obj: + if not x.sqm.active: + cond = x.time.isin(tidxs).broadcast_like(x) + x.values = xr.where(cond, xr.ones_like(x), xr.full_like(x, np.NaN)) # Create response object. super(MetaCollection, self).__init__(list_obj) self._active = True @@ -3275,7 +3278,7 @@ def _merge_arrays_vaults(self, arrays): if any([x.sqm.active and x.sqm.vault is not None for x in arrays]): vaults = [x.sqm.vault for x in arrays if (x.sqm.active and x.sqm.vault is not None)] vault = np.unique(np.concatenate(vaults)) - out = xr.DataArray(vault, dims="time", name="time") + out = xr.DataArray(vault, dims=TIME, name=TIME) else: out = None return out \ No newline at end of file diff --git a/semantique/processor/core.py b/semantique/processor/core.py index bd147c06..a70e7eea 100644 --- a/semantique/processor/core.py +++ b/semantique/processor/core.py @@ -1470,60 +1470,88 @@ def execute(self): _ = self.fp.optimize().execute() lyrs = [list(x) for x in set(tuple(x) for x in self.fp.cache.seq)] self._response = {"_".join(x): {} for x in lyrs} + if self._contains_filter(self.recipe): - # Execute instructions for each layer & result in the recipe. - for lyr in lyrs: - self.watch_layer = "_".join(lyr) - logger.info(f"Evaluate temporal filter for layer: '{lyr}'") - for x in self._recipe: - logger.info(f"Started executing result: '{x}'") - result = self.call_handler(self._recipe[x]) - result.name = x - self._response[self.watch_layer][x] = result - logger.info(f"Finished executing result: '{x}'") - logger.info("Finished executing the semantic query") - # Omit non-active results. - for lyr,arr_dict in self._response.items(): - self._response[lyr] = { - k: v for k, v in arr_dict.items() if v.sqm.active - } - # Combine temporal extents of Collections. - for lyr,arr_dict in self._response.items(): - for k,v in arr_dict.items(): - if type(v.sqm).__name__ == 'MetaCollection': - self._response[lyr][k] = v.sqm.merge(reducers.any_, track_types=False) - # Retrieve valid temporal indices per layer and result. - # Valid indices are those that are not null. - for lyr,arr_dict in self._response.items(): - for res,arr in arr_dict.items(): - # Create empty response obj. - out = [] - # Reduce arrays to at most 3 dimensions. - if arr.ndim > 3: - dim = [x for x in arr.dims if x not in ["time", "x", "y"]] - assert len(dim) == 1, "Only one dimension can be reduced" - arr = arr.sqm.reduce(reducers.any_, dim[0], track_types=False) - # Extract temporal indices from array itself. - if "time" in arr.dims: - reduce_dims = [x for x in arr.dims if x != "time"] - out.append(arr.time[arr.isnull().sum(reduce_dims) == 0]) - # Extract saved results from vault. - if arr.sqm.vault is not None: - out.append(arr.sqm.vault) - # Combine results from array and vault. - if len(out) > 1: - out = xr.DataArray(np.unique(np.concatenate(out)), dims="time", name="time") - else: - out = out[0] - self._response[lyr][res] = out - # Create temporal extents' union over results for each layer. - for lyr,arr_dict in self._response.items(): - time_coords = [arr_dict[key].values for key in arr_dict] - merged_time = np.unique(np.concatenate(time_coords)) - merged_time.sort() - self._response[lyr] = pd.to_datetime(merged_time) + # Recipe contains temporal filter. + skip_filter = False + try: + # Execute instructions for each layer & result in the recipe. + for lyr in lyrs: + self.watch_layer = "_".join(lyr) + logger.info(f"Evaluate temporal filter for layer: '{lyr}'") + for x in self._recipe: + logger.info(f"Started executing result: '{x}'") + result = self.call_handler(self._recipe[x]) + result.name = x + self._response[self.watch_layer][x] = result + logger.info(f"Finished executing result: '{x}'") + logger.info("Finished executing the semantic query") + # Omit non-active results. + for lyr,arr_dict in self._response.items(): + self._response[lyr] = { + k: v for k, v in arr_dict.items() if v.sqm.active + } + # Post-processing to arrive at set of arrays as results. + # Combine temporal extents of Collections. + for lyr,arr_dict in self._response.items(): + for k,v in arr_dict.items(): + if type(v.sqm).__name__ == 'MetaCollection': + # Fill datetime arrays with ones. + for i,arr in enumerate(v): + if np.issubdtype(arr.dtype, np.datetime64): + v[i] = xr.ones_like(arr, dtype="int32") + if type(v.sqm).__name__ == 'MetaCollection': + self._response[lyr][k] = v.sqm.merge(reducers.any_, track_types=False) + # Retrieve valid temporal indices per layer and result. + # Valid indices are those that are not null. + response = copy.deepcopy(self._response) + for lyr,arr_dict in self._response.items(): + for res,arr in arr_dict.items(): + # Create empty response obj. + out = [] + # Reduce arrays to at most 3 dimensions. + if arr.ndim > 3: + dim = [x for x in arr.dims if x not in ["time", "x", "y"]] + assert len(dim) == 1, "Only one dimension can be reduced" + arr = arr.sqm.reduce(reducers.any_, dim[0], track_types=False) + # Extract temporal indices from array itself. + if "time" in arr.dims: + reduce_dims = [x for x in arr.dims if x != "time"] + out.append(arr.time[arr.isnull().sum(reduce_dims) == 0]) + # Extract saved results from vault. + if arr.sqm.vault is not None: + out.append(arr.sqm.vault) + # Combine results from array and vault. + if len(out): + if len(out) > 1: + out = xr.DataArray(np.unique(np.concatenate(out)), dims="time", name="time") + else: + out = out[0] + response[lyr][res] = out + else: + # If no valid temporal indices are found, remove result. + # Occurs if result are extracted spatial coordinates. + response[lyr].pop(res) + self._response = response + # Omit empty layer results. + self._response = {k:v for k,v in self._response.items() if v} + if len(self._response): + # Create temporal extents' union over results for each layer. + for lyr,arr_dict in self._response.items(): + time_coords = [arr_dict[key].values for key in arr_dict] + merged_time = np.unique(np.concatenate(time_coords)) + merged_time.sort() + self._response[lyr] = pd.to_datetime(merged_time) + else: + skip_filter = True + except Exception as e: + skip_filter = True + logger.error(f"An error occurred during FilterProcessor execution: {e}") + logger.error("FilterProcessor evaluation is skipped.") else: - # Shortcut if no temporal filter is present. + skip_filter = True + # Shortcut if no temporal filter is present. + if skip_filter: for lyr in lyrs: self._response["_".join(lyr)] = pd.to_datetime(self.meta_timestamps) # Return result. From cde59d5bcafc6f8b7ed1676e2705c7616ba7432a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Mon, 23 Sep 2024 00:11:30 +0200 Subject: [PATCH 04/18] demo: extended set of test models :books: --- demo/extras/filter_tests.ipynb | 758 +++++++++++++++++++++++++++++---- 1 file changed, 679 insertions(+), 79 deletions(-) diff --git a/demo/extras/filter_tests.ipynb b/demo/extras/filter_tests.ipynb index 8fa33f98..1c0684c6 100644 --- a/demo/extras/filter_tests.ipynb +++ b/demo/extras/filter_tests.ipynb @@ -36,26 +36,26 @@ "metadata": {}, "outputs": [], "source": [ - "# data cube connection with specific timestamps\n", - "import pystac\n", - "from pystac_client import Client\n", - "from shapely.geometry import box\n", - "\n", - "# define temporal & spatial range to perform STAC query\n", - "xmin, ymin, xmax, ymax = -2.75, 47.25, -2.25, 47.75\n", - "aoi = box(xmin, ymin, xmax, ymax)\n", - "t_range = [\"2019-07-15\", \"2020-08-01\"]\n", - "\n", - "# STAC-based metadata retrieval\n", - "catalog = Client.open(\"https://earth-search.aws.element84.com/v1\")\n", - "query = catalog.search(\n", - " collections=\"sentinel-2-l2a\", \n", - " datetime=t_range, \n", - " limit=100, \n", - " intersects=aoi\n", - ")\n", - "stac_json = query.item_collection_as_dict()\n", - "gdf = gpd.GeoDataFrame.from_features(stac_json, \"epsg:4326\")" + "# # data cube connection with specific timestamps\n", + "# import pystac\n", + "# from pystac_client import Client\n", + "# from shapely.geometry import box\n", + "\n", + "# # define temporal & spatial range to perform STAC query\n", + "# xmin, ymin, xmax, ymax = -2.75, 47.25, -2.25, 47.75\n", + "# aoi = box(xmin, ymin, xmax, ymax)\n", + "# t_range = [\"2019-07-15\", \"2020-08-01\"]\n", + "\n", + "# # STAC-based metadata retrieval\n", + "# catalog = Client.open(\"https://earth-search.aws.element84.com/v1\")\n", + "# query = catalog.search(\n", + "# collections=\"sentinel-2-l2a\", \n", + "# datetime=t_range, \n", + "# limit=100, \n", + "# intersects=aoi\n", + "# )\n", + "# stac_json = query.item_collection_as_dict()\n", + "# gdf = gpd.GeoDataFrame.from_features(stac_json, \"epsg:4326\")" ] }, { @@ -70,11 +70,24 @@ " self.tests = []\n", " # define the maximum number of items in the result\n", " self.max_items = None\n", - " # define general context config\n", + " # define general mapping\n", " with open(\"../files/mapping.json\", \"r\") as file:\n", " mapping = sq.mapping.Semantique(json.load(file))\n", + " mapping[\"entity\"] = {}\n", + " mapping[\"entity\"][\"water\"] = {\"color\": sq.appearance(\"colortype\").evaluate(\"in\", [21, 22, 23, 24])}\n", + " mapping[\"entity\"][\"vegetation\"] = {\"color\": sq.appearance(\"colortype\").evaluate(\"in\", [1, 2, 3, 4, 5, 6])}\n", + " mapping[\"entity\"][\"builtup\"] = {\"color\": sq.appearance(\"colortype\").evaluate(\"in\", [13, 14, 15, 16, 17])}\n", + " mapping[\"entity\"][\"cloud\"] = {\"color\": sq.atmosphere(\"colortype\").evaluate(\"equal\", 25)}\n", + " mapping[\"entity\"][\"snow\"] = {\"color\": sq.appearance(\"colortype\").evaluate(\"in\", [29, 30])}\n", + " mapping[\"entity\"][\"blue_band\"] = {\"color\": sq.reflectance(\"s2_band02\")}\n", + " mapping[\"entity\"][\"green_band\"] = {\"color\": sq.reflectance(\"s2_band03\")}\n", + " mapping[\"entity\"][\"red_band\"] = {\"color\": sq.reflectance(\"s2_band04\")}\n", + " mapping[\"entity\"][\"NDVI\"] = {\"color\": sq.reflectance(\"s2_band08\").\\\n", + " evaluate(\"normalized_difference\", sq.reflectance(\"s2_band04\"))}\n", + " # define general datacube layout\n", " with open(\"../files/layout_gtiff.json\", \"r\") as file:\n", " dc = sq.datacube.GeotiffArchive(json.load(file), src = \"../files/layers_gtiff.zip\")\n", + " # compile context config\n", " space = sq.SpatialExtent(gpd.read_file(\"../files/footprint.geojson\"))\n", " time = sq.TemporalExtent(\"2019-01-01\", \"2020-12-31\")\n", " self.context = {\n", @@ -762,7 +775,383 @@ " \"context\": new_context\n", " })\n", "\n", - " # define test no. 99a\n", + " # define test no. 12a\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"ndvi_I\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter(sq.self().evaluate(\"is_missing\"))\n", + " result = {\n", + " 'reflectance_s2_band04': 0, \n", + " 'reflectance_s2_band08': 0\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.12a\",\n", + " \"desc\": \"filter via inverse\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + " \n", + " # define test no. 12b\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = sq.collection(green_band).\\\n", + " concatenate(\"band\").\\\n", + " filter(sq.entity(\"cloud\").filter_time(\"after\", sq.time_instant(\"2019-12-31\")).evaluate(\"is_missing\"))\n", + " result = {\n", + " 'atmosphere_colortype': 525937,\n", + " 'reflectance_s2_band03': 525937\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.12b\",\n", + " \"desc\": \"filter via inverse\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 12c\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"res1\"] = sq.reflectance(\"s2_band03\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter(sq.reflectance(\"s2_band03\").evaluate(\"not_equal\", sq.self()))\n", + " result = {\n", + " 'reflectance_s2_band03': 8784\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.12c\",\n", + " \"desc\": \"filter via self in general - isn't considered since it's a content-based operation. Specific case here where everything gets filtered but this should be considered a content-based operation\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 13a\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = blue_band.filter(\n", + " sq.collection(\n", + " sq.self().extract(\"time\").evaluate(\"before\", sq.time_instant(\"2020-01-01\")),\n", + " sq.self().extract(\"time\").evaluate(\"during\", sq.time_interval(\"2020-01-01\", \"2020-10-31\")),\n", + " ).merge(\"any\")\n", + " )\n", + " result = {\n", + " 'reflectance_s2_band02': 533257\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.13a\",\n", + " \"desc\": \"collection of temporal filters\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 13b\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"composite\"] = blue_band.filter(\n", + " sq.collection(\n", + " sq.self().extract(\"time\").evaluate(\"during\", sq.time_interval(\"2020-10-31\", \"2021-01-01\")),\n", + " sq.self().extract(\"time\").evaluate(\"after\", sq.time_instant(\"2021-01-01\")),\n", + " ).merge(\"any\").evaluate(\"not\")\n", + " )\n", + " result = {\n", + " 'reflectance_s2_band02': 533256\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.13b\",\n", + " \"desc\": \"collection of temporal filters\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 13c\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"vegetation_count_per_season\"] = sq.reflectance(\"s2_band02\").\\\n", + " filter_time(\"year\", \"less\", 2024).\\\n", + " filter(sq.collection(\n", + " sq.self().extract(\"time\", \"month\").evaluate(\"in\", sq.interval(5, 6)),\n", + " sq.self().extract(\"time\", \"month\").evaluate(\"in\", sq.interval(6, 11))\n", + " ).compose())\n", + " result = {\n", + " 'reflectance_s2_band02': 328704\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.13c\",\n", + " \"desc\": \"collection of temporal filters\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 13d\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"vegetation_count_per_season\"] = sq.reflectance(\"s2_band02\").\\\n", + " filter_time(\"year\", \"less\", 2024).\\\n", + " filter(sq.collection(\n", + " sq.self().extract(\"time\", \"month\").evaluate(\"in\", sq.interval(5, 6)),\n", + " sq.self().extract(\"time\", \"month\").evaluate(\"in\", sq.interval(6, 11))\n", + " ).compose().evaluate(\"is_missing\"))\n", + " result = {\n", + " 'reflectance_s2_band02': 232320\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.13d\",\n", + " \"desc\": \"collection of temporal filters\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 13e\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"vegetation_count_per_season\"] = sq.reflectance(\"s2_band02\").\\\n", + " filter(sq.collection(\n", + " sq.self().extract(\"time\", \"month\").evaluate(\"in\", sq.interval(5, 6)),\n", + " sq.self().extract(\"time\", \"month\").evaluate(\"in\", sq.interval(6, 11))\n", + " ).compose().evaluate(\"not\"))\n", + " result = {\n", + " 'reflectance_s2_band02': 0\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.13e\",\n", + " \"desc\": \"collection of temporal filters - fake due to not\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 13f\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"ndvi_I\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"equal\", 3)\n", + " recipe[\"ndvi_II\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"equal\", 4)\n", + " recipe[\"bothndvi\"] = sq.collection(sq.result(\"ndvi_I\"), sq.result(\"ndvi_II\")).\\\n", + " merge(\"all\").\\\n", + " groupby_space(\"feature\").\\\n", + " reduce(\"percentage\", \"space\").\\\n", + " concatenate(\"season\").\\\n", + " filter(sq.self().extract(\"time\").evaluate(\"during\", sq.time_interval(\"2020-01-01\", \"2020-02-01\")))\n", + " result = {\n", + " 'reflectance_s2_band04': 4368, \n", + " 'reflectance_s2_band08': 4368\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.13f\",\n", + " \"desc\": \"base recipe for next steps\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 14a\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"ndvi_I\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"equal\", 3)\n", + " recipe[\"ndvi_II\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"equal\", 4)\n", + " recipe[\"bothndvi\"] = sq.collection(sq.result(\"ndvi_I\"), sq.result(\"ndvi_II\")).\\\n", + " merge(\"all\").\\\n", + " groupby_space(\"feature\").\\\n", + " extract(\"time\")\n", + " result = {\n", + " 'reflectance_s2_band04': self.max_items,\n", + " 'reflectance_s2_band08': self.max_items\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.14a\",\n", + " \"desc\": \"collection output with extracted time\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 14b\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"ndvi_I\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"equal\", 3) \n", + " recipe[\"ndvi_II\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"equal\", 4)\n", + " recipe[\"bothndvi\"] = sq.collection(sq.result(\"ndvi_I\"), sq.result(\"ndvi_II\")).\\\n", + " merge(\"all\").\\\n", + " groupby_space(\"feature\").\\\n", + " shift(sq.dimensions.TIME, 1).\\\n", + " reduce(\"percentage\", \"space\").\\\n", + " extract(\"time\").\\\n", + " evaluate(\"during\", sq.time_interval(\"2020-01-01\", \"2020-01-07\")) \n", + " result = {\n", + " 'reflectance_s2_band04': self.max_items,\n", + " 'reflectance_s2_band08': self.max_items\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.14b\",\n", + " \"desc\": \"collection output with extracted & evaluated time\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + "\n", + " # define test no. 14c\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"ndvi_I\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"equal\", 3)\n", + " recipe[\"ndvi_II\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"equal\", 4)\n", + " recipe[\"bothndvi\"] = sq.collection(sq.result(\"ndvi_I\"), sq.result(\"ndvi_II\")).\\\n", + " merge(\"all\").\\\n", + " groupby_space(\"feature\").\\\n", + " shift(sq.dimensions.TIME, 1).\\\n", + " reduce(\"percentage\", \"space\").\\\n", + " concatenate(\"season\").\\\n", + " extract(\"time\") \n", + " result = {\n", + " 'reflectance_s2_band04': self.max_items,\n", + " 'reflectance_s2_band08': self.max_items\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.14c\",\n", + " \"desc\": \"array output with extracted time\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 14d\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"ndvi_I\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"equal\", 3).\\\n", + " trim(\"time\") \n", + " recipe[\"ndvi_II\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"equal\", 4).\\\n", + " trim(\"time\")\n", + " recipe[\"bothndvi\"] = sq.collection(sq.result(\"ndvi_I\"), sq.result(\"ndvi_II\")).\\\n", + " merge(\"all\").\\\n", + " groupby_space(\"feature\").\\\n", + " shift(sq.dimensions.TIME, 1).\\\n", + " reduce(\"percentage\", \"space\").\\\n", + " extract(\"time\").\\\n", + " evaluate(\"during\", sq.time_interval(\"2020-01-01\", \"2020-01-07\")) \n", + " result = {\n", + " 'reflectance_s2_band04': 4368,\n", + " 'reflectance_s2_band08': 4368\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.14d\",\n", + " \"desc\": \"array output with extracted time - same as 100d1 due to trim\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + "\n", + " # define test no. 14e\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"ndvi_I\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " trim().\\\n", + " filter_time(\"season\", \"equal\", 3)\n", + " recipe[\"ndvi_II\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " trim().\\\n", + " filter_time(\"season\", \"equal\", 4)\n", + " recipe[\"bothndvi\"] = sq.collection(sq.result(\"ndvi_I\"), sq.result(\"ndvi_II\")).\\\n", + " merge(\"all\").\\\n", + " groupby_space(\"feature\").\\\n", + " shift(sq.dimensions.TIME, 1).\\\n", + " reduce(\"percentage\", \"space\").\\\n", + " concatenate(\"season\").\\\n", + " extract(\"time\") \n", + " result = {\n", + " 'reflectance_s2_band04': 8784,\n", + " 'reflectance_s2_band08': 8784\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.14e\",\n", + " \"desc\": \"array output with extracted time - interim trim\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 14f\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"ndvi_I\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " trim().\\\n", + " filter_time(\"season\", \"equal\", 3)\n", + " recipe[\"ndvi_II\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " trim().\\\n", + " filter_time(\"season\", \"equal\", 4)\n", + " recipe[\"bothndvi\"] = sq.collection(sq.result(\"ndvi_I\"), sq.result(\"ndvi_II\")).\\\n", + " merge(\"all\").\\\n", + " extract(\"space\")\n", + " result = {\n", + " 'reflectance_s2_band04': 4368,\n", + " 'reflectance_s2_band08': 4368\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.14f\",\n", + " \"desc\": \"array output with extracted space (-> no temporal output)\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 14g\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"ndvi_I\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " trim().\\\n", + " filter_time(\"season\", \"equal\", 3)\n", + " recipe[\"ndvi_II\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " trim().\\\n", + " filter_time(\"season\", \"equal\", 4)\n", + " recipe[\"bothndvi\"] = sq.collection(sq.result(\"ndvi_I\"), sq.result(\"ndvi_II\")).\\\n", + " merge(\"all\").\\\n", + " groupby_space(\"feature\").\\\n", + " extract(\"space\")\n", + " result = {\n", + " 'reflectance_s2_band04': 4368,\n", + " 'reflectance_s2_band08': 4368\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.14g\",\n", + " \"desc\": \"Collection output with extracted space (-> no temporal output)\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 14h\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"res\"] = sq.reflectance(\"s2_band04\").\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " extract(\"space\")\n", + " result = {\n", + " 'reflectance_s2_band04': self.max_items\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.14h\",\n", + " \"desc\": \"Single output with extracted space, is ignored\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + "\n", + " # define test no. 19a\n", " recipe = sq.QueryRecipe()\n", " recipe[\"res1\"] = sq.reflectance(\"s2_band04\").\\\n", " filter_time(\"year\", \"less\", 2020).\\\n", @@ -783,7 +1172,7 @@ " 'reflectance_s2_band08': 525960\n", " }\n", " self.tests.append({\n", - " \"name\": \"no.99a\",\n", + " \"name\": \"no.19a\",\n", " \"desc\": \"complex series of filter & concatenate operations\",\n", " \"recipe\": recipe,\n", " \"result\": result,\n", @@ -791,7 +1180,7 @@ " })\n", "\n", " \n", - " # define test no. 99b\n", + " # define test no. 19b\n", " recipe = sq.QueryRecipe()\n", " recipe[\"result\"] = sq.collection(\n", " (sq.reflectance(\"s2_band04\").\\\n", @@ -810,14 +1199,14 @@ " 'reflectance_s2_band08': 17520\n", " }\n", " self.tests.append({\n", - " \"name\": \"no.99b\",\n", + " \"name\": \"no.19b\",\n", " \"desc\": \"complex series of filter & concatenate operations\",\n", " \"recipe\": recipe,\n", " \"result\": result,\n", " \"context\": self.context\n", " })\n", "\n", - " # define test no. 99c\n", + " # define test no. 19c\n", " recipe = sq.QueryRecipe()\n", " recipe[\"result\"] = sq.collection(\n", " (sq.reflectance(\"s2_band04\").\\\n", @@ -834,14 +1223,14 @@ " 'reflectance_s2_band08': 0\n", " }\n", " self.tests.append({\n", - " \"name\": \"no.99c\",\n", + " \"name\": \"no.19c\",\n", " \"desc\": \"complex series of filter & concatenate operations\",\n", " \"recipe\": recipe,\n", " \"result\": result,\n", " \"context\": self.context\n", " })\n", "\n", - " # define test no. 99d\n", + " # define test no. 19d\n", " recipe = sq.QueryRecipe()\n", " recipe[\"res1\"] = sq.reflectance(\"s2_band04\").\\\n", " evaluate(\"subtract\", \n", @@ -858,14 +1247,14 @@ " 'reflectance_s2_band04': self.max_items,\n", " }\n", " self.tests.append({\n", - " \"name\": \"no.99d\",\n", + " \"name\": \"no.19d\",\n", " \"desc\": \"complex series of filter & evaluate operations\",\n", " \"recipe\": recipe,\n", " \"result\": result,\n", " \"context\": self.context\n", " })\n", "\n", - " # define test no. 99e\n", + " # define test no. 19e\n", " recipe = sq.QueryRecipe()\n", " recipe[\"res\"] = sq.collection(\n", " sq.collection(\n", @@ -884,13 +1273,257 @@ " 'reflectance_s2_band04': 482136\n", " }\n", " self.tests.append({\n", - " \"name\": \"no.99e\",\n", + " \"name\": \"no.19e\",\n", " \"desc\": \"complex series of filter & compose/merge operations\",\n", " \"recipe\": recipe,\n", " \"result\": result,\n", " \"context\": self.context\n", " })\n", "\n", + " # define test no. 19f\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"vegetation_I\"] = sq.entity(\"vegetation\").\\\n", + " filter_time(\"year\", \"equal\", 2019).\\\n", + " groupby_time(\"month\").\\\n", + " reduce(\"first\", \"time\").\\\n", + " concatenate(\"month\") \n", + " recipe[\"vegetation_II\"] = sq.entity(\"vegetation\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " groupby_time(\"month\").\\\n", + " reduce(\"last\", \"time\").\\\n", + " concatenate(\"month\") \n", + " recipe[\"result\"] = sq.collection(\n", + " sq.result(\"vegetation_I\"),\n", + " sq.result(\"vegetation_II\")\n", + " ).\\\n", + " merge(\"all\")\n", + " result = {\n", + " 'appearance_colortype': 17544\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.19f\",\n", + " \"desc\": \"real-world recipes\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 19g\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"ndvi_I\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"equal\", 3).\\\n", + " trim()\n", + " recipe[\"ndvi_II\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"equal\", 4).\\\n", + " trim()\n", + " recipe[\"bothndvi\"] = sq.collection(sq.result(\"ndvi_I\"), sq.result(\"ndvi_II\")).\\\n", + " merge(\"all\").\\\n", + " groupby_space(\"feature\").\\\n", + " shift(sq.dimensions.TIME, 1).\\\n", + " reduce(\"percentage\", \"space\").\\\n", + " concatenate(\"feature\").\\\n", + " extract(\"time\")\n", + " result = {\n", + " 'reflectance_s2_band04': 4368,\n", + " 'reflectance_s2_band08': 4368\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.19g\",\n", + " \"desc\": \"real-world recipes\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 19h\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"red\"] = sq.entity(\"red_band\").\\\n", + " extract(\"time\").\\\n", + " evaluate(\"during\",sq.time_interval(\"2019-01-02\",\"2020-01-05\")).\\\n", + " reduce(\"first\", \"time\").\\\n", + " filter(sq.self())\n", + " recipe[\"bluegreen\"] = sq.collection(\n", + " sq.entity(\"blue_band\").\\\n", + " filter_time(\"month\", \"greater\", 11),\n", + " sq.entity(\"green_band\").\\\n", + " extract(\"time\", \"year\").\\\n", + " evaluate(\"equal\", 2020).\\\n", + " reduce(\"first\", \"time\")\n", + " ).concatenate(\"band\")\n", + " recipe[\"result\"] = sq.collection(sq.result(\"bluegreen\"), sq.result(\"red\")).\\\n", + " merge(\"any\")\n", + " result = {\n", + " 'reflectance_s2_band02': 47616,\n", + " 'reflectance_s2_band03': self.max_items,\n", + " 'reflectance_s2_band04': self.max_items\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.19h\",\n", + " \"desc\": \"real-world recipes\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 19j\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"RGB\"] = sq.collection(\n", + " sq.entity(\"blue_band\"),\n", + " sq.entity(\"green_band\"),\n", + " sq.entity(\"red_band\")\n", + " ).concatenate(\"band\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"equal\", 3).\\\n", + " reduce(\"first\", \"time\")\n", + " recipe[\"red_layer\"] = sq.entity(\"red_band\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"month\", \"greater\", 4).\\\n", + " groupby_space(\"feature\").\\\n", + " reduce(\"percentage\", \"space\").\\\n", + " concatenate(\"month\") \n", + " recipe[\"green_layer\"] = sq.entity(\"green_band\").\\\n", + " filter_space(\"feature\", \"less\", 3223).\\\n", + " filter_time(\"year\", \"less\", 2019).\\\n", + " trim().\\\n", + " extract(\"time\", \"season\").\\\n", + " reduce(\"first\", \"time\")\n", + " recipe[\"RG\"] = sq.result(\"red_layer\").\\\n", + " evaluate(\"add\", sq.result(\"green_layer\")).\\\n", + " groupby_time(\"season\").\\\n", + " concatenate(\"feature\")\n", + " recipe[\"addall\"] = sq.collection(sq.result(\"RGB\").filter(sq.result(\"green_layer\")).\\\n", + " reduce(\"percentage\", \"space\"),\\\n", + " sq.result(\"red_layer\")).\\\n", + " merge(\"any\").\\\n", + " filter_time(\"year\", \"less\", 2020)\n", + " result = {\n", + " 'reflectance_s2_band02': 2184,\n", + " 'reflectance_s2_band03': 519384,\n", + " 'reflectance_s2_band04': 5880\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.19j\",\n", + " \"desc\": \"real-world recipes\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 19k\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"red\"] = sq.entity(\"red_band\").\\\n", + " filter_time(\"year\", \"equal\", 2019).\\\n", + " filter_time(\"month\", \"greater\", 6).\\\n", + " reduce(\"first\", \"time\")\n", + " recipe[\"green\"] = sq.entity(\"green_band\").\\\n", + " filter_time(\"year\", \"equal\", 2019).\\\n", + " reduce(\"first\", \"time\")\n", + " recipe[\"RG\"] = sq.collection(sq.result(\"red\"), sq.result(\"green\")).\\\n", + " merge(\"all\").\\\n", + " filter_space(\"feature\",\"less\", 200).\\\n", + " extract(\"space\").\\\n", + " reduce(\"percentage\", \"space\").\\\n", + " evaluate(\"greater\", 20)\n", + " recipe[\"binarymask\"] = sq.collection(sq.result(\"red\"), sq.result(\"green\")).\\\n", + " merge(\"any\")\n", + " recipe[\"filter\"] = sq.result(\"red\").\\\n", + " filter(sq.result(\"binarymask\")).\\\n", + " reduce(\"percentage\", \"space\").\\\n", + " evaluate(\"less\" ,20)\n", + " recipe[\"ndvi\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"less_equal\", 3)\n", + " recipe[\"ndvi_trim\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"less_equal\", 3).\\\n", + " trim()\n", + " recipe[\"ndvi_sub\"] = sq.result(\"ndvi\").evaluate(\"subtract\",(sq.result(\"ndvi_trim\"))).\\\n", + " reduce(\"percentage\", \"space\")\n", + " recipe[\"RG_trim_add\"] = sq.result(\"ndvi\").evaluate(\"add\", sq.result(\"ndvi_trim\")).\\\n", + " reduce(\"first\", \"time\")\n", + " recipe[\"RG_trim_before\"] = sq.collection(sq.result(\"RG\"), sq.result(\"ndvi_trim\")).\\\n", + " merge(\"all\")\n", + " recipe[\"RG_trim_after\"] = sq.collection(sq.result(\"RG\"), sq.result(\"ndvi\")).\\\n", + " merge(\"all\").\\\n", + " trim()\n", + " result = {\n", + " 'reflectance_s2_band03': 8760,\n", + " 'reflectance_s2_band04': 11016,\n", + " 'reflectance_s2_band08': 6600\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.19k\",\n", + " \"desc\": \"real-world recipes\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", + " # define test no. 19l\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"red\"] = sq.entity(\"red_band\").\\\n", + " filter_time(\"year\", \"equal\", 2019).\\\n", + " filter_time(\"month\", \"greater\", 6).\\\n", + " filter_space(\"feature\", \"less\", 3).\\\n", + " groupby_space(\"feature\").\\\n", + " reduce(\"percentage\", \"space\").\\\n", + " evaluate(\"greater\", 50).\\\n", + " concatenate(\"feature\")\n", + " recipe[\"green\"] = sq.entity(\"green_band\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"equal\", 3).\\\n", + " groupby_space(\"feature\").\\\n", + " concatenate(\"feature\").\\\n", + " reduce(\"first\", \"time\")\n", + " recipe[\"greenred\"] = sq.collection(sq.result(\"red\"), sq.result(\"green\")).\\\n", + " trim().\\\n", + " merge(\"all\").\\\n", + " groupby_space(\"feature\").\\\n", + " shift(sq.dimensions.TIME, 1).\\\n", + " reduce(\"percentage\", \"space\").\\\n", + " extract(\"time\").\\\n", + " evaluate(\"during\", sq.time_instant(\"2019\"))\n", + " recipe[\"ndvi_space\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2019).\\\n", + " filter_space(\"feature\",\"less\", 3333).\\\n", + " groupby_space(\"feature\").\\\n", + " extract(\"space\").\\\n", + " reduce(\"percentage\", \"space\").\\\n", + " evaluate(\"less\" ,50).\\\n", + " concatenate(\"feature\")\n", + " recipe[\"ndvi_sub\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " reduce(\"first\", \"time\").\\\n", + " filter_space(\"feature\",\"less\", 200).\\\n", + " groupby_space(\"feature\").\\\n", + " extract(\"space\").\\\n", + " reduce(\"percentage\", \"space\").\\\n", + " evaluate(\"greater\" ,20).\\\n", + " concatenate(\"feature\")\n", + " recipe[\"ndvi_month\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"less\", 2020).\\\n", + " filter_time(\"month\", \"greater\", 5).\\\n", + " groupby_space(\"feature\").\\\n", + " extract(\"space\").\\\n", + " reduce(\"percentage\", \"space\").\\\n", + " evaluate(\"greater\" ,20).\\\n", + " concatenate(\"feature\").\\\n", + " evaluate(\"subtract\", sq.result(\"ndvi_space\")) \n", + " result = {\n", + " 'reflectance_s2_band03': 2184,\n", + " 'reflectance_s2_band04': 525960,\n", + " 'reflectance_s2_band08': 525960 \n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.19l\",\n", + " \"desc\": \"real-world recipes\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", + "\n", "\n", " def execute(self):\n", " for test in self.tests:\n", @@ -934,49 +1567,7 @@ "cell_type": "code", "execution_count": 5, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running test : no.1\n", - "Running test : no.2a\n", - "Running test : no.2b\n", - "Running test : no.3a\n", - "Running test : no.3b\n", - "Running test : no.3c\n", - "Running test : no.3d\n", - "Running test : no.3e\n", - "Running test : no.3f\n", - "Running test : no.4a\n", - "Running test : no.4b\n", - "Running test : no.4c\n", - "Running test : no.5a\n", - "Running test : no.5b\n", - "Running test : no.5c\n", - "Running test : no.5d\n", - "Running test : no.6a\n", - "Running test : no.6b\n", - "Running test : no.6c\n", - "Running test : no.7a\n", - "Running test : no.7b\n", - "Running test : no.7c\n", - "Running test : no.7d\n", - "Running test : no.8a\n", - "Running test : no.8b\n", - "Running test : no.9a\n", - "Running test : no.9b\n", - "Running test : no.10a\n", - "Running test : no.10b\n", - "Running test : no.11\n", - "Running test : no.99a\n", - "Running test : no.99b\n", - "Running test : no.99c\n", - "Running test : no.99d\n", - "Running test : no.99e\n" - ] - } - ], + "outputs": [], "source": [ "# run all tests\n", "tests = TestSuite()\n", @@ -991,6 +1582,14 @@ "outputs": [], "source": [ "# To-Do\n", + "\n", + "# re-write docs to...\n", + "# point at trim behaviour\n", + "# it is assumed that filter implies trim currently (i.e. erasing NaN), equivalent to hypothetical trim op at very end of recipe\n", + "# excplicit trim needs to be called if you want to erase NaNs before -> e.g. extract_time will still extract for full series, unless trim is called the temporal dimension remains the initial one (full extent is extracted) \n", + "# point at custom functions and is_missing (custom_functions should not revert NaNs)\n", + "# point at extract space behaviour -> not evaluated\n", + "\n", "# inclusion of FilterProcessor in the main branch with connection to datacubes \n", "# https://datacube-core.readthedocs.io/en/latest/api/indexed-data/generate/datacube.Datacube.list_measurements.html#datacube.Datacube.list_measurements\n", "\n", @@ -1006,7 +1605,7 @@ { "data": { "text/plain": [ - "{'reflectance_s2_band03': 525960}" + "{'reflectance_s2_band04': 2184, 'reflectance_s2_band08': 2184}" ] }, "execution_count": 7, @@ -1028,15 +1627,16 @@ "green_band = sq.reflectance(\"s2_band03\")\n", "blue_band = sq.reflectance(\"s2_band02\")\n", "\n", - "recipe[\"res1\"] = sq.reflectance(\"s2_band03\").\\\n", - " evaluate(\"in\", sq.label(\"test\")).\\\n", - " filter_time(\"year\", \"less\", 2020)\n", + "recipe[\"ndvi_I\"] = sq.entity(\"NDVI\").\\\n", + " filter_time(\"year\", \"equal\", 2020).\\\n", + " filter_time(\"season\", \"equal\", 3).\\\n", + " trim()\n", "\n", "# to try new filter processor\n", "# fp = QueryProcessor.parse(recipe, **qp_context)\n", "fp = FilterProcessor.parse(recipe, **qp_context)\n", "response = fp.optimize().execute()\n", - "# response\n", + "response#[\"res1\"]#.sum((\"x\", \"y\"))\n", "\n", "# np.isnan(response[\"composite\"]).sum(('x', 'y'))\n", "# np.all(np.isnan(response[\"composite\"].isel(time=1)))\n", From ede324fffb40d3083351d4abd5d1b2d20067bb66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Mon, 23 Sep 2024 17:04:28 +0200 Subject: [PATCH 05/18] docs: extended description of filter processor :books: --- demo/figures/semantic_temp_filter_I.png | Bin 114598 -> 163479 bytes demo/figures/semantic_temp_filter_II.png | Bin 94946 -> 144033 bytes demo/processor.ipynb | 14 ++++++++++---- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/demo/figures/semantic_temp_filter_I.png b/demo/figures/semantic_temp_filter_I.png index 23991a0fcc9ff13f67917064ac9c0ed29011348b..2a849d54db6dc6f5791d6f754926777c0b28b977 100644 GIT binary patch literal 163479 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

38z`OM!-zQvt};jsKMI*r%OkJ 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Ơ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 w^6g`J2Tk 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%0A`D2oA%AuGnK0DQz6ZLYP_0TD4)NtD5y;jr zJY}Nm4D1x>C87e=-w6yfF>vFU>~=qvBR|3SJkKvl5^Xyj1_5LIMgx|3Wb zJ7H>@e;E;C+7VCL19Uv_M-?{5UFXs>G8_+VQ68=h2pI=G^a9`YCvuVi-gZ`!MW_=3 zbVre2IT(!f3kuT5M24K8Xq*CtWpd^^C^Q9>ZXfw_O`L;>$ahEN@48S)zXeH|rbDQ> zLquF%>%|hcgl7Tsf-1TpXqN#_?Q7uLMFEF5jN`Ef4YZbXd>0=RL!qRkB(JP&*lr$- z%PI~yp`cAS%R4&~=M|p72k?OUbxn>B_Hys1RHBh#s^%;!J9`hnVI&1>jlc={CBW5S z2-?Y@;f0u(*!mzQJ!yC1W9SC=1S{6>3HA6kBgy-Lb?eK8-@^diYM8*<^b}z$Dk{d# zR4+bW+_xF<0o7%&y-=Yp!4yJwPtV%L;fjHNK=2>n^fTcF9ye^M19`P{1b-}YK^;;L zhAg}#yJ%VkwMtV)4R5E~;2WUEP3uwgo}fUKv${%w{87=+Fc*9{IzG-SD;vhZ0sNAr zK&#YKqGlJUoZKo#7$uR7F1mn24ibV3R>y-Hb4w+t;RO5%^0Kn8z&d6p$Rgj)0*7kW z5X>tZ+&LO{G4Cyo>m|%L7SOjAn~xxjOI+skj`1|q-ZK!ouZ1*5cH|d0))lxNC|dB| z$rBb7uOHT5+E2`!zRfG>|4fIrNr((&i2O3EKs$yR2d^C>LB$||hA_BwOx>b~L zA*q@nXoq7Z zaXT3t!s0^Es6_<~f5!9z+)eF$q=9d!SL}n-Pv(H+ZITCc86$F9G+0b|(F z%-9&1m|ZotJH4Cf#h=+Pfx1$Qa5n?QD~eza-hd5h-=F+Bg-o((JArMcpU9r(M8IA# zA|9J06BCmpOlk&j(}5olT>bf=yJA8UYEYBh4s1Wv?>|o0NYjX8GgFP}>aUu2>aj_* zJ0B3!tvHtG6#H3;;E^r_3LzZJ`J<< z>y1t8@87@2OSOWURO`aRefj~xEW%;f#e0`seDK%g+%+zwsq{aooF@Gd1l=9jjNl&t z{NPQJ55P1C2c_KD5a5KYH z2lW%?_-ICk;4rt}xZ7pIKd%2XzHzWy>a;0*>WfOk<>~@d#MZm2{fMEdG=f;5%#t)6 zh&ZiUO}C5P&-)1reB88vx5+IPzbV{!hcoWV!^I7(YHxOXlI=HOnnrBG?M_`M1kd4y z7^RZPG)|mL#D?|>2TV3%OOnV7r^&0hxkZ9-$F>fN3L5R=eL?D>WefISP;B_>cR|6ZHpZF?{O z^9J$`4=O(YUW0T{<@4{gi3QyN|6YG%wSRAF9<<}XH*-)2;NQ!`{6XdXefN%C=nk98 W{xyZdD;jp_M`FU#Ld61~zWpEUlq;bC literal 94946 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

oct_-ZjrS8Om^XEJsJ(CXaV7es7!=Pq>gar`YIr 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 z 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%0Af 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 Date: Tue, 24 Sep 2024 20:44:27 +0200 Subject: [PATCH 06/18] feat: temporal filter connection datacubes, full recipe integration :gift: --- demo/extras/filter_tests.ipynb | 257 +++++++++++++++++------------- semantique/datacube.py | 283 ++++++++++++++++++++++++++++++++- semantique/processor/core.py | 269 ++++++++++++++++++++----------- semantique/recipe.py | 255 ++++++++++++++--------------- 4 files changed, 719 insertions(+), 345 deletions(-) diff --git a/demo/extras/filter_tests.ipynb b/demo/extras/filter_tests.ipynb index 1c0684c6..2378c5fe 100644 --- a/demo/extras/filter_tests.ipynb +++ b/demo/extras/filter_tests.ipynb @@ -5,6 +5,34 @@ "execution_count": 1, "metadata": {}, "outputs": [], + "source": [ + "# To-Do\n", + "\n", + "# stash commits - check for syntax etc & push to online\n", + "# test on workstation for ODCCube\n", + "# empty array error - warnings on or off? What if ODCCube is empty?\n", + "# compile running example for ODCCube\n", + "# formatting (80 spaces)\n", + "\n", + "# re-write docs to...\n", + "# point at trim behaviour\n", + "# it is assumed that filter implies trim currently (i.e. erasing NaN), equivalent to hypothetical trim op at very end of recipe\n", + "# excplicit trim needs to be called if you want to erase NaNs before -> e.g. extract_time will still extract for full series, unless trim is called the temporal dimension remains the initial one (full extent is extracted) \n", + "# point at custom functions and is_missing (custom_functions should not revert NaNs)\n", + "# point at extract space behaviour -> not evaluated\n", + "\n", + "# inclusion of FilterProcessor in the main branch with connection to datacubes \n", + "# https://datacube-core.readthedocs.io/en/latest/api/indexed-data/generate/datacube.Datacube.list_measurements.html#datacube.Datacube.list_measurements\n", + "\n", + "# Wednesday & Thursday: refactor/adjust reauth (resign function)\n", + "# Friday: paper writing & re-run of application examples" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" @@ -12,7 +40,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -23,41 +51,18 @@ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", + "import pystac\n", "import warnings\n", "import xarray as xr\n", "\n", + "from datetime import datetime\n", + "from pystac_client import Client\n", + "from shapely.geometry import box\n", + "\n", "import semantique as sq\n", "from semantique.processor.core import QueryProcessor, FilterProcessor" ] }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# # data cube connection with specific timestamps\n", - "# import pystac\n", - "# from pystac_client import Client\n", - "# from shapely.geometry import box\n", - "\n", - "# # define temporal & spatial range to perform STAC query\n", - "# xmin, ymin, xmax, ymax = -2.75, 47.25, -2.25, 47.75\n", - "# aoi = box(xmin, ymin, xmax, ymax)\n", - "# t_range = [\"2019-07-15\", \"2020-08-01\"]\n", - "\n", - "# # STAC-based metadata retrieval\n", - "# catalog = Client.open(\"https://earth-search.aws.element84.com/v1\")\n", - "# query = catalog.search(\n", - "# collections=\"sentinel-2-l2a\", \n", - "# datetime=t_range, \n", - "# limit=100, \n", - "# intersects=aoi\n", - "# )\n", - "# stac_json = query.item_collection_as_dict()\n", - "# gdf = gpd.GeoDataFrame.from_features(stac_json, \"epsg:4326\")" - ] - }, { "cell_type": "code", "execution_count": 4, @@ -65,7 +70,16 @@ "outputs": [], "source": [ "class TestSuite:\n", - " def __init__(self):\n", + " def __init__(self, ttype=\"generated\"):\n", + " \"\"\"\n", + " Creates a suite of test cases for the FilterProcessor class.\n", + "\n", + " Args:\n", + " ttype (str): Type of the test suite. Options are \"generated\" and \"real\".\n", + " If \"generated\", the timestamps will be generated regularly spaced for given interval.\n", + " If \"real\", the timestamps will be retrieved by quering an actual catalog of satellite data.\n", + " \"\"\"\n", + " self.ttype = ttype\n", " # create an empty list to store test cases\n", " self.tests = []\n", " # define the maximum number of items in the result\n", @@ -87,9 +101,10 @@ " # define general datacube layout\n", " with open(\"../files/layout_gtiff.json\", \"r\") as file:\n", " dc = sq.datacube.GeotiffArchive(json.load(file), src = \"../files/layers_gtiff.zip\")\n", - " # compile context config\n", + " # set basic spatio-temporal extent\n", " space = sq.SpatialExtent(gpd.read_file(\"../files/footprint.geojson\"))\n", " time = sq.TemporalExtent(\"2019-01-01\", \"2020-12-31\")\n", + " # compile context config \n", " self.context = {\n", " \"datacube\": dc, \n", " \"mapping\": mapping,\n", @@ -99,9 +114,38 @@ " \"tz\": \"UTC\", \n", " \"spatial_resolution\": [-10, 10],\n", " \"track_types\": False,\n", - " # \"meta_timestamps\": gdf.datetime.drop_duplicates()\n", + " \"meta_timestamps\": self._get_timestamps()\n", " }\n", - " \n", + "\n", + " def _get_timestamps(self):\n", + " if self.ttype == \"generated\":\n", + " meta_timestamps = pd.date_range(\n", + " start = '1960-01-01',\n", + " end = datetime.now(),\n", + " freq = 'h'\n", + " )\n", + " meta_timestamps = pd.to_datetime(meta_timestamps).sort_values()\n", + " return meta_timestamps\n", + " elif self.ttype == \"real\":\n", + " # define temporal & spatial range to perform STAC query\n", + " xmin, ymin, xmax, ymax = -2.75, 47.25, -2.25, 47.75\n", + " aoi = box(xmin, ymin, xmax, ymax)\n", + " t_range = [\"2018-07-15\", \"2020-12-01\"]\n", + " # STAC-based metadata retrieval\n", + " catalog = Client.open(\"https://earth-search.aws.element84.com/v1\")\n", + " query = catalog.search(\n", + " collections=\"sentinel-2-l2a\", \n", + " datetime=t_range, \n", + " limit=100, \n", + " intersects=aoi\n", + " )\n", + " stac_json = query.item_collection_as_dict()\n", + " gdf = gpd.GeoDataFrame.from_features(stac_json, \"epsg:4326\")\n", + " meta_timestamps = pd.to_datetime(gdf.datetime.drop_duplicates())\n", + " return meta_timestamps\n", + " else:\n", + " raise ValueError(\"Invalid value for timestamps. Options are 'generated' and 'real'.\")\n", + "\n", " def populate(self):\n", " # define base entities\n", " recipe = sq.QueryRecipe()\n", @@ -1530,11 +1574,8 @@ " print(f\"Running test : {test['name']}\")\n", " # run recipe with QueryProcessor\n", " try:\n", - " if \"meta_timestamps\" in test[\"context\"]:\n", - " qp_context = copy.deepcopy(test[\"context\"])\n", - " del qp_context[\"meta_timestamps\"]\n", - " else:\n", - " qp_context = test[\"context\"]\n", + " qp_context = copy.deepcopy(test[\"context\"])\n", + " del qp_context[\"meta_timestamps\"]\n", " with warnings.catch_warnings():\n", " warnings.simplefilter(\"ignore\")\n", " fp = QueryProcessor.parse(test['recipe'], **qp_context)\n", @@ -1553,7 +1594,7 @@ " for key, value in test[\"result\"].items():\n", " if value is None:\n", " test[\"result\"][key] = self.max_items\n", - " if \"meta_timestamps\" in test[\"context\"]:\n", + " if self.ttype == \"real\":\n", " print(f\"Resulting shape: {res_shape}\")\n", " else:\n", " assert res_shape == test[\"result\"]\n", @@ -1567,83 +1608,77 @@ "cell_type": "code", "execution_count": 5, "metadata": {}, - "outputs": [], - "source": [ - "# run all tests\n", - "tests = TestSuite()\n", - "tests.populate()\n", - "tests.execute()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# To-Do\n", - "\n", - "# re-write docs to...\n", - "# point at trim behaviour\n", - "# it is assumed that filter implies trim currently (i.e. erasing NaN), equivalent to hypothetical trim op at very end of recipe\n", - "# excplicit trim needs to be called if you want to erase NaNs before -> e.g. extract_time will still extract for full series, unless trim is called the temporal dimension remains the initial one (full extent is extracted) \n", - "# point at custom functions and is_missing (custom_functions should not revert NaNs)\n", - "# point at extract space behaviour -> not evaluated\n", - "\n", - "# inclusion of FilterProcessor in the main branch with connection to datacubes \n", - "# https://datacube-core.readthedocs.io/en/latest/api/indexed-data/generate/datacube.Datacube.list_measurements.html#datacube.Datacube.list_measurements\n", - "\n", - "# Wednesday & Thursday: refactor/adjust reauth (resign function)\n", - "# Friday: paper writing & re-run of application examples" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "{'reflectance_s2_band04': 2184, 'reflectance_s2_band08': 2184}" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "Running test : no.1\n", + "Running test : no.2a\n", + "Running test : no.2b\n", + "Running test : no.3a\n", + "Running test : no.3b\n", + "Running test : no.3c\n", + "Running test : no.3d\n", + "Running test : no.3e\n", + "Running test : no.3f\n", + "Running test : no.4a\n", + "Running test : no.4b\n", + "Running test : no.4c\n", + "Running test : no.5a\n", + "Running test : no.5b\n", + "Running test : no.5c\n", + "Running test : no.5d\n", + "Running test : no.6a\n", + "Running test : no.6b\n", + "Running test : no.6c\n", + "Running test : no.7a\n", + "Running test : no.7b\n", + "Running test : no.7c\n", + "Running test : no.7d\n", + "Running test : no.8a\n", + "Running test : no.8b\n", + "Running test : no.9a\n", + "Running test : no.9b\n", + "Running test : no.10a\n", + "Running test : no.10b\n", + "Running test : no.11\n", + "Running test : no.12a\n", + "Running test : no.12b\n", + "Running test : no.12c\n", + "Running test : no.13a\n", + "Running test : no.13b\n", + "Running test : no.13c\n", + "Running test : no.13d\n", + "Running test : no.13e\n", + "Running test : no.13f\n", + "Running test : no.14a\n", + "Running test : no.14b\n", + "Running test : no.14c\n", + "Running test : no.14d\n", + "Running test : no.14e\n", + "Running test : no.14f\n", + "Running test : no.14g\n", + "Running test : no.14h\n", + "Running test : no.19a\n", + "Running test : no.19b\n", + "Running test : no.19c\n", + "Running test : no.19d\n", + "Running test : no.19e\n", + "Running test : no.19f\n", + "Running test : no.19g\n", + "Running test : no.19h\n", + "Running test : no.19j\n", + "Running test : no.19k\n", + "Running test : no.19l\n" + ] } ], "source": [ - "# to create a new test or assess an individual one\n", - "recipe = sq.QueryRecipe()\n", - "\n", - "tests = TestSuite()\n", - "qp_context = copy.deepcopy(tests.context)\n", - "if \"meta_timestamps\" in qp_context:\n", - " del qp_context[\"meta_timestamps\"]\n", - " qp_context[\"track_types\"] = True\n", - "\n", - "red_band = sq.reflectance(\"s2_band04\")\n", - "green_band = sq.reflectance(\"s2_band03\")\n", - "blue_band = sq.reflectance(\"s2_band02\")\n", - "\n", - "recipe[\"ndvi_I\"] = sq.entity(\"NDVI\").\\\n", - " filter_time(\"year\", \"equal\", 2020).\\\n", - " filter_time(\"season\", \"equal\", 3).\\\n", - " trim()\n", - "\n", - "# to try new filter processor\n", - "# fp = QueryProcessor.parse(recipe, **qp_context)\n", - "fp = FilterProcessor.parse(recipe, **qp_context)\n", - "response = fp.optimize().execute()\n", - "response#[\"res1\"]#.sum((\"x\", \"y\"))\n", - "\n", - "# np.isnan(response[\"composite\"]).sum(('x', 'y'))\n", - "# np.all(np.isnan(response[\"composite\"].isel(time=1)))\n", - "{k:len(v) for k,v in response.items()}\n", - "\n", - "# np.isnan(response[\"composite\"]).sum(('x', 'y'))\n", - "# np.all(np.isnan(response[\"composite\"].isel(time=1)))" + "# run all tests\n", + "tests = TestSuite(ttype=\"generated\")\n", + "tests.populate()\n", + "tests.execute()" ] } ], diff --git a/semantique/datacube.py b/semantique/datacube.py index 3ffbb16e..a16dbf31 100644 --- a/semantique/datacube.py +++ b/semantique/datacube.py @@ -1,4 +1,5 @@ import numpy as np +import pandas as pd import xarray as xr import copy @@ -14,17 +15,20 @@ import rioxarray import stackstac import warnings +import zipfile from abc import abstractmethod from datacube.utils import masking from pystac_client.stac_api_io import StacApiIO from rasterio.errors import RasterioIOError +from rasterio.io import MemoryFile from shapely.geometry import box, shape from shapely.ops import transform from urllib3 import Retry from semantique import exceptions from semantique.dimensions import TIME, SPACE, X, Y +from semantique.processor import utils class Datacube(): """Base class for EO data cube configurations. @@ -105,6 +109,10 @@ class Opendatacube(Datacube): EO data cube is constructed. connection : :obj:`datacube.Datacube` Opendatacube interface object allowing to read from the data cube. + data_dict : :obj:`dict` + Dictionary with layer references as keys and dataset UUIDs to be loaded + as values. Allows to restrict the data when performing a database lookup. + If :obj:`None`, all datasets within the OpenDataCube are accessible. tz Timezone of the temporal coordinates in the EO data cube. Can be given as :obj:`str` referring to the name of a timezone in the tz database, or @@ -158,9 +166,17 @@ class Opendatacube(Datacube): """ - def __init__(self, layout = None, connection = None, tz = "UTC", **config): + def __init__( + self, + layout = None, + connection = None, + data_dict = None, + tz = "UTC", + **config + ): super(Opendatacube, self).__init__(layout) self.connection = connection + self.data_dict = data_dict self.tz = tz # Update default configuration parameters with provided ones. params = self._default_config @@ -179,6 +195,17 @@ def connection(self, value): assert isinstance(value, datacube.Datacube) self._connection = value + @property + def data_dict(self): + """:obj:`dict`: Dict with product Ids by the Opendatacube as values.""" + return self._data_dict + + @data_dict.setter + def data_dict(self, value): + if value is not None: + assert isinstance(value, dict) + self._data_dict = value + @property def tz(self): """:obj:`datetime.tzinfo`: Timezone of the temporal coordinates in the @@ -311,6 +338,78 @@ def retrieve(self, *reference, extent): data = data.astype("float") return data + def retrieve_metadata(self, *reference, extent): + """Retrieve metadata for a data layer from the EO data cube. + Metadata contains the timestamp & spatial bounding box, both in the + extent objects spatio-temporal reference systems (tz and crs). + + Parameters + ---------- + *reference: + The index of the data layer in the layout of the EO data cube. + extent : :obj:`xarray.DataArray` + Spatio-temporal extent in which the data should be retrieved. Should be + given as an array with a temporal dimension and two spatial dimensions, + such as returned by + :func:`parse_extent `. + The retrieved subset of the EO data cube will have the same extent. + + Returns + ------- + :obj:`pd.DataFrame` + The metadata for the data layer. + + """ + # Solve the reference by obtaining the corresponding metadata object. + metadata = self.lookup(*reference) + # Check if extent is valid. + if TIME not in extent.dims: + raise exceptions.MissingDimensionError( + "Cannot retrieve data in an extent without a temporal dimension" + ) + if X not in extent.dims or Y not in extent.dims: + raise exceptions.MissingDimensionError( + "Cannot retrieve data in an extent without spatial dimensions" + ) + # Create a template for the metadata to be loaded. + names = {Y: "y", X: "x", TIME: "time"} + like = extent.sq.tz_convert(self.tz).sq.rename_dims(names).to_dataset() + # Compose metadata query. + query = datacube.api.query.Query( + product = metadata["product"], + like = like, + group_by = "solar_day" if self.config["group_by_solar_day"] else None + ) + # Execute metadata search. + ds = self.connection.find_datasets(**query.search_terms) + # Prepare lists to collect metadata items. + ids = [] + times = [] + bboxes = [] + # Create transformers for CRS. + dst_crs = pyproj.CRS(extent.rio.crs) + src_crs = [x.crs for x in ds] + src_crs_unique = [pyproj.CRS(x) for x in set(src_crs)] + src_crs_names = [str(x) for x in set(src_crs)] + transformers = [ + pyproj.Transformer.from_crs(src, dst_crs, always_xy=True) + for src in src_crs_unique + ] + transformers = {n:t for n,t in zip(src_crs_names, transformers)} + # Collect results in a loop. + for i, x in enumerate(ds): + ids.append(x.id) + # Get datetime in destination tz + dt = np.datetime64(x.center_time.replace(tzinfo=None)) + dt = utils.convert_datetime64(dt, self.tz, extent.sq.tz) + times.append(dt) + # Get bbox in destination crs + bbox = box(*transformers[x.crs].transform_bounds(*x.bounds)) + bboxes.append(bbox) + # Return metadata dataframe + df = pd.DataFrame({"id": ids, "time": times, "bbox": bboxes}) + return df + def _load(self, metadata, extent): # Check if extent is valid. if TIME not in extent.dims: @@ -330,13 +429,21 @@ def _load(self, metadata, extent): # ODC takes care of spatial transformations internally. names = {Y: "y", X: "x", TIME: "time"} like = extent.sq.tz_convert(self.tz).sq.rename_dims(names).to_dataset() + # Define predicate function. + def filter_id(dataset): + if self._data_dict is not None: + lyr = "_".join(metadata['reference']) + return dataset.id in self._data_dict[lyr] + else: + return True # Call ODC load function to load data as xarray dataset. data = self.connection.load( product = metadata["product"], measurements = [metadata["name"]], like = like, resampling = self.config["resamplers"][metadata["type"]], - group_by = "solar_day" if self.config["group_by_solar_day"] else None + group_by = "solar_day" if self.config["group_by_solar_day"] else None, + dataset_predicate = filter_id ) # Return as xarray dataarray. try: @@ -600,6 +707,74 @@ def retrieve(self, *reference, extent): data = data.astype("float") return data + + def retrieve_metadata(self, *reference, extent): + """Retrieve metadata for a data layer from the EO data cube. + Metadata contains the timestamp & spatial bounding box, both in the + extent objects spatio-temporal reference systems (tz and crs). + + Parameters + ---------- + *reference: + The index of the data layer in the layout of the EO data cube. + extent : :obj:`xarray.DataArray` + Spatio-temporal extent in which the data should be retrieved. Should be + given as an array with a temporal dimension and two spatial dimensions, + such as returned by + :func:`parse_extent `. + The retrieved subset of the EO data cube will have the same extent. + + Returns + ------- + :obj:`pd.DataFrame` + The metadata for the data layer. + """ + # Solve the reference by obtaining the corresponding metadata object. + metadata = self.lookup(*reference) + # Check if extent is valid + if TIME not in extent.dims: + raise exceptions.MissingDimensionError( + "Cannot retrieve data in an extent without a temporal dimension" + ) + if X not in extent.dims or Y not in extent.dims: + raise exceptions.MissingDimensionError( + "Cannot retrieve data in an extent without spatial dimensions" + ) + # Initialize lists to collect metadata items + ids = [] + times = [] + bboxes = [] + # Open the zip file + with zipfile.ZipFile(self.src, 'r') as z: + # Open the specific file inside the zip using rasterio MemoryFile + with z.open(metadata["file"]) as file: + with MemoryFile(file) as memfile: + with memfile.open() as src: + # Get bounding box in destination CRS + dst_crs = pyproj.CRS(extent.rio.crs) + transformer = pyproj.Transformer.from_crs( + pyproj.CRS(src.crs), + dst_crs, + always_xy=True + ) + transformed_bounds = transformer.transform_bounds(*src.bounds) + bbox = box(*transformed_bounds) + # Subset spatially. + if box(*extent.rio.bounds()).intersects(bbox): + for i, idx in enumerate(src.indexes): + # Get datetime in destination tz + dt = np.datetime64(src.descriptions[i]) + dt = utils.convert_datetime64(dt, self.tz, extent.sq.tz) + # Subset temporally. + bounds = extent[TIME].values + if dt >= bounds[0] and dt <= bounds[1]: + ids.append(idx) + times.append(dt) + bboxes.append(bbox) + # Return metadata dataframe + df = pd.DataFrame({"id": ids, "time": times, "bbox": bboxes}) + return df + def _load(self, metadata, extent): # Check if extent is valid. if TIME not in extent.dims: @@ -766,7 +941,7 @@ def src(self, value): if value is not None: assert np.all([isinstance(x, pystac.item.Item) for x in value]) self._src = value - + @property def _default_config(self): return { @@ -880,6 +1055,96 @@ def retrieve(self, *reference, extent): data = data.sq.trim() return data + def retrieve_metadata(self, *reference, extent): + """Retrieve metadata for a data layer from the EO data cube. + Metadata contains the timestamp & spatial bounding box, both in the + extent objects spatio-temporal reference systems (tz and crs). + + Parameters + ---------- + *reference: + The index of the data layer in the layout of the EO data cube. + extent : :obj:`xarray.DataArray` + Spatio-temporal extent in which the data should be retrieved. Should be + given as an array with a temporal dimension and two spatial dimensions, + such as returned by + :func:`parse_extent `. + The retrieved subset of the EO data cube will have the same extent. + + Returns + ------- + :obj:`pd.DataFrame` + The metadata for the data layer. + """ + # Solve the reference by obtaining the corresponding metadata object. + metadata = self.lookup(*reference) + # Check if extent is valid + if TIME not in extent.dims: + raise exceptions.MissingDimensionError( + "Cannot retrieve data in an extent without a temporal dimension" + ) + if X not in extent.dims or Y not in extent.dims: + raise exceptions.MissingDimensionError( + "Cannot retrieve data in an extent without spatial dimensions" + ) + # Subset temporally and spatially + if "spatial_feats" in extent.coords: + extent = extent.drop_vars("spatial_feats") + epsg = int(str(extent.rio.crs)[5:]) + t_bounds = extent.sq.tz_convert(self.tz).time.values + item_coll = STACCube._filter_spatio_temporal( + self.src, + extent.rio.bounds(), + epsg, + t_bounds[0], + t_bounds[1] + ) + # Subset by layer key + filtered_items = [] + for item in item_coll: + for asset_name, asset in item.assets.items(): + if asset_name == metadata["name"]: + if 'semantique:key' in asset.extra_fields: + asset_key = asset.extra_fields['semantique:key'] + if "_".join(asset_key) == "_".join(reference): + keep = True + break + else: + keep = False + else: + if any([ + 'semantique:key' in x.extra_fields + for x in item.assets.values() + ]): + keep = False + else: + keep = True + break + else: + keep = False + if keep: + filtered_items.append(item) + item_coll = filtered_items + # STAC Item ID is not globally unique (only within a collection) + coll_ids = [x.get_collection().id for x in item_coll] + item_ids = [x.id for x in item_coll] + ids = [(id1, id2) for id1, id2 in zip(coll_ids, item_ids)] + # Retrieve timestamps in destination tz + times = [x.get_datetime().replace(tzinfo=None) for x in item_coll] + times = [utils.convert_datetime64(x, self.tz, extent.sq.tz) for x in times] + # Retrieve bounding boxes in destination CRS + dst_crs = pyproj.CRS(extent.rio.crs) + transformer = pyproj.Transformer.from_crs( + pyproj.CRS("EPSG:4326"), + dst_crs, + always_xy=True + ) + bboxes = [transformer.transform_bounds(*x.bbox) for x in item_coll] + bboxes = [box(*x) for x in bboxes] + # Return metadata dataframe + df = pd.DataFrame({"id": ids, "time": times, "bbox": bboxes}) + return df + def _load(self, metadata, extent): # check if extent is valid if TIME not in extent.dims: @@ -908,7 +1173,7 @@ def _load(self, metadata, extent): if "spatial_feats" in extent.coords: extent = extent.drop_vars("spatial_feats") t_bounds = extent.sq.tz_convert(self.tz).time.values - item_coll = STACCube.filter_spatio_temporal( + item_coll = STACCube._filter_spatio_temporal( self.src, extent.rio.bounds(), epsg, @@ -916,12 +1181,14 @@ def _load(self, metadata, extent): t_bounds[1] ) - # subset according to layer key + # subset according to matching layer key + # semantique:key as it may be specified in the asset properties of an + # item is matched with the layer reference as given by the layout file filtered_items = [] for item in item_coll: has_no_key = True has_conformant_key = False - for asset_key, asset in item.assets.items(): + for asset in item.assets.values(): if 'semantique:key' in asset.extra_fields: has_no_key = False asset_key = asset.extra_fields['semantique:key'] @@ -1065,7 +1332,7 @@ def _divide_chunks(lst, k): return [lst[i : i + k] for i in range(0, len(lst), k)] @staticmethod - def filter_spatio_temporal(item_collection, bbox, bbox_crs, start_datetime, end_datetime): + def _filter_spatio_temporal(item_collection, bbox, bbox_crs, start_datetime, end_datetime): """ Filter item collection by spatio-temporal extent. @@ -1152,4 +1419,4 @@ def _sign_metadata(items): else: updated_items.extend(curr_colls[coll]["items"]) # return signed items - return pystac.ItemCollection(updated_items) \ No newline at end of file + return pystac.ItemCollection(updated_items) diff --git a/semantique/processor/core.py b/semantique/processor/core.py index a70e7eea..2e407eb7 100644 --- a/semantique/processor/core.py +++ b/semantique/processor/core.py @@ -4,12 +4,14 @@ import copy import inspect import logging +import pystac import pyproj import pytz import warnings import xarray as xr from datetime import datetime +from semantique import datacube from semantique import exceptions from semantique.dimensions import TIME, SPACE, X, Y from semantique.processor import arrays, operators, reducers, values, utils @@ -1375,16 +1377,19 @@ class FilterProcessor(QueryProcessor): The cache object that is used to store data layers. watch_layer : :obj:`str` The layer that is currently being focussed on. All temporal filter operations - are analyzed regarding the effect they are having on this layer. + are analyzed regarding the effect they are having on this layer. Doesn't need + to be set by the user but will be set dynamically upon calling .execute(). meta_timestamps : :obj:`DatetimeIndex` or :obj:`Series` - The timestamps that are used as a starting point to determine the final - temporal extent. The timestamps will be filtered by the temporal filters. - If not provided, a default range from 1960 to the current time in hourly - intervals is used to evaluate the temporal filters. + The timestamps that are used as a starting point to determine the final temporal + extent. The timestamps will be filtered by the temporal filters. If left to `None`, + the timestamps will be retrieved dynamically from the referenced data layers upon + calling .execute(). Only for test purposes meta_timestamps should be provided by + the user. """ def __init__(self, recipe, datacube, mapping, extent, custom_verbs = None, custom_operators = None, custom_reducers = None, track_types = True, - preview = False, cache = None, watch_layer = None, meta_timestamps = None): + preview = False, cache = None, watch_layer = None, + meta_timestamps = None): super(FilterProcessor, self).__init__( recipe, datacube, mapping, extent, custom_verbs=custom_verbs, custom_operators=custom_operators, custom_reducers=custom_reducers, @@ -1392,15 +1397,7 @@ def __init__(self, recipe, datacube, mapping, extent, custom_verbs = None, ) self.track_types = False self.watch_layer = watch_layer - if meta_timestamps is not None: - self.meta_timestamps = meta_timestamps - else: - self.meta_timestamps = pd.date_range( - start = '1960-01-01', - end = datetime.now(), - freq = 'h' - ) - self.meta_timestamps = pd.to_datetime(self.meta_timestamps).sort_values() + self.meta_timestamps = meta_timestamps @property def crs(self): @@ -1454,8 +1451,9 @@ def execute(self): """ logger.info("Started executing the semantic query") - # Run fake processor to get a dict of all layers to init response object - self.fp = FakeProcessor( + + # Step 1: Run fake processor to get a dict of all layers. + self.fap = FakeProcessor( recipe=self.recipe, datacube=self.datacube, mapping=self.mapping, @@ -1467,95 +1465,182 @@ def execute(self): preview=self.preview, cache=self.cache ) - _ = self.fp.optimize().execute() - lyrs = [list(x) for x in set(tuple(x) for x in self.fp.cache.seq)] + _ = self.fap.optimize().execute() + lyrs = [list(x) for x in set(tuple(x) for x in self.fap.cache.seq)] self._response = {"_".join(x): {} for x in lyrs} + # Step 2.a: Temporal filter evaluation. if self._contains_filter(self.recipe): - # Recipe contains temporal filter. skip_filter = False try: - # Execute instructions for each layer & result in the recipe. - for lyr in lyrs: - self.watch_layer = "_".join(lyr) - logger.info(f"Evaluate temporal filter for layer: '{lyr}'") - for x in self._recipe: - logger.info(f"Started executing result: '{x}'") - result = self.call_handler(self._recipe[x]) - result.name = x - self._response[self.watch_layer][x] = result - logger.info(f"Finished executing result: '{x}'") - logger.info("Finished executing the semantic query") - # Omit non-active results. - for lyr,arr_dict in self._response.items(): - self._response[lyr] = { - k: v for k, v in arr_dict.items() if v.sqm.active - } - # Post-processing to arrive at set of arrays as results. - # Combine temporal extents of Collections. - for lyr,arr_dict in self._response.items(): - for k,v in arr_dict.items(): - if type(v.sqm).__name__ == 'MetaCollection': - # Fill datetime arrays with ones. - for i,arr in enumerate(v): - if np.issubdtype(arr.dtype, np.datetime64): - v[i] = xr.ones_like(arr, dtype="int32") - if type(v.sqm).__name__ == 'MetaCollection': - self._response[lyr][k] = v.sqm.merge(reducers.any_, track_types=False) - # Retrieve valid temporal indices per layer and result. - # Valid indices are those that are not null. - response = copy.deepcopy(self._response) - for lyr,arr_dict in self._response.items(): - for res,arr in arr_dict.items(): - # Create empty response obj. - out = [] - # Reduce arrays to at most 3 dimensions. - if arr.ndim > 3: - dim = [x for x in arr.dims if x not in ["time", "x", "y"]] - assert len(dim) == 1, "Only one dimension can be reduced" - arr = arr.sqm.reduce(reducers.any_, dim[0], track_types=False) - # Extract temporal indices from array itself. - if "time" in arr.dims: - reduce_dims = [x for x in arr.dims if x != "time"] - out.append(arr.time[arr.isnull().sum(reduce_dims) == 0]) - # Extract saved results from vault. - if arr.sqm.vault is not None: - out.append(arr.sqm.vault) - # Combine results from array and vault. - if len(out): - if len(out) > 1: - out = xr.DataArray(np.unique(np.concatenate(out)), dims="time", name="time") - else: - out = out[0] - response[lyr][res] = out - else: - # If no valid temporal indices are found, remove result. - # Occurs if result are extracted spatial coordinates. - response[lyr].pop(res) - self._response = response - # Omit empty layer results. - self._response = {k:v for k,v in self._response.items() if v} - if len(self._response): - # Create temporal extents' union over results for each layer. - for lyr,arr_dict in self._response.items(): - time_coords = [arr_dict[key].values for key in arr_dict] - merged_time = np.unique(np.concatenate(time_coords)) - merged_time.sort() - self._response[lyr] = pd.to_datetime(merged_time) + # Step 2.1.1: Retrieve timestamps of data layers to be filtered. + if self.meta_timestamps is None: + meta_retrieved = True + if type(self.datacube) == datacube.Opendatacube: + # Retrieve products to look up. + lyr_prods_lut = {} + for ref in self.fap.cache.seq: + lyr_prods_lut[ref] = self.datacube.lookup(*ref)["product"] + # Retrieve timestamps of prods. + meta_dfs = [] + prods = list(set(lyr_prods_lut.values())) + for prod in prods: + ref_idx = list(lyr_prods_lut.values()).index(prod) + lyr = list(lyr_prods_lut.keys())[ref_idx] + df = self.datacube.retrieve_metadata(*lyr, extent=self._extent) + df.insert(0, "prod", prod) + meta_dfs.append(df) + _meta_df = pd.concat(meta_dfs).reset_index(drop=True) + # Expand meta df for lyr information. + meta_dfs = [] + for lyr,prod in lyr_prods_lut.items(): + df = _meta_df[_meta_df['prod'] == prod].copy() + df.insert(0, "lyr", "_".join(lyr)) + meta_dfs.append(df) + meta_df = pd.concat(meta_dfs).reset_index(drop=True) + meta_df.drop(columns=["prod"], inplace=True) + elif type(self.datacube) == datacube.STACCube: + # Retrieve timestamps of references. + # Note: Contrary to ODC, .retrieve_metadata() can be called immediately + # since the metadata is already stored in the STACCube. Hence, no performance + # advantage by resolving products (=items instead of assets) first. + meta_dfs = [] + for ref in self.fap.cache.seq: + df = self.datacube.retrieve_metadata(*ref, extent=self._extent) + df.insert(0, "lyr", "_".join(ref)) + meta_dfs.append(df) + meta_df = pd.concat(meta_dfs).reset_index(drop=True) + elif type(self.datacube) == datacube.GeotiffArchive: + raise ValueError("FilterProcessor doesn't support GeotiffArchive.") + else: + raise ValueError(f"Datacube type {self.datacube} not supported.") + # Set meta timestamps to be analysed. + self.meta_timestamps = meta_df.time.unique() else: - skip_filter = True + meta_retrieved = False + + if len(self.meta_timestamps): + # Step 2.1.2: Execute instructions for each layer & result in the recipe. + for lyr in lyrs: + self.watch_layer = "_".join(lyr) + logger.info(f"Evaluate temporal filter for layer: '{lyr}'") + for x in self._recipe: + logger.info(f"Started executing result: '{x}'") + result = self.call_handler(self._recipe[x]) + result.name = x + self._response[self.watch_layer][x] = result + logger.info(f"Finished executing result: '{x}'") + logger.info("Finished executing the semantic query") + + # Step 2.1.3: Postprocessing of results. + # Omit non-active results. + for lyr,arr_dict in self._response.items(): + self._response[lyr] = { + k: v for k, v in arr_dict.items() if v.sqm.active + } + # Combine temporal extents of Collections. + # Arrive at set of arrays as results. + for lyr,arr_dict in self._response.items(): + for k,v in arr_dict.items(): + if type(v.sqm).__name__ == 'MetaCollection': + # Fill datetime arrays with ones. + for i,arr in enumerate(v): + if np.issubdtype(arr.dtype, np.datetime64): + v[i] = xr.ones_like(arr, dtype="int32") + if type(v.sqm).__name__ == 'MetaCollection': + self._response[lyr][k] = v.sqm.merge(reducers.any_, track_types=False) + # Retrieve valid temporal indices per layer and result. + # Valid indices are those that are not null. + response = copy.deepcopy(self._response) + for lyr,arr_dict in self._response.items(): + for res,arr in arr_dict.items(): + # Create empty response obj. + out = [] + # Reduce arrays to at most 3 dimensions. + if arr.ndim > 3: + dim = [x for x in arr.dims if x not in ["time", "x", "y"]] + assert len(dim) == 1, "Only one dimension can be reduced" + arr = arr.sqm.reduce(reducers.any_, dim[0], track_types=False) + # Extract temporal indices from array itself. + if "time" in arr.dims: + reduce_dims = [x for x in arr.dims if x != "time"] + out.append(arr.time[arr.isnull().sum(reduce_dims) == 0]) + # Extract saved results from vault. + if arr.sqm.vault is not None: + out.append(arr.sqm.vault) + # Combine results from array and vault. + if len(out): + if len(out) > 1: + out = xr.DataArray(np.unique(np.concatenate(out)), dims="time", name="time") + else: + out = out[0] + response[lyr][res] = out + else: + # If no valid temporal indices are found, remove result. + # Occurs if result are extracted spatial coordinates. + response[lyr].pop(res) + self._response = response + # Omit empty layer results. + self._response = {k:v for k,v in self._response.items() if v} + if len(self._response): + # Create temporal extents' union over results for each layer. + for lyr,arr_dict in self._response.items(): + time_coords = [arr_dict[key].values for key in arr_dict] + merged_time = np.unique(np.concatenate(time_coords)) + merged_time.sort() + self._response[lyr] = pd.to_datetime(merged_time) + # Sort response items. + self._response = {k: v for k, v in sorted(self._response.items())} + else: + skip_filter = True except Exception as e: skip_filter = True - logger.error(f"An error occurred during FilterProcessor execution: {e}") - logger.error("FilterProcessor evaluation is skipped.") + raise e + # logger.error(f"An error occurred during FilterProcessor execution: {e}") + # logger.error("FilterProcessor evaluation is skipped.") else: skip_filter = True - # Shortcut if no temporal filter is present. + meta_retrieved = False + + # Step 2.b: Shortcut if no temporal filter is present. + # Keep all initial timestamps. if skip_filter: for lyr in lyrs: self._response["_".join(lyr)] = pd.to_datetime(self.meta_timestamps) - # Return result. self._response = {k: v for k, v in sorted(self._response.items())} + + # Step 3: Update datacube dataset according to valid timestamps. + if meta_retrieved: + # Copy datacube to update. + _datacube = copy.deepcopy(self.datacube) + if type(self.datacube) == datacube.Opendatacube: + # Extract valid dataset ids corresponding to timestamps. + id_dict = {} + for k,v in self._response.items(): + ids = meta_df[meta_df.lyr == k][meta_df.time.isin(pd.Series(v))].id + id_dict[k] = list(ids) + _datacube.data_dict = id_dict + self.datacube = _datacube + elif type(self.datacube) == datacube.STACCube: + _datacube.src = pystac.ItemCollection(self.datacube.src) + # Extract valid collection_item_Ids corresponding to timestamps. + id_list = [] + for k,v in self._response.items(): + ids = meta_df[meta_df.lyr == k][meta_df.time.isin(pd.Series(v))].id + id_list.extend(list(ids)) + id_list = list(set(id_list)) + # Subset item as input to datacube correspondigly. + if len(id_list): + filtered_items = [] + for item in _datacube.src: + if (item.get_collection().id, item.id) in id_list: + filtered_items.append(item) + _datacube.src = filtered_items + else: + _datacube.src = [] + self.datacube = _datacube + + # Step 4: Return result. out = self._response logger.debug(f"Responding:\n{out}") return out diff --git a/semantique/recipe.py b/semantique/recipe.py index 7b1c8771..69c6da5f 100644 --- a/semantique/recipe.py +++ b/semantique/recipe.py @@ -1,153 +1,140 @@ -import semantique as sq from semantique.processor.core import QueryProcessor, FakeProcessor, FilterProcessor from semantique.visualiser.visualise import show - class QueryRecipe(dict): - """Dict-like container to store instructions of a query recipe. + """Dict-like container to store instructions of a query recipe. + + Parameters + ---------- + results : :obj:`dict` of :obj:`ArrayProxy` + Dictionary containing result names as keys and result instructions as + values. If :obj:`None`, an empty recipe is constructed. + + Returns + ------- + :obj:`dict` of :obj:`ArrayProxy`: + The query recipe as a dictionary containing result names as keys and + result instructions as values. + + Examples + -------- + >>> import semantique as sq + >>> recipe = sq.QueryRecipe() + >>> recipe["map"] = sq.entity("water").reduce("time", "count") + >>> recipe["series"] = sq.entity("water").reduce("space", "count") + + """ + def __init__(self, results = None): + obj = {} if results is None else results + super(QueryRecipe, self).__init__(obj) + + def execute( + self, + datacube, + mapping, + space, + time, + filter_check = True, + run_preview = False, + cache_data = True, + **config + ): + """Execute a query recipe. + + This function initializes a :obj:`processor.core.QueryProcessor` instance + and uses it to process the query. It runs through all distinct phases of + query processing: parsing, optimization and execution. Parameters ---------- - results : :obj:`dict` of :obj:`ArrayProxy` - Dictionary containing result names as keys and result instructions as - values. If :obj:`None`, an empty recipe is constructed. + datacube : Datacube + The datacube instance to process the query against. + mapping : Mapping + The mapping instance to process the query against. + space : SpatialExtent + The spatial extent in which the query should be processed. + time : TemporalExtent + The temporal extent in which the query should be processed. + filter_check : :obj:`bool` + Should the query processor evaluate possible temporal filter operations + upfront? This can reduce the amount of data to be processed in the + subsequent evaluation process. If the recipe doesn't contain any + temporal filter operations, this flag has no effect. + run_preview : :obj:`bool` + Should a preview run with reduced spatial resolution be performed? + A preview run enables to test if the recipe execution succeeds + and allows to inspect the results. + cache_data : :obj:`bool` + Should the query processor cache the data references as provided by the + mapped concepts? Enabling caching increases the memory footprint while + reducing the I/O time to retrieve data if the same data layer is + referenced multiple times. + **config: + Additional configuration parameters forwarded to + :func:`QueryProcessor.parse `. Returns ------- - :obj:`dict` of :obj:`ArrayProxy`: - The query recipe as a dictionary containing result names as keys and - result instructions as values. + :obj:`dict` of :obj:`xarray.DataArray`: + The response of the query processor as a dictionary containing result + names as keys and result arrays as values. Examples -------- >>> import semantique as sq + >>> import geopandas as pd + >>> recipe = sq.QueryRecipe() >>> recipe["map"] = sq.entity("water").reduce("time", "count") >>> recipe["series"] = sq.entity("water").reduce("space", "count") - """ + >>> dc = sq.datacube.GeotiffArchive("files/layout_gtiff.json", src = "layers_gtiff.zip") + >>> mapping = sq.mapping.Semantique("files/mapping.json") + >>> space = sq.SpatialExtent(gpd.read_file("files/footprint.geojson")) + >>> time = sq.TemporalExtent("2019-01-01", "2020-12-31") + >>> config = {"crs": 3035, "tz": "UTC", "spatial_resolution": [-1800, 1800]} - def __init__(self, results=None): - obj = {} if results is None else results - super(QueryRecipe, self).__init__(obj) - - def execute( - self, - datacube, - mapping, - space, - time, - filter_check=True, - run_preview=False, - cache_data=True, - **config - ): - """Execute a query recipe. - - This function initializes a :obj:`processor.core.QueryProcessor` instance - and uses it to process the query. It runs through all distinct phases of - query processing: parsing, optimization and execution. - - Parameters - ---------- - datacube : Datacube - The datacube instance to process the query against. - mapping : Mapping - The mapping instance to process the query against. - space : SpatialExtent - The spatial extent in which the query should be processed. - time : TemporalExtent - The temporal extent in which the query should be processed. - filter_check : :obj:`bool` - Should the query processor evaluate possible temporal filter operations - upfront? This can reduce the amount of data to be processed in the - subsequent evaluation process. If the recipe doesn't contain any - temporal filter operations, this flag has no effect. - run_preview : :obj:`bool` - Should a preview run with reduced spatial resolution be performed? - A preview run enables to test if the recipe execution succeeds - and allows to inspect the results. - cache_data : :obj:`bool` - Should the query processor cache the data references as provided by the - mapped concepts? Enabling caching increases the memory footprint while - reducing the I/O time to retrieve data if the same data layer is - referenced multiple times. - **config: - Additional configuration parameters forwarded to - :func:`QueryProcessor.parse `. - - Returns - ------- - :obj:`dict` of :obj:`xarray.DataArray`: - The response of the query processor as a dictionary containing result - names as keys and result arrays as values. - - Examples - -------- - >>> import semantique as sq - >>> import geopandas as pd - - >>> recipe = sq.QueryRecipe() - >>> recipe["map"] = sq.entity("water").reduce("time", "count") - >>> recipe["series"] = sq.entity("water").reduce("space", "count") - - >>> dc = sq.datacube.GeotiffArchive("files/layout_gtiff.json", src = "layers_gtiff.zip") - >>> mapping = sq.mapping.Semantique("files/mapping.json") - >>> space = sq.SpatialExtent(gpd.read_file("files/footprint.geojson")) - >>> time = sq.TemporalExtent("2019-01-01", "2020-12-31") - >>> config = {"crs": 3035, "tz": "UTC", "spatial_resolution": [-1800, 1800]} - - >>> recipe.execute(dc, mapping, space, time, **config) - - """ - # Pre-evaluation - # For GeotiffArchive datacubes, subsetting data is not feasible - if type(datacube) == sq.datacube.GeotiffArchive: - filter_check = False - - if filter_check: - # Tbd: Add meta_timestamps as input to FilterProcessor, retrieved from datacube - # For STACCube, meta_timestamps can be retrieved from src - # For OpenDataCube, tbd - # Retrieve required timestamps according to filter operations - fp = FilterProcessor.parse( - self, datacube, mapping, space, time, **config - ) - valid_timestamps = fp.optimize().execute - if cache_data: - # FilterProcessor contains a FakeProcessor instance - cache = fp.fp.cache - else: - cache = None - else: - if cache_data: - fp = FakeProcessor.parse( - self, datacube, mapping, space, time, **config - ) - _ = fp.optimize().execute() - cache = fp.cache - else: - cache = None - - # Evaluation - qp = QueryProcessor.parse( - self, - datacube, - mapping, - space, - time, - preview=run_preview, - cache=cache, - **config - ) - return qp.optimize().execute() - - def visualise(self): - """Visualise the recipe in a web browser. - - This method visualises the recipe in a web browser. - The visualisation is based on Blockly, a web-based visual programming - editor. The recipe is converted into Blockly XML format and served - to the browser. - """ - show(self) + >>> recipe.execute(dc, mapping, space, time, **config) + + """ + if filter_check: + # Use FilterProcessor to retrieve required minimum set of data IDs + fip = FilterProcessor.parse(self, datacube, mapping, space, time, **config) + _ = fip.optimize().execute() + # Update datacube according to FilterProcessor + datacube = fip.datacube + # Retrieve cache from fake processor instance as part of the filter processor + if cache_data: + cache = fip.fap.cache + else: + cache = None + else: + # Retrieve cache from standalone fake processor instance + if cache_data: + fap = FakeProcessor.parse(self, datacube, mapping, space, time, **config) + _ = fap.optimize().execute() + cache = fap.cache + else: + cache = None + + qp = QueryProcessor.parse( + self, + datacube, + mapping, + space, + time, + preview=run_preview, + cache=cache, + **config + ) + return qp.optimize().execute() + + def visualise(self): + """Visualise the recipe in a web browser. + + This method visualises the recipe in a web browser. + The visualisation is based on Blockly, a web-based visual programming + editor. The recipe is converted into Blockly XML format and served + to the browser. + """ + show(self) \ No newline at end of file From 2584f77fc501e0bdaff1722bdb81b93876e64404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Sun, 29 Sep 2024 13:30:38 +0200 Subject: [PATCH 07/18] feat: added logging information :gift: --- semantique/processor/core.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/semantique/processor/core.py b/semantique/processor/core.py index 2e407eb7..a2c2bac7 100644 --- a/semantique/processor/core.py +++ b/semantique/processor/core.py @@ -1450,9 +1450,10 @@ def execute(self): containing the resulting timestamps that are processed in the recipe. """ - logger.info("Started executing the semantic query") + logger.info("Started query processing for temporal filter evaluation.") # Step 1: Run fake processor to get a dict of all layers. + logger.info("Started fake query processing to resolve layer references.") self.fap = FakeProcessor( recipe=self.recipe, datacube=self.datacube, @@ -1468,6 +1469,8 @@ def execute(self): _ = self.fap.optimize().execute() lyrs = [list(x) for x in set(tuple(x) for x in self.fap.cache.seq)] self._response = {"_".join(x): {} for x in lyrs} + logger.info("Finished fake query processing to resolve layer references.") + logger.debug(f"Resolved layers: {lyrs}") # Step 2.a: Temporal filter evaluation. if self._contains_filter(self.recipe): @@ -1497,6 +1500,8 @@ def execute(self): df = _meta_df[_meta_df['prod'] == prod].copy() df.insert(0, "lyr", "_".join(lyr)) meta_dfs.append(df) + logger.debug(f"Retrieved meta information for layer {lyr}:\n {df}") + logger.debug(f"Unique timestamps: {len(df.drop_duplicates(['time']))}") meta_df = pd.concat(meta_dfs).reset_index(drop=True) meta_df.drop(columns=["prod"], inplace=True) elif type(self.datacube) == datacube.STACCube: @@ -1505,14 +1510,18 @@ def execute(self): # since the metadata is already stored in the STACCube. Hence, no performance # advantage by resolving products (=items instead of assets) first. meta_dfs = [] - for ref in self.fap.cache.seq: - df = self.datacube.retrieve_metadata(*ref, extent=self._extent) - df.insert(0, "lyr", "_".join(ref)) + for lyr in list(set(self.fap.cache.seq)): + df = self.datacube.retrieve_metadata(*lyr, extent=self._extent) + df.insert(0, "lyr", "_".join(lyr)) meta_dfs.append(df) + logger.debug(f"Retrieved meta information for layer {lyr}:\n {df}") + logger.debug(f"Unique timestamps: {len(df.drop_duplicates(['time']))}") meta_df = pd.concat(meta_dfs).reset_index(drop=True) elif type(self.datacube) == datacube.GeotiffArchive: + meta_retrieved = False raise ValueError("FilterProcessor doesn't support GeotiffArchive.") else: + meta_retrieved = False raise ValueError(f"Datacube type {self.datacube} not supported.") # Set meta timestamps to be analysed. self.meta_timestamps = meta_df.time.unique() @@ -1530,7 +1539,6 @@ def execute(self): result.name = x self._response[self.watch_layer][x] = result logger.info(f"Finished executing result: '{x}'") - logger.info("Finished executing the semantic query") # Step 2.1.3: Postprocessing of results. # Omit non-active results. @@ -1595,9 +1603,8 @@ def execute(self): skip_filter = True except Exception as e: skip_filter = True - raise e - # logger.error(f"An error occurred during FilterProcessor execution: {e}") - # logger.error("FilterProcessor evaluation is skipped.") + logger.error(f"An error occurred during FilterProcessor execution: {e}") + logger.error("FilterProcessor evaluation is skipped.") else: skip_filter = True meta_retrieved = False @@ -1643,6 +1650,7 @@ def execute(self): # Step 4: Return result. out = self._response logger.debug(f"Responding:\n{out}") + logger.info("Finished query processing for temporal filter evaluation.") return out def call_verb(self, name, params): @@ -1930,4 +1938,4 @@ def _add_data(self, key, value): def _rm_data(self, key): """Remove data layer from cache.""" - del self._data[key] \ No newline at end of file + del self._data[key] From 9a5942f264010a5a4cfad19c161ae792c28471e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Sun, 29 Sep 2024 14:15:33 +0200 Subject: [PATCH 08/18] demo: removed comments from test notebook :books: --- demo/extras/filter_tests.ipynb | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/demo/extras/filter_tests.ipynb b/demo/extras/filter_tests.ipynb index 2378c5fe..f52d51bb 100644 --- a/demo/extras/filter_tests.ipynb +++ b/demo/extras/filter_tests.ipynb @@ -1,33 +1,5 @@ { "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# To-Do\n", - "\n", - "# stash commits - check for syntax etc & push to online\n", - "# test on workstation for ODCCube\n", - "# empty array error - warnings on or off? What if ODCCube is empty?\n", - "# compile running example for ODCCube\n", - "# formatting (80 spaces)\n", - "\n", - "# re-write docs to...\n", - "# point at trim behaviour\n", - "# it is assumed that filter implies trim currently (i.e. erasing NaN), equivalent to hypothetical trim op at very end of recipe\n", - "# excplicit trim needs to be called if you want to erase NaNs before -> e.g. extract_time will still extract for full series, unless trim is called the temporal dimension remains the initial one (full extent is extracted) \n", - "# point at custom functions and is_missing (custom_functions should not revert NaNs)\n", - "# point at extract space behaviour -> not evaluated\n", - "\n", - "# inclusion of FilterProcessor in the main branch with connection to datacubes \n", - "# https://datacube-core.readthedocs.io/en/latest/api/indexed-data/generate/datacube.Datacube.list_measurements.html#datacube.Datacube.list_measurements\n", - "\n", - "# Wednesday & Thursday: refactor/adjust reauth (resign function)\n", - "# Friday: paper writing & re-run of application examples" - ] - }, { "cell_type": "code", "execution_count": 2, From e99939a1a4b3a0c4029731ac863f2090bf07f55f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Tue, 1 Oct 2024 18:35:02 +0200 Subject: [PATCH 09/18] fix: MetaCollection usage in concept translation :wrench: --- semantique/mapping.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/semantique/mapping.py b/semantique/mapping.py index cc93ba0c..c031131d 100644 --- a/semantique/mapping.py +++ b/semantique/mapping.py @@ -1,8 +1,8 @@ from abc import abstractmethod from semantique import exceptions -from semantique.processor.core import QueryProcessor, FakeProcessor -from semantique.processor.arrays import Collection +from semantique.processor.core import QueryProcessor, FakeProcessor, FilterProcessor +from semantique.processor.arrays import Collection, MetaCollection from semantique.processor import reducers from semantique.visualiser.visualise import show @@ -154,10 +154,16 @@ def translate(self, *reference, property = None, extent, datacube, if len(properties) == 1: out = properties[0] else: - out = Collection(properties).merge( - reducers.all_, - track_types=processor.track_types - ) + if type(processor) == FilterProcessor: + out = MetaCollection(properties).merge( + reducers.all_, + track_types=processor.track_types + ) + else: + out = Collection(properties).merge( + reducers.all_, + track_types=processor.track_types + ) else: try: property = ruleset[property] From 6067b4e7333e6353073924bc0cd2994d4ef62589 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Tue, 1 Oct 2024 18:36:31 +0200 Subject: [PATCH 10/18] fix: filter treatment of coords & NaNs :wrench: --- semantique/processor/arrays.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/semantique/processor/arrays.py b/semantique/processor/arrays.py index f4b54b0f..ed4fb806 100644 --- a/semantique/processor/arrays.py +++ b/semantique/processor/arrays.py @@ -1812,13 +1812,17 @@ def filter(self, filterer, track_types = False, **kwargs): :obj:`xarray.DataArray` """ - # Xarray treats null values as True but they should not pass the filter. - filterer.values = utils.null_as_zero(filterer) # Apply filter only if not locked. if any([self.locked, filterer.sqm.locked]): out = self._obj else: - out = self._obj.where(filterer.sqm.align_with(self._obj)) + # Align/Broadcast + filterer = filterer.sqm.align_with(self._obj) + # Xarray treats null values as True but they should not pass the filter. + # Note: This also applies to the all NaN restored due to align_with. + # Consequence: Null as zero called after align_with. + filterer.values = utils.null_as_zero(filterer) + out = self._obj.where(filterer) out.sqm.active = any([self.active, filterer.sqm.active]) out.sqm.locked = False out.sqm.vault = self._merge_arrays_vaults([self._obj, filterer]) From bdac3846aacf37723c7e2b8eb61f76557e6a8419 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Tue, 1 Oct 2024 19:06:14 +0200 Subject: [PATCH 11/18] fix: evaluate concepts for filter ops & add debug logging infos :wrench: --- semantique/processor/core.py | 56 ++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/semantique/processor/core.py b/semantique/processor/core.py index a2c2bac7..6dc7ccb9 100644 --- a/semantique/processor/core.py +++ b/semantique/processor/core.py @@ -10,7 +10,6 @@ import warnings import xarray as xr -from datetime import datetime from semantique import datacube from semantique import exceptions from semantique.dimensions import TIME, SPACE, X, Y @@ -1301,8 +1300,7 @@ def handle_concept(self, block): custom_verbs = self._custom_verbs, custom_operators = self._custom_operators, custom_reducers = self._custom_reducers, - track_types = self._track_types, - + track_types = self._track_types ) logger.debug(f"Translated concept {block['reference']}:\n{out}") return out @@ -1473,7 +1471,8 @@ def execute(self): logger.debug(f"Resolved layers: {lyrs}") # Step 2.a: Temporal filter evaluation. - if self._contains_filter(self.recipe): + concepts = self._find_and_resolve_concepts(self.recipe) + if any([self._contains_filter(x) for x in [*concepts, self.recipe]]): skip_filter = False try: # Step 2.1.1: Retrieve timestamps of data layers to be filtered. @@ -1626,6 +1625,9 @@ def execute(self): for k,v in self._response.items(): ids = meta_df[meta_df.lyr == k][meta_df.time.isin(pd.Series(v))].id id_dict[k] = list(ids) + logger.debug(f"Temporally filtered results for layer {k}") + logger.debug(f"- unique timestamps: {len(np.unique(v))}") + logger.debug(f"- unique datasets: {len(ids)}") _datacube.data_dict = id_dict self.datacube = _datacube elif type(self.datacube) == datacube.STACCube: @@ -1635,6 +1637,9 @@ def execute(self): for k,v in self._response.items(): ids = meta_df[meta_df.lyr == k][meta_df.time.isin(pd.Series(v))].id id_list.extend(list(ids)) + logger.debug(f"Temporally filtered results for layer {k}") + logger.debug(f"- unique timestamps: {len(np.unique(v))}") + logger.debug(f"- unique items: {len(ids)}") id_list = list(set(id_list)) # Subset item as input to datacube correspondigly. if len(id_list): @@ -1649,7 +1654,6 @@ def execute(self): # Step 4: Return result. out = self._response - logger.debug(f"Responding:\n{out}") logger.info("Finished query processing for temporal filter evaluation.") return out @@ -1883,6 +1887,48 @@ def _contains_extract_time(self, params): return True return False + def _find_and_resolve_concepts(self, recipe): + """Searches recursively for and resolve 'concept' references in a recipe. + + Parameters + ---------- + recipe : :obj:`dict` or :obj:`list` + The recipe (or pieces of it) which is to be checked for references. + + Returns + ------- + :obj:`list` + List of concept defitions that are referenced in the recipe. + """ + results = [] + if isinstance(recipe, dict): + # Check if this dict contains a concept reference + if ( + recipe.get('type') == 'concept' and + isinstance(recipe.get('reference'), tuple) and + recipe['reference'][0] == 'entity' + ): + # Resolve reference + ref = recipe['reference'] + property = recipe.get('property') + ruleset = self._mapping.lookup(*ref) + if property is None: + results.append(ruleset) + else: + try: + results.append(ruleset[property]) + except KeyError: + raise KeyError(f"Property '{property}' is not defined for concept '{ref}'") + else: + # Recur into the dictionary to search for nested occurrences + for key, value in recipe.items(): + results.extend(self._find_and_resolve_concepts(value)) + elif isinstance(recipe, list): + # Recur into lists to search for nested dictionaries + for item in recipe: + results.extend(self._find_and_resolve_concepts(item)) + return results + class Cache: """Cache of retrieved data layers. From 0953bd299fcd4f65771f07c9085e8fb6f7975820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Tue, 1 Oct 2024 19:15:00 +0200 Subject: [PATCH 12/18] demo: updated test notebook :books: --- demo/extras/filter_tests.ipynb | 65 +++++++++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 5 deletions(-) diff --git a/demo/extras/filter_tests.ipynb b/demo/extras/filter_tests.ipynb index f52d51bb..a1780564 100644 --- a/demo/extras/filter_tests.ipynb +++ b/demo/extras/filter_tests.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -37,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -70,6 +70,18 @@ " mapping[\"entity\"][\"red_band\"] = {\"color\": sq.reflectance(\"s2_band04\")}\n", " mapping[\"entity\"][\"NDVI\"] = {\"color\": sq.reflectance(\"s2_band08\").\\\n", " evaluate(\"normalized_difference\", sq.reflectance(\"s2_band04\"))}\n", + " mapping[\"entity\"][\"forest\"] = {\n", + " \"appearance\": (\n", + " sq.reflectance(\"s2_band08\")\n", + " .evaluate(\"normalized_difference\", sq.reflectance(\"s2_band04\"))\n", + " .filter_time(\"year\", \"equal\", 2020) \n", + " .reduce(\"mean\", \"time\")\n", + " .evaluate(\"greater\", 0.4)\n", + " )\n", + " }\n", + " mapping[\"entity\"][\"valid_obs\"] = {\"color\": sq.appearance(\"colortype\").evaluate(\"in\", [4,5,6])}\n", + " mapping[\"entity\"][\"all\"] = {\"color\": sq.appearance(\"colortype\").evaluate(\"not_equal\", 0)}\n", + "\n", " # define general datacube layout\n", " with open(\"../files/layout_gtiff.json\", \"r\") as file:\n", " dc = sq.datacube.GeotiffArchive(json.load(file), src = \"../files/layers_gtiff.zip\")\n", @@ -1540,6 +1552,48 @@ " \"context\": self.context\n", " })\n", "\n", + " # define test no. 19m\n", + " recipe = sq.QueryRecipe()\n", + " recipe[\"forest\"] = sq.entity(\"forest\")\n", + " recipe[\"stats\"] = (sq.entity(\"all\")\n", + " .filter(sq.entity(\"valid_obs\"))\n", + " .groupby_time(\"year\")\n", + " .reduce(\"count\", \"time\")\n", + " .concatenate(\"year\")\n", + " )\n", + " recipe[\"mask\"] = (sq.result(\"stats\")\n", + " .filter(sq.result(\"forest\"))\n", + " .reduce(\"min\", \"year\")\n", + " .evaluate(\"greater\", 5)\n", + " )\n", + " recipe[\"status_orginal\"] = (sq.entity(\"vegetation\")\n", + " .filter(sq.result(\"mask\"))\n", + " .filter(sq.entity(\"valid_obs\"))\n", + " .filter_time(\"year\", \"equal\", 2020) \n", + " .reduce(\"percentage\", \"time\")\n", + " )\n", + " recipe[\"status_post\"] = (sq.entity(\"vegetation\")\n", + " .filter(sq.result(\"mask\"))\n", + " .filter(sq.entity(\"valid_obs\"))\n", + " .groupby_time(\"year\")\n", + " .reduce(\"percentage\", \"time\")\n", + " .evaluate(\"subtract\", sq.result(\"status_orginal\"))\n", + " .concatenate(\"year\")\n", + " .filter(sq.self().extract(\"year\").evaluate(\"equal\", 2020).evaluate(\"not\"))\n", + " .trim()\n", + " )\n", + " result = {\n", + " 'appearance_colortype': self.max_items,\n", + " 'reflectance_s2_band04': 8784,\n", + " 'reflectance_s2_band08': 8784\n", + " }\n", + " self.tests.append({\n", + " \"name\": \"no.19m\",\n", + " \"desc\": \"real-world recipes\",\n", + " \"recipe\": recipe,\n", + " \"result\": result,\n", + " \"context\": self.context\n", + " })\n", "\n", " def execute(self):\n", " for test in self.tests:\n", @@ -1578,7 +1632,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -1642,7 +1696,8 @@ "Running test : no.19h\n", "Running test : no.19j\n", "Running test : no.19k\n", - "Running test : no.19l\n" + "Running test : no.19l\n", + "Running test : no.19m\n" ] } ], From eeeb21cbdaf14787e7d0634be7d736ee8b8113f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Tue, 1 Oct 2024 21:25:12 +0200 Subject: [PATCH 13/18] fix: ODC datacube deepcopy :wrench: --- semantique/processor/core.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/semantique/processor/core.py b/semantique/processor/core.py index 6dc7ccb9..540b4b6f 100644 --- a/semantique/processor/core.py +++ b/semantique/processor/core.py @@ -1618,8 +1618,12 @@ def execute(self): # Step 3: Update datacube dataset according to valid timestamps. if meta_retrieved: # Copy datacube to update. - _datacube = copy.deepcopy(self.datacube) if type(self.datacube) == datacube.Opendatacube: + # Copy datacube. + dc_con = self.datacube.connection + self.datacube.connection = None + _datacube = copy.deepcopy(self.datacube) + _datacube.connection = dc_con # Extract valid dataset ids corresponding to timestamps. id_dict = {} for k,v in self._response.items(): @@ -1631,6 +1635,8 @@ def execute(self): _datacube.data_dict = id_dict self.datacube = _datacube elif type(self.datacube) == datacube.STACCube: + # Copy datacube. + _datacube = copy.deepcopy(self.datacube) _datacube.src = pystac.ItemCollection(self.datacube.src) # Extract valid collection_item_Ids corresponding to timestamps. id_list = [] From 6d29e802b605b6c6c9c01d0ad74d616117d3348f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Tue, 1 Oct 2024 21:27:26 +0200 Subject: [PATCH 14/18] fix: ODC datacube deepcopy :wrench: --- semantique/processor/core.py | 1 + 1 file changed, 1 insertion(+) diff --git a/semantique/processor/core.py b/semantique/processor/core.py index 540b4b6f..232718df 100644 --- a/semantique/processor/core.py +++ b/semantique/processor/core.py @@ -1624,6 +1624,7 @@ def execute(self): self.datacube.connection = None _datacube = copy.deepcopy(self.datacube) _datacube.connection = dc_con + self.datacube.connection = dc_con # Extract valid dataset ids corresponding to timestamps. id_dict = {} for k,v in self._response.items(): From 47442ce189c4f366f85a2104ed9a14ea025c79e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Tue, 1 Oct 2024 22:16:30 +0200 Subject: [PATCH 15/18] style: max line length (90 characters) :art: --- semantique/processor/arrays.py | 10 ++++-- semantique/processor/core.py | 65 +++++++++++++++++++++++----------- 2 files changed, 52 insertions(+), 23 deletions(-) diff --git a/semantique/processor/arrays.py b/semantique/processor/arrays.py index ed4fb806..b448b8fb 100644 --- a/semantique/processor/arrays.py +++ b/semantique/processor/arrays.py @@ -1627,7 +1627,7 @@ def evaluate(self, operator, y = None, track_types = False, **kwargs): # the active status of the array. elif y is not None and hasattr(y, "sqm"): # Currently only some operators are operating in two ways. - # Two-way operation mode -> Filtering (= passing of NaNs) regardless if y is active. + # Two-way => Filtering (= passing of NaNs) regardless if y is active. twoway_ops = [ "add_", "subtract_", @@ -2371,7 +2371,9 @@ def align_with(self, other): def _merge_arrays_vaults(self, arrays): """Merge vaults of arrays by taking the union of their elements.""" if any([x.sqm.active and x.sqm.vault is not None for x in arrays]): - vaults = [x.sqm.vault for x in arrays if (x.sqm.active and x.sqm.vault is not None)] + vaults = [ + x.sqm.vault for x in arrays if (x.sqm.active and x.sqm.vault is not None) + ] vault = np.unique(np.concatenate(vaults)) out = xr.DataArray(vault, dims=TIME, name=TIME) else: @@ -3280,7 +3282,9 @@ def unstack_spatial_dims(self): def _merge_arrays_vaults(self, arrays): """Merge vaults of arrays by taking the union of their elements.""" if any([x.sqm.active and x.sqm.vault is not None for x in arrays]): - vaults = [x.sqm.vault for x in arrays if (x.sqm.active and x.sqm.vault is not None)] + vaults = [ + x.sqm.vault for x in arrays if (x.sqm.active and x.sqm.vault is not None) + ] vault = np.unique(np.concatenate(vaults)) out = xr.DataArray(vault, dims=TIME, name=TIME) else: diff --git a/semantique/processor/core.py b/semantique/processor/core.py index 232718df..a60da2e0 100644 --- a/semantique/processor/core.py +++ b/semantique/processor/core.py @@ -448,7 +448,8 @@ def handle_result(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` Raises ------ @@ -486,7 +487,8 @@ def handle_self(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ out = self._get_eval_obj() @@ -522,7 +524,8 @@ def handle_processing_chain(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ obj = self.call_handler(block["with"]) @@ -542,7 +545,8 @@ def handle_verb(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ out = self.call_handler(block, key = "name") @@ -561,7 +565,8 @@ def handle_evaluate(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ # Get function parameters. @@ -595,7 +600,8 @@ def handle_extract(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ return self.call_verb("extract", block["params"]) @@ -611,7 +617,8 @@ def handle_filter(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ # Get function parameters. @@ -634,7 +641,8 @@ def handle_assign(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ # Get function parameters. @@ -694,7 +702,8 @@ def handle_reduce(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ # Get function parameters. @@ -717,7 +726,8 @@ def handle_shift(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ return self.call_verb("shift", block["params"]) @@ -733,7 +743,8 @@ def handle_smooth(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ # Get function parameters. @@ -756,7 +767,8 @@ def handle_trim(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ return self.call_verb("trim", block["params"]) @@ -772,7 +784,8 @@ def handle_delineate(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ # Get and update function parameters. @@ -792,7 +805,8 @@ def handle_fill(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ # Get function parameters. @@ -813,7 +827,8 @@ def handle_name(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ return self.call_verb("name", block["params"]) @@ -829,7 +844,8 @@ def handle_apply_custom(self, block): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ # Get function parameters. @@ -1081,7 +1097,8 @@ def call_verb(self, name, params): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ # Get the object to apply the verb to. @@ -1270,7 +1287,8 @@ def call_verb(self, name, params): Returns ------- - :obj:`xarray.DataArray` or :obj:`Collection ` + :obj:`xarray.DataArray` or + :obj:`Collection ` """ return self._get_eval_obj() @@ -1555,7 +1573,10 @@ def execute(self): if np.issubdtype(arr.dtype, np.datetime64): v[i] = xr.ones_like(arr, dtype="int32") if type(v.sqm).__name__ == 'MetaCollection': - self._response[lyr][k] = v.sqm.merge(reducers.any_, track_types=False) + self._response[lyr][k] = v.sqm.merge( + reducers.any_, + track_types=False + ) # Retrieve valid temporal indices per layer and result. # Valid indices are those that are not null. response = copy.deepcopy(self._response) @@ -1578,7 +1599,11 @@ def execute(self): # Combine results from array and vault. if len(out): if len(out) > 1: - out = xr.DataArray(np.unique(np.concatenate(out)), dims="time", name="time") + out = xr.DataArray( + np.unique(np.concatenate(out)), + dims="time", + name="time" + ) else: out = out[0] response[lyr][res] = out From e43eeb82584d5a488128e9a92b231c65ce42bd0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Wed, 30 Oct 2024 22:16:32 +0100 Subject: [PATCH 16/18] fix: subset STAC assets not only items :wrench: --- semantique/processor/core.py | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/semantique/processor/core.py b/semantique/processor/core.py index a60da2e0..6c9bba61 100644 --- a/semantique/processor/core.py +++ b/semantique/processor/core.py @@ -1526,11 +1526,15 @@ def execute(self): # Note: Contrary to ODC, .retrieve_metadata() can be called immediately # since the metadata is already stored in the STACCube. Hence, no performance # advantage by resolving products (=items instead of assets) first. + # What we need instead though is an LuT to map layer names back to + # the respective references. meta_dfs = [] + lyr_ref_lut = {} for lyr in list(set(self.fap.cache.seq)): df = self.datacube.retrieve_metadata(*lyr, extent=self._extent) df.insert(0, "lyr", "_".join(lyr)) meta_dfs.append(df) + lyr_ref_lut["_".join(lyr)] = lyr logger.debug(f"Retrieved meta information for layer {lyr}:\n {df}") logger.debug(f"Unique timestamps: {len(df.drop_duplicates(['time']))}") meta_df = pd.concat(meta_dfs).reset_index(drop=True) @@ -1574,7 +1578,7 @@ def execute(self): v[i] = xr.ones_like(arr, dtype="int32") if type(v.sqm).__name__ == 'MetaCollection': self._response[lyr][k] = v.sqm.merge( - reducers.any_, + reducers.any_, track_types=False ) # Retrieve valid temporal indices per layer and result. @@ -1653,7 +1657,7 @@ def execute(self): # Extract valid dataset ids corresponding to timestamps. id_dict = {} for k,v in self._response.items(): - ids = meta_df[meta_df.lyr == k][meta_df.time.isin(pd.Series(v))].id + ids = meta_df[(meta_df.lyr == k) & (meta_df.time.isin(pd.Series(v)))].id id_dict[k] = list(ids) logger.debug(f"Temporally filtered results for layer {k}") logger.debug(f"- unique timestamps: {len(np.unique(v))}") @@ -1665,19 +1669,26 @@ def execute(self): _datacube = copy.deepcopy(self.datacube) _datacube.src = pystac.ItemCollection(self.datacube.src) # Extract valid collection_item_Ids corresponding to timestamps. - id_list = [] + id_df = pd.DataFrame() for k,v in self._response.items(): - ids = meta_df[meta_df.lyr == k][meta_df.time.isin(pd.Series(v))].id - id_list.extend(list(ids)) + lyr_name = self.datacube.lookup(*lyr_ref_lut[k])["name"] + ids = meta_df[(meta_df.lyr == k) & (meta_df.time.isin(pd.Series(v)))].id + id_df = pd.concat([id_df, pd.DataFrame({"prod": ids, "lyr" : lyr_name})]) logger.debug(f"Temporally filtered results for layer {k}") logger.debug(f"- unique timestamps: {len(np.unique(v))}") logger.debug(f"- unique items: {len(ids)}") - id_list = list(set(id_list)) - # Subset item as input to datacube correspondigly. - if len(id_list): + id_df = id_df.groupby("prod").lyr.unique().reset_index() + # Subset items & assets as input to datacube correspondingly. + if len(id_df): filtered_items = [] for item in _datacube.src: - if (item.get_collection().id, item.id) in id_list: + item_id = (item.get_collection().id, item.id) + df_subset = id_df[id_df["prod"].isin([item_id])] + if len(df_subset): + asset_dict = {} + for asset in df_subset["lyr"]: + asset_dict[asset[0]] = item.assets[asset[0]] + item.assets = asset_dict filtered_items.append(item) _datacube.src = filtered_items else: From 426703d7077138cd926db344d61d5f650737676c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Thu, 31 Oct 2024 23:59:41 +0100 Subject: [PATCH 17/18] fix: index issue in assets retrieval :wrench: --- semantique/processor/core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/semantique/processor/core.py b/semantique/processor/core.py index 6c9bba61..0be56864 100644 --- a/semantique/processor/core.py +++ b/semantique/processor/core.py @@ -1686,8 +1686,8 @@ def execute(self): df_subset = id_df[id_df["prod"].isin([item_id])] if len(df_subset): asset_dict = {} - for asset in df_subset["lyr"]: - asset_dict[asset[0]] = item.assets[asset[0]] + for asset in df_subset["lyr"].iloc[0]: + asset_dict[asset] = item.assets[asset] item.assets = asset_dict filtered_items.append(item) _datacube.src = filtered_items From 0296811a4c77608f4d4fb57db89a460091cff601 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Kr=C3=B6ber?= Date: Mon, 10 Feb 2025 10:38:14 +0100 Subject: [PATCH 18/18] fix: np.nan compatibility for numpy>=2.0.0 :wrench: --- semantique/processor/arrays.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/semantique/processor/arrays.py b/semantique/processor/arrays.py index b448b8fb..3dd6d54d 100644 --- a/semantique/processor/arrays.py +++ b/semantique/processor/arrays.py @@ -2882,7 +2882,7 @@ def __init__(self, list_obj): for x in list_obj: if not x.sqm.active: cond = x.time.isin(tidxs).broadcast_like(x) - x.values = xr.where(cond, xr.ones_like(x), xr.full_like(x, np.NaN)) + x.values = xr.where(cond, xr.ones_like(x), xr.full_like(x, np.nan)) # Create response object. super(MetaCollection, self).__init__(list_obj) self._active = True