From db21278ea81ee9f778a6ada7b24f1384a93291a4 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Tue, 2 Jan 2024 16:32:28 +0100 Subject: [PATCH 01/75] add first quadtree construction --- polytope/datacube/backends/quad_test.py | 50 +++ polytope/engine/quadtree_slicer.py | 417 ++++++++++++++++++++++++ 2 files changed, 467 insertions(+) create mode 100644 polytope/datacube/backends/quad_test.py create mode 100644 polytope/engine/quadtree_slicer.py diff --git a/polytope/datacube/backends/quad_test.py b/polytope/datacube/backends/quad_test.py new file mode 100644 index 000000000..faf729121 --- /dev/null +++ b/polytope/datacube/backends/quad_test.py @@ -0,0 +1,50 @@ +# TODO: create quadtree from a set of 2D points with each leaf containing exactly one data point +from .datacube import Datacube + +# import quads + +# tree = quads.QuadTree((0, 0), 360, 180) +# tree.insert((0, 0)) +# tree.insert((90, 0)) +# tree.insert((90, 40)) +# tree.insert((60, 10)) +# a = tree.find((1, 2)) +# # quads.visualize(tree) + +# import scipy.spatial as scsp +# from copy import deepcopy + +# new_tree = scsp.KDTree([[0, 0], [90, 0], [90, 40], [60, 10]]) + +# import numpy as np +# from scipy.spatial import KDTree +# import matplotlib.pyplot as plt + +# x, y = np.mgrid[0:5, 0:8] +# tree = KDTree(np.c_[x.ravel(), y.ravel()]) +# plt.plot(x, y, marker='o', color='k', linestyle='none') +# # plt.show() + +# dd, ii = tree.query([[1.501, 2.5]], k=2) +# print(dd, ii, sep='\n') +# print("nearest point") +# print(np.c_[x.ravel(), y.ravel()][ii]) + +# print("\n") +# print(tree.maxes) +# print(tree.mins) +# print(tree.leafsize) +# print(tree.tree) +# print(tree.n) + + +class IrregularGridDatacube(Datacube): + + def __init__(self, points, config={}, axis_options={}): + self.points = points + + def lat_points(self): + return [p[0] for p in self.points] + + def lon_points(self): + return [p[1] for p in self.points] diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py new file mode 100644 index 000000000..285dce330 --- /dev/null +++ b/polytope/engine/quadtree_slicer.py @@ -0,0 +1,417 @@ +from .engine import Engine + +""" + + QuadTree data structure + + comes from: https://github.com/mdrasmus/compbio/blob/master/rasmus/quadtree.py + +""" + + +def normalize_rect(rect): + x1, y1, x2, y2 = rect + if x1 > x2: + x1, x2 = x2, x1 + if y1 > y2: + y1, y2 = y2, y1 + return (x1, y1, x2, y2) + + +class QuadNode: + def __init__(self, item, rect): + self.item = item + self.rect = rect + + +class QuadTree: + MAX = 4 + MAX_DEPTH = 20 + + def __init__(self, x=0, y=0, size=[360, 180], depth=0): + self.nodes = [] + self.children = [] + self.center = [x, y] + self.size = size + self.depth = depth + + def build_point_tree(self, points): + for p in points: + p_rect = (p[0], p[1], p[0], p[1]) + self.insert(p, p_rect) + + def pprint(self): + if self.depth == 0: + print("\n") + if len(self.children) == 0: + for n in self.nodes: + print("\t" * (self.depth + 1) + "\u21b3" + str(n.rect[0]) + " , " + str(n.rect[1])) + for child in self.children: + print("\t" * (self.depth + 1) + "\u21b3" + str(child.center[0]-child.size[0]) + " , " + str(child.center[1] - child.size[1]) + " , " + str(child.center[0]+child.size[0]) + " , " + str(child.center[1] + child.size[1])) + child.pprint() + + def insert(self, item, rect): + rect = normalize_rect(rect) + + if len(self.children) == 0: + node = QuadNode(item, rect) + self.nodes.append(node) + + if len(self.nodes) > self.MAX and self.depth < self.MAX_DEPTH: + self.split() + return node + else: + return self.insert_into_children(item, rect) + + def insert_into_children(self, item, rect): + + # if rect spans center then insert here + if ((rect[0] <= self.center[0] and rect[2] > self.center[0]) and + (rect[1] <= self.center[1] and rect[3] > self.center[1])): + node = QuadNode(item, rect) + self.nodes.append(node) + return node + else: + + # try to insert into children + if rect[0] <= self.center[0]: + if rect[1] <= self.center[1]: + return self.children[0].insert(item, rect) + if rect[3] > self.center[1]: + return self.children[1].insert(item, rect) + if rect[2] > self.center[0]: + if rect[1] <= self.center[1]: + return self.children[2].insert(item, rect) + if rect[3] > self.center[1]: + return self.children[3].insert(item, rect) + + def split(self): + self.children = [QuadTree(self.center[0] - self.size[0]/2, + self.center[1] - self.size[1]/2, + [s/2 for s in self.size], self.depth + 1), + QuadTree(self.center[0] - self.size[0]/2, + self.center[1] + self.size[1]/2, + [s/2 for s in self.size], self.depth + 1), + QuadTree(self.center[0] + self.size[0]/2, + self.center[1] - self.size[1]/2, + [s/2 for s in self.size], self.depth + 1), + QuadTree(self.center[0] + self.size[0]/2, + self.center[1] + self.size[1]/2, + [s/2 for s in self.size], self.depth + 1)] + + nodes = self.nodes + self.nodes = [] + for node in nodes: + self.insert_into_children(node.item, node.rect) + + # def query(self, rect, results=None): + + # if results is None: + # rect = normalize_rect(rect) + # results = set() + + # # search children + # if len(self.children) > 0: + # if rect[0] <= self.center[0]: + # if rect[1] <= self.center[1]: + # self.children[0].query(rect, results) + # if rect[3] > self.center[1]: + # self.children[1].query(rect, results) + # if rect[2] > self.center[0]: + # if rect[1] <= self.center[1]: + # self.children[2].query(rect, results) + # if rect[3] > self.center[1]: + # self.children[3].query(rect, results) + + # # search node at this level + # for node in self.nodes: + # if (node.rect[2] > rect[0] and node.rect[0] <= rect[2] and + # node.rect[3] > rect[1] and node.rect[1] <= rect[3]): + # results.add(node.item) + + # return results + + # def get_size(self): + # size = 0 + # for child in self.children: + # size += child.get_size() + # size += len(self.nodes) + # return size + +# """ +# # Pyqtree + +# Pyqtree is a pure Python spatial index for GIS or rendering usage. +# It stores and quickly retrieves items from a 2x2 rectangular grid area, +# and grows in depth and detail as more items are added. +# The actual quad tree implementation is adapted from +# [Matt Rasmussen's compbio library](https://github.com/mdrasmus/compbio/blob/master/rasmus/quadtree.py) +# and extended for geospatial use. + + +# ## Platforms + +# Python 2 and 3. + + +# ## Dependencies + +# Pyqtree is written in pure Python and has no dependencies. + + +# ## Installing It + +# Installing Pyqtree can be done by opening your terminal or commandline and typing: + +# pip install pyqtree + +# Alternatively, you can simply download the "pyqtree.py" file and place +# it anywhere Python can import it, such as the Python site-packages folder. + + +# ## Example Usage + +# Start your script by importing the quad tree. + +# from pyqtree import Index + +# Setup the spatial index, giving it a bounding box area to keep track of. +# The bounding box being in a four-tuple: (xmin, ymin, xmax, ymax). + +# spindex = Index(bbox=(0, 0, 100, 100)) + +# Populate the index with items that you want to be retrieved at a later point, +# along with each item's geographic bbox. + +# # this example assumes you have a list of items with bbox attribute +# for item in items: +# spindex.insert(item, item.bbox) + +# Then when you have a region of interest and you wish to retrieve items from that region, +# just use the index's intersect method. This quickly gives you a list of the stored items +# whose bboxes intersects your region of interests. + +# overlapbbox = (51, 51, 86, 86) +# matches = spindex.intersect(overlapbbox) + +# There are other things that can be done as well, but that's it for the main usage! + + +# ## More Information: + +# - [Home Page](http://github.com/karimbahgat/Pyqtree) +# - [API Documentation](https://karimbahgat.github.io/Pyqtree/) + + +# ## License: + +# This code is free to share, use, reuse, and modify according to the MIT license, see LICENSE.txt. + + +# ## Credits: + +# - Karim Bahgat +# - Joschua Gandert + +# """ + + +# def _normalize_rect(rect): +# if len(rect) == 2: +# x1, y1 = rect +# x2, y2 = rect +# else: +# x1, y1, x2, y2 = rect +# if x1 > x2: +# x1, x2 = x2, x1 +# if y1 > y2: +# y1, y2 = y2, y1 +# return (x1, y1, x2, y2) + + +# def _loopallchildren(parent): +# for child in parent.children: +# if child.children: +# for subchild in _loopallchildren(child): +# yield subchild +# yield child + + +# class _QuadNode(object): +# def __init__(self, item, rect): +# self.item = item +# self.rect = rect + +# def __eq__(self, other): +# return self.item == other.item and self.rect == other.rect + +# def __hash__(self): +# return hash(self.item) + + +# class _QuadTree(object): +# """ +# Internal backend version of the index. +# The index being used behind the scenes. Has all the same methods as the user +# index, but requires more technical arguments when initiating it than the +# user-friendly version. +# """ + +# def __init__(self, x=0, y=0, width=360, height=180, max_items=4, max_depth=10, _depth=0): +# self.nodes = [] +# self.children = [] +# self.center = (x, y) +# self.width, self.height = width, height +# self.max_items = max_items +# self.max_depth = max_depth +# self._depth = _depth + +# def build_point_tree(self, points): +# for p in points: +# p_rect = (p[0], p[1], p[0], p[1]) +# self._insert(p, p_rect) + +# def pprint(self): +# if self._depth == 0: +# print("\n") +# if len(self.children) == 0: +# for n in self.nodes: +# print("\t" * (self._depth + 1) + "\u21b3" + str(n.rect[0]) + " , " + str(n.rect[1])) +# for child in self.children: +# print("\t" * (self._depth + 1) + "\u21b3" + "None") +# child.pprint() + +# def _insert(self, item, bbox): +# rect = _normalize_rect(bbox) +# if len(self.children) == 0: +# node = _QuadNode(item, rect) +# self.nodes.append(node) + +# if len(self.nodes) > self.max_items and self._depth < self.max_depth: +# print(item) +# print(len(self.nodes)) +# self._split() +# else: +# self._insert_into_children(item, rect) + +# def _remove(self, item, bbox): +# rect = _normalize_rect(bbox) +# if len(self.children) == 0: +# node = _QuadNode(item, rect) +# self.nodes.remove(node) +# else: +# self._remove_from_children(item, rect) + +# def _intersect(self, rect, results=None, uniq=None): +# if results is None: +# rect = _normalize_rect(rect) +# results = [] +# uniq = set() +# # search children +# if self.children: +# if rect[0] <= self.center[0]: +# if rect[1] <= self.center[1]: +# self.children[0]._intersect(rect, results, uniq) +# if rect[3] >= self.center[1]: +# self.children[1]._intersect(rect, results, uniq) +# if rect[2] >= self.center[0]: +# if rect[1] <= self.center[1]: +# self.children[2]._intersect(rect, results, uniq) +# if rect[3] >= self.center[1]: +# self.children[3]._intersect(rect, results, uniq) +# # search node at this level +# for node in self.nodes: +# _id = id(node.item) +# if (_id not in uniq and +# node.rect[2] >= rect[0] and node.rect[0] <= rect[2] and +# node.rect[3] >= rect[1] and node.rect[1] <= rect[3]): +# results.append(node.item) +# uniq.add(_id) +# return results + +# def _insert_into_children(self, item, rect): +# # if rect spans center then insert here +# if (rect[0] <= self.center[0] and rect[2] >= self.center[0] and +# rect[1] <= self.center[1] and rect[3] >= self.center[1]): +# node = _QuadNode(item, rect) +# self.nodes.append(node) +# else: +# print("not here") +# # try to insert into children +# if rect[0] <= self.center[0]: +# if rect[1] <= self.center[1]: +# self.children[0]._insert(item, rect) +# if rect[3] >= self.center[1]: +# self.children[1]._insert(item, rect) +# if rect[2] > self.center[0]: +# if rect[1] <= self.center[1]: +# self.children[2]._insert(item, rect) +# if rect[3] >= self.center[1]: +# self.children[3]._insert(item, rect) + +# def _remove_from_children(self, item, rect): +# # if rect spans center then insert here +# if (rect[0] <= self.center[0] and rect[2] >= self.center[0] and +# rect[1] <= self.center[1] and rect[3] >= self.center[1]): +# node = _QuadNode(item, rect) +# self.nodes.remove(node) +# else: +# # try to remove from children +# if rect[0] <= self.center[0]: +# if rect[1] <= self.center[1]: +# self.children[0]._remove(item, rect) +# if rect[3] >= self.center[1]: +# self.children[1]._remove(item, rect) +# if rect[2] > self.center[0]: +# if rect[1] <= self.center[1]: +# self.children[2]._remove(item, rect) +# if rect[3] >= self.center[1]: +# self.children[3]._remove(item, rect) + +# def _split(self): +# print("inside split") +# quartwidth = self.width / 4.0 +# quartheight = self.height / 4.0 +# halfwidth = self.width / 2.0 +# halfheight = self.height / 2.0 +# x1 = self.center[0] - quartwidth +# x2 = self.center[0] + quartwidth +# y1 = self.center[1] - quartheight +# y2 = self.center[1] + quartheight +# print(x1,y1,x2,y2) +# new_depth = self._depth + 1 +# self.children = [_QuadTree(x1, y1, halfwidth, halfheight, +# self.max_items, self.max_depth, new_depth), +# _QuadTree(x1, y2, halfwidth, halfheight, +# self.max_items, self.max_depth, new_depth), +# _QuadTree(x2, y1, halfwidth, halfheight, +# self.max_items, self.max_depth, new_depth), +# _QuadTree(x2, y2, halfwidth, halfheight, +# self.max_items, self.max_depth, new_depth)] +# nodes = self.nodes +# self.nodes = [] +# for node in nodes: +# self._insert_into_children(node.item, node.rect) + +# def __len__(self): +# """ +# Returns: + +# - A count of the total number of members/items/nodes inserted +# into this quadtree and all of its child trees. +# """ +# size = 0 +# for child in self.children: +# size += len(child) +# size += len(self.nodes) +# return size + + +class QuadTreeSlicer(Engine): + def __init__(self, points): + # TODO: here need to construct quadtree, which is specific to datacube + quad_tree = QuadTree() + quad_tree.build_point_tree(points) + self.quad_tree = quad_tree + + # TODO: method to slice polygon against quadtree From f9ca22c916ce9cd8a836a87e02b37a7a5f3aa5a6 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Tue, 2 Jan 2024 16:32:50 +0100 Subject: [PATCH 02/75] remove unnecessary code --- polytope/engine/quadtree_slicer.py | 268 ----------------------------- 1 file changed, 268 deletions(-) diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 285dce330..7dc6b5de9 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -138,274 +138,6 @@ def split(self): # size += len(self.nodes) # return size -# """ -# # Pyqtree - -# Pyqtree is a pure Python spatial index for GIS or rendering usage. -# It stores and quickly retrieves items from a 2x2 rectangular grid area, -# and grows in depth and detail as more items are added. -# The actual quad tree implementation is adapted from -# [Matt Rasmussen's compbio library](https://github.com/mdrasmus/compbio/blob/master/rasmus/quadtree.py) -# and extended for geospatial use. - - -# ## Platforms - -# Python 2 and 3. - - -# ## Dependencies - -# Pyqtree is written in pure Python and has no dependencies. - - -# ## Installing It - -# Installing Pyqtree can be done by opening your terminal or commandline and typing: - -# pip install pyqtree - -# Alternatively, you can simply download the "pyqtree.py" file and place -# it anywhere Python can import it, such as the Python site-packages folder. - - -# ## Example Usage - -# Start your script by importing the quad tree. - -# from pyqtree import Index - -# Setup the spatial index, giving it a bounding box area to keep track of. -# The bounding box being in a four-tuple: (xmin, ymin, xmax, ymax). - -# spindex = Index(bbox=(0, 0, 100, 100)) - -# Populate the index with items that you want to be retrieved at a later point, -# along with each item's geographic bbox. - -# # this example assumes you have a list of items with bbox attribute -# for item in items: -# spindex.insert(item, item.bbox) - -# Then when you have a region of interest and you wish to retrieve items from that region, -# just use the index's intersect method. This quickly gives you a list of the stored items -# whose bboxes intersects your region of interests. - -# overlapbbox = (51, 51, 86, 86) -# matches = spindex.intersect(overlapbbox) - -# There are other things that can be done as well, but that's it for the main usage! - - -# ## More Information: - -# - [Home Page](http://github.com/karimbahgat/Pyqtree) -# - [API Documentation](https://karimbahgat.github.io/Pyqtree/) - - -# ## License: - -# This code is free to share, use, reuse, and modify according to the MIT license, see LICENSE.txt. - - -# ## Credits: - -# - Karim Bahgat -# - Joschua Gandert - -# """ - - -# def _normalize_rect(rect): -# if len(rect) == 2: -# x1, y1 = rect -# x2, y2 = rect -# else: -# x1, y1, x2, y2 = rect -# if x1 > x2: -# x1, x2 = x2, x1 -# if y1 > y2: -# y1, y2 = y2, y1 -# return (x1, y1, x2, y2) - - -# def _loopallchildren(parent): -# for child in parent.children: -# if child.children: -# for subchild in _loopallchildren(child): -# yield subchild -# yield child - - -# class _QuadNode(object): -# def __init__(self, item, rect): -# self.item = item -# self.rect = rect - -# def __eq__(self, other): -# return self.item == other.item and self.rect == other.rect - -# def __hash__(self): -# return hash(self.item) - - -# class _QuadTree(object): -# """ -# Internal backend version of the index. -# The index being used behind the scenes. Has all the same methods as the user -# index, but requires more technical arguments when initiating it than the -# user-friendly version. -# """ - -# def __init__(self, x=0, y=0, width=360, height=180, max_items=4, max_depth=10, _depth=0): -# self.nodes = [] -# self.children = [] -# self.center = (x, y) -# self.width, self.height = width, height -# self.max_items = max_items -# self.max_depth = max_depth -# self._depth = _depth - -# def build_point_tree(self, points): -# for p in points: -# p_rect = (p[0], p[1], p[0], p[1]) -# self._insert(p, p_rect) - -# def pprint(self): -# if self._depth == 0: -# print("\n") -# if len(self.children) == 0: -# for n in self.nodes: -# print("\t" * (self._depth + 1) + "\u21b3" + str(n.rect[0]) + " , " + str(n.rect[1])) -# for child in self.children: -# print("\t" * (self._depth + 1) + "\u21b3" + "None") -# child.pprint() - -# def _insert(self, item, bbox): -# rect = _normalize_rect(bbox) -# if len(self.children) == 0: -# node = _QuadNode(item, rect) -# self.nodes.append(node) - -# if len(self.nodes) > self.max_items and self._depth < self.max_depth: -# print(item) -# print(len(self.nodes)) -# self._split() -# else: -# self._insert_into_children(item, rect) - -# def _remove(self, item, bbox): -# rect = _normalize_rect(bbox) -# if len(self.children) == 0: -# node = _QuadNode(item, rect) -# self.nodes.remove(node) -# else: -# self._remove_from_children(item, rect) - -# def _intersect(self, rect, results=None, uniq=None): -# if results is None: -# rect = _normalize_rect(rect) -# results = [] -# uniq = set() -# # search children -# if self.children: -# if rect[0] <= self.center[0]: -# if rect[1] <= self.center[1]: -# self.children[0]._intersect(rect, results, uniq) -# if rect[3] >= self.center[1]: -# self.children[1]._intersect(rect, results, uniq) -# if rect[2] >= self.center[0]: -# if rect[1] <= self.center[1]: -# self.children[2]._intersect(rect, results, uniq) -# if rect[3] >= self.center[1]: -# self.children[3]._intersect(rect, results, uniq) -# # search node at this level -# for node in self.nodes: -# _id = id(node.item) -# if (_id not in uniq and -# node.rect[2] >= rect[0] and node.rect[0] <= rect[2] and -# node.rect[3] >= rect[1] and node.rect[1] <= rect[3]): -# results.append(node.item) -# uniq.add(_id) -# return results - -# def _insert_into_children(self, item, rect): -# # if rect spans center then insert here -# if (rect[0] <= self.center[0] and rect[2] >= self.center[0] and -# rect[1] <= self.center[1] and rect[3] >= self.center[1]): -# node = _QuadNode(item, rect) -# self.nodes.append(node) -# else: -# print("not here") -# # try to insert into children -# if rect[0] <= self.center[0]: -# if rect[1] <= self.center[1]: -# self.children[0]._insert(item, rect) -# if rect[3] >= self.center[1]: -# self.children[1]._insert(item, rect) -# if rect[2] > self.center[0]: -# if rect[1] <= self.center[1]: -# self.children[2]._insert(item, rect) -# if rect[3] >= self.center[1]: -# self.children[3]._insert(item, rect) - -# def _remove_from_children(self, item, rect): -# # if rect spans center then insert here -# if (rect[0] <= self.center[0] and rect[2] >= self.center[0] and -# rect[1] <= self.center[1] and rect[3] >= self.center[1]): -# node = _QuadNode(item, rect) -# self.nodes.remove(node) -# else: -# # try to remove from children -# if rect[0] <= self.center[0]: -# if rect[1] <= self.center[1]: -# self.children[0]._remove(item, rect) -# if rect[3] >= self.center[1]: -# self.children[1]._remove(item, rect) -# if rect[2] > self.center[0]: -# if rect[1] <= self.center[1]: -# self.children[2]._remove(item, rect) -# if rect[3] >= self.center[1]: -# self.children[3]._remove(item, rect) - -# def _split(self): -# print("inside split") -# quartwidth = self.width / 4.0 -# quartheight = self.height / 4.0 -# halfwidth = self.width / 2.0 -# halfheight = self.height / 2.0 -# x1 = self.center[0] - quartwidth -# x2 = self.center[0] + quartwidth -# y1 = self.center[1] - quartheight -# y2 = self.center[1] + quartheight -# print(x1,y1,x2,y2) -# new_depth = self._depth + 1 -# self.children = [_QuadTree(x1, y1, halfwidth, halfheight, -# self.max_items, self.max_depth, new_depth), -# _QuadTree(x1, y2, halfwidth, halfheight, -# self.max_items, self.max_depth, new_depth), -# _QuadTree(x2, y1, halfwidth, halfheight, -# self.max_items, self.max_depth, new_depth), -# _QuadTree(x2, y2, halfwidth, halfheight, -# self.max_items, self.max_depth, new_depth)] -# nodes = self.nodes -# self.nodes = [] -# for node in nodes: -# self._insert_into_children(node.item, node.rect) - -# def __len__(self): -# """ -# Returns: - -# - A count of the total number of members/items/nodes inserted -# into this quadtree and all of its child trees. -# """ -# size = 0 -# for child in self.children: -# size += len(child) -# size += len(self.nodes) -# return size - class QuadTreeSlicer(Engine): def __init__(self, points): From 7fd6cb26cc4c77e325c4fa697560fa2695cab172 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Tue, 2 Jan 2024 16:41:56 +0100 Subject: [PATCH 03/75] add first quad tree construction in slicer --- polytope/engine/quadtree_slicer.py | 18 ++++++++++++++++++ tests/test_quad_tree.py | 11 +++++++++++ 2 files changed, 29 insertions(+) create mode 100644 tests/test_quad_tree.py diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 7dc6b5de9..9034f77e6 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -25,6 +25,7 @@ def __init__(self, item, rect): class QuadTree: + # TODO: do we need the max_depth? MAX = 4 MAX_DEPTH = 20 @@ -138,6 +139,10 @@ def split(self): # size += len(self.nodes) # return size + def query_polygon(self, polygon): + # TODO: intersect quad tree with a 2D polygon + pass + class QuadTreeSlicer(Engine): def __init__(self, points): @@ -147,3 +152,16 @@ def __init__(self, points): self.quad_tree = quad_tree # TODO: method to slice polygon against quadtree + def extract(self, datacube, polytopes): + # TODO: need to find the points to extract within the polytopes (polygons here in 2D) + for polytope in polytopes: + assert len(polytope._axes) == 2 + self.extract_single(datacube, polytope) + + def extract_single(self, datacube, polytope): + # TODO: extract a single polygon + + # TODO: need to find points of the datacube contained within the polytope + # We do this by intersecting the datacube point cloud quad tree with the polytope here + polygon_points = self.quad_tree.query_polygon(polytope) + return polygon_points diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py new file mode 100644 index 000000000..c0dabc3ae --- /dev/null +++ b/tests/test_quad_tree.py @@ -0,0 +1,11 @@ +from polytope.engine.quadtree_slicer import QuadTreeSlicer + + +class TestQuadTreeSlicer: + def setup_method(self, method): + pass + + def test_quad_tree_slicer(self): + points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] + slicer = QuadTreeSlicer(points) + slicer.quad_tree.pprint() From a6b7fe167370e15e3fa403c3010aaa656f9e7d41 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Wed, 3 Jan 2024 10:19:20 +0100 Subject: [PATCH 04/75] start query polygon function --- polytope/engine/quadtree_slicer.py | 35 ++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 9034f77e6..3bb31cc0d 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -23,6 +23,10 @@ def __init__(self, item, rect): self.item = item self.rect = rect + def is_contained_in(self, polygon): + # TODO: implement method to check if the node point is inside the polygon + pass + class QuadTree: # TODO: do we need the max_depth? @@ -139,9 +143,36 @@ def split(self): # size += len(self.nodes) # return size - def query_polygon(self, polygon): + def query_polygon(self, polygon, results=None): # TODO: intersect quad tree with a 2D polygon - pass + if results is None: + results = set() + + # intersect the children with the polygon + # TODO: here, we create None polygons... think about how to handle them + + x_lower, x_upper = polygon.extents(polygon._axes[0]) + y_lower, y_upper = polygon.extents(polygon._axes[1]) + if len(self.children) > 0: + # TODO: do the intersection bit here + if x_upper <= self.center[0]: + # The vertical slicing line does not intersect the polygon, which is on the left of the line + # So we keep the same polygon for now since it is unsliced + left_polygon = polygon + right_polygon = None + if x_lower <= self.center[0] < x_upper: + # TODO: need to slice polygon into left and right part + pass + if self.center[0] < x_lower: + left_polygon = None + right_polygon = polygon + pass + + for node in self.nodes: + if node.is_contained_in(polygon): + results.add(node) + + return results class QuadTreeSlicer(Engine): From 96a2467ebae93d777414a5cc086259db1a28391f Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Thu, 4 Jan 2024 14:40:15 +0100 Subject: [PATCH 05/75] add polygon slicing --- polytope/engine/quadtree_slicer.py | 100 +++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 3bb31cc0d..8b1a06365 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -1,4 +1,8 @@ from .engine import Engine +from ..shapes import ConvexPolytope +from itertools import chain +from .hullslicer import _find_intersects +import scipy """ @@ -196,3 +200,99 @@ def extract_single(self, datacube, polytope): # We do this by intersecting the datacube point cloud quad tree with the polytope here polygon_points = self.quad_tree.query_polygon(polytope) return polygon_points + + +def slice_in_two_vertically(polytope: ConvexPolytope, value): + if polytope is None: + pass + else: + assert len(polytope.points[0]) == 2 + + x_lower, x_upper = polytope.extents(polytope._axes[0]) + + slice_axis_idx = 0 + + intersects = _find_intersects(polytope, slice_axis_idx, value) + + if len(intersects) == 0: + if x_upper <= value: + # The vertical slicing line does not intersect the polygon, which is on the left of the line + # So we keep the same polygon for now since it is unsliced + left_polygon = polytope + right_polygon = None + if value < x_lower: + left_polygon = None + right_polygon = polytope + else: + left_points = [p for p in polytope.points if p[0] <= value] + right_points = [p for p in polytope.points if p[0] >= value] + left_points.extend(intersects) + right_points.extend(intersects) + # find left polygon + try: + hull = scipy.spatial.ConvexHull(left_points) + vertices = hull.vertices + except scipy.spatial.qhull.QhullError as e: + print(str(e)) + pass + + left_polygon = ConvexPolytope(polytope._axes, [left_points[i] for i in vertices]) + + try: + hull = scipy.spatial.ConvexHull(right_points) + vertices = hull.vertices + except scipy.spatial.qhull.QhullError as e: + print(str(e)) + pass + + right_polygon = ConvexPolytope(polytope._axes, [right_points[i] for i in vertices]) + + return (left_polygon, right_polygon) + + +def slice_in_two_horizontally(polytope: ConvexPolytope, value): + if polytope is None: + pass + else: + assert len(polytope.points[0]) == 2 + + y_lower, y_upper = polytope.extents(polytope._axes[1]) + + slice_axis_idx = 1 + + intersects = _find_intersects(polytope, slice_axis_idx, value) + + if len(intersects) == 0: + if y_upper <= value: + # The vertical slicing line does not intersect the polygon, which is on the left of the line + # So we keep the same polygon for now since it is unsliced + lower_polygon = polytope + upper_polygon = None + if value < y_lower: + lower_polygon = None + upper_polygon = polytope + else: + lower_points = [p for p in polytope.points if p[1] <= value] + upper_points = [p for p in polytope.points if p[1] >= value] + lower_points.extend(intersects) + upper_points.extend(intersects) + # find left polygon + try: + hull = scipy.spatial.ConvexHull(lower_points) + vertices = hull.vertices + except scipy.spatial.qhull.QhullError as e: + print(str(e)) + pass + + lower_polygon = ConvexPolytope(polytope._axes, [lower_points[i] for i in vertices]) + + try: + hull = scipy.spatial.ConvexHull(upper_points) + vertices = hull.vertices + except scipy.spatial.qhull.QhullError as e: + print(str(e)) + pass + + upper_polygon = ConvexPolytope(polytope._axes, [upper_points[i] for i in vertices]) + + return (lower_polygon, upper_polygon) From 19ca29440d0c96106750206b74b26e1bb4e4cfc8 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Thu, 4 Jan 2024 16:57:58 +0100 Subject: [PATCH 06/75] write all methods for quadtree slicer --- polytope/datacube/backends/quad_test.py | 1 - polytope/engine/quadtree_slicer.py | 137 ++++++++++++++++-------- tests/test_quad_tree.py | 43 +++++++- 3 files changed, 133 insertions(+), 48 deletions(-) diff --git a/polytope/datacube/backends/quad_test.py b/polytope/datacube/backends/quad_test.py index faf729121..b449818dd 100644 --- a/polytope/datacube/backends/quad_test.py +++ b/polytope/datacube/backends/quad_test.py @@ -39,7 +39,6 @@ class IrregularGridDatacube(Datacube): - def __init__(self, points, config={}, axis_options={}): self.points = points diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 8b1a06365..255465c4b 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -1,7 +1,7 @@ from .engine import Engine from ..shapes import ConvexPolytope from itertools import chain -from .hullslicer import _find_intersects +from .hullslicer import _find_intersects, slice import scipy """ @@ -29,7 +29,15 @@ def __init__(self, item, rect): def is_contained_in(self, polygon): # TODO: implement method to check if the node point is inside the polygon - pass + node_x = self.rect[0] + node_y = self.rect[1] + + sliced_vertical_polygon = slice(polygon, polygon._axes[0], node_x, 0) + if sliced_vertical_polygon: + lower_y, upper_y, idx = sliced_vertical_polygon.extents(polygon._axes[1]) + if lower_y <= node_y <= upper_y: + return True + return False class QuadTree: @@ -56,7 +64,17 @@ def pprint(self): for n in self.nodes: print("\t" * (self.depth + 1) + "\u21b3" + str(n.rect[0]) + " , " + str(n.rect[1])) for child in self.children: - print("\t" * (self.depth + 1) + "\u21b3" + str(child.center[0]-child.size[0]) + " , " + str(child.center[1] - child.size[1]) + " , " + str(child.center[0]+child.size[0]) + " , " + str(child.center[1] + child.size[1])) + print( + "\t" * (self.depth + 1) + + "\u21b3" + + str(child.center[0] - child.size[0]) + + " , " + + str(child.center[1] - child.size[1]) + + " , " + + str(child.center[0] + child.size[0]) + + " , " + + str(child.center[1] + child.size[1]) + ) child.pprint() def insert(self, item, rect): @@ -73,15 +91,14 @@ def insert(self, item, rect): return self.insert_into_children(item, rect) def insert_into_children(self, item, rect): - # if rect spans center then insert here - if ((rect[0] <= self.center[0] and rect[2] > self.center[0]) and - (rect[1] <= self.center[1] and rect[3] > self.center[1])): + if (rect[0] <= self.center[0] and rect[2] > self.center[0]) and ( + rect[1] <= self.center[1] and rect[3] > self.center[1] + ): node = QuadNode(item, rect) self.nodes.append(node) return node else: - # try to insert into children if rect[0] <= self.center[0]: if rect[1] <= self.center[1]: @@ -95,18 +112,32 @@ def insert_into_children(self, item, rect): return self.children[3].insert(item, rect) def split(self): - self.children = [QuadTree(self.center[0] - self.size[0]/2, - self.center[1] - self.size[1]/2, - [s/2 for s in self.size], self.depth + 1), - QuadTree(self.center[0] - self.size[0]/2, - self.center[1] + self.size[1]/2, - [s/2 for s in self.size], self.depth + 1), - QuadTree(self.center[0] + self.size[0]/2, - self.center[1] - self.size[1]/2, - [s/2 for s in self.size], self.depth + 1), - QuadTree(self.center[0] + self.size[0]/2, - self.center[1] + self.size[1]/2, - [s/2 for s in self.size], self.depth + 1)] + self.children = [ + QuadTree( + self.center[0] - self.size[0] / 2, + self.center[1] - self.size[1] / 2, + [s / 2 for s in self.size], + self.depth + 1, + ), + QuadTree( + self.center[0] - self.size[0] / 2, + self.center[1] + self.size[1] / 2, + [s / 2 for s in self.size], + self.depth + 1, + ), + QuadTree( + self.center[0] + self.size[0] / 2, + self.center[1] - self.size[1] / 2, + [s / 2 for s in self.size], + self.depth + 1, + ), + QuadTree( + self.center[0] + self.size[0] / 2, + self.center[1] + self.size[1] / 2, + [s / 2 for s in self.size], + self.depth + 1, + ), + ] nodes = self.nodes self.nodes = [] @@ -154,29 +185,43 @@ def query_polygon(self, polygon, results=None): # intersect the children with the polygon # TODO: here, we create None polygons... think about how to handle them - - x_lower, x_upper = polygon.extents(polygon._axes[0]) - y_lower, y_upper = polygon.extents(polygon._axes[1]) - if len(self.children) > 0: - # TODO: do the intersection bit here - if x_upper <= self.center[0]: - # The vertical slicing line does not intersect the polygon, which is on the left of the line - # So we keep the same polygon for now since it is unsliced - left_polygon = polygon - right_polygon = None - if x_lower <= self.center[0] < x_upper: - # TODO: need to slice polygon into left and right part - pass - if self.center[0] < x_lower: - left_polygon = None - right_polygon = polygon + if polygon is None: pass - - for node in self.nodes: - if node.is_contained_in(polygon): - results.add(node) - - return results + else: + left_polygon, right_polygon = slice_in_two_vertically(polygon, self.center[0]) + + # TODO: now need to slice the left and right polygons each in two to have the 4 quadrant polygons + q1_polygon, q2_polygon = slice_in_two_horizontally(left_polygon, self.center[1]) + q3_polygon, q4_polygon = slice_in_two_horizontally(right_polygon, self.center[1]) + + # TODO: now query these 4 polygons further down the quadtree + self.children[0].query_polygon(q1_polygon, results) + self.children[1].query_polygon(q2_polygon, results) + self.children[2].query_polygon(q3_polygon, results) + self.children[3].query_polygon(q4_polygon, results) + + # x_lower, x_upper = polygon.extents(polygon._axes[0]) + # y_lower, y_upper = polygon.extents(polygon._axes[1]) + # if len(self.children) > 0: + # # TODO: do the intersection bit here + # if x_upper <= self.center[0]: + # # The vertical slicing line does not intersect the polygon, which is on the left of the line + # # So we keep the same polygon for now since it is unsliced + # left_polygon = polygon + # right_polygon = None + # if x_lower <= self.center[0] < x_upper: + # # TODO: need to slice polygon into left and right part + # pass + # if self.center[0] < x_lower: + # left_polygon = None + # right_polygon = polygon + # pass + + for node in self.nodes: + if node.is_contained_in(polygon): + results.add(node) + + return results class QuadTreeSlicer(Engine): @@ -189,7 +234,7 @@ def __init__(self, points): # TODO: method to slice polygon against quadtree def extract(self, datacube, polytopes): # TODO: need to find the points to extract within the polytopes (polygons here in 2D) - for polytope in polytopes: + for polytope in polytopes: assert len(polytope._axes) == 2 self.extract_single(datacube, polytope) @@ -208,7 +253,7 @@ def slice_in_two_vertically(polytope: ConvexPolytope, value): else: assert len(polytope.points[0]) == 2 - x_lower, x_upper = polytope.extents(polytope._axes[0]) + x_lower, x_upper, slice_axis_idx = polytope.extents(polytope._axes[0]) slice_axis_idx = 0 @@ -228,7 +273,7 @@ def slice_in_two_vertically(polytope: ConvexPolytope, value): right_points = [p for p in polytope.points if p[0] >= value] left_points.extend(intersects) right_points.extend(intersects) - # find left polygon + # find left polygon try: hull = scipy.spatial.ConvexHull(left_points) vertices = hull.vertices @@ -256,7 +301,7 @@ def slice_in_two_horizontally(polytope: ConvexPolytope, value): else: assert len(polytope.points[0]) == 2 - y_lower, y_upper = polytope.extents(polytope._axes[1]) + y_lower, y_upper, slice_axis_idx = polytope.extents(polytope._axes[1]) slice_axis_idx = 1 @@ -276,7 +321,7 @@ def slice_in_two_horizontally(polytope: ConvexPolytope, value): upper_points = [p for p in polytope.points if p[1] >= value] lower_points.extend(intersects) upper_points.extend(intersects) - # find left polygon + # find left polygon try: hull = scipy.spatial.ConvexHull(lower_points) vertices = hull.vertices diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index c0dabc3ae..56aff7585 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -1,4 +1,10 @@ -from polytope.engine.quadtree_slicer import QuadTreeSlicer +from polytope.engine.quadtree_slicer import ( + QuadNode, + QuadTreeSlicer, + slice_in_two_horizontally, + slice_in_two_vertically, +) +from polytope.shapes import Box, ConvexPolytope class TestQuadTreeSlicer: @@ -9,3 +15,38 @@ def test_quad_tree_slicer(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] slicer = QuadTreeSlicer(points) slicer.quad_tree.pprint() + pass + + def test_slice_in_two_vertically(self): + polytope = Box(["lat", "lon"], [0, 0], [2, 2]).polytope()[0] + lower, upper = slice_in_two_vertically(polytope, 1) + assert lower.points == [[0, 0], [1.0, 0.0], [1.0, 2.0], [0, 2]] + assert upper.points == [[1.0, 0.0], [2, 0], [2, 2], [1.0, 2.0]] + + def test_slice_in_two_horizontally(self): + polytope = Box(["lat", "lon"], [0, 0], [2, 2]).polytope()[0] + lower, upper = slice_in_two_horizontally(polytope, 1) + assert lower.points == [[0, 0], [2, 0], [2.0, 1.0], [0.0, 1.0]] + assert upper.points == [[2, 2], [0, 2], [0.0, 1.0], [2.0, 1.0]] + + def test_quad_node_is_contained_in_box(self): + node = QuadNode(1, [1, 1, 1, 1]) + polytope = Box(["lat", "lon"], [0, 0], [2, 2]).polytope()[0] + assert node.is_contained_in(polytope) + second_node = QuadNode(1, [3, 3, 3, 3]) + assert not second_node.is_contained_in(polytope) + third_node = QuadNode(1, [1, 0, 1, 0]) + assert third_node.is_contained_in(polytope) + + def test_quad_node_is_contained_in_triangle(self): + node = QuadNode(1, [1, 1, 1, 1]) + polytope = ConvexPolytope(["lat", "lon"], [[0, 0], [1, 1], [2, 0]]) + assert node.is_contained_in(polytope) + node = QuadNode(1, [1, 0.5, 1, 0.5]) + assert node.is_contained_in(polytope) + second_node = QuadNode(1, [3, 3, 3, 3]) + assert not second_node.is_contained_in(polytope) + third_node = QuadNode(1, [1, 0, 1, 0]) + assert third_node.is_contained_in(polytope) + third_node = QuadNode(1, [0.1, 0.5, 0.1, 0.5]) + assert not third_node.is_contained_in(polytope) From e2fa53b86962d9b514a693b05774c324f3e3e9ae Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Fri, 5 Jan 2024 10:48:56 +0100 Subject: [PATCH 07/75] quadtree slicer tests --- polytope/engine/quadtree_slicer.py | 31 ++++++++++++++++-------------- tests/test_quad_tree.py | 19 ++++++++++++++++++ 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 255465c4b..73ba9f5af 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -1,8 +1,8 @@ -from .engine import Engine +import scipy + from ..shapes import ConvexPolytope -from itertools import chain +from .engine import Engine from .hullslicer import _find_intersects, slice -import scipy """ @@ -188,17 +188,18 @@ def query_polygon(self, polygon, results=None): if polygon is None: pass else: - left_polygon, right_polygon = slice_in_two_vertically(polygon, self.center[0]) + if len(self.children) > 0: + left_polygon, right_polygon = slice_in_two_vertically(polygon, self.center[0]) - # TODO: now need to slice the left and right polygons each in two to have the 4 quadrant polygons - q1_polygon, q2_polygon = slice_in_two_horizontally(left_polygon, self.center[1]) - q3_polygon, q4_polygon = slice_in_two_horizontally(right_polygon, self.center[1]) + # TODO: now need to slice the left and right polygons each in two to have the 4 quadrant polygons + q1_polygon, q2_polygon = slice_in_two_horizontally(left_polygon, self.center[1]) + q3_polygon, q4_polygon = slice_in_two_horizontally(right_polygon, self.center[1]) - # TODO: now query these 4 polygons further down the quadtree - self.children[0].query_polygon(q1_polygon, results) - self.children[1].query_polygon(q2_polygon, results) - self.children[2].query_polygon(q3_polygon, results) - self.children[3].query_polygon(q4_polygon, results) + # TODO: now query these 4 polygons further down the quadtree + self.children[0].query_polygon(q1_polygon, results) + self.children[1].query_polygon(q2_polygon, results) + self.children[2].query_polygon(q3_polygon, results) + self.children[3].query_polygon(q4_polygon, results) # x_lower, x_upper = polygon.extents(polygon._axes[0]) # y_lower, y_upper = polygon.extents(polygon._axes[1]) @@ -249,7 +250,8 @@ def extract_single(self, datacube, polytope): def slice_in_two_vertically(polytope: ConvexPolytope, value): if polytope is None: - pass + return (None, None) + # pass else: assert len(polytope.points[0]) == 2 @@ -297,7 +299,8 @@ def slice_in_two_vertically(polytope: ConvexPolytope, value): def slice_in_two_horizontally(polytope: ConvexPolytope, value): if polytope is None: - pass + return (None, None) + # pass else: assert len(polytope.points[0]) == 2 diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index 56aff7585..c8c702b13 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -17,6 +17,25 @@ def test_quad_tree_slicer(self): slicer.quad_tree.pprint() pass + def test_quad_tree_query_polygon(self): + points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] + slicer = QuadTreeSlicer(points) + polytope = Box(["lat", "lon"], [1, 1], [20, 30]).polytope()[0] + results = slicer.quad_tree.query_polygon(polytope) + assert len(results) == 3 + assert (10, 10, 10, 10) in [node.rect for node in results] + assert (5, 10, 5, 10) in [node.rect for node in results] + assert (5, 20, 5, 20) in [node.rect for node in results] + points = [[10, 10], [80, 10], [-5, 5], [5, 50], [5, 10], [50, 10], [2, 10], [15, 15]] + slicer = QuadTreeSlicer(points) + polytope = ConvexPolytope(["lat", "lon"], [[-10, 1], [20, 1], [5, 20]]) + results = slicer.quad_tree.query_polygon(polytope) + assert len(results) == 4 + assert (-5, 5, -5, 5) in [node.rect for node in results] + assert (5, 10, 5, 10) in [node.rect for node in results] + assert (10, 10, 10, 10) in [node.rect for node in results] + assert (2, 10, 2, 10) in [node.rect for node in results] + def test_slice_in_two_vertically(self): polytope = Box(["lat", "lon"], [0, 0], [2, 2]).polytope()[0] lower, upper = slice_in_two_vertically(polytope, 1) From 33e6e9782ea15b0b262c61e87776944218be2762 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Fri, 5 Jan 2024 12:02:22 +0100 Subject: [PATCH 08/75] clean up --- polytope/datacube/backends/quad_test.py | 36 ------------ polytope/engine/quadtree_slicer.py | 76 +++++-------------------- 2 files changed, 15 insertions(+), 97 deletions(-) diff --git a/polytope/datacube/backends/quad_test.py b/polytope/datacube/backends/quad_test.py index b449818dd..521887ebd 100644 --- a/polytope/datacube/backends/quad_test.py +++ b/polytope/datacube/backends/quad_test.py @@ -1,42 +1,6 @@ # TODO: create quadtree from a set of 2D points with each leaf containing exactly one data point from .datacube import Datacube -# import quads - -# tree = quads.QuadTree((0, 0), 360, 180) -# tree.insert((0, 0)) -# tree.insert((90, 0)) -# tree.insert((90, 40)) -# tree.insert((60, 10)) -# a = tree.find((1, 2)) -# # quads.visualize(tree) - -# import scipy.spatial as scsp -# from copy import deepcopy - -# new_tree = scsp.KDTree([[0, 0], [90, 0], [90, 40], [60, 10]]) - -# import numpy as np -# from scipy.spatial import KDTree -# import matplotlib.pyplot as plt - -# x, y = np.mgrid[0:5, 0:8] -# tree = KDTree(np.c_[x.ravel(), y.ravel()]) -# plt.plot(x, y, marker='o', color='k', linestyle='none') -# # plt.show() - -# dd, ii = tree.query([[1.501, 2.5]], k=2) -# print(dd, ii, sep='\n') -# print("nearest point") -# print(np.c_[x.ravel(), y.ravel()][ii]) - -# print("\n") -# print(tree.maxes) -# print(tree.mins) -# print(tree.leafsize) -# print(tree.tree) -# print(tree.n) - class IrregularGridDatacube(Datacube): def __init__(self, points, config={}, axis_options={}): diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 73ba9f5af..bcce7d132 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -28,7 +28,7 @@ def __init__(self, item, rect): self.rect = rect def is_contained_in(self, polygon): - # TODO: implement method to check if the node point is inside the polygon + # implement method to check if the node point is inside the polygon node_x = self.rect[0] node_y = self.rect[1] @@ -144,42 +144,8 @@ def split(self): for node in nodes: self.insert_into_children(node.item, node.rect) - # def query(self, rect, results=None): - - # if results is None: - # rect = normalize_rect(rect) - # results = set() - - # # search children - # if len(self.children) > 0: - # if rect[0] <= self.center[0]: - # if rect[1] <= self.center[1]: - # self.children[0].query(rect, results) - # if rect[3] > self.center[1]: - # self.children[1].query(rect, results) - # if rect[2] > self.center[0]: - # if rect[1] <= self.center[1]: - # self.children[2].query(rect, results) - # if rect[3] > self.center[1]: - # self.children[3].query(rect, results) - - # # search node at this level - # for node in self.nodes: - # if (node.rect[2] > rect[0] and node.rect[0] <= rect[2] and - # node.rect[3] > rect[1] and node.rect[1] <= rect[3]): - # results.add(node.item) - - # return results - - # def get_size(self): - # size = 0 - # for child in self.children: - # size += child.get_size() - # size += len(self.nodes) - # return size - def query_polygon(self, polygon, results=None): - # TODO: intersect quad tree with a 2D polygon + # intersect quad tree with a 2D polygon if results is None: results = set() @@ -191,33 +157,16 @@ def query_polygon(self, polygon, results=None): if len(self.children) > 0: left_polygon, right_polygon = slice_in_two_vertically(polygon, self.center[0]) - # TODO: now need to slice the left and right polygons each in two to have the 4 quadrant polygons + # now need to slice the left and right polygons each in two to have the 4 quadrant polygons q1_polygon, q2_polygon = slice_in_two_horizontally(left_polygon, self.center[1]) q3_polygon, q4_polygon = slice_in_two_horizontally(right_polygon, self.center[1]) - # TODO: now query these 4 polygons further down the quadtree + # now query these 4 polygons further down the quadtree self.children[0].query_polygon(q1_polygon, results) self.children[1].query_polygon(q2_polygon, results) self.children[2].query_polygon(q3_polygon, results) self.children[3].query_polygon(q4_polygon, results) - # x_lower, x_upper = polygon.extents(polygon._axes[0]) - # y_lower, y_upper = polygon.extents(polygon._axes[1]) - # if len(self.children) > 0: - # # TODO: do the intersection bit here - # if x_upper <= self.center[0]: - # # The vertical slicing line does not intersect the polygon, which is on the left of the line - # # So we keep the same polygon for now since it is unsliced - # left_polygon = polygon - # right_polygon = None - # if x_lower <= self.center[0] < x_upper: - # # TODO: need to slice polygon into left and right part - # pass - # if self.center[0] < x_lower: - # left_polygon = None - # right_polygon = polygon - # pass - for node in self.nodes: if node.is_contained_in(polygon): results.add(node) @@ -227,22 +176,27 @@ def query_polygon(self, polygon, results=None): class QuadTreeSlicer(Engine): def __init__(self, points): - # TODO: here need to construct quadtree, which is specific to datacube + # here need to construct quadtree, which is specific to datacube quad_tree = QuadTree() quad_tree.build_point_tree(points) self.quad_tree = quad_tree - # TODO: method to slice polygon against quadtree + # method to slice polygon against quadtree def extract(self, datacube, polytopes): - # TODO: need to find the points to extract within the polytopes (polygons here in 2D) + # need to find the points to extract within the polytopes (polygons here in 2D) + extracted_points = [] for polytope in polytopes: assert len(polytope._axes) == 2 - self.extract_single(datacube, polytope) + extracted_points.extend(self.extract_single(datacube, polytope)) + + # TODO: what data format do we return extracted points as? Append those points to the index tree? + # NOTE: for now, this returns a list of QuadNodes + return extracted_points def extract_single(self, datacube, polytope): - # TODO: extract a single polygon + # extract a single polygon - # TODO: need to find points of the datacube contained within the polytope + # need to find points of the datacube contained within the polytope # We do this by intersecting the datacube point cloud quad tree with the polytope here polygon_points = self.quad_tree.query_polygon(polytope) return polygon_points From 5ffd68a49813bd59a40d10a88bfd47e03dea3ec9 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Mon, 8 Jan 2024 11:25:51 +0100 Subject: [PATCH 09/75] refactor --- polytope/engine/quadtree_slicer.py | 72 +++++------------------------- tests/test_quad_tree.py | 11 ++--- 2 files changed, 15 insertions(+), 68 deletions(-) diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index bcce7d132..4f341dea0 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -155,11 +155,15 @@ def query_polygon(self, polygon, results=None): pass else: if len(self.children) > 0: - left_polygon, right_polygon = slice_in_two_vertically(polygon, self.center[0]) - # now need to slice the left and right polygons each in two to have the 4 quadrant polygons - q1_polygon, q2_polygon = slice_in_two_horizontally(left_polygon, self.center[1]) - q3_polygon, q4_polygon = slice_in_two_horizontally(right_polygon, self.center[1]) + # first slice vertically + left_polygon, right_polygon = slice_in_two(polygon, self.center[0], 0) + + # then slice horizontally + # ie need to slice the left and right polygons each in two to have the 4 quadrant polygons + + q1_polygon, q2_polygon = slice_in_two(left_polygon, self.center[1], 1) + q3_polygon, q4_polygon = slice_in_two(right_polygon, self.center[1], 1) # now query these 4 polygons further down the quadtree self.children[0].query_polygon(q1_polygon, results) @@ -202,16 +206,13 @@ def extract_single(self, datacube, polytope): return polygon_points -def slice_in_two_vertically(polytope: ConvexPolytope, value): +def slice_in_two(polytope: ConvexPolytope, value, slice_axis_idx): if polytope is None: return (None, None) - # pass else: assert len(polytope.points[0]) == 2 - x_lower, x_upper, slice_axis_idx = polytope.extents(polytope._axes[0]) - - slice_axis_idx = 0 + x_lower, x_upper, _ = polytope.extents(polytope._axes[slice_axis_idx]) intersects = _find_intersects(polytope, slice_axis_idx, value) @@ -225,8 +226,8 @@ def slice_in_two_vertically(polytope: ConvexPolytope, value): left_polygon = None right_polygon = polytope else: - left_points = [p for p in polytope.points if p[0] <= value] - right_points = [p for p in polytope.points if p[0] >= value] + left_points = [p for p in polytope.points if p[slice_axis_idx] <= value] + right_points = [p for p in polytope.points if p[slice_axis_idx] >= value] left_points.extend(intersects) right_points.extend(intersects) # find left polygon @@ -249,52 +250,3 @@ def slice_in_two_vertically(polytope: ConvexPolytope, value): right_polygon = ConvexPolytope(polytope._axes, [right_points[i] for i in vertices]) return (left_polygon, right_polygon) - - -def slice_in_two_horizontally(polytope: ConvexPolytope, value): - if polytope is None: - return (None, None) - # pass - else: - assert len(polytope.points[0]) == 2 - - y_lower, y_upper, slice_axis_idx = polytope.extents(polytope._axes[1]) - - slice_axis_idx = 1 - - intersects = _find_intersects(polytope, slice_axis_idx, value) - - if len(intersects) == 0: - if y_upper <= value: - # The vertical slicing line does not intersect the polygon, which is on the left of the line - # So we keep the same polygon for now since it is unsliced - lower_polygon = polytope - upper_polygon = None - if value < y_lower: - lower_polygon = None - upper_polygon = polytope - else: - lower_points = [p for p in polytope.points if p[1] <= value] - upper_points = [p for p in polytope.points if p[1] >= value] - lower_points.extend(intersects) - upper_points.extend(intersects) - # find left polygon - try: - hull = scipy.spatial.ConvexHull(lower_points) - vertices = hull.vertices - except scipy.spatial.qhull.QhullError as e: - print(str(e)) - pass - - lower_polygon = ConvexPolytope(polytope._axes, [lower_points[i] for i in vertices]) - - try: - hull = scipy.spatial.ConvexHull(upper_points) - vertices = hull.vertices - except scipy.spatial.qhull.QhullError as e: - print(str(e)) - pass - - upper_polygon = ConvexPolytope(polytope._axes, [upper_points[i] for i in vertices]) - - return (lower_polygon, upper_polygon) diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index c8c702b13..a053862e4 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -1,9 +1,4 @@ -from polytope.engine.quadtree_slicer import ( - QuadNode, - QuadTreeSlicer, - slice_in_two_horizontally, - slice_in_two_vertically, -) +from polytope.engine.quadtree_slicer import QuadNode, QuadTreeSlicer, slice_in_two from polytope.shapes import Box, ConvexPolytope @@ -38,13 +33,13 @@ def test_quad_tree_query_polygon(self): def test_slice_in_two_vertically(self): polytope = Box(["lat", "lon"], [0, 0], [2, 2]).polytope()[0] - lower, upper = slice_in_two_vertically(polytope, 1) + lower, upper = slice_in_two(polytope, 1, 0) assert lower.points == [[0, 0], [1.0, 0.0], [1.0, 2.0], [0, 2]] assert upper.points == [[1.0, 0.0], [2, 0], [2, 2], [1.0, 2.0]] def test_slice_in_two_horizontally(self): polytope = Box(["lat", "lon"], [0, 0], [2, 2]).polytope()[0] - lower, upper = slice_in_two_horizontally(polytope, 1) + lower, upper = slice_in_two(polytope, 1, 1) assert lower.points == [[0, 0], [2, 0], [2.0, 1.0], [0.0, 1.0]] assert upper.points == [[2, 2], [0, 2], [0.0, 1.0], [2.0, 1.0]] From a941be29c5f346bf95b3eb9c5c01abd743d1461a Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Mon, 8 Jan 2024 15:57:32 +0100 Subject: [PATCH 10/75] finish quad tree extract function --- polytope/datacube/quad_tree.py | 179 +++++++++++++++++++++ polytope/engine/quadtree_slicer.py | 243 ++--------------------------- polytope/engine/slicing_tools.py | 50 ++++++ tests/test_quad_tree.py | 31 +++- 4 files changed, 275 insertions(+), 228 deletions(-) create mode 100644 polytope/datacube/quad_tree.py create mode 100644 polytope/engine/slicing_tools.py diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py new file mode 100644 index 000000000..0ef9568e8 --- /dev/null +++ b/polytope/datacube/quad_tree.py @@ -0,0 +1,179 @@ +from ..engine.hullslicer import slice +from ..engine.slicing_tools import slice_in_two + +""" + + QuadTree data structure + + comes from: https://github.com/mdrasmus/compbio/blob/master/rasmus/quadtree.py + + is specific to 2D + +""" + + +def normalize_rect(rect): + x1, y1, x2, y2 = rect + if x1 > x2: + x1, x2 = x2, x1 + if y1 > y2: + y1, y2 = y2, y1 + return (x1, y1, x2, y2) + + +class QuadNode: + def __init__(self, item, rect): + self.item = item + self.rect = rect + + def is_contained_in(self, polygon): + # implement method to check if the node point is inside the polygon + node_x = self.rect[0] + node_y = self.rect[1] + + sliced_vertical_polygon = slice(polygon, polygon._axes[0], node_x, 0) + if sliced_vertical_polygon: + lower_y, upper_y, idx = sliced_vertical_polygon.extents(polygon._axes[1]) + if lower_y <= node_y <= upper_y: + return True + return False + + +class QuadTree: + # TODO: do we need the max_depth? + MAX = 4 + MAX_DEPTH = 20 + + def __init__(self, x=0, y=0, size=[360, 180], depth=0): + self.nodes = [] + self.children = [] + self.center = [x, y] + self.size = size + self.depth = depth + + def build_point_tree(self, points): + for p in points: + p_rect = (p[0], p[1], p[0], p[1]) + self.insert(p, p_rect) + + def pprint(self): + if self.depth == 0: + print("\n") + if len(self.children) == 0: + for n in self.nodes: + print("\t" * (self.depth + 1) + "\u21b3" + str(n.rect[0]) + " , " + str(n.rect[1])) + for child in self.children: + print( + "\t" * (self.depth + 1) + + "\u21b3" + + str(child.center[0] - child.size[0]) + + " , " + + str(child.center[1] - child.size[1]) + + " , " + + str(child.center[0] + child.size[0]) + + " , " + + str(child.center[1] + child.size[1]) + ) + child.pprint() + + def insert(self, item, rect): + rect = normalize_rect(rect) + + if len(self.children) == 0: + node = QuadNode(item, rect) + self.nodes.append(node) + + if len(self.nodes) > self.MAX and self.depth < self.MAX_DEPTH: + self.split() + return node + else: + return self.insert_into_children(item, rect) + + def insert_into_children(self, item, rect): + # if rect spans center then insert here + # NOTE: probably do not need this since rect[0] = rect[2] and rect[1] = rect[3] when we work with points only + # so these conditions will never be true + if (rect[0] <= self.center[0] and rect[2] > self.center[0]) and ( + rect[1] <= self.center[1] and rect[3] > self.center[1] + ): + node = QuadNode(item, rect) + self.nodes.append(node) + return node + else: + # try to insert into children + if rect[0] <= self.center[0]: + if rect[1] <= self.center[1]: + return self.children[0].insert(item, rect) + if rect[3] > self.center[1]: + return self.children[1].insert(item, rect) + if rect[2] > self.center[0]: + if rect[1] <= self.center[1]: + return self.children[2].insert(item, rect) + if rect[3] > self.center[1]: + return self.children[3].insert(item, rect) + + def split(self): + self.children = [ + QuadTree( + self.center[0] - self.size[0] / 2, + self.center[1] - self.size[1] / 2, + [s / 2 for s in self.size], + self.depth + 1, + ), + QuadTree( + self.center[0] - self.size[0] / 2, + self.center[1] + self.size[1] / 2, + [s / 2 for s in self.size], + self.depth + 1, + ), + QuadTree( + self.center[0] + self.size[0] / 2, + self.center[1] - self.size[1] / 2, + [s / 2 for s in self.size], + self.depth + 1, + ), + QuadTree( + self.center[0] + self.size[0] / 2, + self.center[1] + self.size[1] / 2, + [s / 2 for s in self.size], + self.depth + 1, + ), + ] + + nodes = self.nodes + self.nodes = [] + for node in nodes: + self.insert_into_children(node.item, node.rect) + + def query_polygon(self, polygon, results=None): + # intersect quad tree with a 2D polygon + if results is None: + results = set() + + # intersect the children with the polygon + # TODO: here, we create None polygons... think about how to handle them + if polygon is None: + pass + else: + if len(self.children) > 0: + + # first slice vertically + left_polygon, right_polygon = slice_in_two(polygon, self.center[0], 0) + + # then slice horizontally + # ie need to slice the left and right polygons each in two to have the 4 quadrant polygons + + q1_polygon, q2_polygon = slice_in_two(left_polygon, self.center[1], 1) + q3_polygon, q4_polygon = slice_in_two(right_polygon, self.center[1], 1) + + # now query these 4 polygons further down the quadtree + self.children[0].query_polygon(q1_polygon, results) + self.children[1].query_polygon(q2_polygon, results) + self.children[2].query_polygon(q3_polygon, results) + self.children[3].query_polygon(q4_polygon, results) + + for node in self.nodes: + if node.is_contained_in(polygon): + results.add(node) + + return results diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 4f341dea0..6689a3b77 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -1,186 +1,12 @@ -import scipy - -from ..shapes import ConvexPolytope +from ..datacube.index_tree import IndexTree +from ..datacube.quad_tree import QuadTree from .engine import Engine -from .hullslicer import _find_intersects, slice - -""" - - QuadTree data structure - - comes from: https://github.com/mdrasmus/compbio/blob/master/rasmus/quadtree.py - -""" - - -def normalize_rect(rect): - x1, y1, x2, y2 = rect - if x1 > x2: - x1, x2 = x2, x1 - if y1 > y2: - y1, y2 = y2, y1 - return (x1, y1, x2, y2) - - -class QuadNode: - def __init__(self, item, rect): - self.item = item - self.rect = rect - - def is_contained_in(self, polygon): - # implement method to check if the node point is inside the polygon - node_x = self.rect[0] - node_y = self.rect[1] - - sliced_vertical_polygon = slice(polygon, polygon._axes[0], node_x, 0) - if sliced_vertical_polygon: - lower_y, upper_y, idx = sliced_vertical_polygon.extents(polygon._axes[1]) - if lower_y <= node_y <= upper_y: - return True - return False - - -class QuadTree: - # TODO: do we need the max_depth? - MAX = 4 - MAX_DEPTH = 20 - - def __init__(self, x=0, y=0, size=[360, 180], depth=0): - self.nodes = [] - self.children = [] - self.center = [x, y] - self.size = size - self.depth = depth - - def build_point_tree(self, points): - for p in points: - p_rect = (p[0], p[1], p[0], p[1]) - self.insert(p, p_rect) - - def pprint(self): - if self.depth == 0: - print("\n") - if len(self.children) == 0: - for n in self.nodes: - print("\t" * (self.depth + 1) + "\u21b3" + str(n.rect[0]) + " , " + str(n.rect[1])) - for child in self.children: - print( - "\t" * (self.depth + 1) - + "\u21b3" - + str(child.center[0] - child.size[0]) - + " , " - + str(child.center[1] - child.size[1]) - + " , " - + str(child.center[0] + child.size[0]) - + " , " - + str(child.center[1] + child.size[1]) - ) - child.pprint() - - def insert(self, item, rect): - rect = normalize_rect(rect) - - if len(self.children) == 0: - node = QuadNode(item, rect) - self.nodes.append(node) - - if len(self.nodes) > self.MAX and self.depth < self.MAX_DEPTH: - self.split() - return node - else: - return self.insert_into_children(item, rect) - - def insert_into_children(self, item, rect): - # if rect spans center then insert here - if (rect[0] <= self.center[0] and rect[2] > self.center[0]) and ( - rect[1] <= self.center[1] and rect[3] > self.center[1] - ): - node = QuadNode(item, rect) - self.nodes.append(node) - return node - else: - # try to insert into children - if rect[0] <= self.center[0]: - if rect[1] <= self.center[1]: - return self.children[0].insert(item, rect) - if rect[3] > self.center[1]: - return self.children[1].insert(item, rect) - if rect[2] > self.center[0]: - if rect[1] <= self.center[1]: - return self.children[2].insert(item, rect) - if rect[3] > self.center[1]: - return self.children[3].insert(item, rect) - - def split(self): - self.children = [ - QuadTree( - self.center[0] - self.size[0] / 2, - self.center[1] - self.size[1] / 2, - [s / 2 for s in self.size], - self.depth + 1, - ), - QuadTree( - self.center[0] - self.size[0] / 2, - self.center[1] + self.size[1] / 2, - [s / 2 for s in self.size], - self.depth + 1, - ), - QuadTree( - self.center[0] + self.size[0] / 2, - self.center[1] - self.size[1] / 2, - [s / 2 for s in self.size], - self.depth + 1, - ), - QuadTree( - self.center[0] + self.size[0] / 2, - self.center[1] + self.size[1] / 2, - [s / 2 for s in self.size], - self.depth + 1, - ), - ] - - nodes = self.nodes - self.nodes = [] - for node in nodes: - self.insert_into_children(node.item, node.rect) - - def query_polygon(self, polygon, results=None): - # intersect quad tree with a 2D polygon - if results is None: - results = set() - - # intersect the children with the polygon - # TODO: here, we create None polygons... think about how to handle them - if polygon is None: - pass - else: - if len(self.children) > 0: - - # first slice vertically - left_polygon, right_polygon = slice_in_two(polygon, self.center[0], 0) - - # then slice horizontally - # ie need to slice the left and right polygons each in two to have the 4 quadrant polygons - - q1_polygon, q2_polygon = slice_in_two(left_polygon, self.center[1], 1) - q3_polygon, q4_polygon = slice_in_two(right_polygon, self.center[1], 1) - - # now query these 4 polygons further down the quadtree - self.children[0].query_polygon(q1_polygon, results) - self.children[1].query_polygon(q2_polygon, results) - self.children[2].query_polygon(q3_polygon, results) - self.children[3].query_polygon(q4_polygon, results) - - for node in self.nodes: - if node.is_contained_in(polygon): - results.add(node) - - return results class QuadTreeSlicer(Engine): def __init__(self, points): # here need to construct quadtree, which is specific to datacube + # NOTE: should this be inside of the datacube instead that we create the quadtree? quad_tree = QuadTree() quad_tree.build_point_tree(points) self.quad_tree = quad_tree @@ -188,14 +14,25 @@ def __init__(self, points): # method to slice polygon against quadtree def extract(self, datacube, polytopes): # need to find the points to extract within the polytopes (polygons here in 2D) + request = IndexTree() extracted_points = [] for polytope in polytopes: assert len(polytope._axes) == 2 extracted_points.extend(self.extract_single(datacube, polytope)) - # TODO: what data format do we return extracted points as? Append those points to the index tree? - # NOTE: for now, this returns a list of QuadNodes - return extracted_points + # what data format do we return extracted points as? Append those points to the index tree? + for point in extracted_points: + # append each found leaf to the tree + lat = point.rect[0] + lon = point.rect[1] + result = point.item + # TODO: make finding the axes objects nicer? + lat_axis = datacube.axes[polytope._axes[0]] + lat_child = request.create_child(lat_axis, lat) + lon_axis = datacube.axes[polytope._axes[1]] + lon_child = lat_child.create_child(lon_axis, lon) + lon_child.result = result + return request def extract_single(self, datacube, polytope): # extract a single polygon @@ -204,49 +41,3 @@ def extract_single(self, datacube, polytope): # We do this by intersecting the datacube point cloud quad tree with the polytope here polygon_points = self.quad_tree.query_polygon(polytope) return polygon_points - - -def slice_in_two(polytope: ConvexPolytope, value, slice_axis_idx): - if polytope is None: - return (None, None) - else: - assert len(polytope.points[0]) == 2 - - x_lower, x_upper, _ = polytope.extents(polytope._axes[slice_axis_idx]) - - intersects = _find_intersects(polytope, slice_axis_idx, value) - - if len(intersects) == 0: - if x_upper <= value: - # The vertical slicing line does not intersect the polygon, which is on the left of the line - # So we keep the same polygon for now since it is unsliced - left_polygon = polytope - right_polygon = None - if value < x_lower: - left_polygon = None - right_polygon = polytope - else: - left_points = [p for p in polytope.points if p[slice_axis_idx] <= value] - right_points = [p for p in polytope.points if p[slice_axis_idx] >= value] - left_points.extend(intersects) - right_points.extend(intersects) - # find left polygon - try: - hull = scipy.spatial.ConvexHull(left_points) - vertices = hull.vertices - except scipy.spatial.qhull.QhullError as e: - print(str(e)) - pass - - left_polygon = ConvexPolytope(polytope._axes, [left_points[i] for i in vertices]) - - try: - hull = scipy.spatial.ConvexHull(right_points) - vertices = hull.vertices - except scipy.spatial.qhull.QhullError as e: - print(str(e)) - pass - - right_polygon = ConvexPolytope(polytope._axes, [right_points[i] for i in vertices]) - - return (left_polygon, right_polygon) diff --git a/polytope/engine/slicing_tools.py b/polytope/engine/slicing_tools.py new file mode 100644 index 000000000..295706443 --- /dev/null +++ b/polytope/engine/slicing_tools.py @@ -0,0 +1,50 @@ +import scipy + +from ..shapes import ConvexPolytope +from .hullslicer import _find_intersects + + +def slice_in_two(polytope: ConvexPolytope, value, slice_axis_idx): + if polytope is None: + return (None, None) + else: + assert len(polytope.points[0]) == 2 + + x_lower, x_upper, _ = polytope.extents(polytope._axes[slice_axis_idx]) + + intersects = _find_intersects(polytope, slice_axis_idx, value) + + if len(intersects) == 0: + if x_upper <= value: + # The vertical slicing line does not intersect the polygon, which is on the left of the line + # So we keep the same polygon for now since it is unsliced + left_polygon = polytope + right_polygon = None + if value < x_lower: + left_polygon = None + right_polygon = polytope + else: + left_points = [p for p in polytope.points if p[slice_axis_idx] <= value] + right_points = [p for p in polytope.points if p[slice_axis_idx] >= value] + left_points.extend(intersects) + right_points.extend(intersects) + # find left polygon + try: + hull = scipy.spatial.ConvexHull(left_points) + vertices = hull.vertices + except scipy.spatial.qhull.QhullError as e: + print(str(e)) + pass + + left_polygon = ConvexPolytope(polytope._axes, [left_points[i] for i in vertices]) + + try: + hull = scipy.spatial.ConvexHull(right_points) + vertices = hull.vertices + except scipy.spatial.qhull.QhullError as e: + print(str(e)) + pass + + right_polygon = ConvexPolytope(polytope._axes, [right_points[i] for i in vertices]) + + return (left_polygon, right_polygon) diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index a053862e4..2e5661660 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -1,10 +1,23 @@ -from polytope.engine.quadtree_slicer import QuadNode, QuadTreeSlicer, slice_in_two +from polytope.datacube.backends.fdb import FDBDatacube +from polytope.datacube.quad_tree import QuadNode +from polytope.engine.quadtree_slicer import QuadTreeSlicer +from polytope.engine.slicing_tools import slice_in_two from polytope.shapes import Box, ConvexPolytope class TestQuadTreeSlicer: def setup_method(self, method): - pass + self.options = { + "values": { + "transformation": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}} + }, + "date": {"transformation": {"merge": {"with": "time", "linkers": ["T", "00"]}}}, + "step": {"transformation": {"type_change": "int"}}, + "number": {"transformation": {"type_change": "int"}}, + "longitude": {"transformation": {"cyclic": [0, 360]}}, + } + self.config = {"class": "ea", "expver": "0001", "levtype": "pl", "step": 0} + self.datacube = FDBDatacube(self.config, axis_options=self.options) def test_quad_tree_slicer(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] @@ -64,3 +77,17 @@ def test_quad_node_is_contained_in_triangle(self): assert third_node.is_contained_in(polytope) third_node = QuadNode(1, [0.1, 0.5, 0.1, 0.5]) assert not third_node.is_contained_in(polytope) + + def test_quad_tree_slicer_extract(self): + points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] + slicer = QuadTreeSlicer(points) + polytope = Box(["latitude", "longitude"], [1, 1], [20, 30]).polytope()[0] + tree = slicer.extract(self.datacube, [polytope]) + assert len(tree.leaves) == 3 + tree.pprint() + points = [[10, 10], [80, 10], [-5, 5], [5, 50], [5, 10], [50, 10], [2, 10], [15, 15]] + slicer = QuadTreeSlicer(points) + polytope = ConvexPolytope(["latitude", "longitude"], [[-10, 1], [20, 1], [5, 20]]) + tree = slicer.extract(self.datacube, [polytope]) + assert len(tree.leaves) == 4 + tree.pprint() From badae88ba68531baecc9f3e02e4bac104df3fb2d Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Mon, 8 Jan 2024 16:29:59 +0100 Subject: [PATCH 11/75] first performance test for quadtree --- tests/test_quad_tree.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index 2e5661660..211bcfb4b 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -1,3 +1,5 @@ +import pytest + from polytope.datacube.backends.fdb import FDBDatacube from polytope.datacube.quad_tree import QuadNode from polytope.engine.quadtree_slicer import QuadTreeSlicer @@ -91,3 +93,23 @@ def test_quad_tree_slicer_extract(self): tree = slicer.extract(self.datacube, [polytope]) assert len(tree.leaves) == 4 tree.pprint() + + @pytest.mark.skip("performance test") + def test_large_scale_extraction(self): + import time + + import numpy as np + x = np.linspace(0, 100, 1000) + y = np.linspace(0, 100, 1000) + # create the mesh based on these arrays + X, Y = np.meshgrid(x, y) + X = X.reshape((np.prod(X.shape),)) + Y = Y.reshape((np.prod(Y.shape),)) + coords = zip(X, Y) + points = [list(coord) for coord in coords] + slicer = QuadTreeSlicer(points) + polytope = Box(["latitude", "longitude"], [1, 1], [20, 30]).polytope()[0] + time1 = time.time() + tree = slicer.extract(self.datacube, [polytope]) + print(time.time() - time1) # = 5.919436931610107 + print(len(tree.leaves)) # = 55100 From 2dda6dfdff63f825bc7b5770f03ea2064ae23d61 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Mon, 8 Jan 2024 16:44:30 +0100 Subject: [PATCH 12/75] clean up --- tests/test_quad_tree.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index 211bcfb4b..c67fe02c1 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -113,3 +113,5 @@ def test_large_scale_extraction(self): tree = slicer.extract(self.datacube, [polytope]) print(time.time() - time1) # = 5.919436931610107 print(len(tree.leaves)) # = 55100 + # NOTE: maybe for 2D qhull here, scipy is not the fastest + # but use shewchuk's triangle algo: https://www.cs.cmu.edu/~quake/triangle.html? From 85b9b2104488f174467ccf4603da3394dab99fbc Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Tue, 9 Jan 2024 09:48:23 +0100 Subject: [PATCH 13/75] fix MAX number of nodes in QuadTree --- polytope/datacube/quad_tree.py | 4 +++- polytope/engine/quadtree_slicer.py | 5 +++++ tests/test_quad_tree.py | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index 0ef9568e8..b83579fea 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -41,7 +41,9 @@ def is_contained_in(self, polygon): class QuadTree: # TODO: do we need the max_depth? - MAX = 4 + # MAX = 10 + MAX = 3 + # MAX = 4 MAX_DEPTH = 20 def __init__(self, x=0, y=0, size=[360, 180], depth=0): diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 6689a3b77..c721be2b6 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -13,6 +13,8 @@ def __init__(self, points): # method to slice polygon against quadtree def extract(self, datacube, polytopes): + import time + # need to find the points to extract within the polytopes (polygons here in 2D) request = IndexTree() extracted_points = [] @@ -21,6 +23,7 @@ def extract(self, datacube, polytopes): extracted_points.extend(self.extract_single(datacube, polytope)) # what data format do we return extracted points as? Append those points to the index tree? + time0 = time.time() for point in extracted_points: # append each found leaf to the tree lat = point.rect[0] @@ -32,6 +35,8 @@ def extract(self, datacube, polytopes): lon_axis = datacube.axes[polytope._axes[1]] lon_child = lat_child.create_child(lon_axis, lon) lon_child.result = result + print("time create 2D tree") + print(time.time() - time0) return request def extract_single(self, datacube, polytope): diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index c67fe02c1..c673e7a93 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -94,7 +94,7 @@ def test_quad_tree_slicer_extract(self): assert len(tree.leaves) == 4 tree.pprint() - @pytest.mark.skip("performance test") + # @pytest.mark.skip("performance test") def test_large_scale_extraction(self): import time From a69cad0d95bc7d791ac0667266c508aaba5cbbc7 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Wed, 10 Jan 2024 09:47:15 +0100 Subject: [PATCH 14/75] optimise quadtree slicer to not slice quadrants when the polygon is a box the size of the quadrant --- polytope/datacube/quad_tree.py | 99 +++++++++++++++++++++++------ polytope/engine/slicing_tools.py | 27 ++++++-- tests/test_quadtree_optimisation.py | 35 ++++++++++ 3 files changed, 136 insertions(+), 25 deletions(-) create mode 100644 tests/test_quadtree_optimisation.py diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index b83579fea..9249152ca 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -41,17 +41,22 @@ def is_contained_in(self, polygon): class QuadTree: # TODO: do we need the max_depth? - # MAX = 10 MAX = 3 - # MAX = 4 MAX_DEPTH = 20 - def __init__(self, x=0, y=0, size=[360, 180], depth=0): + def __init__(self, x=0, y=0, size=[180, 90], depth=0): self.nodes = [] self.children = [] self.center = [x, y] self.size = size self.depth = depth + # self.parent = self + + def quadrant_rectangle_points(self): + return set([(self.center[0] + (self.size[0]), self.center[1] + (self.size[1])), + (self.center[0] + (self.size[0]), self.center[1] - (self.size[1])), + (self.center[0] - (self.size[0]), self.center[1] + (self.size[1])), + (self.center[0] - (self.size[0]), self.center[1] - (self.size[1]))]) def build_point_tree(self, points): for p in points: @@ -147,6 +152,39 @@ def split(self): for node in nodes: self.insert_into_children(node.item, node.rect) + # def query_polygon(self, polygon, results=None): + # # intersect quad tree with a 2D polygon + # if results is None: + # results = set() + + # # intersect the children with the polygon + # # TODO: here, we create None polygons... think about how to handle them + # if polygon is None: + # pass + # else: + # if len(self.children) > 0: + + # # first slice vertically + # left_polygon, right_polygon = slice_in_two(polygon, self.center[0], 0) + + # # then slice horizontally + # # ie need to slice the left and right polygons each in two to have the 4 quadrant polygons + + # q1_polygon, q2_polygon = slice_in_two(left_polygon, self.center[1], 1) + # q3_polygon, q4_polygon = slice_in_two(right_polygon, self.center[1], 1) + + # # now query these 4 polygons further down the quadtree + # self.children[0].query_polygon(q1_polygon, results) + # self.children[1].query_polygon(q2_polygon, results) + # self.children[2].query_polygon(q3_polygon, results) + # self.children[3].query_polygon(q4_polygon, results) + + # for node in self.nodes: + # if node.is_contained_in(polygon): + # results.add(node) + + # return results + def query_polygon(self, polygon, results=None): # intersect quad tree with a 2D polygon if results is None: @@ -157,25 +195,50 @@ def query_polygon(self, polygon, results=None): if polygon is None: pass else: - if len(self.children) > 0: + polygon_points = set([tuple(point) for point in polygon.points]) + # print(polygon_points) + # print(self.quadrant_rectangle_points()) + # TODO: are these the right points which we are comparing, ie the points on the polygon + # and the points on the rectangle quadrant? + if polygon_points == self.quadrant_rectangle_points(): + for node in self.find_nodes_in(): + results.add(node) + else: + if len(self.children) > 0: - # first slice vertically - left_polygon, right_polygon = slice_in_two(polygon, self.center[0], 0) + # first slice vertically + left_polygon, right_polygon = slice_in_two(polygon, self.center[0], 0) - # then slice horizontally - # ie need to slice the left and right polygons each in two to have the 4 quadrant polygons + # then slice horizontally + # ie need to slice the left and right polygons each in two to have the 4 quadrant polygons - q1_polygon, q2_polygon = slice_in_two(left_polygon, self.center[1], 1) - q3_polygon, q4_polygon = slice_in_two(right_polygon, self.center[1], 1) + q1_polygon, q2_polygon = slice_in_two(left_polygon, self.center[1], 1) + q3_polygon, q4_polygon = slice_in_two(right_polygon, self.center[1], 1) - # now query these 4 polygons further down the quadtree - self.children[0].query_polygon(q1_polygon, results) - self.children[1].query_polygon(q2_polygon, results) - self.children[2].query_polygon(q3_polygon, results) - self.children[3].query_polygon(q4_polygon, results) + # self.children[0].parent = self + # self.children[1].parent = self + # self.children[2].parent = self + # self.children[3].parent = self + # now query these 4 polygons further down the quadtree + self.children[0].query_polygon(q1_polygon, results) + self.children[1].query_polygon(q2_polygon, results) + self.children[2].query_polygon(q3_polygon, results) + self.children[3].query_polygon(q4_polygon, results) - for node in self.nodes: - if node.is_contained_in(polygon): - results.add(node) + for node in self.nodes: + if node.is_contained_in(polygon): + results.add(node) return results + + def find_nodes_in(self, results=None): + # TODO: find the nodes that are in this subtree + if results is None: + results = set() + if len(self.children) > 0: + # there are children which we need to iterate through + for child in self.children: + child.find_nodes_in(results) + for node in self.nodes: + results.add(node) + return results diff --git a/polytope/engine/slicing_tools.py b/polytope/engine/slicing_tools.py index 295706443..aed7ee0a0 100644 --- a/polytope/engine/slicing_tools.py +++ b/polytope/engine/slicing_tools.py @@ -28,23 +28,36 @@ def slice_in_two(polytope: ConvexPolytope, value, slice_axis_idx): right_points = [p for p in polytope.points if p[slice_axis_idx] >= value] left_points.extend(intersects) right_points.extend(intersects) + # print(left_points) # find left polygon try: hull = scipy.spatial.ConvexHull(left_points) vertices = hull.vertices except scipy.spatial.qhull.QhullError as e: - print(str(e)) - pass + # print(str(e)) + if "less than" or "is flat" in str(e): + vertices = None - left_polygon = ConvexPolytope(polytope._axes, [left_points[i] for i in vertices]) + if vertices is not None: + left_polygon = ConvexPolytope(polytope._axes, [left_points[i] for i in vertices]) + else: + left_polygon = None + # print(str(e)) + # pass try: hull = scipy.spatial.ConvexHull(right_points) vertices = hull.vertices except scipy.spatial.qhull.QhullError as e: - print(str(e)) - pass - - right_polygon = ConvexPolytope(polytope._axes, [right_points[i] for i in vertices]) + # print(str(e)) + # pass + # print(str(e)) + if "less than" or "is flat" in str(e): + vertices = None + + if vertices is not None: + right_polygon = ConvexPolytope(polytope._axes, [right_points[i] for i in vertices]) + else: + right_polygon = None return (left_polygon, right_polygon) diff --git a/tests/test_quadtree_optimisation.py b/tests/test_quadtree_optimisation.py new file mode 100644 index 000000000..9e7869ebf --- /dev/null +++ b/tests/test_quadtree_optimisation.py @@ -0,0 +1,35 @@ +from polytope.datacube.backends.fdb import FDBDatacube +from polytope.engine.quadtree_slicer import QuadTreeSlicer +from polytope.shapes import Box + + +class TestQuadTreeSlicer: + def setup_method(self, method): + self.options = { + "values": { + "transformation": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}} + }, + "date": {"transformation": {"merge": {"with": "time", "linkers": ["T", "00"]}}}, + "step": {"transformation": {"type_change": "int"}}, + "number": {"transformation": {"type_change": "int"}}, + "longitude": {"transformation": {"cyclic": [0, 360]}}, + } + self.config = {"class": "ea", "expver": "0001", "levtype": "pl", "step": 0} + self.datacube = FDBDatacube(self.config, axis_options=self.options) + + def test_quad_tree_slicer(self): + points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] + slicer = QuadTreeSlicer(points) + slicer.quad_tree.pprint() + pass + + def test_quad_tree_query_polygon(self): + points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] + slicer = QuadTreeSlicer(points) + polytope = Box(["lat", "lon"], [0, 0], [90, 45]).polytope()[0] + results = slicer.quad_tree.query_polygon(polytope) + # print([node.rect for node in results]) + assert len(results) == 5 + assert (10, 10, 10, 10) in [node.rect for node in results] + assert (5, 10, 5, 10) in [node.rect for node in results] + assert (5, 20, 5, 20) in [node.rect for node in results] From 47024c30180f3237cde1292dab420625ab406379 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Wed, 10 Jan 2024 09:54:07 +0100 Subject: [PATCH 15/75] clean up --- polytope/datacube/quad_tree.py | 6 ------ polytope/engine/slicing_tools.py | 13 ++++++------- tests/test_quad_tree.py | 2 +- tests/test_quadtree_optimisation.py | 3 ++- 4 files changed, 9 insertions(+), 15 deletions(-) diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index 9249152ca..d8dec8983 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -196,8 +196,6 @@ def query_polygon(self, polygon, results=None): pass else: polygon_points = set([tuple(point) for point in polygon.points]) - # print(polygon_points) - # print(self.quadrant_rectangle_points()) # TODO: are these the right points which we are comparing, ie the points on the polygon # and the points on the rectangle quadrant? if polygon_points == self.quadrant_rectangle_points(): @@ -215,10 +213,6 @@ def query_polygon(self, polygon, results=None): q1_polygon, q2_polygon = slice_in_two(left_polygon, self.center[1], 1) q3_polygon, q4_polygon = slice_in_two(right_polygon, self.center[1], 1) - # self.children[0].parent = self - # self.children[1].parent = self - # self.children[2].parent = self - # self.children[3].parent = self # now query these 4 polygons further down the quadtree self.children[0].query_polygon(q1_polygon, results) self.children[1].query_polygon(q2_polygon, results) diff --git a/polytope/engine/slicing_tools.py b/polytope/engine/slicing_tools.py index aed7ee0a0..a96645ecb 100644 --- a/polytope/engine/slicing_tools.py +++ b/polytope/engine/slicing_tools.py @@ -28,30 +28,29 @@ def slice_in_two(polytope: ConvexPolytope, value, slice_axis_idx): right_points = [p for p in polytope.points if p[slice_axis_idx] >= value] left_points.extend(intersects) right_points.extend(intersects) - # print(left_points) # find left polygon try: hull = scipy.spatial.ConvexHull(left_points) vertices = hull.vertices except scipy.spatial.qhull.QhullError as e: - # print(str(e)) if "less than" or "is flat" in str(e): + # NOTE: this happens when we slice a polygon that has a border which coincides with the quadrant + # line and we slice this additional border with the quadrant line again. + # This is not actually a polygon we want to consider so we ignore it vertices = None if vertices is not None: left_polygon = ConvexPolytope(polytope._axes, [left_points[i] for i in vertices]) else: left_polygon = None - # print(str(e)) - # pass try: hull = scipy.spatial.ConvexHull(right_points) vertices = hull.vertices except scipy.spatial.qhull.QhullError as e: - # print(str(e)) - # pass - # print(str(e)) + # NOTE: this happens when we slice a polygon that has a border which coincides with the quadrant + # line and we slice this additional border with the quadrant line again. + # This is not actually a polygon we want to consider so we ignore it if "less than" or "is flat" in str(e): vertices = None diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index c673e7a93..c67fe02c1 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -94,7 +94,7 @@ def test_quad_tree_slicer_extract(self): assert len(tree.leaves) == 4 tree.pprint() - # @pytest.mark.skip("performance test") + @pytest.mark.skip("performance test") def test_large_scale_extraction(self): import time diff --git a/tests/test_quadtree_optimisation.py b/tests/test_quadtree_optimisation.py index 9e7869ebf..1b0be9156 100644 --- a/tests/test_quadtree_optimisation.py +++ b/tests/test_quadtree_optimisation.py @@ -28,8 +28,9 @@ def test_quad_tree_query_polygon(self): slicer = QuadTreeSlicer(points) polytope = Box(["lat", "lon"], [0, 0], [90, 45]).polytope()[0] results = slicer.quad_tree.query_polygon(polytope) - # print([node.rect for node in results]) assert len(results) == 5 assert (10, 10, 10, 10) in [node.rect for node in results] assert (5, 10, 5, 10) in [node.rect for node in results] assert (5, 20, 5, 20) in [node.rect for node in results] + assert (80, 10, 80, 10) in [node.rect for node in results] + assert (50, 10, 50, 10) in [node.rect for node in results] From b860b0d68b78cc07084a4c9d904c81ab0b59ef67 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Wed, 10 Jan 2024 10:08:01 +0100 Subject: [PATCH 16/75] pull develop and fix tests --- tests/test_ecmwf_oper_data_fdb.py | 2 +- tests/test_fdb_datacube.py | 3 +-- tests/test_quad_tree.py | 14 ++++++-------- tests/test_quadtree_optimisation.py | 13 ++++++------- tests/test_slice_date_range_fdb.py | 1 - tests/test_slice_date_range_fdb_v2.py | 2 +- 6 files changed, 15 insertions(+), 20 deletions(-) diff --git a/tests/test_ecmwf_oper_data_fdb.py b/tests/test_ecmwf_oper_data_fdb.py index 7ec4a4659..ebea9d996 100644 --- a/tests/test_ecmwf_oper_data_fdb.py +++ b/tests/test_ecmwf_oper_data_fdb.py @@ -16,7 +16,7 @@ def setup_method(self, method): "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, "step": {"type_change": "int"}, } - self.config = {"class": "od", "expver": "0001", "levtype": "sfc", "step": 0, "type": "fc"} + self.config = {"class": "od", "expver": "0001", "levtype": "sfc", "type": "fc", "stream": "oper"} self.fdbdatacube = FDBDatacube(self.config, axis_options=self.options) self.slicer = HullSlicer() self.API = Polytope(datacube=self.fdbdatacube, engine=self.slicer, axis_options=self.options) diff --git a/tests/test_fdb_datacube.py b/tests/test_fdb_datacube.py index a7c54816a..bf4452a35 100644 --- a/tests/test_fdb_datacube.py +++ b/tests/test_fdb_datacube.py @@ -20,7 +20,7 @@ def setup_method(self, method): "step": {"type_change": "int"}, "number": {"type_change": "int"}, } - self.config = {"class": "od", "expver": "0001", "levtype": "sfc"} + self.config = {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"} self.fdbdatacube = FDBDatacube(self.config, axis_options=self.options) self.slicer = HullSlicer() self.API = Polytope(datacube=self.fdbdatacube, engine=self.slicer, axis_options=self.options) @@ -38,7 +38,6 @@ def test_fdb_datacube(self): Select("class", ["od"]), Select("stream", ["oper"]), Select("type", ["an"]), - Select("number", [1]), Box(["latitude", "longitude"], [0, 0], [0.2, 0.2]), ) result = self.API.retrieve(request) diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index c67fe02c1..10390873d 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -10,15 +10,13 @@ class TestQuadTreeSlicer: def setup_method(self, method): self.options = { - "values": { - "transformation": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}} - }, - "date": {"transformation": {"merge": {"with": "time", "linkers": ["T", "00"]}}}, - "step": {"transformation": {"type_change": "int"}}, - "number": {"transformation": {"type_change": "int"}}, - "longitude": {"transformation": {"cyclic": [0, 360]}}, + "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, + "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, + "step": {"type_change": "int"}, + "number": {"type_change": "int"}, + "longitude": {"cyclic": [0, 360]}, } - self.config = {"class": "ea", "expver": "0001", "levtype": "pl", "step": 0} + self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} self.datacube = FDBDatacube(self.config, axis_options=self.options) def test_quad_tree_slicer(self): diff --git a/tests/test_quadtree_optimisation.py b/tests/test_quadtree_optimisation.py index 1b0be9156..934273700 100644 --- a/tests/test_quadtree_optimisation.py +++ b/tests/test_quadtree_optimisation.py @@ -7,14 +7,13 @@ class TestQuadTreeSlicer: def setup_method(self, method): self.options = { "values": { - "transformation": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}} - }, - "date": {"transformation": {"merge": {"with": "time", "linkers": ["T", "00"]}}}, - "step": {"transformation": {"type_change": "int"}}, - "number": {"transformation": {"type_change": "int"}}, - "longitude": {"transformation": {"cyclic": [0, 360]}}, + "mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, + "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, + "step": {"type_change": "int"}, + "number": {"type_change": "int"}, + "longitude": {"cyclic": [0, 360]}, } - self.config = {"class": "ea", "expver": "0001", "levtype": "pl", "step": 0} + self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} self.datacube = FDBDatacube(self.config, axis_options=self.options) def test_quad_tree_slicer(self): diff --git a/tests/test_slice_date_range_fdb.py b/tests/test_slice_date_range_fdb.py index 624a77fe2..fbbdff7f2 100644 --- a/tests/test_slice_date_range_fdb.py +++ b/tests/test_slice_date_range_fdb.py @@ -27,7 +27,6 @@ def setup_method(self, method): def test_fdb_datacube(self): request = Request( Select("step", [0]), - Select("number", [1]), Select("levtype", ["sfc"]), Span("date", pd.Timestamp("20230625T120000"), pd.Timestamp("20230626T120000")), Select("domain", ["g"]), diff --git a/tests/test_slice_date_range_fdb_v2.py b/tests/test_slice_date_range_fdb_v2.py index 24ae1a9a5..ee50e75b6 100644 --- a/tests/test_slice_date_range_fdb_v2.py +++ b/tests/test_slice_date_range_fdb_v2.py @@ -16,7 +16,7 @@ def setup_method(self, method): "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, "step": {"type_change": "int"}, } - self.config = {"class": "ea", "expver": "0001", "levtype": "pl", "step": 0} + self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} self.fdbdatacube = FDBDatacube(self.config, axis_options=self.options) self.slicer = HullSlicer() self.API = Polytope(datacube=self.fdbdatacube, engine=self.slicer, axis_options=self.options) From c2e9df5ec96c8b0489a44b683d309ce5b7f5f12c Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Wed, 10 Jan 2024 11:34:05 +0100 Subject: [PATCH 17/75] add index in quad node --- polytope/datacube/quad_tree.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index d8dec8983..ecd283db6 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -22,9 +22,10 @@ def normalize_rect(rect): class QuadNode: - def __init__(self, item, rect): + def __init__(self, item, rect, index): self.item = item self.rect = rect + self.index = index def is_contained_in(self, polygon): # implement method to check if the node point is inside the polygon @@ -83,41 +84,41 @@ def pprint(self): ) child.pprint() - def insert(self, item, rect): + def insert(self, item, rect, index): rect = normalize_rect(rect) if len(self.children) == 0: - node = QuadNode(item, rect) + node = QuadNode(item, rect, index) self.nodes.append(node) if len(self.nodes) > self.MAX and self.depth < self.MAX_DEPTH: self.split() return node else: - return self.insert_into_children(item, rect) + return self.insert_into_children(item, rect, index) - def insert_into_children(self, item, rect): + def insert_into_children(self, item, rect, index): # if rect spans center then insert here # NOTE: probably do not need this since rect[0] = rect[2] and rect[1] = rect[3] when we work with points only # so these conditions will never be true if (rect[0] <= self.center[0] and rect[2] > self.center[0]) and ( rect[1] <= self.center[1] and rect[3] > self.center[1] ): - node = QuadNode(item, rect) + node = QuadNode(item, rect, index) self.nodes.append(node) return node else: # try to insert into children if rect[0] <= self.center[0]: if rect[1] <= self.center[1]: - return self.children[0].insert(item, rect) + return self.children[0].insert(item, rect, index) if rect[3] > self.center[1]: - return self.children[1].insert(item, rect) + return self.children[1].insert(item, rect, index) if rect[2] > self.center[0]: if rect[1] <= self.center[1]: - return self.children[2].insert(item, rect) + return self.children[2].insert(item, rect, index) if rect[3] > self.center[1]: - return self.children[3].insert(item, rect) + return self.children[3].insert(item, rect, index) def split(self): self.children = [ @@ -150,7 +151,7 @@ def split(self): nodes = self.nodes self.nodes = [] for node in nodes: - self.insert_into_children(node.item, node.rect) + self.insert_into_children(node.item, node.rect, node.index) # def query_polygon(self, polygon, results=None): # # intersect quad tree with a 2D polygon From 97cabacda1188f89869cecb5fb96704d5c244e72 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Wed, 10 Jan 2024 11:48:35 +0100 Subject: [PATCH 18/75] add index in quadtree construction from point cloud --- polytope/datacube/quad_tree.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index ecd283db6..b90a2f0bc 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -60,9 +60,9 @@ def quadrant_rectangle_points(self): (self.center[0] - (self.size[0]), self.center[1] - (self.size[1]))]) def build_point_tree(self, points): - for p in points: + for index, p in enumerate(points): p_rect = (p[0], p[1], p[0], p[1]) - self.insert(p, p_rect) + self.insert(p, p_rect, index) def pprint(self): if self.depth == 0: From 5fedb736f9b1777f70f073c01063260d4ec4cba3 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Wed, 10 Jan 2024 14:13:54 +0100 Subject: [PATCH 19/75] extract in quadtree slicer using point indices instead of lat/lon --- polytope/engine/quadtree_slicer.py | 28 +++++++++++++++++++------- tests/test_quad_tree.py | 16 +++++++-------- tests/test_quadtree_indices.py | 32 ++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 15 deletions(-) create mode 100644 tests/test_quadtree_indices.py diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index c721be2b6..226700e6f 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -1,5 +1,6 @@ from ..datacube.index_tree import IndexTree from ..datacube.quad_tree import QuadTree +from ..datacube.datacube_axis import IntDatacubeAxis from .engine import Engine @@ -24,17 +25,30 @@ def extract(self, datacube, polytopes): # what data format do we return extracted points as? Append those points to the index tree? time0 = time.time() + + # NOTE: for now, we return the indices of the points in the point cloud, instead of lat/lon for point in extracted_points: # append each found leaf to the tree - lat = point.rect[0] - lon = point.rect[1] + idx = point.index + values_axis = IntDatacubeAxis() + values_axis.name = "values" result = point.item # TODO: make finding the axes objects nicer? - lat_axis = datacube.axes[polytope._axes[0]] - lat_child = request.create_child(lat_axis, lat) - lon_axis = datacube.axes[polytope._axes[1]] - lon_child = lat_child.create_child(lon_axis, lon) - lon_child.result = result + child = request.create_child(values_axis, idx) + child.result = result + + # NOTE: code for getting lat/lon instead of point indices + # for point in extracted_points: + # # append each found leaf to the tree + # lat = point.rect[0] + # lon = point.rect[1] + # result = point.item + # # TODO: make finding the axes objects nicer? + # lat_axis = datacube.axes[polytope._axes[0]] + # lat_child = request.create_child(lat_axis, lat) + # lon_axis = datacube.axes[polytope._axes[1]] + # lon_child = lat_child.create_child(lon_axis, lon) + # lon_child.result = result print("time create 2D tree") print(time.time() - time0) return request diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index 10390873d..a924cceea 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -57,25 +57,25 @@ def test_slice_in_two_horizontally(self): assert upper.points == [[2, 2], [0, 2], [0.0, 1.0], [2.0, 1.0]] def test_quad_node_is_contained_in_box(self): - node = QuadNode(1, [1, 1, 1, 1]) + node = QuadNode(1, [1, 1, 1, 1], 0) polytope = Box(["lat", "lon"], [0, 0], [2, 2]).polytope()[0] assert node.is_contained_in(polytope) - second_node = QuadNode(1, [3, 3, 3, 3]) + second_node = QuadNode(1, [3, 3, 3, 3], 0) assert not second_node.is_contained_in(polytope) - third_node = QuadNode(1, [1, 0, 1, 0]) + third_node = QuadNode(1, [1, 0, 1, 0], 0) assert third_node.is_contained_in(polytope) def test_quad_node_is_contained_in_triangle(self): - node = QuadNode(1, [1, 1, 1, 1]) + node = QuadNode(1, [1, 1, 1, 1], 0) polytope = ConvexPolytope(["lat", "lon"], [[0, 0], [1, 1], [2, 0]]) assert node.is_contained_in(polytope) - node = QuadNode(1, [1, 0.5, 1, 0.5]) + node = QuadNode(1, [1, 0.5, 1, 0.5], 0) assert node.is_contained_in(polytope) - second_node = QuadNode(1, [3, 3, 3, 3]) + second_node = QuadNode(1, [3, 3, 3, 3], 0) assert not second_node.is_contained_in(polytope) - third_node = QuadNode(1, [1, 0, 1, 0]) + third_node = QuadNode(1, [1, 0, 1, 0], 0) assert third_node.is_contained_in(polytope) - third_node = QuadNode(1, [0.1, 0.5, 0.1, 0.5]) + third_node = QuadNode(1, [0.1, 0.5, 0.1, 0.5], 0) assert not third_node.is_contained_in(polytope) def test_quad_tree_slicer_extract(self): diff --git a/tests/test_quadtree_indices.py b/tests/test_quadtree_indices.py new file mode 100644 index 000000000..b21871654 --- /dev/null +++ b/tests/test_quadtree_indices.py @@ -0,0 +1,32 @@ +from polytope.datacube.backends.fdb import FDBDatacube +from polytope.engine.quadtree_slicer import QuadTreeSlicer +from polytope.shapes import Box, ConvexPolytope + + +class TestQuadTreeSlicer: + def setup_method(self, method): + self.options = { + "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, + "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, + "step": {"type_change": "int"}, + "number": {"type_change": "int"}, + "longitude": {"cyclic": [0, 360]}, + } + self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} + self.datacube = FDBDatacube(self.config, axis_options=self.options) + + def test_quad_tree_slicer_extract(self): + points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] + slicer = QuadTreeSlicer(points) + polytope = Box(["latitude", "longitude"], [1, 1], [20, 30]).polytope()[0] + tree = slicer.extract(self.datacube, [polytope]) + assert len(tree.leaves) == 3 + assert set([leaf.flatten()["values"] for leaf in tree.leaves]) == set([0, 3, 4]) + tree.pprint() + points = [[10, 10], [80, 10], [-5, 5], [5, 50], [5, 10], [50, 10], [2, 10], [15, 15]] + slicer = QuadTreeSlicer(points) + polytope = ConvexPolytope(["latitude", "longitude"], [[-10, 1], [20, 1], [5, 20]]) + tree = slicer.extract(self.datacube, [polytope]) + assert len(tree.leaves) == 4 + assert set([leaf.flatten()["values"] for leaf in tree.leaves]) == set([0, 2, 4, 6]) + tree.pprint() From 811e5f9735d9b36fda4b32ac225ea494e9816cf6 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Wed, 10 Jan 2024 14:14:42 +0100 Subject: [PATCH 20/75] reformat --- polytope/datacube/quad_tree.py | 13 ++++++++----- polytope/engine/quadtree_slicer.py | 2 +- tests/test_quad_tree.py | 1 + tests/test_quadtree_optimisation.py | 3 +-- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index b90a2f0bc..d9be84860 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -54,10 +54,14 @@ def __init__(self, x=0, y=0, size=[180, 90], depth=0): # self.parent = self def quadrant_rectangle_points(self): - return set([(self.center[0] + (self.size[0]), self.center[1] + (self.size[1])), - (self.center[0] + (self.size[0]), self.center[1] - (self.size[1])), - (self.center[0] - (self.size[0]), self.center[1] + (self.size[1])), - (self.center[0] - (self.size[0]), self.center[1] - (self.size[1]))]) + return set( + [ + (self.center[0] + (self.size[0]), self.center[1] + (self.size[1])), + (self.center[0] + (self.size[0]), self.center[1] - (self.size[1])), + (self.center[0] - (self.size[0]), self.center[1] + (self.size[1])), + (self.center[0] - (self.size[0]), self.center[1] - (self.size[1])), + ] + ) def build_point_tree(self, points): for index, p in enumerate(points): @@ -204,7 +208,6 @@ def query_polygon(self, polygon, results=None): results.add(node) else: if len(self.children) > 0: - # first slice vertically left_polygon, right_polygon = slice_in_two(polygon, self.center[0], 0) diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 226700e6f..404f4258c 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -1,6 +1,6 @@ +from ..datacube.datacube_axis import IntDatacubeAxis from ..datacube.index_tree import IndexTree from ..datacube.quad_tree import QuadTree -from ..datacube.datacube_axis import IntDatacubeAxis from .engine import Engine diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index a924cceea..188ddca01 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -97,6 +97,7 @@ def test_large_scale_extraction(self): import time import numpy as np + x = np.linspace(0, 100, 1000) y = np.linspace(0, 100, 1000) # create the mesh based on these arrays diff --git a/tests/test_quadtree_optimisation.py b/tests/test_quadtree_optimisation.py index 934273700..c237e4d2d 100644 --- a/tests/test_quadtree_optimisation.py +++ b/tests/test_quadtree_optimisation.py @@ -6,8 +6,7 @@ class TestQuadTreeSlicer: def setup_method(self, method): self.options = { - "values": { - "mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, + "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, "step": {"type_change": "int"}, "number": {"type_change": "int"}, From b571028b33e173380955657482d6bb3f04b9670c Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Mon, 15 Jan 2024 14:56:10 +0100 Subject: [PATCH 21/75] start creating a higher-level extract function to allow for different slicing engines on different axes --- polytope/engine/engine.py | 58 +++++++++++++++++++++++++++++++- polytope/engine/hullslicer.py | 21 ++++-------- polytope/polytope.py | 15 +++++++++ polytope/utility/engine_tools.py | 31 +++++++++++++++++ 4 files changed, 109 insertions(+), 16 deletions(-) create mode 100644 polytope/utility/engine_tools.py diff --git a/polytope/engine/engine.py b/polytope/engine/engine.py index 259aaa6de..928ca34e5 100644 --- a/polytope/engine/engine.py +++ b/polytope/engine/engine.py @@ -1,15 +1,71 @@ from typing import List from ..datacube.backends.datacube import Datacube +from ..datacube.datacube_axis import UnsliceableDatacubeAxis from ..datacube.index_tree import IndexTree from ..shapes import ConvexPolytope class Engine: - def __init__(self): + def __init__(self, engine_options=None): + if engine_options is None: + engine_options = {} + self.engine_options = engine_options pass def extract(self, datacube: Datacube, polytopes: List[ConvexPolytope]) -> IndexTree: + # Relegate to the right slicer that the axes within the polytopes need to use + + # NOTE: the quadtree slicer is fixed 2D for now so it can only be used if the two axes used are specified as + # quadtree + + # NOTE: can different hullslicers be used on axes within the same polytope? + + # TODO: how do we pass in the option of which axes are with which slicer? + pass + + def extract_test(self, datacube: Datacube, polytopes: List[ConvexPolytope]) -> IndexTree: + # build final return index tree here + + request = IndexTree() + + combinations = self.find_polytope_combinations(datacube, polytopes) + + for c in combinations: + r = IndexTree() + r["unsliced_polytopes"] = set(c) + current_nodes = [r] + for ax in datacube.axes.values(): + # TODO: is this what we want to do? + # TODO: when do we defer to the different slicer types? + + # TODO: need first to determine here which slicer should be used for this axis. + # TODO: If the slicer is quadtree, need to ensure that the other associated axis is also of type quadtree + # TODO: Here, could also directly check the slicing for unsliceable axes + next_nodes = [] + for node in current_nodes: + self._build_branch(ax, node, datacube, next_nodes) + current_nodes = next_nodes + request.merge(r) + return request + + def check_slicer(self, ax): + # Return the slicer instance if ax is sliceable. + # If the ax is unsliceable, return None. + if isinstance(ax, UnsliceableDatacubeAxis): + return None + slicer_type = self.engine_options[ax.name] + slicer = self.generate_slicer(slicer_type) + return slicer + + def generate_slicer(self, slicer_type): + # TODO: instantiate the slicer (hullslicer or quadtree) instance + pass + + def determine_slicer(self, ax): + pass + + def build_unsliceable_node(self): pass @staticmethod diff --git a/polytope/engine/hullslicer.py b/polytope/engine/hullslicer.py index e6c8e3eb0..072d65200 100644 --- a/polytope/engine/hullslicer.py +++ b/polytope/engine/hullslicer.py @@ -8,7 +8,8 @@ from ..datacube.backends.datacube import Datacube, IndexTree from ..datacube.datacube_axis import UnsliceableDatacubeAxis from ..shapes import ConvexPolytope -from ..utility.combinatorics import argmax, argmin, group, tensor_product, unique +from ..utility.combinatorics import argmax, argmin, group, tensor_product +from ..utility.engine_tools import unique_continuous_points_in_polytope from ..utility.exceptions import UnsliceableShapeError from ..utility.geometry import lerp from .engine import Engine @@ -19,18 +20,6 @@ def __init__(self): self.ax_is_unsliceable = {} self.axis_values_between = {} - def _unique_continuous_points(self, p: ConvexPolytope, datacube: Datacube): - for i, ax in enumerate(p._axes): - mapper = datacube.get_mapper(ax) - if self.ax_is_unsliceable.get(ax, None) is None: - self.ax_is_unsliceable[ax] = isinstance(mapper, UnsliceableDatacubeAxis) - if self.ax_is_unsliceable[ax]: - break - for j, val in enumerate(p.points): - p.points[j][i] = mapper.to_float(mapper.parse(p.points[j][i])) - # Remove duplicate points - unique(p.points) - def _build_unsliceable_child(self, polytope, ax, node, datacube, lower, next_nodes, slice_axis_idx): if not polytope.is_flat: raise UnsliceableShapeError(ax) @@ -86,7 +75,7 @@ def _build_branch(self, ax, node, datacube, next_nodes): # here, first check if the axis is an unsliceable axis and directly build node if it is # NOTE: we should have already created the ax_is_unsliceable cache before - if self.ax_is_unsliceable[ax.name]: + if isinstance(ax, UnsliceableDatacubeAxis): self._build_unsliceable_child(polytope, ax, node, datacube, lower, next_nodes, slice_axis_idx) else: self._build_sliceable_child(polytope, ax, node, datacube, lower, upper, next_nodes, slice_axis_idx) @@ -95,12 +84,13 @@ def _build_branch(self, ax, node, datacube, next_nodes): def extract(self, datacube: Datacube, polytopes: List[ConvexPolytope]): # Convert the polytope points to float type to support triangulation and interpolation for p in polytopes: - self._unique_continuous_points(p, datacube) + unique_continuous_points_in_polytope(p, datacube) groups, input_axes = group(polytopes) datacube.validate(input_axes) request = IndexTree() combinations = tensor_product(groups) + print(combinations) # NOTE: could optimise here if we know combinations will always be for one request. # Then we do not need to create a new index tree and merge it to request, but can just @@ -149,6 +139,7 @@ def _reduce_dimension(intersects, slice_axis_idx): def slice(polytope: ConvexPolytope, axis, value, slice_axis_idx): + # TODO: maybe these functions should go in the slicing tools? if polytope.is_flat: if value in chain(*polytope.points): intersects = [[value]] diff --git a/polytope/polytope.py b/polytope/polytope.py index f6d4a723e..8f87ab2bd 100644 --- a/polytope/polytope.py +++ b/polytope/polytope.py @@ -2,6 +2,7 @@ from .shapes import ConvexPolytope from .utility.exceptions import AxisOverdefinedError +from .utility.engine_tools import find_polytope_combinations class Request: @@ -45,7 +46,21 @@ def __init__(self, datacube, engine=None, axis_options={}): self.engine = engine if engine is not None else Engine.default() def slice(self, polytopes: List[ConvexPolytope]): + # TODO: In this function, create final index tree """Low-level API which takes a polytope geometry object and uses it to slice the datacube""" + + # TODO: find the possible polytope combinations + combinations = find_polytope_combinations(self.datacube, polytopes) + + # TODO: start building tree + + # TODO: iterate over the combinations and then the axes in the datacube + + # TODO: determine the slicer for each axis + + # TODO: build node in tree for the sliced values and update next_nodes + + # TODO: return tree return self.engine.extract(self.datacube, polytopes) def retrieve(self, request: Request, method="standard"): diff --git a/polytope/utility/engine_tools.py b/polytope/utility/engine_tools.py new file mode 100644 index 000000000..757aba0e6 --- /dev/null +++ b/polytope/utility/engine_tools.py @@ -0,0 +1,31 @@ +from typing import List + +from ..datacube.backends.datacube import Datacube +from ..datacube.datacube_axis import UnsliceableDatacubeAxis +from ..datacube.index_tree import IndexTree +from ..shapes import ConvexPolytope +from .combinatorics import group, tensor_product, unique + + +def unique_continuous_points_in_polytope(p: ConvexPolytope, datacube: Datacube): + # TODO: should this be in utility folder since it doesn't really depend on engine...? + for i, ax in enumerate(p._axes): + mapper = datacube.get_mapper(ax) + if isinstance(mapper, UnsliceableDatacubeAxis): + break + for j, val in enumerate(p.points): + p.points[j][i] = mapper.to_float(mapper.parse(p.points[j][i])) + # Remove duplicate points + unique(p.points) + + +def find_polytope_combinations(datacube: Datacube, polytopes: List[ConvexPolytope]) -> IndexTree: + # here, we find the different possible polytope combinations that cover all of the datacube axes + + for p in polytopes: + unique_continuous_points_in_polytope(p, datacube) + + groups, input_axes = group(polytopes) + datacube.validate(input_axes) + combinations = tensor_product(groups) + return combinations From 7ce4957a104bac24df775bf68d5a247ca46fffe6 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Mon, 15 Jan 2024 16:15:57 +0100 Subject: [PATCH 22/75] add higher level extract inside the Polytope class --- polytope/polytope.py | 47 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/polytope/polytope.py b/polytope/polytope.py index 8f87ab2bd..fa094ee3f 100644 --- a/polytope/polytope.py +++ b/polytope/polytope.py @@ -1,8 +1,11 @@ from typing import List +from .datacube.index_tree import IndexTree from .shapes import ConvexPolytope -from .utility.exceptions import AxisOverdefinedError from .utility.engine_tools import find_polytope_combinations +from .utility.exceptions import AxisOverdefinedError +from .engine.quadtree_slicer import QuadTreeSlicer +from .engine.hullslicer import HullSlicer class Request: @@ -38,12 +41,26 @@ def __repr__(self): class Polytope: - def __init__(self, datacube, engine=None, axis_options={}): + def __init__(self, datacube, engine=None, axis_options={}, engine_options={}): from .datacube import Datacube from .engine import Engine self.datacube = Datacube.create(datacube, axis_options) self.engine = engine if engine is not None else Engine.default() + self.engine_options = engine_options + self.engines = self.create_engines() + + def create_engines(self): + engines = {} + engine_types = set(self.engine_options.values()) + if "quadtree" in engine_types: + quadtree_axes = [key for key in self.engine_options.keys() if self.engine_options[key] == "quadtree"] + # TODO: need to get the corresponding point cloud from the datacube + quadtree_points = self.datacube.find_point_cloud() + engines["quadtree"] = QuadTreeSlicer(quadtree_points) + if "hullslicer" in engine_types: + engines["hullslicer"] = HullSlicer() + return engines def slice(self, polytopes: List[ConvexPolytope]): # TODO: In this function, create final index tree @@ -53,15 +70,35 @@ def slice(self, polytopes: List[ConvexPolytope]): combinations = find_polytope_combinations(self.datacube, polytopes) # TODO: start building tree + request = IndexTree() # TODO: iterate over the combinations and then the axes in the datacube + for c in combinations: + r = IndexTree() + r["unsliced_polytopes"] = set(c) + current_nodes = [r] + for ax in self.datacube.axes.values(): + # TODO: determine the slicer for each axis + engine = self.find_engine(ax) - # TODO: determine the slicer for each axis + # TODO: build node in tree for the sliced values and update next_nodes - # TODO: build node in tree for the sliced values and update next_nodes + # TODO: what happens when we have a quadtree engine and we handle two axes at once?? + # Need to build the two axes nodes as just one node within the slicer engine... + + next_nodes = [] + for node in current_nodes: + self._build_branch(ax, node, self.datacube, next_nodes) + current_nodes = next_nodes + request.merge(r) # TODO: return tree - return self.engine.extract(self.datacube, polytopes) + # return self.engine.extract(self.datacube, polytopes) + return request + + def find_engine(self, ax): + slicer_type = self.engine_options[ax.name] + return self.engines[slicer_type] def retrieve(self, request: Request, method="standard"): """Higher-level API which takes a request and uses it to slice the datacube""" From dcc7399564a92e8b719663ab7c11de07b7b3f4d9 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Tue, 16 Jan 2024 10:07:03 +0100 Subject: [PATCH 23/75] make new polytope class extract work with old tests --- polytope/engine/engine.py | 45 ++++++++++++++------------ polytope/engine/quadtree_slicer.py | 34 ++++++++++++++++++++ polytope/polytope.py | 29 +++++++++++++---- polytope/utility/engine_tools.py | 8 ++--- tests/test_polytope_extract.py | 51 ++++++++++++++++++++++++++++++ 5 files changed, 137 insertions(+), 30 deletions(-) create mode 100644 tests/test_polytope_extract.py diff --git a/polytope/engine/engine.py b/polytope/engine/engine.py index 928ca34e5..e75619f66 100644 --- a/polytope/engine/engine.py +++ b/polytope/engine/engine.py @@ -1,3 +1,4 @@ +from abc import abstractmethod from typing import List from ..datacube.backends.datacube import Datacube @@ -24,30 +25,30 @@ def extract(self, datacube: Datacube, polytopes: List[ConvexPolytope]) -> IndexT # TODO: how do we pass in the option of which axes are with which slicer? pass - def extract_test(self, datacube: Datacube, polytopes: List[ConvexPolytope]) -> IndexTree: - # build final return index tree here + # def extract_test(self, datacube: Datacube, polytopes: List[ConvexPolytope]) -> IndexTree: + # # build final return index tree here - request = IndexTree() + # request = IndexTree() - combinations = self.find_polytope_combinations(datacube, polytopes) + # combinations = self.find_polytope_combinations(datacube, polytopes) - for c in combinations: - r = IndexTree() - r["unsliced_polytopes"] = set(c) - current_nodes = [r] - for ax in datacube.axes.values(): - # TODO: is this what we want to do? - # TODO: when do we defer to the different slicer types? + # for c in combinations: + # r = IndexTree() + # r["unsliced_polytopes"] = set(c) + # current_nodes = [r] + # for ax in datacube.axes.values(): + # # TODO: is this what we want to do? + # # TODO: when do we defer to the different slicer types? - # TODO: need first to determine here which slicer should be used for this axis. - # TODO: If the slicer is quadtree, need to ensure that the other associated axis is also of type quadtree - # TODO: Here, could also directly check the slicing for unsliceable axes - next_nodes = [] - for node in current_nodes: - self._build_branch(ax, node, datacube, next_nodes) - current_nodes = next_nodes - request.merge(r) - return request + # # TODO: need first to determine here which slicer should be used for this axis. + # # TODO: If the slicer is quadtree, need to ensure that the other associated axis is also of type quadtree + # # TODO: Here, could also directly check the slicing for unsliceable axes + # next_nodes = [] + # for node in current_nodes: + # self._build_branch(ax, node, datacube, next_nodes) + # current_nodes = next_nodes + # request.merge(r) + # return request def check_slicer(self, ax): # Return the slicer instance if ax is sliceable. @@ -73,3 +74,7 @@ def default(): from .hullslicer import HullSlicer return HullSlicer() + + @abstractmethod + def _build_branch(self, ax, node, datacube, next_nodes): + pass diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 404f4258c..aa7fd5133 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -3,6 +3,8 @@ from ..datacube.quad_tree import QuadTree from .engine import Engine +from copy import copy + class QuadTreeSlicer(Engine): def __init__(self, points): @@ -60,3 +62,35 @@ def extract_single(self, datacube, polytope): # We do this by intersecting the datacube point cloud quad tree with the polytope here polygon_points = self.quad_tree.query_polygon(polytope) return polygon_points + + def _build_branch(self, ax, node, datacube, next_nodes): + for polytope in node["unsliced_polytopes"]: + if ax.name in polytope._axes: + # here, first check if the axis is an unsliceable axis and directly build node if it is + + # NOTE: here, we only have sliceable children, since the unsliceable children are handled by the + # hullslicer engine? IS THIS TRUE? + self._build_sliceable_child(polytope, ax, node, datacube, next_nodes) + # TODO: what does this function actually return and what should it return? + # It just modifies the next_nodes? + del node["unsliced_polytopes"] + + def _build_sliceable_child(self, polytope, ax, node, datacube, next_nodes): + extracted_points = self.extract_single(datacube, polytope) + # TODO: add the sliced points as node to the tree and update the next_nodes + if len(extracted_points) == 0: + node.remove_branch() + + for point in extracted_points: + # convert to float for slicing + value = point.index + values_axis = IntDatacubeAxis() + values_axis.name = "pt_cloud_idx" + + # store the native type + # child = node.create_child(ax, value) + child = node.create_child(values_axis, value) + child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) + child["unsliced_polytopes"].remove(polytope) + next_nodes.append(child) + # TODO: but now what happens to the second axis in the point cloud?? Do we create a second node for it?? diff --git a/polytope/polytope.py b/polytope/polytope.py index fa094ee3f..040abaa3d 100644 --- a/polytope/polytope.py +++ b/polytope/polytope.py @@ -1,11 +1,11 @@ from typing import List from .datacube.index_tree import IndexTree +from .engine.hullslicer import HullSlicer +from .engine.quadtree_slicer import QuadTreeSlicer from .shapes import ConvexPolytope from .utility.engine_tools import find_polytope_combinations from .utility.exceptions import AxisOverdefinedError -from .engine.quadtree_slicer import QuadTreeSlicer -from .engine.hullslicer import HullSlicer class Request: @@ -41,12 +41,20 @@ def __repr__(self): class Polytope: - def __init__(self, datacube, engine=None, axis_options={}, engine_options={}): + def __init__(self, datacube, engine=None, axis_options=None, engine_options=None): from .datacube import Datacube from .engine import Engine + if axis_options is None: + axis_options = {} + if engine_options is None: + engine_options = {} + self.datacube = Datacube.create(datacube, axis_options) self.engine = engine if engine is not None else Engine.default() + if engine_options == {}: + for ax_name in self.datacube._axes.keys(): + engine_options[ax_name] = "hullslicer" self.engine_options = engine_options self.engines = self.create_engines() @@ -56,7 +64,8 @@ def create_engines(self): if "quadtree" in engine_types: quadtree_axes = [key for key in self.engine_options.keys() if self.engine_options[key] == "quadtree"] # TODO: need to get the corresponding point cloud from the datacube - quadtree_points = self.datacube.find_point_cloud() + # quadtree_points = self.datacube.find_point_cloud() + quadtree_points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] engines["quadtree"] = QuadTreeSlicer(quadtree_points) if "hullslicer" in engine_types: engines["hullslicer"] = HullSlicer() @@ -88,7 +97,7 @@ def slice(self, polytopes: List[ConvexPolytope]): next_nodes = [] for node in current_nodes: - self._build_branch(ax, node, self.datacube, next_nodes) + engine._build_branch(ax, node, self.datacube, next_nodes) current_nodes = next_nodes request.merge(r) @@ -100,8 +109,16 @@ def find_engine(self, ax): slicer_type = self.engine_options[ax.name] return self.engines[slicer_type] - def retrieve(self, request: Request, method="standard"): + def old_retrieve(self, request: Request, method="standard"): """Higher-level API which takes a request and uses it to slice the datacube""" request_tree = self.engine.extract(self.datacube, request.polytopes()) self.datacube.get(request_tree) return request_tree + + def retrieve(self, request: Request, method="standard"): + """Higher-level API which takes a request and uses it to slice the datacube""" + # request_tree = self.engine.extract(self.datacube, request.polytopes()) + # self.datacube.get(request_tree) + request_tree = self.slice(request.polytopes()) + self.datacube.get(request_tree) + return request_tree diff --git a/polytope/utility/engine_tools.py b/polytope/utility/engine_tools.py index 757aba0e6..a9ef03fb4 100644 --- a/polytope/utility/engine_tools.py +++ b/polytope/utility/engine_tools.py @@ -25,7 +25,7 @@ def find_polytope_combinations(datacube: Datacube, polytopes: List[ConvexPolytop for p in polytopes: unique_continuous_points_in_polytope(p, datacube) - groups, input_axes = group(polytopes) - datacube.validate(input_axes) - combinations = tensor_product(groups) - return combinations + groups, input_axes = group(polytopes) + datacube.validate(input_axes) + combinations = tensor_product(groups) + return combinations diff --git a/tests/test_polytope_extract.py b/tests/test_polytope_extract.py new file mode 100644 index 000000000..505b6dfc7 --- /dev/null +++ b/tests/test_polytope_extract.py @@ -0,0 +1,51 @@ +from polytope.polytope import Polytope + +import numpy as np +import pandas as pd +import xarray as xr + +from polytope.datacube.backends.xarray import XArrayDatacube +from polytope.datacube.index_tree import IndexTree +from polytope.engine.hullslicer import HullSlicer +from polytope.polytope import Polytope, Request +from polytope.shapes import ( + Box, + ConvexPolytope, + Disk, + PathSegment, + Polygon, + Select, + Span, + Union, +) + + +class TestSlicing3DXarrayDatacube: + def setup_method(self, method): + # Create a dataarray with 3 labelled axes using different index types + array = xr.DataArray( + np.random.randn(6, 129, 100, 100), + dims=("step", "level", "lat", "lon"), + coords={ + "step": [0, 3, 6, 9, 12, 15], + "level": range(1, 130), + "lat": range(0, 100), + 'lon': range(0, 100), + }, + ) + self.xarraydatacube = XArrayDatacube(array) + self.slicer = HullSlicer() + self.engine_options = {"step": "hullslicer", + "level": "hullslicer", + "lat": "quadtree", + "lon": "quadtree"} + self.API = Polytope(datacube=array, engine=self.slicer, engine_options=self.engine_options) + + # Testing different shapes + + def test_2D_box(self): + request = Request(Box(["step", "level"], [3, 10], [6, 11]), Box(["lat", "lon"], [0, 0], [20, 20])) + result = self.API.retrieve(request) + + result.pprint() + assert len(result.leaves) == 4 From be4ebdbcd576eb0555a147d0767f748e9f685047 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Tue, 16 Jan 2024 10:53:02 +0100 Subject: [PATCH 24/75] add find_point_cloud to xarray datacube --- polytope/datacube/backends/datacube.py | 8 +++-- polytope/datacube/backends/fdb.py | 3 ++ polytope/datacube/backends/mock.py | 3 ++ polytope/datacube/backends/xarray.py | 8 ++++- polytope/engine/engine.py | 46 ++++---------------------- polytope/polytope.py | 17 +++------- tests/test_polytope_extract.py | 29 +++++----------- 7 files changed, 38 insertions(+), 76 deletions(-) diff --git a/polytope/datacube/backends/datacube.py b/polytope/datacube/backends/datacube.py index efa20e93d..6b0435ef7 100644 --- a/polytope/datacube/backends/datacube.py +++ b/polytope/datacube/backends/datacube.py @@ -143,11 +143,15 @@ def remap_path(self, path: DatacubePath): return path @staticmethod - def create(datacube, axis_options: dict): + def create(datacube, axis_options: dict, point_cloud_options=None): if isinstance(datacube, (xr.core.dataarray.DataArray, xr.core.dataset.Dataset)): from .xarray import XArrayDatacube - xadatacube = XArrayDatacube(datacube, axis_options=axis_options) + xadatacube = XArrayDatacube(datacube, axis_options=axis_options, point_cloud_options=point_cloud_options) return xadatacube else: return datacube + + @abstractmethod + def find_point_cloud(self): + pass diff --git a/polytope/datacube/backends/fdb.py b/polytope/datacube/backends/fdb.py index cbc76893f..65622042d 100644 --- a/polytope/datacube/backends/fdb.py +++ b/polytope/datacube/backends/fdb.py @@ -158,3 +158,6 @@ def select(self, path, unmapped_path): def ax_vals(self, name): return self.fdb_coordinates.get(name, None) + + def find_point_cloud(self): + pass diff --git a/polytope/datacube/backends/mock.py b/polytope/datacube/backends/mock.py index b6bc32d3e..75841a1bf 100644 --- a/polytope/datacube/backends/mock.py +++ b/polytope/datacube/backends/mock.py @@ -66,3 +66,6 @@ def ax_vals(self, name): def _find_indexes_between(self, axis, indexes, low, up): pass + + def find_point_cloud(self): + pass diff --git a/polytope/datacube/backends/xarray.py b/polytope/datacube/backends/xarray.py index f8ca1c2e2..8b44f4df2 100644 --- a/polytope/datacube/backends/xarray.py +++ b/polytope/datacube/backends/xarray.py @@ -8,7 +8,7 @@ class XArrayDatacube(Datacube): """Xarray arrays are labelled, axes can be defined as strings or integers (e.g. "time" or 0).""" - def __init__(self, dataarray: xr.DataArray, axis_options={}): + def __init__(self, dataarray: xr.DataArray, axis_options={}, point_cloud_options=None): self.axis_options = axis_options self.axis_counter = 0 self._axes = None @@ -17,6 +17,7 @@ def __init__(self, dataarray: xr.DataArray, axis_options={}): self.complete_axes = [] self.blocked_axes = [] self.fake_axes = [] + self.has_point_cloud = point_cloud_options for name, values in dataarray.coords.variables.items(): if name in dataarray.dims: @@ -42,6 +43,11 @@ def __init__(self, dataarray: xr.DataArray, axis_options={}): val = self._axes[name].type self._check_and_add_axes(options, name, val) + def find_point_cloud(self): + # TODO: somehow, find the point cloud of irregular grid if it exists + if self.has_point_cloud: + return self.has_point_cloud + def get(self, requests: IndexTree): for r in requests.leaves: path = r.flatten() diff --git a/polytope/engine/engine.py b/polytope/engine/engine.py index e75619f66..f80968a5d 100644 --- a/polytope/engine/engine.py +++ b/polytope/engine/engine.py @@ -16,40 +16,8 @@ def __init__(self, engine_options=None): def extract(self, datacube: Datacube, polytopes: List[ConvexPolytope]) -> IndexTree: # Relegate to the right slicer that the axes within the polytopes need to use - - # NOTE: the quadtree slicer is fixed 2D for now so it can only be used if the two axes used are specified as - # quadtree - - # NOTE: can different hullslicers be used on axes within the same polytope? - - # TODO: how do we pass in the option of which axes are with which slicer? pass - # def extract_test(self, datacube: Datacube, polytopes: List[ConvexPolytope]) -> IndexTree: - # # build final return index tree here - - # request = IndexTree() - - # combinations = self.find_polytope_combinations(datacube, polytopes) - - # for c in combinations: - # r = IndexTree() - # r["unsliced_polytopes"] = set(c) - # current_nodes = [r] - # for ax in datacube.axes.values(): - # # TODO: is this what we want to do? - # # TODO: when do we defer to the different slicer types? - - # # TODO: need first to determine here which slicer should be used for this axis. - # # TODO: If the slicer is quadtree, need to ensure that the other associated axis is also of type quadtree - # # TODO: Here, could also directly check the slicing for unsliceable axes - # next_nodes = [] - # for node in current_nodes: - # self._build_branch(ax, node, datacube, next_nodes) - # current_nodes = next_nodes - # request.merge(r) - # return request - def check_slicer(self, ax): # Return the slicer instance if ax is sliceable. # If the ax is unsliceable, return None. @@ -59,15 +27,15 @@ def check_slicer(self, ax): slicer = self.generate_slicer(slicer_type) return slicer - def generate_slicer(self, slicer_type): - # TODO: instantiate the slicer (hullslicer or quadtree) instance - pass + # def generate_slicer(self, slicer_type): + # # TODO: instantiate the slicer (hullslicer or quadtree) instance + # pass - def determine_slicer(self, ax): - pass + # def determine_slicer(self, ax): + # pass - def build_unsliceable_node(self): - pass + # def build_unsliceable_node(self): + # pass @staticmethod def default(): diff --git a/polytope/polytope.py b/polytope/polytope.py index 040abaa3d..651516af4 100644 --- a/polytope/polytope.py +++ b/polytope/polytope.py @@ -41,7 +41,7 @@ def __repr__(self): class Polytope: - def __init__(self, datacube, engine=None, axis_options=None, engine_options=None): + def __init__(self, datacube, engine=None, axis_options=None, engine_options=None, point_cloud_options=None): from .datacube import Datacube from .engine import Engine @@ -50,7 +50,7 @@ def __init__(self, datacube, engine=None, axis_options=None, engine_options=None if engine_options is None: engine_options = {} - self.datacube = Datacube.create(datacube, axis_options) + self.datacube = Datacube.create(datacube, axis_options, point_cloud_options) self.engine = engine if engine is not None else Engine.default() if engine_options == {}: for ax_name in self.datacube._axes.keys(): @@ -64,34 +64,27 @@ def create_engines(self): if "quadtree" in engine_types: quadtree_axes = [key for key in self.engine_options.keys() if self.engine_options[key] == "quadtree"] # TODO: need to get the corresponding point cloud from the datacube - # quadtree_points = self.datacube.find_point_cloud() - quadtree_points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] + quadtree_points = self.datacube.find_point_cloud() engines["quadtree"] = QuadTreeSlicer(quadtree_points) if "hullslicer" in engine_types: engines["hullslicer"] = HullSlicer() return engines def slice(self, polytopes: List[ConvexPolytope]): - # TODO: In this function, create final index tree """Low-level API which takes a polytope geometry object and uses it to slice the datacube""" - # TODO: find the possible polytope combinations combinations = find_polytope_combinations(self.datacube, polytopes) - # TODO: start building tree request = IndexTree() - # TODO: iterate over the combinations and then the axes in the datacube for c in combinations: r = IndexTree() r["unsliced_polytopes"] = set(c) current_nodes = [r] for ax in self.datacube.axes.values(): - # TODO: determine the slicer for each axis + # determine the slicer for each axis engine = self.find_engine(ax) - # TODO: build node in tree for the sliced values and update next_nodes - # TODO: what happens when we have a quadtree engine and we handle two axes at once?? # Need to build the two axes nodes as just one node within the slicer engine... @@ -117,8 +110,6 @@ def old_retrieve(self, request: Request, method="standard"): def retrieve(self, request: Request, method="standard"): """Higher-level API which takes a request and uses it to slice the datacube""" - # request_tree = self.engine.extract(self.datacube, request.polytopes()) - # self.datacube.get(request_tree) request_tree = self.slice(request.polytopes()) self.datacube.get(request_tree) return request_tree diff --git a/tests/test_polytope_extract.py b/tests/test_polytope_extract.py index 505b6dfc7..b85e3992a 100644 --- a/tests/test_polytope_extract.py +++ b/tests/test_polytope_extract.py @@ -1,26 +1,13 @@ -from polytope.polytope import Polytope - import numpy as np -import pandas as pd import xarray as xr from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.datacube.index_tree import IndexTree from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request -from polytope.shapes import ( - Box, - ConvexPolytope, - Disk, - PathSegment, - Polygon, - Select, - Span, - Union, -) +from polytope.shapes import Box -class TestSlicing3DXarrayDatacube: +class TestPolytopeExtract: def setup_method(self, method): # Create a dataarray with 3 labelled axes using different index types array = xr.DataArray( @@ -30,16 +17,16 @@ def setup_method(self, method): "step": [0, 3, 6, 9, 12, 15], "level": range(1, 130), "lat": range(0, 100), - 'lon': range(0, 100), + "lon": range(0, 100), }, ) self.xarraydatacube = XArrayDatacube(array) self.slicer = HullSlicer() - self.engine_options = {"step": "hullslicer", - "level": "hullslicer", - "lat": "quadtree", - "lon": "quadtree"} - self.API = Polytope(datacube=array, engine=self.slicer, engine_options=self.engine_options) + self.engine_options = {"step": "hullslicer", "level": "hullslicer", "lat": "quadtree", "lon": "quadtree"} + quadtree_points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] + self.API = Polytope( + datacube=array, engine=self.slicer, engine_options=self.engine_options, point_cloud_options=quadtree_points + ) # Testing different shapes From d33fa746a297bd8ca83e3ca2b262b4f38bc45a62 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Wed, 17 Jan 2024 10:22:20 +0100 Subject: [PATCH 25/75] quadtree slicer create lat/lon in index tree and stashes the point index as result of the branch --- polytope/datacube/backends/xarray.py | 27 ++++++++++++++++++++++++++- polytope/engine/quadtree_slicer.py | 22 ++++++++++++++++------ 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/polytope/datacube/backends/xarray.py b/polytope/datacube/backends/xarray.py index 8b44f4df2..ff4827a07 100644 --- a/polytope/datacube/backends/xarray.py +++ b/polytope/datacube/backends/xarray.py @@ -48,7 +48,7 @@ def find_point_cloud(self): if self.has_point_cloud: return self.has_point_cloud - def get(self, requests: IndexTree): + def old_get(self, requests: IndexTree): for r in requests.leaves: path = r.flatten() if len(path.items()) == self.axis_counter: @@ -67,6 +67,31 @@ def get(self, requests: IndexTree): else: r.remove_branch() + def get(self, requests: IndexTree): + # TODO: change to work with the irregular grid + if self.has_point_cloud: + axis_counter = self.axis_counter - 1 + else: + axis_counter = self.axis_counter + + for r in requests.leaves: + path = r.flatten() + if len(path.items()) == axis_counter: + # first, find the grid mapper transform + unmapped_path = {} + path_copy = deepcopy(path) + for key in path_copy: + axis = self._axes[key] + (path, unmapped_path) = axis.unmap_to_datacube(path, unmapped_path) + path = self.fit_path(path) + subxarray = self.dataarray.sel(path, method="nearest") + subxarray = subxarray.sel(unmapped_path) + value = subxarray.item() + key = subxarray.name + r.result = (key, value) + else: + r.remove_branch() + def datacube_natural_indexes(self, axis, subarray): if axis.name in self.complete_axes: indexes = next(iter(subarray.xindexes.values())).to_pandas_index() diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index aa7fd5133..7134ecef3 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -84,13 +84,23 @@ def _build_sliceable_child(self, polytope, ax, node, datacube, next_nodes): for point in extracted_points: # convert to float for slicing value = point.index - values_axis = IntDatacubeAxis() - values_axis.name = "pt_cloud_idx" + lat_val = point.rect[0] + lon_val = point.rect[1] + # values_axis = IntDatacubeAxis() + lat_ax = ax + + # TODO: is there a nicer way to get this axis that does not depend on knowing + # the axis name in advance? + lon_ax = datacube._axes["longitude"] + # values_axis.name = "pt_cloud_idx" # store the native type # child = node.create_child(ax, value) - child = node.create_child(values_axis, value) - child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) - child["unsliced_polytopes"].remove(polytope) - next_nodes.append(child) + child = node.create_child(lat_ax, lat_val) + grand_child = child.create_child(lon_ax, lon_val) + # NOTE: the index of the point is stashed in the branches' result + grand_child.result = value + grand_child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) + grand_child["unsliced_polytopes"].remove(polytope) + next_nodes.append(grand_child) # TODO: but now what happens to the second axis in the point cloud?? Do we create a second node for it?? From c356e702b7e125c20fa59e2ea197bf3a9e37f75a Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Wed, 17 Jan 2024 16:24:59 +0100 Subject: [PATCH 26/75] add irregular grid mapper support for xarray backend --- polytope/datacube/backends/xarray.py | 17 ++++++++++------- polytope/datacube/datacube_axis.py | 3 ++- polytope/datacube/index_tree.py | 14 ++++++++++++++ .../transformations/datacube_mappers.py | 4 ++-- .../datacube/transformations/mappers/healpix.py | 2 +- .../transformations/mappers/irregular.py | 13 +++++++++++++ .../transformations/mappers/octahedral.py | 2 +- .../transformations/mappers/reduced_ll.py | 2 +- .../datacube/transformations/mappers/regular.py | 2 +- 9 files changed, 45 insertions(+), 14 deletions(-) create mode 100644 polytope/datacube/transformations/mappers/irregular.py diff --git a/polytope/datacube/backends/xarray.py b/polytope/datacube/backends/xarray.py index ff4827a07..4c4424a65 100644 --- a/polytope/datacube/backends/xarray.py +++ b/polytope/datacube/backends/xarray.py @@ -69,20 +69,23 @@ def old_get(self, requests: IndexTree): def get(self, requests: IndexTree): # TODO: change to work with the irregular grid - if self.has_point_cloud: - axis_counter = self.axis_counter - 1 - else: - axis_counter = self.axis_counter + axis_counter = self.axis_counter + 1 + # if self.has_point_cloud: + # axis_counter = self.axis_counter - 1 + # else: + # axis_counter = self.axis_counter for r in requests.leaves: - path = r.flatten() + # path = r.flatten() + path = r.flatten_with_result() if len(path.items()) == axis_counter: # first, find the grid mapper transform unmapped_path = {} path_copy = deepcopy(path) for key in path_copy: - axis = self._axes[key] - (path, unmapped_path) = axis.unmap_to_datacube(path, unmapped_path) + if key != "result": + axis = self._axes[key] + (path, unmapped_path) = axis.unmap_to_datacube(path, unmapped_path) path = self.fit_path(path) subxarray = self.dataarray.sel(path, method="nearest") subxarray = subxarray.sel(unmapped_path) diff --git a/polytope/datacube/datacube_axis.py b/polytope/datacube/datacube_axis.py index 5c78c22f6..0d1538863 100644 --- a/polytope/datacube/datacube_axis.py +++ b/polytope/datacube/datacube_axis.py @@ -234,7 +234,8 @@ def unmap_to_datacube(path, unmapped_path): first_val = path.get(transform._mapped_axes()[0], None) path.pop(transform._mapped_axes()[0], None) if first_val is not None and second_val is not None: - unmapped_idx = transform.unmap(first_val, second_val) + unmapped_idx = path.get("result", None) + unmapped_idx = transform.unmap(first_val, second_val, unmapped_idx) unmapped_path[transform.old_axis] = unmapped_idx return (path, unmapped_path) diff --git a/polytope/datacube/index_tree.py b/polytope/datacube/index_tree.py index 9054cd0c5..214e5521d 100644 --- a/polytope/datacube/index_tree.py +++ b/polytope/datacube/index_tree.py @@ -183,6 +183,20 @@ def flatten(self): ancestors = self.get_ancestors() for ancestor in ancestors: path[ancestor.axis.name] = ancestor.value + # add the result to the path + # NOTE: this is useful for the quadtree engine when we stash the point idx in the result + # if len(ancestors) != 0: + # if ancestors[len(ancestors)-1].result is not None: + # path["result"] = ancestors[len(ancestors)-1].result + return path + + def flatten_with_result(self): + path = DatacubePath() + ancestors = self.get_ancestors() + for ancestor in ancestors: + path[ancestor.axis.name] = ancestor.value + if len(ancestors) != 0: + path["result"] = ancestors[-1].result return path def flatten_with_ancestors(self): diff --git a/polytope/datacube/transformations/datacube_mappers.py b/polytope/datacube/transformations/datacube_mappers.py index 2e94c6494..741b9d59e 100644 --- a/polytope/datacube/transformations/datacube_mappers.py +++ b/polytope/datacube/transformations/datacube_mappers.py @@ -69,8 +69,8 @@ def find_second_idx(self, first_val, second_val): def unmap_first_val_to_start_line_idx(self, first_val): return self._final_transformation.unmap_first_val_to_start_line_idx(first_val) - def unmap(self, first_val, second_val): - return self._final_transformation.unmap(first_val, second_val) + def unmap(self, first_val, second_val, unmapped_idx=None): + return self._final_transformation.unmap(first_val, second_val, unmapped_idx) _type_to_datacube_mapper_lookup = { diff --git a/polytope/datacube/transformations/mappers/healpix.py b/polytope/datacube/transformations/mappers/healpix.py index 627a1be94..30364aae1 100644 --- a/polytope/datacube/transformations/mappers/healpix.py +++ b/polytope/datacube/transformations/mappers/healpix.py @@ -113,7 +113,7 @@ def unmap_first_val_to_start_line_idx(self, first_val): else: return idx - def unmap(self, first_val, second_val): + def unmap(self, first_val, second_val, unmapped_idx=None): tol = 1e-8 first_val = [i for i in self._first_axis_vals if first_val - tol <= i <= first_val + tol][0] first_idx = self._first_axis_vals.index(first_val) diff --git a/polytope/datacube/transformations/mappers/irregular.py b/polytope/datacube/transformations/mappers/irregular.py new file mode 100644 index 000000000..464bc7525 --- /dev/null +++ b/polytope/datacube/transformations/mappers/irregular.py @@ -0,0 +1,13 @@ +from ..datacube_mappers import DatacubeMapper + + +class IrregularGridMapper(DatacubeMapper): + def __init__(self, base_axis, mapped_axes, resolution): + self._mapped_axes = mapped_axes + self._base_axis = base_axis + self._resolution = resolution + + def unmap(self, first_val, second_val, unmapped_idx=None): + # TODO: But to unmap for the irregular grid, need the request tree + # Suppose we get the idx value somehow from the tree, as an idx input + return unmapped_idx diff --git a/polytope/datacube/transformations/mappers/octahedral.py b/polytope/datacube/transformations/mappers/octahedral.py index 1c24703df..c03fd6672 100644 --- a/polytope/datacube/transformations/mappers/octahedral.py +++ b/polytope/datacube/transformations/mappers/octahedral.py @@ -2746,7 +2746,7 @@ def find_second_axis_idx(self, first_val, second_val): second_idx = int(second_val / second_axis_spacing) return (first_idx, second_idx) - def unmap(self, first_val, second_val): + def unmap(self, first_val, second_val, unmapped_idx=None): (first_idx, second_idx) = self.find_second_axis_idx(first_val, second_val) octahedral_index = self.axes_idx_to_octahedral_idx(first_idx, second_idx) return octahedral_index diff --git a/polytope/datacube/transformations/mappers/reduced_ll.py b/polytope/datacube/transformations/mappers/reduced_ll.py index f056b2329..e0946b985 100644 --- a/polytope/datacube/transformations/mappers/reduced_ll.py +++ b/polytope/datacube/transformations/mappers/reduced_ll.py @@ -1494,7 +1494,7 @@ def find_second_idx(self, first_val, second_val): second_idx = bisect.bisect_left(second_axis_vals, second_val - tol) return second_idx - def unmap(self, first_val, second_val): + def unmap(self, first_val, second_val, unmapped_idx=None): tol = 1e-8 first_val = [i for i in self._first_axis_vals if first_val - tol <= i <= first_val + tol][0] first_idx = self._first_axis_vals.index(first_val) diff --git a/polytope/datacube/transformations/mappers/regular.py b/polytope/datacube/transformations/mappers/regular.py index 3b0598a0b..46e09c587 100644 --- a/polytope/datacube/transformations/mappers/regular.py +++ b/polytope/datacube/transformations/mappers/regular.py @@ -46,7 +46,7 @@ def unmap_first_val_to_start_line_idx(self, first_val): first_idx = self._first_axis_vals.index(first_val) return first_idx * 4 * self._resolution - def unmap(self, first_val, second_val): + def unmap(self, first_val, second_val, unmapped_idx=None): tol = 1e-8 first_val = [i for i in self._first_axis_vals if first_val - tol <= i <= first_val + tol][0] first_idx = self._first_axis_vals.index(first_val) From a959b718ca6725244c970c1b3d98fb8ba3322199 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Fri, 19 Jan 2024 11:51:35 +0100 Subject: [PATCH 27/75] make first test with irregular grid for xarray backend work --- polytope/datacube/datacube_axis.py | 1 + polytope/engine/quadtree_slicer.py | 4 ++-- tests/test_polytope_extract.py | 26 +++++++++++++++++++------- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/polytope/datacube/datacube_axis.py b/polytope/datacube/datacube_axis.py index 0d1538863..f87ca1536 100644 --- a/polytope/datacube/datacube_axis.py +++ b/polytope/datacube/datacube_axis.py @@ -251,6 +251,7 @@ def unmap_path_key(key_value_path, leaf_path, unwanted_path): unwanted_path[cls.name] = unwanted_val if cls.name == transform._mapped_axes()[1]: first_val = unwanted_path[transform._mapped_axes()[0]] + # TODO: pass in the unmapped_idx to unmap unmapped_idx = transform.unmap(first_val, value) leaf_path.pop(transform._mapped_axes()[0], None) key_value_path.pop(cls.name) diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 7134ecef3..babe5cfb4 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -1,10 +1,10 @@ +from copy import copy + from ..datacube.datacube_axis import IntDatacubeAxis from ..datacube.index_tree import IndexTree from ..datacube.quad_tree import QuadTree from .engine import Engine -from copy import copy - class QuadTreeSlicer(Engine): def __init__(self, points): diff --git a/tests/test_polytope_extract.py b/tests/test_polytope_extract.py index b85e3992a..943700fc7 100644 --- a/tests/test_polytope_extract.py +++ b/tests/test_polytope_extract.py @@ -12,27 +12,39 @@ def setup_method(self, method): # Create a dataarray with 3 labelled axes using different index types array = xr.DataArray( np.random.randn(6, 129, 100, 100), - dims=("step", "level", "lat", "lon"), + dims=("step", "level", "latitude", "longitude"), coords={ "step": [0, 3, 6, 9, 12, 15], "level": range(1, 130), - "lat": range(0, 100), - "lon": range(0, 100), + "latitude": range(0, 100), + "longitude": range(0, 100), }, ) self.xarraydatacube = XArrayDatacube(array) self.slicer = HullSlicer() - self.engine_options = {"step": "hullslicer", "level": "hullslicer", "lat": "quadtree", "lon": "quadtree"} + self.engine_options = { + "step": "hullslicer", + "level": "hullslicer", + "latitude": "quadtree", + "longitude": "quadtree", + } quadtree_points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] + self.options = { + "values": {"mapper": {"type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]}}, + } self.API = Polytope( - datacube=array, engine=self.slicer, engine_options=self.engine_options, point_cloud_options=quadtree_points + datacube=array, + engine=self.slicer, + axis_options=self.options, + engine_options=self.engine_options, + point_cloud_options=quadtree_points, ) # Testing different shapes def test_2D_box(self): - request = Request(Box(["step", "level"], [3, 10], [6, 11]), Box(["lat", "lon"], [0, 0], [20, 20])) + request = Request(Box(["step", "level"], [3, 10], [6, 11]), Box(["latitude", "longitude"], [0, 0], [20, 20])) result = self.API.retrieve(request) result.pprint() - assert len(result.leaves) == 4 + assert len(result.leaves) == 12 From d0dd2e04f5268b12666a1ef3f419dadaf3170490 Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Mon, 22 Jan 2024 11:53:45 +0100 Subject: [PATCH 28/75] make irregular grid work with fdb backend --- polytope/datacube/backends/fdb.py | 13 ++-- polytope/datacube/datacube_axis.py | 10 ++- .../transformations/datacube_mappers.py | 1 + .../transformations/mappers/irregular.py | 1 + tests/test_polytope_extract.py | 1 + tests/test_polytope_extract_fdb.py | 63 +++++++++++++++++++ 6 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 tests/test_polytope_extract_fdb.py diff --git a/polytope/datacube/backends/fdb.py b/polytope/datacube/backends/fdb.py index 65622042d..86a7d736d 100644 --- a/polytope/datacube/backends/fdb.py +++ b/polytope/datacube/backends/fdb.py @@ -6,7 +6,7 @@ class FDBDatacube(Datacube): - def __init__(self, config={}, axis_options={}): + def __init__(self, config={}, axis_options={}, point_cloud_options=None): self.axis_options = axis_options self.axis_counter = 0 self._axes = None @@ -15,6 +15,7 @@ def __init__(self, config={}, axis_options={}): self.blocked_axes = [] self.fake_axes = [] self.unwanted_path = {} + self.has_point_cloud = point_cloud_options # NOTE: here, will be True/False partial_request = config # Find values in the level 3 FDB datacube @@ -36,6 +37,11 @@ def __init__(self, config={}, axis_options={}): val = self._axes[name].type self._check_and_add_axes(options, name, val) + def find_point_cloud(self): + # TODO: somehow, find the point cloud of irregular grid if it exists + if self.has_point_cloud: + return self.has_point_cloud + def get(self, requests: IndexTree, leaf_path={}): # First when request node is root, go to its children if requests.axis.name == "root": @@ -83,6 +89,7 @@ def get_2nd_last_values(self, requests, leaf_path={}): (range_lengths[i], current_start_idxs[i], fdb_node_ranges[i]) = self.get_last_layer_before_leaf( lat_child, leaf_path, range_length, current_start_idx, fdb_range_nodes ) + leaf_path.pop("result", None) self.give_fdb_val_to_node(leaf_path, range_lengths, current_start_idxs, fdb_node_ranges, lat_length) def get_last_layer_before_leaf(self, requests, leaf_path, range_l, current_idx, fdb_range_n): @@ -90,6 +97,7 @@ def get_last_layer_before_leaf(self, requests, leaf_path, range_l, current_idx, for c in requests.children: # now c are the leaves of the initial tree key_value_path = {c.axis.name: c.value} + leaf_path["result"] = c.result ax = c.axis (key_value_path, leaf_path, self.unwanted_path) = ax.unmap_path_key( key_value_path, leaf_path, self.unwanted_path @@ -158,6 +166,3 @@ def select(self, path, unmapped_path): def ax_vals(self, name): return self.fdb_coordinates.get(name, None) - - def find_point_cloud(self): - pass diff --git a/polytope/datacube/datacube_axis.py b/polytope/datacube/datacube_axis.py index f87ca1536..7a8892f1e 100644 --- a/polytope/datacube/datacube_axis.py +++ b/polytope/datacube/datacube_axis.py @@ -251,8 +251,14 @@ def unmap_path_key(key_value_path, leaf_path, unwanted_path): unwanted_path[cls.name] = unwanted_val if cls.name == transform._mapped_axes()[1]: first_val = unwanted_path[transform._mapped_axes()[0]] - # TODO: pass in the unmapped_idx to unmap - unmapped_idx = transform.unmap(first_val, value) + # TODO: the unmapped idx is stashed in the result of a node, not in the leaf path?? + unmapped_idx = leaf_path.get("result", None) + print("inside unmap path key") + print(unmapped_idx) + print(first_val) + print(value) + unmapped_idx = transform.unmap(first_val, value, unmapped_idx) + print(unmapped_idx) leaf_path.pop(transform._mapped_axes()[0], None) key_value_path.pop(cls.name) key_value_path[transform.old_axis] = unmapped_idx diff --git a/polytope/datacube/transformations/datacube_mappers.py b/polytope/datacube/transformations/datacube_mappers.py index 741b9d59e..12f0e8fe0 100644 --- a/polytope/datacube/transformations/datacube_mappers.py +++ b/polytope/datacube/transformations/datacube_mappers.py @@ -78,4 +78,5 @@ def unmap(self, first_val, second_val, unmapped_idx=None): "healpix": "HealpixGridMapper", "regular": "RegularGridMapper", "reduced_ll": "ReducedLatLonMapper", + "irregular": "IrregularGridMapper", } diff --git a/polytope/datacube/transformations/mappers/irregular.py b/polytope/datacube/transformations/mappers/irregular.py index 464bc7525..f43ec04c1 100644 --- a/polytope/datacube/transformations/mappers/irregular.py +++ b/polytope/datacube/transformations/mappers/irregular.py @@ -6,6 +6,7 @@ def __init__(self, base_axis, mapped_axes, resolution): self._mapped_axes = mapped_axes self._base_axis = base_axis self._resolution = resolution + self._axis_reversed = False def unmap(self, first_val, second_val, unmapped_idx=None): # TODO: But to unmap for the irregular grid, need the request tree diff --git a/tests/test_polytope_extract.py b/tests/test_polytope_extract.py index 943700fc7..c29ac5318 100644 --- a/tests/test_polytope_extract.py +++ b/tests/test_polytope_extract.py @@ -9,6 +9,7 @@ class TestPolytopeExtract: def setup_method(self, method): + # TODO: this doesn't create an irregular grid mapper?? # Create a dataarray with 3 labelled axes using different index types array = xr.DataArray( np.random.randn(6, 129, 100, 100), diff --git a/tests/test_polytope_extract_fdb.py b/tests/test_polytope_extract_fdb.py new file mode 100644 index 000000000..cf9b2f6d2 --- /dev/null +++ b/tests/test_polytope_extract_fdb.py @@ -0,0 +1,63 @@ +import pandas as pd + +from polytope.datacube.backends.fdb import FDBDatacube +from polytope.engine.hullslicer import HullSlicer +from polytope.polytope import Polytope, Request +from polytope.shapes import Box, Select + + +class TestPolytopeExtract: + def setup_method(self, method): + # Create a dataarray with 3 labelled axes using different index types + self.slicer = HullSlicer() + self.engine_options = { + "step": "hullslicer", + "levtype": "hullslicer", + "latitude": "quadtree", + "longitude": "quadtree", + "class": "hullslicer", + "date": "hullslicer", + "type": "hullslicer", + "stream": "hullslicer", + "param": "hullslicer", + "expver": "hullslicer", + "domain": "hullslicer", + } + quadtree_points = [[10, 10], [0.035149384216, 0.0], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] + self.options = { + "values": {"mapper": {"type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]}}, + "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, + "step": {"type_change": "int"}, + "number": {"type_change": "int"}, + } + self.config = {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"} + self.fdbdatacube = FDBDatacube(self.config, axis_options=self.options, point_cloud_options=quadtree_points) + self.API = Polytope( + datacube=self.fdbdatacube, + engine=self.slicer, + axis_options=self.options, + engine_options=self.engine_options, + point_cloud_options=quadtree_points, + ) + + # Testing different shapes + + def test_2D_box(self): + # request = Request(Box(["step", "level"], [3, 10], [6, 11]), Box(["latitude", "longitude"], [0, 0], [20, 20])) + request = Request( + Select("step", [0]), + Select("levtype", ["sfc"]), + Select("date", [pd.Timestamp("20230625T120000")]), + Select("domain", ["g"]), + Select("expver", ["0001"]), + Select("param", ["167"]), + Select("class", ["od"]), + Select("stream", ["oper"]), + Select("type", ["an"]), + # TODO: why if we set the min_longitude= -0.1 does this not give back the points at lon=0? + Box(["latitude", "longitude"], [0, -0.001], [10, 10]), + ) + result = self.API.retrieve(request) + + result.pprint() + assert len(result.leaves) == 3 From 8ba1cbfe82e978783efc21b84bb7db1513f6034f Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Tue, 23 Jan 2024 12:14:21 +0100 Subject: [PATCH 29/75] fix polytope extract test with xarray backend and irregular mapper --- .gitignore | 8 ++- polytope_python.egg-info/PKG-INFO | 13 ++++ polytope_python.egg-info/SOURCES.txt | 72 +++++++++++++++++++ polytope_python.egg-info/dependency_links.txt | 1 + polytope_python.egg-info/not-zip-safe | 1 + polytope_python.egg-info/top_level.txt | 1 + pyproject.toml | 3 +- tests/test_polytope_extract.py | 8 +-- tests/test_polytope_extract_fdb.py | 1 - 9 files changed, 100 insertions(+), 8 deletions(-) create mode 100644 polytope_python.egg-info/PKG-INFO create mode 100644 polytope_python.egg-info/SOURCES.txt create mode 100644 polytope_python.egg-info/dependency_links.txt create mode 100644 polytope_python.egg-info/not-zip-safe create mode 100644 polytope_python.egg-info/top_level.txt diff --git a/.gitignore b/.gitignore index ca7e60eb6..4f38099e1 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,10 @@ polytope.egg-info *.xml site .coverage -*.grib \ No newline at end of file +*.grib +*.gif +*.html +.mypy_cache +example_eo +example_mri +polytope_python.egg_info \ No newline at end of file diff --git a/polytope_python.egg-info/PKG-INFO b/polytope_python.egg-info/PKG-INFO new file mode 100644 index 000000000..f881827af --- /dev/null +++ b/polytope_python.egg-info/PKG-INFO @@ -0,0 +1,13 @@ +Metadata-Version: 2.1 +Name: polytope-python +Version: 1.0.2 +Summary: Polytope datacube feature extraction library +Home-page: https://github.com/ecmwf/polytope +Author: ECMWF +Author-email: James.Hawkes@ecmwf.int, Mathilde.Leuridan@ecmwf.int +License-File: LICENSE + +Polytope is a library for extracting complex data from datacubes. It provides an API for + non-orthogonal access to data, where the stencil used to extract data from the datacube can be + any arbitrary n-dimensional polygon (called a polytope). This can be used to efficiently + extract complex features from a datacube, such as polygon regions or spatio-temporal paths. diff --git a/polytope_python.egg-info/SOURCES.txt b/polytope_python.egg-info/SOURCES.txt new file mode 100644 index 000000000..dd1d2ea31 --- /dev/null +++ b/polytope_python.egg-info/SOURCES.txt @@ -0,0 +1,72 @@ +LICENSE +pyproject.toml +setup.py +polytope/__init__.py +polytope/polytope.py +polytope/shapes.py +polytope/version.py +polytope/datacube/__init__.py +polytope/datacube/datacube_axis.py +polytope/datacube/index_tree.py +polytope/datacube/backends/__init__.py +polytope/datacube/backends/datacube.py +polytope/datacube/backends/fdb.py +polytope/datacube/backends/mock.py +polytope/datacube/backends/xarray.py +polytope/engine/__init__.py +polytope/engine/engine.py +polytope/engine/hullslicer.py +polytope/utility/__init__.py +polytope/utility/combinatorics.py +polytope/utility/exceptions.py +polytope/utility/geometry.py +polytope/utility/list_tools.py +polytope/utility/profiling.py +polytope_python.egg-info/PKG-INFO +polytope_python.egg-info/SOURCES.txt +polytope_python.egg-info/dependency_links.txt +polytope_python.egg-info/not-zip-safe +polytope_python.egg-info/top_level.txt +tests/test_axis_mappers.py +tests/test_combinatorics.py +tests/test_cyclic_axis_over_negative_vals.py +tests/test_cyclic_axis_slicer_not_0.py +tests/test_cyclic_axis_slicing.py +tests/test_cyclic_simple.py +tests/test_cyclic_snapping.py +tests/test_datacube_axes_init.py +tests/test_datacube_mock.py +tests/test_datacube_xarray.py +tests/test_ecmwf_oper_data_fdb.py +tests/test_engine_slicer.py +tests/test_fdb_datacube.py +tests/test_float_type.py +tests/test_healpix_mapper.py +tests/test_hull_slicer.py +tests/test_hullslicer_engine.py +tests/test_incomplete_tree_fdb.py +tests/test_mappers.py +tests/test_merge_cyclic_octahedral.py +tests/test_merge_octahedral_one_axis.py +tests/test_merge_transformation.py +tests/test_octahedral_grid.py +tests/test_point_nearest.py +tests/test_point_shape.py +tests/test_profiling_requesttree.py +tests/test_reduced_ll_grid.py +tests/test_regular_grid.py +tests/test_request_tree.py +tests/test_request_trees_after_slicing.py +tests/test_reverse_transformation.py +tests/test_shapes.py +tests/test_slice_date_range_fdb.py +tests/test_slice_date_range_fdb_v2.py +tests/test_slicer_engine.py +tests/test_slicer_era5.py +tests/test_slicer_xarray.py +tests/test_slicing_unsliceable_axis.py +tests/test_slicing_xarray_3D.py +tests/test_slicing_xarray_4D.py +tests/test_snapping.py +tests/test_snapping_real_data.py +tests/test_type_change_transformation.py \ No newline at end of file diff --git a/polytope_python.egg-info/dependency_links.txt b/polytope_python.egg-info/dependency_links.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/polytope_python.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/polytope_python.egg-info/not-zip-safe b/polytope_python.egg-info/not-zip-safe new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/polytope_python.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/polytope_python.egg-info/top_level.txt b/polytope_python.egg-info/top_level.txt new file mode 100644 index 000000000..687cc9bfb --- /dev/null +++ b/polytope_python.egg-info/top_level.txt @@ -0,0 +1 @@ +polytope diff --git a/pyproject.toml b/pyproject.toml index d9a2e1f4d..50a2dbbcb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,4 +5,5 @@ requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [tool.pytest.ini_options] markers = ["internet: downloads test data from the internet (deselect with '-m \"not internet\"')", - "fdb: test which uses fdb (deselect with '-m \"not fdb\"')",] \ No newline at end of file + "fdb: test which uses fdb (deselect with '-m \"not fdb\"')",] +log_cli_level = "INFO" \ No newline at end of file diff --git a/tests/test_polytope_extract.py b/tests/test_polytope_extract.py index c29ac5318..5aa33230d 100644 --- a/tests/test_polytope_extract.py +++ b/tests/test_polytope_extract.py @@ -9,16 +9,14 @@ class TestPolytopeExtract: def setup_method(self, method): - # TODO: this doesn't create an irregular grid mapper?? # Create a dataarray with 3 labelled axes using different index types array = xr.DataArray( - np.random.randn(6, 129, 100, 100), - dims=("step", "level", "latitude", "longitude"), + np.random.randn(6, 129, 100), + dims=("step", "level", "values"), coords={ "step": [0, 3, 6, 9, 12, 15], "level": range(1, 130), - "latitude": range(0, 100), - "longitude": range(0, 100), + "values": range(0, 100), }, ) self.xarraydatacube = XArrayDatacube(array) diff --git a/tests/test_polytope_extract_fdb.py b/tests/test_polytope_extract_fdb.py index cf9b2f6d2..dca0a48ec 100644 --- a/tests/test_polytope_extract_fdb.py +++ b/tests/test_polytope_extract_fdb.py @@ -43,7 +43,6 @@ def setup_method(self, method): # Testing different shapes def test_2D_box(self): - # request = Request(Box(["step", "level"], [3, 10], [6, 11]), Box(["latitude", "longitude"], [0, 0], [20, 20])) request = Request( Select("step", [0]), Select("levtype", ["sfc"]), From a261ea58f0cdaa2fb2d8d25d0629ad49c886086d Mon Sep 17 00:00:00 2001 From: Mathilde Leuridan Date: Tue, 23 Jan 2024 12:15:48 +0100 Subject: [PATCH 30/75] fix polytope extract test with xarray backend and irregular mapper --- .gitignore | 2 +- polytope_python.egg-info/PKG-INFO | 13 ---- polytope_python.egg-info/SOURCES.txt | 72 ------------------- polytope_python.egg-info/dependency_links.txt | 1 - polytope_python.egg-info/not-zip-safe | 1 - polytope_python.egg-info/top_level.txt | 1 - 6 files changed, 1 insertion(+), 89 deletions(-) delete mode 100644 polytope_python.egg-info/PKG-INFO delete mode 100644 polytope_python.egg-info/SOURCES.txt delete mode 100644 polytope_python.egg-info/dependency_links.txt delete mode 100644 polytope_python.egg-info/not-zip-safe delete mode 100644 polytope_python.egg-info/top_level.txt diff --git a/.gitignore b/.gitignore index 4f38099e1..4e1824739 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,4 @@ site .mypy_cache example_eo example_mri -polytope_python.egg_info \ No newline at end of file +polytope_python.egg-info \ No newline at end of file diff --git a/polytope_python.egg-info/PKG-INFO b/polytope_python.egg-info/PKG-INFO deleted file mode 100644 index f881827af..000000000 --- a/polytope_python.egg-info/PKG-INFO +++ /dev/null @@ -1,13 +0,0 @@ -Metadata-Version: 2.1 -Name: polytope-python -Version: 1.0.2 -Summary: Polytope datacube feature extraction library -Home-page: https://github.com/ecmwf/polytope -Author: ECMWF -Author-email: James.Hawkes@ecmwf.int, Mathilde.Leuridan@ecmwf.int -License-File: LICENSE - -Polytope is a library for extracting complex data from datacubes. It provides an API for - non-orthogonal access to data, where the stencil used to extract data from the datacube can be - any arbitrary n-dimensional polygon (called a polytope). This can be used to efficiently - extract complex features from a datacube, such as polygon regions or spatio-temporal paths. diff --git a/polytope_python.egg-info/SOURCES.txt b/polytope_python.egg-info/SOURCES.txt deleted file mode 100644 index dd1d2ea31..000000000 --- a/polytope_python.egg-info/SOURCES.txt +++ /dev/null @@ -1,72 +0,0 @@ -LICENSE -pyproject.toml -setup.py -polytope/__init__.py -polytope/polytope.py -polytope/shapes.py -polytope/version.py -polytope/datacube/__init__.py -polytope/datacube/datacube_axis.py -polytope/datacube/index_tree.py -polytope/datacube/backends/__init__.py -polytope/datacube/backends/datacube.py -polytope/datacube/backends/fdb.py -polytope/datacube/backends/mock.py -polytope/datacube/backends/xarray.py -polytope/engine/__init__.py -polytope/engine/engine.py -polytope/engine/hullslicer.py -polytope/utility/__init__.py -polytope/utility/combinatorics.py -polytope/utility/exceptions.py -polytope/utility/geometry.py -polytope/utility/list_tools.py -polytope/utility/profiling.py -polytope_python.egg-info/PKG-INFO -polytope_python.egg-info/SOURCES.txt -polytope_python.egg-info/dependency_links.txt -polytope_python.egg-info/not-zip-safe -polytope_python.egg-info/top_level.txt -tests/test_axis_mappers.py -tests/test_combinatorics.py -tests/test_cyclic_axis_over_negative_vals.py -tests/test_cyclic_axis_slicer_not_0.py -tests/test_cyclic_axis_slicing.py -tests/test_cyclic_simple.py -tests/test_cyclic_snapping.py -tests/test_datacube_axes_init.py -tests/test_datacube_mock.py -tests/test_datacube_xarray.py -tests/test_ecmwf_oper_data_fdb.py -tests/test_engine_slicer.py -tests/test_fdb_datacube.py -tests/test_float_type.py -tests/test_healpix_mapper.py -tests/test_hull_slicer.py -tests/test_hullslicer_engine.py -tests/test_incomplete_tree_fdb.py -tests/test_mappers.py -tests/test_merge_cyclic_octahedral.py -tests/test_merge_octahedral_one_axis.py -tests/test_merge_transformation.py -tests/test_octahedral_grid.py -tests/test_point_nearest.py -tests/test_point_shape.py -tests/test_profiling_requesttree.py -tests/test_reduced_ll_grid.py -tests/test_regular_grid.py -tests/test_request_tree.py -tests/test_request_trees_after_slicing.py -tests/test_reverse_transformation.py -tests/test_shapes.py -tests/test_slice_date_range_fdb.py -tests/test_slice_date_range_fdb_v2.py -tests/test_slicer_engine.py -tests/test_slicer_era5.py -tests/test_slicer_xarray.py -tests/test_slicing_unsliceable_axis.py -tests/test_slicing_xarray_3D.py -tests/test_slicing_xarray_4D.py -tests/test_snapping.py -tests/test_snapping_real_data.py -tests/test_type_change_transformation.py \ No newline at end of file diff --git a/polytope_python.egg-info/dependency_links.txt b/polytope_python.egg-info/dependency_links.txt deleted file mode 100644 index 8b1378917..000000000 --- a/polytope_python.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/polytope_python.egg-info/not-zip-safe b/polytope_python.egg-info/not-zip-safe deleted file mode 100644 index 8b1378917..000000000 --- a/polytope_python.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/polytope_python.egg-info/top_level.txt b/polytope_python.egg-info/top_level.txt deleted file mode 100644 index 687cc9bfb..000000000 --- a/polytope_python.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -polytope From be3e74be895d2d07028aee747b56e5719a61d01a Mon Sep 17 00:00:00 2001 From: mathleur Date: Thu, 22 Feb 2024 15:19:01 +0100 Subject: [PATCH 31/75] fix edge case --- polytope/datacube/index_tree.py | 7 ++++++ polytope/datacube/quad_tree.py | 35 +++++++++++++++++++++++------- polytope/engine/quadtree_slicer.py | 2 ++ tests/test_quadtree_edge_cases.py | 25 +++++++++++++++++++++ 4 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 tests/test_quadtree_edge_cases.py diff --git a/polytope/datacube/index_tree.py b/polytope/datacube/index_tree.py index 0091d9a0c..fc391aa89 100644 --- a/polytope/datacube/index_tree.py +++ b/polytope/datacube/index_tree.py @@ -176,6 +176,13 @@ def pprint(self, level=0): if len(self.children) == 0: logging.debug("\t" * (level + 1) + "\u21b3" + str(self.result)) + def pprint_2(self, level=0): + if self.axis.name == "root": + print("\n") + print("\t" * level + "\u21b3" + str(self)) + for child in self.children: + child.pprint_2(level + 1) + def remove_branch(self): if not self.is_root(): old_parent = self._parent diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index d9be84860..1f23dd2d3 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -93,7 +93,8 @@ def insert(self, item, rect, index): if len(self.children) == 0: node = QuadNode(item, rect, index) - self.nodes.append(node) + if item not in [node.item for node in self.nodes]: + self.nodes.append(node) if len(self.nodes) > self.MAX and self.depth < self.MAX_DEPTH: self.split() @@ -112,17 +113,28 @@ def insert_into_children(self, item, rect, index): self.nodes.append(node) return node else: + return_nodes = [] # try to insert into children if rect[0] <= self.center[0]: if rect[1] <= self.center[1]: - return self.children[0].insert(item, rect, index) - if rect[3] > self.center[1]: - return self.children[1].insert(item, rect, index) - if rect[2] > self.center[0]: + # return self.children[0].insert(item, rect, index) + self.children[0].insert(item, rect, index) + # new_nodes = self.children[0].insert(item, rect, index) + # return_nodes.extend(new_nodes) + if rect[3] >= self.center[1]: + # return self.children[1].insert(item, rect, index) + self.children[1].insert(item, rect, index) + # new_nodes = self.children[1].insert(item, rect, index) + # return_nodes.extend(new_nodes) + if rect[2] >= self.center[0]: if rect[1] <= self.center[1]: - return self.children[2].insert(item, rect, index) - if rect[3] > self.center[1]: - return self.children[3].insert(item, rect, index) + # return self.children[2].insert(item, rect, index) + self.children[2].insert(item, rect, index) + # new_nodes = self.children[2].insert(item, rect, index) + # return_nodes.extend(new_nodes) + if rect[3] >= self.center[1]: + self.children[3].insert(item, rect, index) + return return_nodes def split(self): self.children = [ @@ -155,6 +167,8 @@ def split(self): nodes = self.nodes self.nodes = [] for node in nodes: + print(node.item) + print("were here?") self.insert_into_children(node.item, node.rect, node.index) # def query_polygon(self, polygon, results=None): @@ -210,6 +224,11 @@ def query_polygon(self, polygon, results=None): if len(self.children) > 0: # first slice vertically left_polygon, right_polygon = slice_in_two(polygon, self.center[0], 0) + # print("the slice lines in query polygons are") + # print("lat") + # print(self.center[0]) + # print("lon") + # print(self.center[1]) # then slice horizontally # ie need to slice the left and right polygons each in two to have the 4 quadrant polygons diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index babe5cfb4..719c65d48 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -60,6 +60,8 @@ def extract_single(self, datacube, polytope): # need to find points of the datacube contained within the polytope # We do this by intersecting the datacube point cloud quad tree with the polytope here + print("THE QUADTREE IS") + self.quad_tree.pprint() polygon_points = self.quad_tree.query_polygon(polytope) return polygon_points diff --git a/tests/test_quadtree_edge_cases.py b/tests/test_quadtree_edge_cases.py new file mode 100644 index 000000000..a679f14d1 --- /dev/null +++ b/tests/test_quadtree_edge_cases.py @@ -0,0 +1,25 @@ +from polytope.datacube.backends.fdb import FDBDatacube +from polytope.engine.quadtree_slicer import QuadTreeSlicer +from polytope.shapes import Box, ConvexPolytope + + +class TestQuadTreeSlicer: + def setup_method(self, method): + self.options = { + "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, + "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, + "step": {"type_change": "int"}, + "number": {"type_change": "int"}, + "longitude": {"cyclic": [0, 360]}, + } + self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} + self.datacube = FDBDatacube(self.config, axis_options=self.options) + + def test_quad_tree_slicer_extract(self): + points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10], [0.035149384216, 0.0]] + slicer = QuadTreeSlicer(points) + polytope = Box(["latitude", "longitude"], [0, 0], [15, 15]).polytope()[0] + tree = slicer.extract(self.datacube, [polytope]) + tree.pprint_2() + assert len(tree.leaves) == 3 + assert set([leaf.flatten()["values"] for leaf in tree.leaves]) == set([0, 4, 6]) From e4334c97d05d7ebdda177e5ca59e2aa9691ebbc3 Mon Sep 17 00:00:00 2001 From: mathleur Date: Thu, 22 Feb 2024 15:24:49 +0100 Subject: [PATCH 32/75] fix edge cases tests --- tests/test_polytope_extract_fdb.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/test_polytope_extract_fdb.py b/tests/test_polytope_extract_fdb.py index dca0a48ec..4ed2ef315 100644 --- a/tests/test_polytope_extract_fdb.py +++ b/tests/test_polytope_extract_fdb.py @@ -53,10 +53,14 @@ def test_2D_box(self): Select("class", ["od"]), Select("stream", ["oper"]), Select("type", ["an"]), - # TODO: why if we set the min_longitude= -0.1 does this not give back the points at lon=0? - Box(["latitude", "longitude"], [0, -0.001], [10, 10]), + Box(["latitude", "longitude"], [0, -0.1], [10, 10]), ) result = self.API.retrieve(request) - result.pprint() assert len(result.leaves) == 3 + assert result.leaves[0].flatten()["longitude"] == 0 + assert result.leaves[0].flatten()["latitude"] == 0.035149384216 + assert result.leaves[1].flatten()["longitude"] == 10 + assert result.leaves[1].flatten()["latitude"] == 5 + assert result.leaves[2].flatten()["longitude"] == 10 + assert result.leaves[2].flatten()["latitude"] == 10 From 10886c77dcc93e0c860b5eb99d8ac619137b6e65 Mon Sep 17 00:00:00 2001 From: mathleur Date: Fri, 23 Feb 2024 10:23:06 +0100 Subject: [PATCH 33/75] clean up --- polytope/datacube/backends/datacube.py | 7 +++---- polytope/datacube/backends/xarray.py | 5 ----- polytope/datacube/quad_tree.py | 7 ------- .../datacube_mappers/mapper_axis_decorator.py | 4 ---- polytope/engine/hullslicer.py | 5 ----- polytope/engine/quadtree_slicer.py | 7 ------- polytope/polytope.py | 14 ++++++++++---- tests/test_quadtree_edge_cases.py | 2 +- 8 files changed, 14 insertions(+), 37 deletions(-) diff --git a/polytope/datacube/backends/datacube.py b/polytope/datacube/backends/datacube.py index 5b841150e..edc445927 100644 --- a/polytope/datacube/backends/datacube.py +++ b/polytope/datacube/backends/datacube.py @@ -94,7 +94,6 @@ def get_indices(self, path: DatacubePath, axis, lower, upper, method=None): If lower and upper are equal, returns the index which exactly matches that value (if it exists) e.g. returns integer discrete points between two floats """ - print(path) path = self.fit_path(path) indexes = axis.find_indexes(path, self) search_ranges = axis.remap([lower, upper]) @@ -104,8 +103,6 @@ def get_indices(self, path: DatacubePath, axis, lower, upper, method=None): for r in original_search_ranges: offset = axis.offset(r) search_ranges_offset.append(offset) - print("niside get indices in datacube") - print(path) idx_between = self._look_up_datacube(search_ranges, search_ranges_offset, indexes, axis, method) # Remove duplicates even if difference of the order of the axis tolerance if offset is not None: @@ -156,7 +153,9 @@ def create(datacube, axis_options: dict, datacube_options={}, point_cloud_option if isinstance(datacube, (xr.core.dataarray.DataArray, xr.core.dataset.Dataset)): from .xarray import XArrayDatacube - xadatacube = XArrayDatacube(datacube, axis_options, datacube_options, point_cloud_options=point_cloud_options) + xadatacube = XArrayDatacube( + datacube, axis_options, datacube_options, point_cloud_options=point_cloud_options + ) return xadatacube else: return datacube diff --git a/polytope/datacube/backends/xarray.py b/polytope/datacube/backends/xarray.py index f49d02c9b..239c21bac 100644 --- a/polytope/datacube/backends/xarray.py +++ b/polytope/datacube/backends/xarray.py @@ -89,17 +89,12 @@ def get(self, requests: IndexTree): # first, find the grid mapper transform unmapped_path = {} path_copy = deepcopy(path) - print("LOOK AT PATH COPY NOW") - print(path_copy) for key in path_copy: if key != "result": axis = self._axes[key] (path, unmapped_path) = axis.unmap_to_datacube(path, unmapped_path) path = self.fit_path(path) subxarray = self.dataarray.sel(path, method="nearest") - print("INSIDE OF GET") - print(unmapped_path) - print(path) subxarray = subxarray.sel(unmapped_path) value = subxarray.item() key = subxarray.name diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index 1f23dd2d3..faed9d86f 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -167,8 +167,6 @@ def split(self): nodes = self.nodes self.nodes = [] for node in nodes: - print(node.item) - print("were here?") self.insert_into_children(node.item, node.rect, node.index) # def query_polygon(self, polygon, results=None): @@ -224,11 +222,6 @@ def query_polygon(self, polygon, results=None): if len(self.children) > 0: # first slice vertically left_polygon, right_polygon = slice_in_two(polygon, self.center[0], 0) - # print("the slice lines in query polygons are") - # print("lat") - # print(self.center[0]) - # print("lon") - # print(self.center[1]) # then slice horizontally # ie need to slice the left and right polygons each in two to have the 4 quadrant polygons diff --git a/polytope/datacube/transformations/datacube_mappers/mapper_axis_decorator.py b/polytope/datacube/transformations/datacube_mappers/mapper_axis_decorator.py index bbf72b2f6..5920c6485 100644 --- a/polytope/datacube/transformations/datacube_mappers/mapper_axis_decorator.py +++ b/polytope/datacube/transformations/datacube_mappers/mapper_axis_decorator.py @@ -31,8 +31,6 @@ def unmap_to_datacube(path, unmapped_path): if cls.name not in unmapped_path: # if for some reason, the unmapped_path already has the first axis val, then don't update unmapped_path[cls.name] = first_val - print("INSIDE MAPPER") - print(unmapped_path) if cls.name == transform._mapped_axes()[1]: # if we are on the second axis, then the val of the first axis is stored # inside unmapped_path so can get it from there @@ -48,8 +46,6 @@ def unmap_to_datacube(path, unmapped_path): unmapped_idx = path.get("result", None) unmapped_idx = transform.unmap(first_val, second_val, unmapped_idx) unmapped_path[transform.old_axis] = unmapped_idx - print(transform) - print(unmapped_path) return (path, unmapped_path) old_unmap_path_key = cls.unmap_path_key diff --git a/polytope/engine/hullslicer.py b/polytope/engine/hullslicer.py index 868745882..8e7174591 100644 --- a/polytope/engine/hullslicer.py +++ b/polytope/engine/hullslicer.py @@ -53,8 +53,6 @@ def _build_sliceable_child(self, polytope, ax, node, datacube, lower, upper, nex lower = ax.from_float(lower - tol) upper = ax.from_float(upper + tol) flattened = node.flatten() - print("here in build sliceable child") - print(flattened) method = polytope.method if method == "nearest": datacube.nearest_search[ax.name] = polytope.points @@ -170,9 +168,6 @@ def extract(self, datacube: Datacube, polytopes: List[ConvexPolytope]): # logging.info(f"Copying children for number {n.value}") n.copy_children_from_other(cached_node) - # logging.info("=== AFTER COPYING ===") - # request.pprint() - request.merge(r) return request diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 719c65d48..6dcbf612c 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -16,8 +16,6 @@ def __init__(self, points): # method to slice polygon against quadtree def extract(self, datacube, polytopes): - import time - # need to find the points to extract within the polytopes (polygons here in 2D) request = IndexTree() extracted_points = [] @@ -26,7 +24,6 @@ def extract(self, datacube, polytopes): extracted_points.extend(self.extract_single(datacube, polytope)) # what data format do we return extracted points as? Append those points to the index tree? - time0 = time.time() # NOTE: for now, we return the indices of the points in the point cloud, instead of lat/lon for point in extracted_points: @@ -51,8 +48,6 @@ def extract(self, datacube, polytopes): # lon_axis = datacube.axes[polytope._axes[1]] # lon_child = lat_child.create_child(lon_axis, lon) # lon_child.result = result - print("time create 2D tree") - print(time.time() - time0) return request def extract_single(self, datacube, polytope): @@ -60,8 +55,6 @@ def extract_single(self, datacube, polytope): # need to find points of the datacube contained within the polytope # We do this by intersecting the datacube point cloud quad tree with the polytope here - print("THE QUADTREE IS") - self.quad_tree.pprint() polygon_points = self.quad_tree.query_polygon(polytope) return polygon_points diff --git a/polytope/polytope.py b/polytope/polytope.py index f8ffecd65..218507926 100644 --- a/polytope/polytope.py +++ b/polytope/polytope.py @@ -41,7 +41,15 @@ def __repr__(self): class Polytope: - def __init__(self, datacube, engine=None, axis_options=None, datacube_options=None, engine_options=None, point_cloud_options=None): + def __init__( + self, + datacube, + engine=None, + axis_options=None, + datacube_options=None, + engine_options=None, + point_cloud_options=None, + ): from .datacube import Datacube from .engine import Engine @@ -64,7 +72,7 @@ def create_engines(self): engines = {} engine_types = set(self.engine_options.values()) if "quadtree" in engine_types: - quadtree_axes = [key for key in self.engine_options.keys() if self.engine_options[key] == "quadtree"] + # quadtree_axes = [key for key in self.engine_options.keys() if self.engine_options[key] == "quadtree"] # TODO: need to get the corresponding point cloud from the datacube quadtree_points = self.datacube.find_point_cloud() engines["quadtree"] = QuadTreeSlicer(quadtree_points) @@ -113,7 +121,5 @@ def old_retrieve(self, request: Request, method="standard"): def retrieve(self, request: Request, method="standard"): """Higher-level API which takes a request and uses it to slice the datacube""" request_tree = self.slice(request.polytopes()) - # print("LOOK NOW AT WHOLE TREE") - # request_tree.pprint_2() self.datacube.get(request_tree) return request_tree diff --git a/tests/test_quadtree_edge_cases.py b/tests/test_quadtree_edge_cases.py index a679f14d1..9daa2a69b 100644 --- a/tests/test_quadtree_edge_cases.py +++ b/tests/test_quadtree_edge_cases.py @@ -1,6 +1,6 @@ from polytope.datacube.backends.fdb import FDBDatacube from polytope.engine.quadtree_slicer import QuadTreeSlicer -from polytope.shapes import Box, ConvexPolytope +from polytope.shapes import Box class TestQuadTreeSlicer: From b0c20bd45e1640dac5e8919e575c61d7e9e131f6 Mon Sep 17 00:00:00 2001 From: mathleur Date: Fri, 23 Feb 2024 10:27:27 +0100 Subject: [PATCH 34/75] fix flake8 --- polytope/datacube/index_tree.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/polytope/datacube/index_tree.py b/polytope/datacube/index_tree.py index a3a8796fd..37d033b82 100644 --- a/polytope/datacube/index_tree.py +++ b/polytope/datacube/index_tree.py @@ -54,13 +54,6 @@ def copy_children_from_other(self, other): c.copy_children_from_other(o) return - def pprint_2(self, level=0): - if self.axis.name == "root": - print("\n") - print("\t" * level + "\u21b3" + str(self)) - for child in self.children: - child.pprint_2(level + 1) - def _collect_leaf_nodes_old(self, leaves): if len(self.children) == 0: leaves.append(self) From 4d495030f73d0d4e1fc0d9019d5f9683e18c217c Mon Sep 17 00:00:00 2001 From: mathleur Date: Fri, 23 Feb 2024 11:28:47 +0100 Subject: [PATCH 35/75] mark tests using gribjump --- tests/test_polytope_extract_fdb.py | 3 ++- tests/test_quadtree_edge_cases.py | 3 +++ tests/test_quadtree_indices.py | 3 +++ tests/test_quadtree_optimisation.py | 4 ++++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/tests/test_polytope_extract_fdb.py b/tests/test_polytope_extract_fdb.py index 4ed2ef315..0a93cb34d 100644 --- a/tests/test_polytope_extract_fdb.py +++ b/tests/test_polytope_extract_fdb.py @@ -1,4 +1,5 @@ import pandas as pd +import pytest from polytope.datacube.backends.fdb import FDBDatacube from polytope.engine.hullslicer import HullSlicer @@ -41,7 +42,7 @@ def setup_method(self, method): ) # Testing different shapes - + @pytest.mark.fdb def test_2D_box(self): request = Request( Select("step", [0]), diff --git a/tests/test_quadtree_edge_cases.py b/tests/test_quadtree_edge_cases.py index 9daa2a69b..1dd08560e 100644 --- a/tests/test_quadtree_edge_cases.py +++ b/tests/test_quadtree_edge_cases.py @@ -1,3 +1,5 @@ +import pytest + from polytope.datacube.backends.fdb import FDBDatacube from polytope.engine.quadtree_slicer import QuadTreeSlicer from polytope.shapes import Box @@ -15,6 +17,7 @@ def setup_method(self, method): self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} self.datacube = FDBDatacube(self.config, axis_options=self.options) + @pytest.mark.fdb def test_quad_tree_slicer_extract(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10], [0.035149384216, 0.0]] slicer = QuadTreeSlicer(points) diff --git a/tests/test_quadtree_indices.py b/tests/test_quadtree_indices.py index b21871654..ab2a9493d 100644 --- a/tests/test_quadtree_indices.py +++ b/tests/test_quadtree_indices.py @@ -1,3 +1,5 @@ +import pytest + from polytope.datacube.backends.fdb import FDBDatacube from polytope.engine.quadtree_slicer import QuadTreeSlicer from polytope.shapes import Box, ConvexPolytope @@ -15,6 +17,7 @@ def setup_method(self, method): self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} self.datacube = FDBDatacube(self.config, axis_options=self.options) + @pytest.mark.fdb def test_quad_tree_slicer_extract(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] slicer = QuadTreeSlicer(points) diff --git a/tests/test_quadtree_optimisation.py b/tests/test_quadtree_optimisation.py index c237e4d2d..4dd618d72 100644 --- a/tests/test_quadtree_optimisation.py +++ b/tests/test_quadtree_optimisation.py @@ -1,3 +1,5 @@ +import pytest + from polytope.datacube.backends.fdb import FDBDatacube from polytope.engine.quadtree_slicer import QuadTreeSlicer from polytope.shapes import Box @@ -15,12 +17,14 @@ def setup_method(self, method): self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} self.datacube = FDBDatacube(self.config, axis_options=self.options) + @pytest.mark.fdb def test_quad_tree_slicer(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] slicer = QuadTreeSlicer(points) slicer.quad_tree.pprint() pass + @pytest.mark.fdb def test_quad_tree_query_polygon(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] slicer = QuadTreeSlicer(points) From ccd4498bc1d01f8bbc5f3a53f3a77ab98f2fc325 Mon Sep 17 00:00:00 2001 From: mathleur Date: Fri, 23 Feb 2024 11:37:00 +0100 Subject: [PATCH 36/75] fix missing gribjump tests --- tests/test_polytope_extract_fdb.py | 3 ++- tests/test_quad_tree.py | 4 +++- tests/test_quadtree_edge_cases.py | 3 ++- tests/test_quadtree_indices.py | 3 ++- tests/test_quadtree_optimisation.py | 3 ++- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/tests/test_polytope_extract_fdb.py b/tests/test_polytope_extract_fdb.py index 0a93cb34d..72656723e 100644 --- a/tests/test_polytope_extract_fdb.py +++ b/tests/test_polytope_extract_fdb.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope.datacube.backends.fdb import FDBDatacube from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -9,6 +8,8 @@ class TestPolytopeExtract: def setup_method(self, method): + from polytope.datacube.backends.fdb import FDBDatacube + # Create a dataarray with 3 labelled axes using different index types self.slicer = HullSlicer() self.engine_options = { diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index 188ddca01..71d0a7255 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -1,6 +1,5 @@ import pytest -from polytope.datacube.backends.fdb import FDBDatacube from polytope.datacube.quad_tree import QuadNode from polytope.engine.quadtree_slicer import QuadTreeSlicer from polytope.engine.slicing_tools import slice_in_two @@ -9,6 +8,8 @@ class TestQuadTreeSlicer: def setup_method(self, method): + from polytope.datacube.backends.fdb import FDBDatacube + self.options = { "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, @@ -78,6 +79,7 @@ def test_quad_node_is_contained_in_triangle(self): third_node = QuadNode(1, [0.1, 0.5, 0.1, 0.5], 0) assert not third_node.is_contained_in(polytope) + @pytest.mark.fdb def test_quad_tree_slicer_extract(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] slicer = QuadTreeSlicer(points) diff --git a/tests/test_quadtree_edge_cases.py b/tests/test_quadtree_edge_cases.py index 1dd08560e..179b83b1a 100644 --- a/tests/test_quadtree_edge_cases.py +++ b/tests/test_quadtree_edge_cases.py @@ -1,12 +1,13 @@ import pytest -from polytope.datacube.backends.fdb import FDBDatacube from polytope.engine.quadtree_slicer import QuadTreeSlicer from polytope.shapes import Box class TestQuadTreeSlicer: def setup_method(self, method): + from polytope.datacube.backends.fdb import FDBDatacube + self.options = { "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, diff --git a/tests/test_quadtree_indices.py b/tests/test_quadtree_indices.py index ab2a9493d..c4af1c9df 100644 --- a/tests/test_quadtree_indices.py +++ b/tests/test_quadtree_indices.py @@ -1,12 +1,13 @@ import pytest -from polytope.datacube.backends.fdb import FDBDatacube from polytope.engine.quadtree_slicer import QuadTreeSlicer from polytope.shapes import Box, ConvexPolytope class TestQuadTreeSlicer: def setup_method(self, method): + from polytope.datacube.backends.fdb import FDBDatacube + self.options = { "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, diff --git a/tests/test_quadtree_optimisation.py b/tests/test_quadtree_optimisation.py index 4dd618d72..446dd7041 100644 --- a/tests/test_quadtree_optimisation.py +++ b/tests/test_quadtree_optimisation.py @@ -1,12 +1,13 @@ import pytest -from polytope.datacube.backends.fdb import FDBDatacube from polytope.engine.quadtree_slicer import QuadTreeSlicer from polytope.shapes import Box class TestQuadTreeSlicer: def setup_method(self, method): + from polytope.datacube.backends.fdb import FDBDatacube + self.options = { "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, From 04a8a74acb036dd50df8af2ba93fa40f69839c06 Mon Sep 17 00:00:00 2001 From: mathleur Date: Fri, 23 Feb 2024 11:41:13 +0100 Subject: [PATCH 37/75] fix missing gribjump tests --- tests/test_quad_tree.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index 71d0a7255..532690cae 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -20,12 +20,14 @@ def setup_method(self, method): self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} self.datacube = FDBDatacube(self.config, axis_options=self.options) + @pytest.mark.fdb def test_quad_tree_slicer(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] slicer = QuadTreeSlicer(points) slicer.quad_tree.pprint() pass + @pytest.mark.fdb def test_quad_tree_query_polygon(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] slicer = QuadTreeSlicer(points) @@ -45,18 +47,21 @@ def test_quad_tree_query_polygon(self): assert (10, 10, 10, 10) in [node.rect for node in results] assert (2, 10, 2, 10) in [node.rect for node in results] + @pytest.mark.fdb def test_slice_in_two_vertically(self): polytope = Box(["lat", "lon"], [0, 0], [2, 2]).polytope()[0] lower, upper = slice_in_two(polytope, 1, 0) assert lower.points == [[0, 0], [1.0, 0.0], [1.0, 2.0], [0, 2]] assert upper.points == [[1.0, 0.0], [2, 0], [2, 2], [1.0, 2.0]] + @pytest.mark.fdb def test_slice_in_two_horizontally(self): polytope = Box(["lat", "lon"], [0, 0], [2, 2]).polytope()[0] lower, upper = slice_in_two(polytope, 1, 1) assert lower.points == [[0, 0], [2, 0], [2.0, 1.0], [0.0, 1.0]] assert upper.points == [[2, 2], [0, 2], [0.0, 1.0], [2.0, 1.0]] + @pytest.mark.fdb def test_quad_node_is_contained_in_box(self): node = QuadNode(1, [1, 1, 1, 1], 0) polytope = Box(["lat", "lon"], [0, 0], [2, 2]).polytope()[0] @@ -66,6 +71,7 @@ def test_quad_node_is_contained_in_box(self): third_node = QuadNode(1, [1, 0, 1, 0], 0) assert third_node.is_contained_in(polytope) + @pytest.mark.fdb def test_quad_node_is_contained_in_triangle(self): node = QuadNode(1, [1, 1, 1, 1], 0) polytope = ConvexPolytope(["lat", "lon"], [[0, 0], [1, 1], [2, 0]]) @@ -95,6 +101,7 @@ def test_quad_tree_slicer_extract(self): tree.pprint() @pytest.mark.skip("performance test") + @pytest.mark.fdb def test_large_scale_extraction(self): import time From 9fb93c94652b74b37239f6dc06e4924d5462a1b9 Mon Sep 17 00:00:00 2001 From: mathleur Date: Fri, 15 Mar 2024 15:12:37 +0100 Subject: [PATCH 38/75] remove unnecessary file --- polytope/datacube/backends/quad_test.py | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 polytope/datacube/backends/quad_test.py diff --git a/polytope/datacube/backends/quad_test.py b/polytope/datacube/backends/quad_test.py deleted file mode 100644 index 521887ebd..000000000 --- a/polytope/datacube/backends/quad_test.py +++ /dev/null @@ -1,13 +0,0 @@ -# TODO: create quadtree from a set of 2D points with each leaf containing exactly one data point -from .datacube import Datacube - - -class IrregularGridDatacube(Datacube): - def __init__(self, points, config={}, axis_options={}): - self.points = points - - def lat_points(self): - return [p[0] for p in self.points] - - def lon_points(self): - return [p[1] for p in self.points] From d2010871a29de3f0fedb51ac11ba1fb13dabaae6 Mon Sep 17 00:00:00 2001 From: mathleur Date: Wed, 20 Mar 2024 11:06:40 +0100 Subject: [PATCH 39/75] add ORCA grid example --- polytope/engine/engine.py | 2 +- polytope/engine/quadtree_slicer.py | 4 +- polytope/polytope.py | 2 + tests/test_orca_irregular_grid.py | 95 ++++++++++++++++++++++++++++++ 4 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 tests/test_orca_irregular_grid.py diff --git a/polytope/engine/engine.py b/polytope/engine/engine.py index f80968a5d..4fc5bc8c8 100644 --- a/polytope/engine/engine.py +++ b/polytope/engine/engine.py @@ -15,7 +15,7 @@ def __init__(self, engine_options=None): pass def extract(self, datacube: Datacube, polytopes: List[ConvexPolytope]) -> IndexTree: - # Relegate to the right slicer that the axes within the polytopes need to use + # Delegate to the right slicer that the axes within the polytopes need to use pass def check_slicer(self, ax): diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 6dcbf612c..679bc6f28 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -97,5 +97,7 @@ def _build_sliceable_child(self, polytope, ax, node, datacube, next_nodes): grand_child.result = value grand_child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) grand_child["unsliced_polytopes"].remove(polytope) - next_nodes.append(grand_child) + # child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) + # child["unsliced_polytopes"].remove(polytope) + # next_nodes.append(grand_child) # TODO: but now what happens to the second axis in the point cloud?? Do we create a second node for it?? diff --git a/polytope/polytope.py b/polytope/polytope.py index 218507926..3be5c91c9 100644 --- a/polytope/polytope.py +++ b/polytope/polytope.py @@ -100,12 +100,14 @@ def slice(self, polytopes: List[ConvexPolytope]): next_nodes = [] for node in current_nodes: + print(node) engine._build_branch(ax, node, self.datacube, next_nodes) current_nodes = next_nodes request.merge(r) # TODO: return tree # return self.engine.extract(self.datacube, polytopes) + request.pprint() return request def find_engine(self, ax): diff --git a/tests/test_orca_irregular_grid.py b/tests/test_orca_irregular_grid.py new file mode 100644 index 000000000..503daa540 --- /dev/null +++ b/tests/test_orca_irregular_grid.py @@ -0,0 +1,95 @@ +import pandas as pd +import pytest +import numpy as np + +from polytope.engine.hullslicer import HullSlicer +from polytope.polytope import Polytope, Request +from polytope.shapes import Box, Select +import xarray as xr +import geopandas as gpd +import matplotlib.pyplot as plt + +from helper_functions import download_test_data, find_nearest_latlon + + +class TestQuadTreeSlicer: + def setup_method(self, method): + from polytope.datacube.backends.fdb import FDBDatacube + + self.slicer = HullSlicer() + self.engine_options = { + "step": "hullslicer", + "time": "hullslicer", + "latitude": "quadtree", + "longitude": "quadtree", + "oceanModelLayer": "hullslicer", + "valid_time": "hullslicer", + } + arr = xr.open_dataset("../../Downloads/Reference_eORCA12_U_to_HEALPix_32.grib", engine='cfgrib').avg_uo + self.latitudes = arr.latitude.values + self.longitudes = arr.longitude.values + self.points = list(zip(self.latitudes, self.longitudes)) + self.options = { + "values": {"mapper": {"type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]}}, + # "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, + # "step": {"type_change": "int"}, + # "number": {"type_change": "int"}, + } + # self.config = {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"} + # self.fdbdatacube = FDBDatacube(self.config, axis_options=self.options, point_cloud_options=self.points) + self.API = Polytope( + datacube=arr, + engine=self.slicer, + axis_options=self.options, + engine_options=self.engine_options, + point_cloud_options=self.points, + ) + + @pytest.mark.fdb + def test_quad_tree_slicer_extract(self): + request = Request( + Select("step", [np.timedelta64(0, "ns")]), + Select("oceanModelLayer", [65.0]), + Select("time", [pd.Timestamp("2017-09-06T00:00:00.000000000")]), + Select("valid_time", [pd.Timestamp("2017-09-06T00:00:00.000000000")]), + Box(["latitude", "longitude"], [65, 270], [75, 300]), + ) + import time + time0 = time.time() + result = self.API.retrieve(request) + time1 = time.time() + print("TIME TAKEN TO EXTRACT") + print(time1 - time0) + result.pprint() + + lats = [] + lons = [] + eccodes_lats = [] + eccodes_lons = [] + tol = 1e-8 + for i in range(len(result.leaves)): + cubepath = result.leaves[i].flatten() + lat = cubepath["latitude"] + lon = cubepath["longitude"] - 360 + lats.append(lat) + lons.append(lon) + nearest_points = find_nearest_latlon("../../Downloads/Reference_eORCA12_U_to_HEALPix_32.grib", lat, lon) + eccodes_lat = nearest_points[0][0]["lat"] + eccodes_lon = nearest_points[0][0]["lon"] - 360 + eccodes_lats.append(eccodes_lat) + eccodes_lons.append(eccodes_lon) + assert eccodes_lat - tol <= lat + assert lat <= eccodes_lat + tol + assert eccodes_lon - tol <= lon + assert lon <= eccodes_lon + tol + + worldmap = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")) + fig, ax = plt.subplots(figsize=(12, 6)) + worldmap.plot(color="darkgrey", ax=ax) + + plt.scatter(lons, lats, s=18, c="red", cmap="YlOrRd") + plt.scatter(eccodes_lons, eccodes_lats, s=6, c="green") + plt.colorbar(label="Temperature") + plt.show() + + From 12b0eba190bdc39c50c95a694f5277e74145d912 Mon Sep 17 00:00:00 2001 From: mathleur Date: Wed, 20 Mar 2024 15:03:52 +0100 Subject: [PATCH 40/75] black and isort --- polytope/datacube/backends/xarray.py | 1 - tests/test_orca_irregular_grid.py | 17 +++++++---------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/polytope/datacube/backends/xarray.py b/polytope/datacube/backends/xarray.py index b3457c355..a50ed4f9e 100644 --- a/polytope/datacube/backends/xarray.py +++ b/polytope/datacube/backends/xarray.py @@ -12,7 +12,6 @@ class XArrayDatacube(Datacube): def __init__(self, dataarray: xr.DataArray, axis_options=None, datacube_options=None, point_cloud_options=None): super().__init__(axis_options, datacube_options) self.dataarray = dataarray - treated_axes = [] self.has_point_cloud = point_cloud_options for name, values in dataarray.coords.variables.items(): diff --git a/tests/test_orca_irregular_grid.py b/tests/test_orca_irregular_grid.py index 558adafcc..bf40e84e9 100644 --- a/tests/test_orca_irregular_grid.py +++ b/tests/test_orca_irregular_grid.py @@ -1,20 +1,18 @@ +# import geopandas as gpd +# import matplotlib.pyplot as plt +import numpy as np import pandas as pd import pytest -import numpy as np +import xarray as xr +from helper_functions import find_nearest_latlon from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select -import xarray as xr -import geopandas as gpd -import matplotlib.pyplot as plt - -from helper_functions import download_test_data, find_nearest_latlon class TestQuadTreeSlicer: def setup_method(self, method): - from polytope.datacube.backends.fdb import FDBDatacube self.slicer = HullSlicer() self.engine_options = { @@ -25,7 +23,7 @@ def setup_method(self, method): "oceanModelLayer": "hullslicer", "valid_time": "hullslicer", } - arr = xr.open_dataset("../../Downloads/Reference_eORCA12_U_to_HEALPix_32.grib", engine='cfgrib').avg_uo + arr = xr.open_dataset("../../Downloads/Reference_eORCA12_U_to_HEALPix_32.grib", engine="cfgrib").avg_uo self.latitudes = arr.latitude.values self.longitudes = arr.longitude.values self.points = list(zip(self.latitudes, self.longitudes)) @@ -52,6 +50,7 @@ def test_quad_tree_slicer_extract(self): Box(["latitude", "longitude"], [65, 270], [75, 300]), ) import time + time0 = time.time() result = self.API.retrieve(request) time1 = time.time() @@ -88,5 +87,3 @@ def test_quad_tree_slicer_extract(self): # plt.scatter(eccodes_lons, eccodes_lats, s=6, c="green") # plt.colorbar(label="Temperature") # plt.show() - - From 85e17415a76c1f11e8a8496b442b27e642ea20c4 Mon Sep 17 00:00:00 2001 From: mathleur Date: Thu, 21 Mar 2024 13:45:24 +0100 Subject: [PATCH 41/75] timings for irregular grid --- tests/test_orca_irregular_grid.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_orca_irregular_grid.py b/tests/test_orca_irregular_grid.py index bf40e84e9..f8c62dbbc 100644 --- a/tests/test_orca_irregular_grid.py +++ b/tests/test_orca_irregular_grid.py @@ -30,6 +30,7 @@ def setup_method(self, method): self.options = { "values": {"mapper": {"type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]}}, } + print(arr) # self.config = {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"} # self.fdbdatacube = FDBDatacube(self.config, axis_options=self.options, point_cloud_options=self.points) self.API = Polytope( @@ -56,6 +57,7 @@ def test_quad_tree_slicer_extract(self): time1 = time.time() print("TIME TAKEN TO EXTRACT") print(time1 - time0) + print(len(result.leaves)) result.pprint() lats = [] From 29a4c7e3f3b65e8c1fa216f40f77f8d2e8d2f593 Mon Sep 17 00:00:00 2001 From: mathleur Date: Mon, 15 Jul 2024 16:50:14 +0200 Subject: [PATCH 42/75] update gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b389b608f..a58f69902 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,5 @@ polytope_python.egg-info new_test_venv_polytope new_venv_polytope polytope_venv -polytope_venv_latest \ No newline at end of file +polytope_venv_latest +newest-polytope-venv \ No newline at end of file From ff33e311bcdfe2ee1d684735ab92b6200b2be422 Mon Sep 17 00:00:00 2001 From: mathleur Date: Tue, 16 Jul 2024 16:29:43 +0200 Subject: [PATCH 43/75] fix non-irregular grid tests --- polytope/datacube/backends/datacube.py | 2 + polytope/datacube/backends/fdb.py | 2 +- polytope/datacube/backends/mock.py | 10 +- polytope/engine/engine.py | 20 ++- polytope/engine/hullslicer.py | 158 +++++++++++----------- polytope/engine/quadtree_slicer.py | 4 +- polytope/polytope.py | 120 ++++++++++++---- polytope/utility/engine_tools.py | 4 +- tests/test_engine_slicer.py | 42 ++++-- tests/test_hullslicer_engine.py | 4 +- tests/test_request_trees_after_slicing.py | 21 ++- tests/test_slicer_engine.py | 4 +- 12 files changed, 260 insertions(+), 131 deletions(-) diff --git a/polytope/datacube/backends/datacube.py b/polytope/datacube/backends/datacube.py index 6aa4cbce1..392e8d6cf 100644 --- a/polytope/datacube/backends/datacube.py +++ b/polytope/datacube/backends/datacube.py @@ -169,6 +169,8 @@ def create( datacube, request, config, axis_options, compressed_axes_options, alternative_axes ) return fdbdatacube + else: + return datacube @abstractmethod def find_point_cloud(self): diff --git a/polytope/datacube/backends/fdb.py b/polytope/datacube/backends/fdb.py index 6d08fe7ed..47abf1c74 100644 --- a/polytope/datacube/backends/fdb.py +++ b/polytope/datacube/backends/fdb.py @@ -249,7 +249,7 @@ def get_last_layer_before_leaf(self, requests, leaf_path, range_l, current_idx, for c in requests.children: fdb_range_n_i = fdb_range_n[i] # now c are the leaves of the initial tree - key_value_path = {c.axis.name: c.value} + key_value_path = {c.axis.name: c.values} leaf_path["result"] = c.result ax = c.axis (key_value_path, leaf_path, self.unwanted_path) = ax.unmap_path_key( diff --git a/polytope/datacube/backends/mock.py b/polytope/datacube/backends/mock.py index 2fbb27406..e60e4f6fb 100644 --- a/polytope/datacube/backends/mock.py +++ b/polytope/datacube/backends/mock.py @@ -13,10 +13,10 @@ def __init__(self, dimensions, compressed_axes_options=[]): self.dimensions = dimensions - self.mappers = {} + self._axes = {} for name in self.dimensions: - self.mappers[name] = deepcopy(IntDatacubeAxis()) - self.mappers[name].name = name + self._axes[name] = deepcopy(IntDatacubeAxis()) + self._axes[name].name = name self.stride = {} stride_cumulative = 1 @@ -40,7 +40,7 @@ def get(self, requests: TensorIndexTree): r.remove_branch() def get_mapper(self, axis): - return self.mappers[axis] + return self._axes[axis] def get_indices(self, path: DatacubePath, axis, lower, upper, method=None): if lower == upper == math.ceil(lower): @@ -57,7 +57,7 @@ def has_index(self, path: DatacubePath, axis, index): @property def axes(self): - return self.mappers + return self._axes def validate(self, axes): return validate_axes(self.axes, axes) diff --git a/polytope/engine/engine.py b/polytope/engine/engine.py index 3401396dc..18eb86696 100644 --- a/polytope/engine/engine.py +++ b/polytope/engine/engine.py @@ -5,6 +5,7 @@ from ..datacube.datacube_axis import UnsliceableDatacubeAxis from ..datacube.tensor_index_tree import TensorIndexTree from ..shapes import ConvexPolytope +from ..utility.combinatorics import unique class Engine: @@ -12,7 +13,24 @@ def __init__(self, engine_options=None): if engine_options is None: engine_options = {} self.engine_options = engine_options - pass + + # self.ax_is_unsliceable = {} + self.axis_values_between = {} + self.sliced_polytopes = {} + self.remapped_vals = {} + self.compressed_axes = [] + + # def _unique_continuous_points(self, p: ConvexPolytope, datacube: Datacube): + # for i, ax in enumerate(p._axes): + # mapper = datacube.get_mapper(ax) + # if self.ax_is_unsliceable.get(ax, None) is None: + # self.ax_is_unsliceable[ax] = isinstance(mapper, UnsliceableDatacubeAxis) + # if self.ax_is_unsliceable[ax]: + # break + # for j, val in enumerate(p.points): + # p.points[j][i] = mapper.to_float(mapper.parse(p.points[j][i])) + # # Remove duplicate points + # unique(p.points) def extract(self, datacube: Datacube, polytopes: List[ConvexPolytope]) -> TensorIndexTree: # Delegate to the right slicer that the axes within the polytopes need to use diff --git a/polytope/engine/hullslicer.py b/polytope/engine/hullslicer.py index 196ce5d0a..be7ccf521 100644 --- a/polytope/engine/hullslicer.py +++ b/polytope/engine/hullslicer.py @@ -9,7 +9,7 @@ from ..datacube.datacube_axis import UnsliceableDatacubeAxis from ..datacube.tensor_index_tree import TensorIndexTree from ..shapes import ConvexPolytope -from ..utility.combinatorics import argmax, argmin, group, tensor_product +from ..utility.combinatorics import argmax, argmin, group, tensor_product, unique from ..utility.engine_tools import unique_continuous_points_in_polytope from ..utility.exceptions import UnsliceableShapeError from ..utility.geometry import lerp @@ -17,24 +17,26 @@ class HullSlicer(Engine): + def __init__(self): - self.ax_is_unsliceable = {} - self.axis_values_between = {} - self.sliced_polytopes = {} - self.remapped_vals = {} - self.compressed_axes = [] - - def _unique_continuous_points(self, p: ConvexPolytope, datacube: Datacube): - for i, ax in enumerate(p._axes): - mapper = datacube.get_mapper(ax) - if self.ax_is_unsliceable.get(ax, None) is None: - self.ax_is_unsliceable[ax] = isinstance(mapper, UnsliceableDatacubeAxis) - if self.ax_is_unsliceable[ax]: - break - for j, val in enumerate(p.points): - p.points[j][i] = mapper.to_float(mapper.parse(p.points[j][i])) - # Remove duplicate points - unique(p.points) + super().__init__() + # self.ax_is_unsliceable = {} + # self.axis_values_between = {} + # self.sliced_polytopes = {} + # self.remapped_vals = {} + # self.compressed_axes = [] + + # def _unique_continuous_points(self, p: ConvexPolytope, datacube: Datacube): + # for i, ax in enumerate(p._axes): + # mapper = datacube.get_mapper(ax) + # if self.ax_is_unsliceable.get(ax, None) is None: + # self.ax_is_unsliceable[ax] = isinstance(mapper, UnsliceableDatacubeAxis) + # if self.ax_is_unsliceable[ax]: + # break + # for j, val in enumerate(p.points): + # p.points[j][i] = mapper.to_float(mapper.parse(p.points[j][i])) + # # Remove duplicate points + # unique(p.points) def _build_unsliceable_child(self, polytope, ax, node, datacube, lowers, next_nodes, slice_axis_idx): if not polytope.is_flat: @@ -108,7 +110,7 @@ def remap_values(self, ax, value): self.remapped_vals[(value, ax.name)] = remapped_val return remapped_val - def _build_sliceable_child(self, polytope, ax, node, datacube, values, next_nodes, slice_axis_idx): + def _build_sliceable_child(self, polytope, ax, node, datacube, values, next_nodes, slice_axis_idx, engine): if len(values) == 0: node.remove_branch() @@ -124,7 +126,7 @@ def _build_sliceable_child(self, polytope, ax, node, datacube, values, next_node child["unsliced_polytopes"].add(new_polytope) next_nodes.append(child) else: - if ax.name not in self.compressed_axes: + if ax.name not in engine.compressed_axes: fvalue = ax.to_float(value) new_polytope = slice(polytope, ax.name, fvalue, slice_axis_idx) remapped_val = self.remap_values(ax, value) @@ -138,18 +140,18 @@ def _build_sliceable_child(self, polytope, ax, node, datacube, values, next_node remapped_val = self.remap_values(ax, value) child.add_value(remapped_val) - def _build_branch(self, ax, node, datacube, next_nodes): - if ax.name not in self.compressed_axes: + def _build_branch(self, ax, node, datacube, next_nodes, engine): + if ax.name not in engine.compressed_axes: for polytope in node["unsliced_polytopes"]: if ax.name in polytope._axes: lower, upper, slice_axis_idx = polytope.extents(ax.name) # here, first check if the axis is an unsliceable axis and directly build node if it is # NOTE: we should have already created the ax_is_unsliceable cache before - if self.ax_is_unsliceable[ax.name]: + if engine.ax_is_unsliceable[ax.name]: self._build_unsliceable_child(polytope, ax, node, datacube, [lower], next_nodes, slice_axis_idx) else: values = self.find_values_between(polytope, ax, node, datacube, lower, upper) - self._build_sliceable_child(polytope, ax, node, datacube, values, next_nodes, slice_axis_idx) + self._build_sliceable_child(polytope, ax, node, datacube, values, next_nodes, slice_axis_idx, engine) else: all_values = [] all_lowers = [] @@ -163,73 +165,73 @@ def _build_branch(self, ax, node, datacube, next_nodes): lower, upper, slice_axis_idx = polytope.extents(ax.name) if not first_slice_axis_idx: first_slice_axis_idx = slice_axis_idx - if self.ax_is_unsliceable[ax.name]: + if engine.ax_is_unsliceable[ax.name]: all_lowers.append(lower) else: values = self.find_values_between(polytope, ax, node, datacube, lower, upper) all_values.extend(values) - if self.ax_is_unsliceable[ax.name]: + if engine.ax_is_unsliceable[ax.name]: self._build_unsliceable_child( first_polytope, ax, node, datacube, all_lowers, next_nodes, first_slice_axis_idx ) else: self._build_sliceable_child( - first_polytope, ax, node, datacube, all_values, next_nodes, first_slice_axis_idx + first_polytope, ax, node, datacube, all_values, next_nodes, first_slice_axis_idx, engine ) del node["unsliced_polytopes"] - def find_compressed_axes(self, datacube, polytopes): - # First determine compressable axes from input polytopes - compressable_axes = [] - for polytope in polytopes: - if polytope.is_orthogonal: - for ax in polytope.axes(): - compressable_axes.append(ax) - # Cross check this list with list of compressable axis from datacube - # (should not include any merged or coupled axes) - for compressed_axis in compressable_axes: - if compressed_axis in datacube.compressed_axes: - self.compressed_axes.append(compressed_axis) - - def extract(self, datacube: Datacube, polytopes: List[ConvexPolytope]): - # Determine list of axes to compress - self.find_compressed_axes(datacube, polytopes) - - # Convert the polytope points to float type to support triangulation and interpolation - for p in polytopes: - unique_continuous_points_in_polytope(p, datacube) - - groups, input_axes = group(polytopes) - datacube.validate(input_axes) - request = TensorIndexTree() - combinations = tensor_product(groups) - - # NOTE: could optimise here if we know combinations will always be for one request. - # Then we do not need to create a new index tree and merge it to request, but can just - # directly work on request and return it... - - for c in combinations: - r = TensorIndexTree() - new_c = [] - for combi in c: - if isinstance(combi, list): - new_c.extend(combi) - else: - new_c.append(combi) - r["unsliced_polytopes"] = set(new_c) - current_nodes = [r] - for ax in datacube.axes.values(): - next_nodes = [] - interm_next_nodes = [] - for node in current_nodes: - self._build_branch(ax, node, datacube, interm_next_nodes) - next_nodes.extend(interm_next_nodes) - interm_next_nodes = [] - current_nodes = next_nodes - - request.merge(r) - return request + # def find_compressed_axes(self, datacube, polytopes): + # # First determine compressable axes from input polytopes + # compressable_axes = [] + # for polytope in polytopes: + # if polytope.is_orthogonal: + # for ax in polytope.axes(): + # compressable_axes.append(ax) + # # Cross check this list with list of compressable axis from datacube + # # (should not include any merged or coupled axes) + # for compressed_axis in compressable_axes: + # if compressed_axis in datacube.compressed_axes: + # self.compressed_axes.append(compressed_axis) + + # def extract(self, datacube: Datacube, polytopes: List[ConvexPolytope]): + # # Determine list of axes to compress + # self.find_compressed_axes(datacube, polytopes) + + # # Convert the polytope points to float type to support triangulation and interpolation + # for p in polytopes: + # unique_continuous_points_in_polytope(p, datacube) + + # groups, input_axes = group(polytopes) + # datacube.validate(input_axes) + # request = TensorIndexTree() + # combinations = tensor_product(groups) + + # # NOTE: could optimise here if we know combinations will always be for one request. + # # Then we do not need to create a new index tree and merge it to request, but can just + # # directly work on request and return it... + + # for c in combinations: + # r = TensorIndexTree() + # new_c = [] + # for combi in c: + # if isinstance(combi, list): + # new_c.extend(combi) + # else: + # new_c.append(combi) + # r["unsliced_polytopes"] = set(new_c) + # current_nodes = [r] + # for ax in datacube.axes.values(): + # next_nodes = [] + # interm_next_nodes = [] + # for node in current_nodes: + # self._build_branch(ax, node, datacube, interm_next_nodes) + # next_nodes.extend(interm_next_nodes) + # interm_next_nodes = [] + # current_nodes = next_nodes + + # request.merge(r) + # return request def _find_intersects(polytope, slice_axis_idx, value): diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 679bc6f28..ba9839760 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -1,8 +1,8 @@ from copy import copy from ..datacube.datacube_axis import IntDatacubeAxis -from ..datacube.index_tree import IndexTree from ..datacube.quad_tree import QuadTree +from ..datacube.tensor_index_tree import TensorIndexTree from .engine import Engine @@ -17,7 +17,7 @@ def __init__(self, points): # method to slice polygon against quadtree def extract(self, datacube, polytopes): # need to find the points to extract within the polytopes (polygons here in 2D) - request = IndexTree() + request = TensorIndexTree() extracted_points = [] for polytope in polytopes: assert len(polytope._axes) == 2 diff --git a/polytope/polytope.py b/polytope/polytope.py index 632520da1..dc1782be1 100644 --- a/polytope/polytope.py +++ b/polytope/polytope.py @@ -1,11 +1,15 @@ from typing import List -from .options import PolytopeOptions -from .datacube.index_tree import IndexTree +from .datacube.tensor_index_tree import TensorIndexTree from .engine.hullslicer import HullSlicer from .engine.quadtree_slicer import QuadTreeSlicer +from .options import PolytopeOptions from .shapes import ConvexPolytope -from .utility.engine_tools import find_polytope_combinations +from .datacube.backends.datacube import Datacube +from .datacube.datacube_axis import UnsliceableDatacubeAxis + +# from .utility.engine_tools import find_polytope_combinations +from .utility.combinatorics import group, tensor_product, unique from .utility.exceptions import AxisOverdefinedError @@ -59,6 +63,8 @@ def __init__( if engine_options is None: engine_options = {} + self.compressed_axes = [] + axis_options, compressed_axes_options, config, alternative_axes = PolytopeOptions.get_polytope_options(options) self.datacube = Datacube.create( @@ -67,8 +73,8 @@ def __init__( config, axis_options, compressed_axes_options, + point_cloud_options, alternative_axes, - point_cloud_options=point_cloud_options, ) self.engine = engine if engine is not None else Engine.default() if engine_options == {}: @@ -76,6 +82,7 @@ def __init__( engine_options[ax_name] = "hullslicer" self.engine_options = engine_options self.engines = self.create_engines() + self.ax_is_unsliceable = {} def create_engines(self): engines = {} @@ -88,37 +95,89 @@ def create_engines(self): if "hullslicer" in engine_types: engines["hullslicer"] = HullSlicer() return engines - - def slice(self, polytopes: List[ConvexPolytope]): + + def _unique_continuous_points(self, p: ConvexPolytope, datacube: Datacube): + for i, ax in enumerate(p._axes): + mapper = datacube.get_mapper(ax) + if self.ax_is_unsliceable.get(ax, None) is None: + self.ax_is_unsliceable[ax] = isinstance(mapper, UnsliceableDatacubeAxis) + if self.ax_is_unsliceable[ax]: + break + for j, val in enumerate(p.points): + p.points[j][i] = mapper.to_float(mapper.parse(p.points[j][i])) + # Remove duplicate points + unique(p.points) + + def slice(self, datacube, polytopes: List[ConvexPolytope]): """Low-level API which takes a polytope geometry object and uses it to slice the datacube""" - combinations = find_polytope_combinations(self.datacube, polytopes) + self.find_compressed_axes(datacube, polytopes) - request = IndexTree() + # Convert the polytope points to float type to support triangulation and interpolation + for p in polytopes: + self._unique_continuous_points(p, datacube) + + groups, input_axes = group(polytopes) + datacube.validate(input_axes) + request = TensorIndexTree() + combinations = tensor_product(groups) + # combinations = find_polytope_combinations(self.datacube, polytopes) + # request = TensorIndexTree() + + # NOTE: could optimise here if we know combinations will always be for one request. + # Then we do not need to create a new index tree and merge it to request, but can just + # directly work on request and return it... for c in combinations: - r = IndexTree() - r["unsliced_polytopes"] = set(c) + r = TensorIndexTree() + new_c = [] + for combi in c: + if isinstance(combi, list): + new_c.extend(combi) + else: + new_c.append(combi) + r["unsliced_polytopes"] = set(new_c) current_nodes = [r] - for ax in self.datacube.axes.values(): - # determine the slicer for each axis + for ax in datacube.axes.values(): engine = self.find_engine(ax) - - # TODO: what happens when we have a quadtree engine and we handle two axes at once?? - # Need to build the two axes nodes as just one node within the slicer engine... - next_nodes = [] + interm_next_nodes = [] for node in current_nodes: - print(node) - engine._build_branch(ax, node, self.datacube, next_nodes) + engine._build_branch(ax, node, datacube, interm_next_nodes, self) + next_nodes.extend(interm_next_nodes) + interm_next_nodes = [] current_nodes = next_nodes - request.merge(r) - # TODO: return tree - # return self.engine.extract(self.datacube, polytopes) - request.pprint() + request.merge(r) return request + # combinations = find_polytope_combinations(self.datacube, polytopes) + + # request = TensorIndexTree() + + # for c in combinations: + # r = TensorIndexTree() + # r["unsliced_polytopes"] = set(c) + # current_nodes = [r] + # for ax in self.datacube.axes.values(): + # # determine the slicer for each axis + # engine = self.find_engine(ax) + + # # TODO: what happens when we have a quadtree engine and we handle two axes at once?? + # # Need to build the two axes nodes as just one node within the slicer engine... + + # next_nodes = [] + # for node in current_nodes: + # print(node) + # engine._build_branch(ax, node, self.datacube, next_nodes) + # current_nodes = next_nodes + # request.merge(r) + + # # TODO: return tree + # # return self.engine.extract(self.datacube, polytopes) + # request.pprint() + # return request + def find_engine(self, ax): slicer_type = self.engine_options[ax.name] return self.engines[slicer_type] @@ -132,6 +191,21 @@ def old_retrieve(self, request: Request, method="standard"): def retrieve(self, request: Request, method="standard"): """Higher-level API which takes a request and uses it to slice the datacube""" - request_tree = self.slice(request.polytopes()) + request_tree = self.slice(self.datacube, request.polytopes()) self.datacube.get(request_tree) return request_tree + + def find_compressed_axes(self, datacube, polytopes): + # First determine compressable axes from input polytopes + compressable_axes = [] + for polytope in polytopes: + if polytope.is_orthogonal: + for ax in polytope.axes(): + compressable_axes.append(ax) + # Cross check this list with list of compressable axis from datacube + # (should not include any merged or coupled axes) + for compressed_axis in compressable_axes: + if compressed_axis in datacube.compressed_axes: + self.compressed_axes.append(compressed_axis) + # print("WHAT ARE THE COMPRESSED AXES?") + # print(self.compressed_axes) diff --git a/polytope/utility/engine_tools.py b/polytope/utility/engine_tools.py index a9ef03fb4..08569ff4e 100644 --- a/polytope/utility/engine_tools.py +++ b/polytope/utility/engine_tools.py @@ -2,7 +2,7 @@ from ..datacube.backends.datacube import Datacube from ..datacube.datacube_axis import UnsliceableDatacubeAxis -from ..datacube.index_tree import IndexTree +from ..datacube.tensor_index_tree import TensorIndexTree from ..shapes import ConvexPolytope from .combinatorics import group, tensor_product, unique @@ -19,7 +19,7 @@ def unique_continuous_points_in_polytope(p: ConvexPolytope, datacube: Datacube): unique(p.points) -def find_polytope_combinations(datacube: Datacube, polytopes: List[ConvexPolytope]) -> IndexTree: +def find_polytope_combinations(datacube: Datacube, polytopes: List[ConvexPolytope]) -> TensorIndexTree: # here, we find the different possible polytope combinations that cover all of the datacube axes for p in polytopes: diff --git a/tests/test_engine_slicer.py b/tests/test_engine_slicer.py index a7fda9e12..e30ba52fa 100644 --- a/tests/test_engine_slicer.py +++ b/tests/test_engine_slicer.py @@ -1,6 +1,10 @@ from polytope.datacube.backends.mock import MockDatacube from polytope.engine.hullslicer import HullSlicer from polytope.shapes import Box, Polygon +import numpy as np +import xarray as xr +from polytope.polytope import Polytope +from polytope.datacube.backends.xarray import XArrayDatacube class TestEngineSlicer: @@ -10,55 +14,73 @@ def setup_method(self, method): def test_2D_box(self): datacube = MockDatacube({"x": 100, "y": 100}) polytopes = Box(["x", "y"], lower_corner=[3, 3], upper_corner=[6, 6]).polytope() - result = self.slicer.extract(datacube, polytopes) + # result = self.slicer.extract(datacube, polytopes) + API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + result = API.slice(datacube, polytopes) assert len(result.leaves) == 4 * 4 def test_3D_box(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100}) polytopes = Box(["x", "y", "z"], lower_corner=[3, 3, 3], upper_corner=[6, 6, 6]).polytope() - result = self.slicer.extract(datacube, polytopes) + # result = self.slicer.extract(datacube, polytopes) + API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + result = API.slice(datacube, polytopes) assert len(result.leaves) == 4 * 4 * 4 def test_4D_box(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100, "q": 100}) polytopes = Box(["x", "y", "z", "q"], lower_corner=[3, 3, 3, 3], upper_corner=[6, 6, 6, 6]).polytope() - result = self.slicer.extract(datacube, polytopes) + # result = self.slicer.extract(datacube, polytopes) + API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + result = API.slice(datacube, polytopes) assert len(result.leaves) == 4 * 4 * 4 * 4 def test_triangle(self): datacube = MockDatacube({"x": 100, "y": 100}) triangle = Polygon(["x", "y"], [[3, 3], [3, 6], [6, 3]]).polytope() - result = self.slicer.extract(datacube, triangle) + # result = self.slicer.extract(datacube, triangle) + API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + result = API.slice(datacube, triangle) assert len(result.leaves) == 4 + 3 + 2 + 1 def test_reusable(self): datacube = MockDatacube({"x": 100, "y": 100}) polytopes = Polygon(["x", "y"], [[3, 3], [3, 6], [6, 3]]).polytope() - result = self.slicer.extract(datacube, polytopes) + # result = self.slicer.extract(datacube, polytopes) + API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + result = API.slice(datacube, polytopes) assert len(result.leaves) == 4 + 3 + 2 + 1 polytopes = Box(["x", "y"], lower_corner=[3, 3], upper_corner=[6, 6]).polytope() - result = self.slicer.extract(datacube, polytopes) + # result = self.slicer.extract(datacube, polytopes) + result = API.slice(datacube, polytopes) assert len(result.leaves) == 4 * 4 - result = self.slicer.extract(datacube, polytopes) + # result = self.slicer.extract(datacube, polytopes) + result = API.slice(datacube, polytopes) assert len(result.leaves) == 4 * 4 def test_2D_box_get_function(self): datacube = MockDatacube({"x": 100, "y": 100}) polytopes = Box(["x", "y"], lower_corner=[2, -2], upper_corner=[4, -1]).polytope() - result = self.slicer.extract(datacube, polytopes) + # result = self.slicer.extract(datacube, polytopes) + API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + result = API.slice(datacube, polytopes) datacube.get(result) result.pprint() def test_3D_box_get_function(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100}) polytopes = Box(["x", "y", "z"], lower_corner=[3, 2, -2], upper_corner=[6, 2, -1]).polytope() - result = self.slicer.extract(datacube, polytopes) + # result = self.slicer.extract(datacube, polytopes) + API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + result = API.slice(datacube, polytopes) datacube.get(result) result.pprint() def test_3D_box_get_function2(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100}) polytopes = Box(["x", "y", "z"], lower_corner=[3, 2, 1], upper_corner=[6, 2, 1]).polytope() - result = self.slicer.extract(datacube, polytopes) + # result = self.slicer.extract(datacube, polytopes) + API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + result = API.slice(datacube, polytopes) datacube.get(result) result.pprint() diff --git a/tests/test_hullslicer_engine.py b/tests/test_hullslicer_engine.py index d0bdde73d..19aa37bdb 100644 --- a/tests/test_hullslicer_engine.py +++ b/tests/test_hullslicer_engine.py @@ -26,7 +26,9 @@ def setup_method(self, method): def test_extract(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - request = self.slicer.extract(self.xarraydatacube, polytope) + # request = self.slicer.extract(self.xarraydatacube, polytope) + API = Polytope(request={}, datacube=self.xarraydatacube, engine=self.slicer, options={}) + request = API.slice(self.xarraydatacube, polytope) assert request.axis == TensorIndexTree.root assert request.parent is None assert request.values is tuple() diff --git a/tests/test_request_trees_after_slicing.py b/tests/test_request_trees_after_slicing.py index 2c64289f6..9e13924d6 100644 --- a/tests/test_request_trees_after_slicing.py +++ b/tests/test_request_trees_after_slicing.py @@ -26,7 +26,8 @@ def setup_method(self, method): def test_path_values(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - request = self.slicer.extract(self.xarraydatacube, polytope) + # request = self.slicer.extract(self.xarraydatacube, polytope) + request = self.API.slice(self.xarraydatacube, polytope) datacube_path = request.leaves[0].flatten() # request.pprint() assert datacube_path.values() == tuple([tuple([3.0]), tuple([1.0])]) @@ -35,7 +36,8 @@ def test_path_values(self): def test_path_keys(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - request = self.slicer.extract(self.xarraydatacube, polytope) + # request = self.slicer.extract(self.xarraydatacube, polytope) + request = self.API.slice(self.xarraydatacube, polytope) datacube_path = request.leaves[0].flatten() assert datacube_path.keys()[0] == "step" assert datacube_path.keys()[1] == "level" @@ -43,14 +45,16 @@ def test_path_keys(self): def test_path_pprint(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - request = self.slicer.extract(self.xarraydatacube, polytope) + # request = self.slicer.extract(self.xarraydatacube, polytope) + request = self.API.slice(self.xarraydatacube, polytope) datacube_path = request.leaves[0].flatten() datacube_path.pprint() def test_flatten(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - request = self.slicer.extract(self.xarraydatacube, polytope) + # request = self.slicer.extract(self.xarraydatacube, polytope) + request = self.API.slice(self.xarraydatacube, polytope) path = request.leaves[0].flatten() assert path["step"] == tuple([3.0]) assert path["level"] == tuple([1.0]) @@ -58,7 +62,8 @@ def test_flatten(self): def test_add_child(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - request = self.slicer.extract(self.xarraydatacube, polytope) + # request = self.slicer.extract(self.xarraydatacube, polytope) + request = self.API.slice(self.xarraydatacube, polytope) request1 = request.leaves[0] request2 = request.leaves[0] # Test adding child @@ -76,13 +81,15 @@ def test_add_child(self): def test_pprint(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - request = self.slicer.extract(self.xarraydatacube, polytope) + # request = self.slicer.extract(self.xarraydatacube, polytope) + request = self.API.slice(self.xarraydatacube, polytope) request.pprint() def test_remove_branch(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - request = self.slicer.extract(self.xarraydatacube, polytope) + # request = self.slicer.extract(self.xarraydatacube, polytope) + request = self.API.slice(self.xarraydatacube, polytope) prev_request_size = len(request.leaves) request.leaves[0].remove_branch() new_request_size = len(request.leaves) diff --git a/tests/test_slicer_engine.py b/tests/test_slicer_engine.py index 0ca172f39..2ee18a8de 100644 --- a/tests/test_slicer_engine.py +++ b/tests/test_slicer_engine.py @@ -26,7 +26,9 @@ def setup_method(self, method): def test_extract(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - request = self.slicer.extract(self.xarraydatacube, polytope) + # request = self.slicer.extract(self.xarraydatacube, polytope) + API = Polytope(request={}, datacube=self.xarraydatacube, engine=self.slicer, options={}) + request = API.slice(self.xarraydatacube, polytope) assert request.axis == TensorIndexTree.root assert request.parent is None assert request.values is tuple() From cab5ed18cd77ca85e2d2ab904c668b3e2e951a4c Mon Sep 17 00:00:00 2001 From: mathleur Date: Wed, 17 Jul 2024 09:43:22 +0200 Subject: [PATCH 44/75] WIP make irregular grid work --- polytope/datacube/backends/datacube.py | 2 +- .../mapper_types/irregular.py | 1 + polytope/engine/quadtree_slicer.py | 2 +- polytope/polytope.py | 1 - tests/test_polytope_extract_fdb.py | 64 ++++++++++++++----- 5 files changed, 52 insertions(+), 18 deletions(-) diff --git a/polytope/datacube/backends/datacube.py b/polytope/datacube/backends/datacube.py index 392e8d6cf..c52324135 100644 --- a/polytope/datacube/backends/datacube.py +++ b/polytope/datacube/backends/datacube.py @@ -166,7 +166,7 @@ def create( from .fdb import FDBDatacube fdbdatacube = FDBDatacube( - datacube, request, config, axis_options, compressed_axes_options, alternative_axes + datacube, request, config, axis_options, compressed_axes_options, point_cloud_options, alternative_axes ) return fdbdatacube else: diff --git a/polytope/datacube/transformations/datacube_mappers/mapper_types/irregular.py b/polytope/datacube/transformations/datacube_mappers/mapper_types/irregular.py index d8e1f0a77..36d44cf28 100644 --- a/polytope/datacube/transformations/datacube_mappers/mapper_types/irregular.py +++ b/polytope/datacube/transformations/datacube_mappers/mapper_types/irregular.py @@ -7,6 +7,7 @@ def __init__(self, base_axis, mapped_axes, resolution, local_area=[]): self._base_axis = base_axis self._resolution = resolution self._axis_reversed = False + self.compressed_grid_axes = [self._mapped_axes[1]] def unmap(self, first_val, second_val, unmapped_idx=None): # TODO: But to unmap for the irregular grid, need the request tree diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index ba9839760..0145f9436 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -58,7 +58,7 @@ def extract_single(self, datacube, polytope): polygon_points = self.quad_tree.query_polygon(polytope) return polygon_points - def _build_branch(self, ax, node, datacube, next_nodes): + def _build_branch(self, ax, node, datacube, next_nodes, engine): for polytope in node["unsliced_polytopes"]: if ax.name in polytope._axes: # here, first check if the axis is an unsliceable axis and directly build node if it is diff --git a/polytope/polytope.py b/polytope/polytope.py index dc1782be1..36e35af70 100644 --- a/polytope/polytope.py +++ b/polytope/polytope.py @@ -66,7 +66,6 @@ def __init__( self.compressed_axes = [] axis_options, compressed_axes_options, config, alternative_axes = PolytopeOptions.get_polytope_options(options) - self.datacube = Datacube.create( request, datacube, diff --git a/tests/test_polytope_extract_fdb.py b/tests/test_polytope_extract_fdb.py index 72656723e..1ef81c502 100644 --- a/tests/test_polytope_extract_fdb.py +++ b/tests/test_polytope_extract_fdb.py @@ -8,7 +8,7 @@ class TestPolytopeExtract: def setup_method(self, method): - from polytope.datacube.backends.fdb import FDBDatacube + # from polytope.datacube.backends.fdb import FDBDatacube # Create a dataarray with 3 labelled axes using different index types self.slicer = HullSlicer() @@ -25,26 +25,50 @@ def setup_method(self, method): "expver": "hullslicer", "domain": "hullslicer", } - quadtree_points = [[10, 10], [0.035149384216, 0.0], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] + self.quadtree_points = [[10, 10], [0.035149384216, 0.0], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] self.options = { - "values": {"mapper": {"type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]}}, - "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, - "step": {"type_change": "int"}, - "number": {"type_change": "int"}, + "axis_config": [ + {"axis_name": "step", "transformations": [{"name": "type_change", "type": "int"}]}, + {"axis_name": "number", "transformations": [{"name": "type_change", "type": "int"}]}, + { + "axis_name": "date", + "transformations": [{"name": "merge", "other_axis": "time", "linkers": ["T", "00"]}], + }, + { + "axis_name": "values", + "transformations": [ + {"name": "mapper", "type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]} + ], + }, + ], + "compressed_axes_config": [ + "longitude", + "latitude", + "levtype", + "step", + "date", + "domain", + "expver", + "param", + "class", + "stream", + "type", + ], + "pre_path": {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"}, } - self.config = {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"} - self.fdbdatacube = FDBDatacube(self.config, axis_options=self.options, point_cloud_options=quadtree_points) - self.API = Polytope( - datacube=self.fdbdatacube, - engine=self.slicer, - axis_options=self.options, - engine_options=self.engine_options, - point_cloud_options=quadtree_points, - ) + # self.fdbdatacube = FDBDatacube(self.config, axis_options=self.options, point_cloud_options=quadtree_points) + # self.API = Polytope( + # datacube=self.fdbdatacube, + # engine=self.slicer, + # axis_options=self.options, + # engine_options=self.engine_options, + # point_cloud_options=quadtree_points, + # ) # Testing different shapes @pytest.mark.fdb def test_2D_box(self): + import pygribjump as gj request = Request( Select("step", [0]), Select("levtype", ["sfc"]), @@ -57,6 +81,16 @@ def test_2D_box(self): Select("type", ["an"]), Box(["latitude", "longitude"], [0, -0.1], [10, 10]), ) + self.fdbdatacube = gj.GribJump() + self.slicer = HullSlicer() + self.API = Polytope( + request=request, + datacube=self.fdbdatacube, + engine=self.slicer, + options=self.options, + engine_options=self.engine_options, + point_cloud_options=self.quadtree_points + ) result = self.API.retrieve(request) assert len(result.leaves) == 3 From 2a72dc54472ee50d9256bfd7b343981655f654ce Mon Sep 17 00:00:00 2001 From: mathleur Date: Wed, 17 Jul 2024 14:17:10 +0200 Subject: [PATCH 45/75] fix irregular grid --- polytope/datacube/backends/fdb.py | 18 +- polytope/datacube/backends/xarray.py | 7 +- polytope/datacube/tensor_index_tree.py | 1 + .../datacube_mappers/datacube_mappers.py | 4 +- .../datacube_mappers/mapper_axis_decorator.py | 198 +++++++++--------- .../mapper_types/irregular.py | 2 +- polytope/engine/quadtree_slicer.py | 8 +- tests/test_orca_irregular_grid.py | 37 ++-- tests/test_polytope_extract.py | 39 ++-- tests/test_polytope_extract_fdb.py | 15 +- tests/test_quad_tree.py | 62 +++++- tests/test_quadtree_edge_cases.py | 55 ++++- tests/test_quadtree_indices.py | 75 +++++-- tests/test_quadtree_optimisation.py | 50 ++++- 14 files changed, 387 insertions(+), 184 deletions(-) diff --git a/polytope/datacube/backends/fdb.py b/polytope/datacube/backends/fdb.py index 47abf1c74..116b3e8a0 100644 --- a/polytope/datacube/backends/fdb.py +++ b/polytope/datacube/backends/fdb.py @@ -231,17 +231,22 @@ def get_2nd_last_values(self, requests, leaf_path=None): fdb_range_nodes = deepcopy(fdb_node_ranges[i]) key_value_path = {lat_child.axis.name: lat_child.values} ax = lat_child.axis + print("ABOVE CHILD LAYER BEFORE UNMAP") + print(leaf_path) (key_value_path, leaf_path, self.unwanted_path) = ax.unmap_path_key( key_value_path, leaf_path, self.unwanted_path ) leaf_path.update(key_value_path) + # print("THE LAYER BEFORE NOW") + # print(leaf_path) + # print(key_value_path) (range_lengths[i], current_start_idxs[i], fdb_node_ranges[i]) = self.get_last_layer_before_leaf( lat_child, leaf_path, range_length, current_start_idx, fdb_range_nodes ) leaf_path_copy = deepcopy(leaf_path) leaf_path_copy.pop("values", None) - leaf_path_copy.pop("result") + leaf_path_copy.pop("index") return (leaf_path_copy, range_lengths, current_start_idxs, fdb_node_ranges, lat_length) def get_last_layer_before_leaf(self, requests, leaf_path, range_l, current_idx, fdb_range_n): @@ -250,13 +255,22 @@ def get_last_layer_before_leaf(self, requests, leaf_path, range_l, current_idx, fdb_range_n_i = fdb_range_n[i] # now c are the leaves of the initial tree key_value_path = {c.axis.name: c.values} - leaf_path["result"] = c.result + # print("LOOK NOW") + # print(leaf_path) + # print(key_value_path) + leaf_path["index"] = c.indexes ax = c.axis (key_value_path, leaf_path, self.unwanted_path) = ax.unmap_path_key( key_value_path, leaf_path, self.unwanted_path ) + # print("AFTER UNMAPPING") + # print(leaf_path) leaf_path.update(key_value_path) + # print("LAST LEAF") + # print(leaf_path) last_idx = key_value_path["values"] + print("LAST IDX HERE") + print(last_idx) if current_idx[i] is None: range_l[i] = 1 current_idx[i] = last_idx diff --git a/polytope/datacube/backends/xarray.py b/polytope/datacube/backends/xarray.py index 8702285d4..991fe7d77 100644 --- a/polytope/datacube/backends/xarray.py +++ b/polytope/datacube/backends/xarray.py @@ -74,6 +74,8 @@ def get(self, requests, leaf_path=None, axis_counter=0): if len(requests.children) != 0: # We are not a leaf and we loop over for c in requests.children: + if axis_counter == self.axis_counter - 1: + leaf_path["index"] = c.indexes self.get(c, leaf_path, axis_counter + 1) else: if self.axis_counter != axis_counter: @@ -82,9 +84,12 @@ def get(self, requests, leaf_path=None, axis_counter=0): # We are at a leaf and need to assign value to it leaf_path_copy = deepcopy(leaf_path) unmapped_path = {} + print(leaf_path_copy) self.refit_path(leaf_path_copy, unmapped_path, leaf_path) + print(leaf_path_copy) for key in leaf_path_copy: - leaf_path_copy[key] = list(leaf_path_copy[key]) + if isinstance(leaf_path_copy[key], tuple): + leaf_path_copy[key] = list(leaf_path_copy[key]) for key in unmapped_path: if isinstance(unmapped_path[key], tuple): unmapped_path[key] = list(unmapped_path[key]) diff --git a/polytope/datacube/tensor_index_tree.py b/polytope/datacube/tensor_index_tree.py index 70749ccfb..cc157204a 100644 --- a/polytope/datacube/tensor_index_tree.py +++ b/polytope/datacube/tensor_index_tree.py @@ -104,6 +104,7 @@ def add_value(self, value): self.values = tuple(new_values) def create_child(self, axis, value, next_nodes): + # TODO: what if we remove the next nodes here? node = TensorIndexTree(axis, (value,)) existing_child = self.find_child(node) if not existing_child: diff --git a/polytope/datacube/transformations/datacube_mappers/datacube_mappers.py b/polytope/datacube/transformations/datacube_mappers/datacube_mappers.py index a5966e5eb..890ec0ca4 100644 --- a/polytope/datacube/transformations/datacube_mappers/datacube_mappers.py +++ b/polytope/datacube/transformations/datacube_mappers/datacube_mappers.py @@ -92,10 +92,8 @@ def unmap_path_key(self, key_value_path, leaf_path, unwanted_path, axis): unwanted_path[axis.name] = unwanted_val if axis.name == self._mapped_axes()[1]: first_val = unwanted_path[self._mapped_axes()[0]] - unmapped_idx = leaf_path.get("result", None) + unmapped_idx = leaf_path.get("index", None) unmapped_idx = self.unmap(first_val, value, unmapped_idx) - print("THE UNMAPPED IDX IS NOT NONE?") - print(unmapped_idx) leaf_path.pop(self._mapped_axes()[0], None) key_value_path.pop(axis.name) key_value_path[self.old_axis] = unmapped_idx diff --git a/polytope/datacube/transformations/datacube_mappers/mapper_axis_decorator.py b/polytope/datacube/transformations/datacube_mappers/mapper_axis_decorator.py index 5920c6485..8335e592a 100644 --- a/polytope/datacube/transformations/datacube_mappers/mapper_axis_decorator.py +++ b/polytope/datacube/transformations/datacube_mappers/mapper_axis_decorator.py @@ -1,110 +1,110 @@ -import bisect +# import bisect -from ....utility.list_tools import bisect_left_cmp, bisect_right_cmp -from .datacube_mappers import DatacubeMapper +# from ....utility.list_tools import bisect_left_cmp, bisect_right_cmp +# from .datacube_mappers import DatacubeMapper -def mapper(cls): - if cls.has_mapper: +# def mapper(cls): +# if cls.has_mapper: - def find_indexes(path, datacube): - # first, find the relevant transformation object that is a mapping in the cls.transformation dico - for transform in cls.transformations: - if isinstance(transform, DatacubeMapper): - transformation = transform - if cls.name == transformation._mapped_axes()[0]: - return transformation.first_axis_vals() - if cls.name == transformation._mapped_axes()[1]: - first_val = path[transformation._mapped_axes()[0]] - return transformation.second_axis_vals(first_val) +# def find_indexes(path, datacube): +# # first, find the relevant transformation object that is a mapping in the cls.transformation dico +# for transform in cls.transformations: +# if isinstance(transform, DatacubeMapper): +# transformation = transform +# if cls.name == transformation._mapped_axes()[0]: +# return transformation.first_axis_vals() +# if cls.name == transformation._mapped_axes()[1]: +# first_val = path[transformation._mapped_axes()[0]] +# return transformation.second_axis_vals(first_val) - old_unmap_to_datacube = cls.unmap_to_datacube +# old_unmap_to_datacube = cls.unmap_to_datacube - def unmap_to_datacube(path, unmapped_path): - (path, unmapped_path) = old_unmap_to_datacube(path, unmapped_path) - for transform in cls.transformations: - if isinstance(transform, DatacubeMapper): - if cls.name == transform._mapped_axes()[0]: - # if we are on the first axis, then need to add the first val to unmapped_path - first_val = path.get(cls.name, None) - path.pop(cls.name, None) - if cls.name not in unmapped_path: - # if for some reason, the unmapped_path already has the first axis val, then don't update - unmapped_path[cls.name] = first_val - if cls.name == transform._mapped_axes()[1]: - # if we are on the second axis, then the val of the first axis is stored - # inside unmapped_path so can get it from there - second_val = path.get(cls.name, None) - path.pop(cls.name, None) - first_val = unmapped_path.get(transform._mapped_axes()[0], None) - unmapped_path.pop(transform._mapped_axes()[0], None) - # if the first_val was not in the unmapped_path, then it's still in path - if first_val is None: - first_val = path.get(transform._mapped_axes()[0], None) - path.pop(transform._mapped_axes()[0], None) - if first_val is not None and second_val is not None: - unmapped_idx = path.get("result", None) - unmapped_idx = transform.unmap(first_val, second_val, unmapped_idx) - unmapped_path[transform.old_axis] = unmapped_idx - return (path, unmapped_path) +# def unmap_to_datacube(path, unmapped_path): +# (path, unmapped_path) = old_unmap_to_datacube(path, unmapped_path) +# for transform in cls.transformations: +# if isinstance(transform, DatacubeMapper): +# if cls.name == transform._mapped_axes()[0]: +# # if we are on the first axis, then need to add the first val to unmapped_path +# first_val = path.get(cls.name, None) +# path.pop(cls.name, None) +# if cls.name not in unmapped_path: +# # if for some reason, the unmapped_path already has the first axis val, then don't update +# unmapped_path[cls.name] = first_val +# if cls.name == transform._mapped_axes()[1]: +# # if we are on the second axis, then the val of the first axis is stored +# # inside unmapped_path so can get it from there +# second_val = path.get(cls.name, None) +# path.pop(cls.name, None) +# first_val = unmapped_path.get(transform._mapped_axes()[0], None) +# unmapped_path.pop(transform._mapped_axes()[0], None) +# # if the first_val was not in the unmapped_path, then it's still in path +# if first_val is None: +# first_val = path.get(transform._mapped_axes()[0], None) +# path.pop(transform._mapped_axes()[0], None) +# if first_val is not None and second_val is not None: +# unmapped_idx = path.get("result", None) +# unmapped_idx = transform.unmap(first_val, second_val, unmapped_idx) +# unmapped_path[transform.old_axis] = unmapped_idx +# return (path, unmapped_path) - old_unmap_path_key = cls.unmap_path_key +# old_unmap_path_key = cls.unmap_path_key - def unmap_path_key(key_value_path, leaf_path, unwanted_path): - key_value_path, leaf_path, unwanted_path = old_unmap_path_key(key_value_path, leaf_path, unwanted_path) - value = key_value_path[cls.name] - for transform in cls.transformations: - if isinstance(transform, DatacubeMapper): - if cls.name == transform._mapped_axes()[0]: - unwanted_val = key_value_path[transform._mapped_axes()[0]] - unwanted_path[cls.name] = unwanted_val - if cls.name == transform._mapped_axes()[1]: - first_val = unwanted_path[transform._mapped_axes()[0]] - unmapped_idx = leaf_path.get("result", None) - unmapped_idx = transform.unmap(first_val, value, unmapped_idx) - leaf_path.pop(transform._mapped_axes()[0], None) - key_value_path.pop(cls.name) - key_value_path[transform.old_axis] = unmapped_idx - return (key_value_path, leaf_path, unwanted_path) +# def unmap_path_key(key_value_path, leaf_path, unwanted_path): +# key_value_path, leaf_path, unwanted_path = old_unmap_path_key(key_value_path, leaf_path, unwanted_path) +# value = key_value_path[cls.name] +# for transform in cls.transformations: +# if isinstance(transform, DatacubeMapper): +# if cls.name == transform._mapped_axes()[0]: +# unwanted_val = key_value_path[transform._mapped_axes()[0]] +# unwanted_path[cls.name] = unwanted_val +# if cls.name == transform._mapped_axes()[1]: +# first_val = unwanted_path[transform._mapped_axes()[0]] +# unmapped_idx = leaf_path.get("result", None) +# unmapped_idx = transform.unmap(first_val, value, unmapped_idx) +# leaf_path.pop(transform._mapped_axes()[0], None) +# key_value_path.pop(cls.name) +# key_value_path[transform.old_axis] = unmapped_idx +# return (key_value_path, leaf_path, unwanted_path) - def find_indices_between(index_ranges, low, up, datacube, method=None): - # TODO: add method for snappping - indexes_between_ranges = [] - for transform in cls.transformations: - if isinstance(transform, DatacubeMapper): - transformation = transform - if cls.name in transformation._mapped_axes(): - for idxs in index_ranges: - if method == "surrounding" or method == "nearest": - axis_reversed = transform._axis_reversed[cls.name] - if not axis_reversed: - start = bisect.bisect_left(idxs, low) - end = bisect.bisect_right(idxs, up) - else: - # TODO: do the custom bisect - end = bisect_left_cmp(idxs, low, cmp=lambda x, y: x > y) + 1 - start = bisect_right_cmp(idxs, up, cmp=lambda x, y: x > y) - start = max(start - 1, 0) - end = min(end + 1, len(idxs)) - indexes_between = idxs[start:end] - indexes_between_ranges.append(indexes_between) - else: - axis_reversed = transform._axis_reversed[cls.name] - if not axis_reversed: - lower_idx = bisect.bisect_left(idxs, low) - upper_idx = bisect.bisect_right(idxs, up) - indexes_between = idxs[lower_idx:upper_idx] - else: - # TODO: do the custom bisect - end_idx = bisect_left_cmp(idxs, low, cmp=lambda x, y: x > y) + 1 - start_idx = bisect_right_cmp(idxs, up, cmp=lambda x, y: x > y) - indexes_between = idxs[start_idx:end_idx] - indexes_between_ranges.append(indexes_between) - return indexes_between_ranges +# def find_indices_between(index_ranges, low, up, datacube, method=None): +# # TODO: add method for snappping +# indexes_between_ranges = [] +# for transform in cls.transformations: +# if isinstance(transform, DatacubeMapper): +# transformation = transform +# if cls.name in transformation._mapped_axes(): +# for idxs in index_ranges: +# if method == "surrounding" or method == "nearest": +# axis_reversed = transform._axis_reversed[cls.name] +# if not axis_reversed: +# start = bisect.bisect_left(idxs, low) +# end = bisect.bisect_right(idxs, up) +# else: +# # TODO: do the custom bisect +# end = bisect_left_cmp(idxs, low, cmp=lambda x, y: x > y) + 1 +# start = bisect_right_cmp(idxs, up, cmp=lambda x, y: x > y) +# start = max(start - 1, 0) +# end = min(end + 1, len(idxs)) +# indexes_between = idxs[start:end] +# indexes_between_ranges.append(indexes_between) +# else: +# axis_reversed = transform._axis_reversed[cls.name] +# if not axis_reversed: +# lower_idx = bisect.bisect_left(idxs, low) +# upper_idx = bisect.bisect_right(idxs, up) +# indexes_between = idxs[lower_idx:upper_idx] +# else: +# # TODO: do the custom bisect +# end_idx = bisect_left_cmp(idxs, low, cmp=lambda x, y: x > y) + 1 +# start_idx = bisect_right_cmp(idxs, up, cmp=lambda x, y: x > y) +# indexes_between = idxs[start_idx:end_idx] +# indexes_between_ranges.append(indexes_between) +# return indexes_between_ranges - cls.find_indexes = find_indexes - cls.unmap_to_datacube = unmap_to_datacube - cls.find_indices_between = find_indices_between - cls.unmap_path_key = unmap_path_key +# cls.find_indexes = find_indexes +# cls.unmap_to_datacube = unmap_to_datacube +# cls.find_indices_between = find_indices_between +# cls.unmap_path_key = unmap_path_key - return cls +# return cls diff --git a/polytope/datacube/transformations/datacube_mappers/mapper_types/irregular.py b/polytope/datacube/transformations/datacube_mappers/mapper_types/irregular.py index 36d44cf28..6f75309fb 100644 --- a/polytope/datacube/transformations/datacube_mappers/mapper_types/irregular.py +++ b/polytope/datacube/transformations/datacube_mappers/mapper_types/irregular.py @@ -12,4 +12,4 @@ def __init__(self, base_axis, mapped_axes, resolution, local_area=[]): def unmap(self, first_val, second_val, unmapped_idx=None): # TODO: But to unmap for the irregular grid, need the request tree # Suppose we get the idx value somehow from the tree, as an idx input - return unmapped_idx + return unmapped_idx[0] diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 0145f9436..f2e8d8d76 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -33,7 +33,7 @@ def extract(self, datacube, polytopes): values_axis.name = "values" result = point.item # TODO: make finding the axes objects nicer? - child = request.create_child(values_axis, idx) + (child, _) = request.create_child(values_axis, idx, []) child.result = result # NOTE: code for getting lat/lon instead of point indices @@ -91,10 +91,10 @@ def _build_sliceable_child(self, polytope, ax, node, datacube, next_nodes): # store the native type # child = node.create_child(ax, value) - child = node.create_child(lat_ax, lat_val) - grand_child = child.create_child(lon_ax, lon_val) + (child, _) = node.create_child(lat_ax, lat_val, []) + (grand_child , _) = child.create_child(lon_ax, lon_val, []) # NOTE: the index of the point is stashed in the branches' result - grand_child.result = value + grand_child.indexes = [value] grand_child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) grand_child["unsliced_polytopes"].remove(polytope) # child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) diff --git a/tests/test_orca_irregular_grid.py b/tests/test_orca_irregular_grid.py index 9979babe4..468ad2af7 100644 --- a/tests/test_orca_irregular_grid.py +++ b/tests/test_orca_irregular_grid.py @@ -22,23 +22,23 @@ def setup_method(self, method): "oceanModelLayer": "hullslicer", "valid_time": "hullslicer", } - arr = xr.open_dataset("../../Downloads/Reference_eORCA12_U_to_HEALPix_32.grib", engine="cfgrib").avg_uo - self.latitudes = arr.latitude.values - self.longitudes = arr.longitude.values + self.arr = xr.open_dataset("../../Downloads/Reference_eORCA12_U_to_HEALPix_32.grib", engine="cfgrib").avg_uo + self.latitudes = self.arr.latitude.values + self.longitudes = self.arr.longitude.values self.points = list(zip(self.latitudes, self.longitudes)) self.options = { - "values": {"mapper": {"type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]}}, + "axis_config": [ + { + "axis_name": "values", + "transformations": [ + {"name": "mapper", "type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]} + ], + }, + ], } - print(arr) + print(self.arr) # self.config = {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"} # self.fdbdatacube = FDBDatacube(self.config, axis_options=self.options, point_cloud_options=self.points) - self.API = Polytope( - datacube=arr, - engine=self.slicer, - axis_options=self.options, - engine_options=self.engine_options, - point_cloud_options=self.points, - ) @pytest.mark.fdb def test_quad_tree_slicer_extract(self): @@ -49,6 +49,15 @@ def test_quad_tree_slicer_extract(self): Select("valid_time", [pd.Timestamp("2017-09-06T00:00:00.000000000")]), Box(["latitude", "longitude"], [65, 270], [75, 300]), ) + + self.API = Polytope( + request=request, + datacube=self.arr, + engine=self.slicer, + options=self.options, + engine_options=self.engine_options, + point_cloud_options=self.points, + ) import time time0 = time.time() @@ -66,8 +75,8 @@ def test_quad_tree_slicer_extract(self): tol = 1e-8 for i in range(len(result.leaves)): cubepath = result.leaves[i].flatten() - lat = cubepath["latitude"] - lon = cubepath["longitude"] - 360 + lat = cubepath["latitude"][0] + lon = cubepath["longitude"][0] - 360 lats.append(lat) lons.append(lon) nearest_points = find_nearest_latlon("../../Downloads/Reference_eORCA12_U_to_HEALPix_32.grib", lat, lon) diff --git a/tests/test_polytope_extract.py b/tests/test_polytope_extract.py index 5aa33230d..5e3fb658d 100644 --- a/tests/test_polytope_extract.py +++ b/tests/test_polytope_extract.py @@ -1,7 +1,7 @@ import numpy as np import xarray as xr -from polytope.datacube.backends.xarray import XArrayDatacube +# from polytope.datacube.backends.xarray import XArrayDatacube from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box @@ -10,7 +10,7 @@ class TestPolytopeExtract: def setup_method(self, method): # Create a dataarray with 3 labelled axes using different index types - array = xr.DataArray( + self.array = xr.DataArray( np.random.randn(6, 129, 100), dims=("step", "level", "values"), coords={ @@ -19,7 +19,7 @@ def setup_method(self, method): "values": range(0, 100), }, ) - self.xarraydatacube = XArrayDatacube(array) + # self.xarraydatacube = XArrayDatacube(array) self.slicer = HullSlicer() self.engine_options = { "step": "hullslicer", @@ -27,22 +27,37 @@ def setup_method(self, method): "latitude": "quadtree", "longitude": "quadtree", } - quadtree_points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] + self.quadtree_points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] self.options = { - "values": {"mapper": {"type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]}}, + "axis_config": [ + { + "axis_name": "values", + "transformations": [ + {"name": "mapper", "type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]} + ], + }, + ], } - self.API = Polytope( - datacube=array, - engine=self.slicer, - axis_options=self.options, - engine_options=self.engine_options, - point_cloud_options=quadtree_points, - ) + # self.API = Polytope( + # datacube=array, + # engine=self.slicer, + # axis_options=self.options, + # engine_options=self.engine_options, + # point_cloud_options=quadtree_points, + # ) # Testing different shapes def test_2D_box(self): request = Request(Box(["step", "level"], [3, 10], [6, 11]), Box(["latitude", "longitude"], [0, 0], [20, 20])) + self.API = Polytope( + request=request, + datacube=self.array, + engine=self.slicer, + options=self.options, + engine_options=self.engine_options, + point_cloud_options=self.quadtree_points, + ) result = self.API.retrieve(request) result.pprint() diff --git a/tests/test_polytope_extract_fdb.py b/tests/test_polytope_extract_fdb.py index 1ef81c502..6ff76b2e7 100644 --- a/tests/test_polytope_extract_fdb.py +++ b/tests/test_polytope_extract_fdb.py @@ -69,6 +69,7 @@ def setup_method(self, method): @pytest.mark.fdb def test_2D_box(self): import pygribjump as gj + request = Request( Select("step", [0]), Select("levtype", ["sfc"]), @@ -89,14 +90,14 @@ def test_2D_box(self): engine=self.slicer, options=self.options, engine_options=self.engine_options, - point_cloud_options=self.quadtree_points + point_cloud_options=self.quadtree_points, ) result = self.API.retrieve(request) assert len(result.leaves) == 3 - assert result.leaves[0].flatten()["longitude"] == 0 - assert result.leaves[0].flatten()["latitude"] == 0.035149384216 - assert result.leaves[1].flatten()["longitude"] == 10 - assert result.leaves[1].flatten()["latitude"] == 5 - assert result.leaves[2].flatten()["longitude"] == 10 - assert result.leaves[2].flatten()["latitude"] == 10 + assert result.leaves[0].flatten()["longitude"] == (0,) + assert result.leaves[0].flatten()["latitude"] == (0.035149384216,) + assert result.leaves[1].flatten()["longitude"] == (10,) + assert result.leaves[1].flatten()["latitude"] == (5,) + assert result.leaves[2].flatten()["longitude"] == (10,) + assert result.leaves[2].flatten()["latitude"] == (10,) diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index 532690cae..b8a8d4c6b 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -3,22 +3,56 @@ from polytope.datacube.quad_tree import QuadNode from polytope.engine.quadtree_slicer import QuadTreeSlicer from polytope.engine.slicing_tools import slice_in_two +from polytope.polytope import Polytope, Request from polytope.shapes import Box, ConvexPolytope class TestQuadTreeSlicer: def setup_method(self, method): - from polytope.datacube.backends.fdb import FDBDatacube + # from polytope.datacube.backends.fdb import FDBDatacube + import pygribjump as gj self.options = { - "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, - "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, - "step": {"type_change": "int"}, - "number": {"type_change": "int"}, - "longitude": {"cyclic": [0, 360]}, + "axis_config": [ + {"axis_name": "step", "transformations": [{"name": "type_change", "type": "int"}]}, + {"axis_name": "number", "transformations": [{"name": "type_change", "type": "int"}]}, + { + "axis_name": "date", + "transformations": [{"name": "merge", "other_axis": "time", "linkers": ["T", "00"]}], + }, + { + "axis_name": "values", + "transformations": [ + {"name": "mapper", "type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]} + ], + }, + ], + "compressed_axes_config": [ + "longitude", + "latitude", + "levtype", + "step", + "date", + "domain", + "expver", + "param", + "class", + "stream", + "type", + ], + "pre_path": {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"}, } - self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} - self.datacube = FDBDatacube(self.config, axis_options=self.options) + # self.datacube = FDBDatacube(self.config, axis_options=self.options) + self.fdbdatacube = gj.GribJump() + # self.slicer = HullSlicer() + # self.API = Polytope( + # request=request, + # datacube=self.fdbdatacube, + # engine=self.slicer, + # options=self.options, + # engine_options=self.engine_options, + # point_cloud_options=self.quadtree_points + # ) @pytest.mark.fdb def test_quad_tree_slicer(self): @@ -90,13 +124,21 @@ def test_quad_tree_slicer_extract(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] slicer = QuadTreeSlicer(points) polytope = Box(["latitude", "longitude"], [1, 1], [20, 30]).polytope()[0] - tree = slicer.extract(self.datacube, [polytope]) + self.API = Polytope( + request=Request(polytope), + datacube=self.fdbdatacube, + engine=slicer, + options=self.options, + engine_options={"latitude": "quadtree", "longitude": "quadtree"}, + point_cloud_options=points, + ) + tree = slicer.extract(self.API.datacube, [polytope]) assert len(tree.leaves) == 3 tree.pprint() points = [[10, 10], [80, 10], [-5, 5], [5, 50], [5, 10], [50, 10], [2, 10], [15, 15]] slicer = QuadTreeSlicer(points) polytope = ConvexPolytope(["latitude", "longitude"], [[-10, 1], [20, 1], [5, 20]]) - tree = slicer.extract(self.datacube, [polytope]) + tree = slicer.extract(self.API.datacube, [polytope]) assert len(tree.leaves) == 4 tree.pprint() diff --git a/tests/test_quadtree_edge_cases.py b/tests/test_quadtree_edge_cases.py index 179b83b1a..db05651ad 100644 --- a/tests/test_quadtree_edge_cases.py +++ b/tests/test_quadtree_edge_cases.py @@ -1,29 +1,62 @@ import pytest from polytope.engine.quadtree_slicer import QuadTreeSlicer +from polytope.polytope import Polytope, Request from polytope.shapes import Box class TestQuadTreeSlicer: def setup_method(self, method): - from polytope.datacube.backends.fdb import FDBDatacube + # from polytope.datacube.backends.fdb import FDBDatacube + import pygribjump as gj self.options = { - "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, - "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, - "step": {"type_change": "int"}, - "number": {"type_change": "int"}, - "longitude": {"cyclic": [0, 360]}, + "axis_config": [ + {"axis_name": "step", "transformations": [{"name": "type_change", "type": "int"}]}, + {"axis_name": "number", "transformations": [{"name": "type_change", "type": "int"}]}, + { + "axis_name": "date", + "transformations": [{"name": "merge", "other_axis": "time", "linkers": ["T", "00"]}], + }, + { + "axis_name": "values", + "transformations": [ + {"name": "mapper", "type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]} + ], + }, + ], + "compressed_axes_config": [ + "longitude", + "latitude", + "levtype", + "step", + "date", + "domain", + "expver", + "param", + "class", + "stream", + "type", + ], + "pre_path": {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"}, } - self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} - self.datacube = FDBDatacube(self.config, axis_options=self.options) + # self.datacube = FDBDatacube(self.config, axis_options=self.options) + self.fdbdatacube = gj.GribJump() @pytest.mark.fdb def test_quad_tree_slicer_extract(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10], [0.035149384216, 0.0]] slicer = QuadTreeSlicer(points) polytope = Box(["latitude", "longitude"], [0, 0], [15, 15]).polytope()[0] - tree = slicer.extract(self.datacube, [polytope]) - tree.pprint_2() + self.API = Polytope( + request=Request(polytope), + datacube=self.fdbdatacube, + engine=slicer, + options=self.options, + engine_options={"latitude": "quadtree", "longitude": "quadtree"}, + point_cloud_options=points, + ) + tree = slicer.extract(self.API.datacube, [polytope]) + tree.pprint() assert len(tree.leaves) == 3 - assert set([leaf.flatten()["values"] for leaf in tree.leaves]) == set([0, 4, 6]) + assert set([leaf.flatten()["values"] for leaf in tree.leaves]) == set([(0,), (4,), (6,)]) diff --git a/tests/test_quadtree_indices.py b/tests/test_quadtree_indices.py index c4af1c9df..a8a169911 100644 --- a/tests/test_quadtree_indices.py +++ b/tests/test_quadtree_indices.py @@ -1,36 +1,87 @@ import pytest from polytope.engine.quadtree_slicer import QuadTreeSlicer +from polytope.polytope import Request, Polytope from polytope.shapes import Box, ConvexPolytope class TestQuadTreeSlicer: def setup_method(self, method): - from polytope.datacube.backends.fdb import FDBDatacube + # from polytope.datacube.backends.fdb import FDBDatacube + + # self.options = { + # "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, + # "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, + # "step": {"type_change": "int"}, + # "number": {"type_change": "int"}, + # "longitude": {"cyclic": [0, 360]}, + # } + # self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} + # self.datacube = FDBDatacube(self.config, axis_options=self.options) + import pygribjump as gj self.options = { - "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, - "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, - "step": {"type_change": "int"}, - "number": {"type_change": "int"}, - "longitude": {"cyclic": [0, 360]}, + "axis_config": [ + {"axis_name": "step", "transformations": [{"name": "type_change", "type": "int"}]}, + {"axis_name": "number", "transformations": [{"name": "type_change", "type": "int"}]}, + { + "axis_name": "date", + "transformations": [{"name": "merge", "other_axis": "time", "linkers": ["T", "00"]}], + }, + { + "axis_name": "values", + "transformations": [ + {"name": "mapper", "type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]} + ], + }, + ], + "compressed_axes_config": [ + "longitude", + "latitude", + "levtype", + "step", + "date", + "domain", + "expver", + "param", + "class", + "stream", + "type", + ], + "pre_path": {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"}, } - self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} - self.datacube = FDBDatacube(self.config, axis_options=self.options) + # self.datacube = FDBDatacube(self.config, axis_options=self.options) + self.fdbdatacube = gj.GribJump() @pytest.mark.fdb def test_quad_tree_slicer_extract(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] slicer = QuadTreeSlicer(points) polytope = Box(["latitude", "longitude"], [1, 1], [20, 30]).polytope()[0] - tree = slicer.extract(self.datacube, [polytope]) + self.API = Polytope( + request=Request(polytope), + datacube=self.fdbdatacube, + engine=slicer, + options=self.options, + engine_options={"latitude": "quadtree", "longitude": "quadtree"}, + point_cloud_options=points, + ) + tree = slicer.extract(self.API.datacube, [polytope]) assert len(tree.leaves) == 3 - assert set([leaf.flatten()["values"] for leaf in tree.leaves]) == set([0, 3, 4]) + assert set([leaf.flatten()["values"] for leaf in tree.leaves]) == set([(0,), (3,), (4,)]) tree.pprint() points = [[10, 10], [80, 10], [-5, 5], [5, 50], [5, 10], [50, 10], [2, 10], [15, 15]] slicer = QuadTreeSlicer(points) polytope = ConvexPolytope(["latitude", "longitude"], [[-10, 1], [20, 1], [5, 20]]) - tree = slicer.extract(self.datacube, [polytope]) + self.API = Polytope( + request=Request(polytope), + datacube=self.fdbdatacube, + engine=slicer, + options=self.options, + engine_options={"latitude": "quadtree", "longitude": "quadtree"}, + point_cloud_options=points, + ) + tree = slicer.extract(self.API.datacube, [polytope]) assert len(tree.leaves) == 4 - assert set([leaf.flatten()["values"] for leaf in tree.leaves]) == set([0, 2, 4, 6]) + assert set([leaf.flatten()["values"] for leaf in tree.leaves]) == set([(0,), (2,), (4,), (6,)]) tree.pprint() diff --git a/tests/test_quadtree_optimisation.py b/tests/test_quadtree_optimisation.py index 446dd7041..494899b11 100644 --- a/tests/test_quadtree_optimisation.py +++ b/tests/test_quadtree_optimisation.py @@ -6,17 +6,51 @@ class TestQuadTreeSlicer: def setup_method(self, method): - from polytope.datacube.backends.fdb import FDBDatacube + # from polytope.datacube.backends.fdb import FDBDatacube + + # self.options = { + # "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, + # "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, + # "step": {"type_change": "int"}, + # "number": {"type_change": "int"}, + # "longitude": {"cyclic": [0, 360]}, + # } + # self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} + # self.datacube = FDBDatacube(self.config, axis_options=self.options) + import pygribjump as gj self.options = { - "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, - "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, - "step": {"type_change": "int"}, - "number": {"type_change": "int"}, - "longitude": {"cyclic": [0, 360]}, + "axis_config": [ + {"axis_name": "step", "transformations": [{"name": "type_change", "type": "int"}]}, + {"axis_name": "number", "transformations": [{"name": "type_change", "type": "int"}]}, + { + "axis_name": "date", + "transformations": [{"name": "merge", "other_axis": "time", "linkers": ["T", "00"]}], + }, + { + "axis_name": "values", + "transformations": [ + {"name": "mapper", "type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]} + ], + }, + ], + "compressed_axes_config": [ + "longitude", + "latitude", + "levtype", + "step", + "date", + "domain", + "expver", + "param", + "class", + "stream", + "type", + ], + "pre_path": {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"}, } - self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} - self.datacube = FDBDatacube(self.config, axis_options=self.options) + # self.datacube = FDBDatacube(self.config, axis_options=self.options) + self.fdbdatacube = gj.GribJump() @pytest.mark.fdb def test_quad_tree_slicer(self): From d36e2a25f4a18196c4c9a53e797873203ca54d7b Mon Sep 17 00:00:00 2001 From: mathleur Date: Wed, 17 Jul 2024 15:11:37 +0200 Subject: [PATCH 46/75] small optimisation --- polytope/datacube/quad_tree.py | 8 +++- tests/profiled_quadtree.profile | Bin 0 -> 813261 bytes tests/quadtree_slicer_profiler.py | 59 ++++++++++++++++++++++++++++++ tests/test_quad_tree.py | 14 ++++++- 4 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 tests/profiled_quadtree.profile create mode 100644 tests/quadtree_slicer_profiler.py diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index faed9d86f..35c28c620 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -51,6 +51,7 @@ def __init__(self, x=0, y=0, size=[180, 90], depth=0): self.center = [x, y] self.size = size self.depth = depth + self.node_items = set() # self.parent = self def quadrant_rectangle_points(self): @@ -64,9 +65,10 @@ def quadrant_rectangle_points(self): ) def build_point_tree(self, points): + # TODO: SLOW, scales linearly with number of points for index, p in enumerate(points): p_rect = (p[0], p[1], p[0], p[1]) - self.insert(p, p_rect, index) + self.insert(tuple(p), p_rect, index) def pprint(self): if self.depth == 0: @@ -91,10 +93,12 @@ def pprint(self): def insert(self, item, rect, index): rect = normalize_rect(rect) + # node_items = [node.item for node in self.nodes] if len(self.children) == 0: node = QuadNode(item, rect, index) - if item not in [node.item for node in self.nodes]: + if item not in self.node_items: self.nodes.append(node) + self.node_items.add(node.item) if len(self.nodes) > self.MAX and self.depth < self.MAX_DEPTH: self.split() diff --git a/tests/profiled_quadtree.profile b/tests/profiled_quadtree.profile new file mode 100644 index 0000000000000000000000000000000000000000..91bdfe9f850a41a2580dbbc36733d1c8e3565926 GIT binary patch literal 813261 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⪼PPc{*~`MPOk|9HprQ*=(Q=y=8NC75LbJ#}lxXQ@ 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%0DpdCB|7y8D_3%ovO-Q+3fRG!nBJ9bx#gu~*Fr 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 Date: Wed, 17 Jul 2024 15:24:45 +0200 Subject: [PATCH 47/75] optimise quad tree construction --- polytope/datacube/quad_tree.py | 106 +++++++++++++-------------------- 1 file changed, 40 insertions(+), 66 deletions(-) diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index 35c28c620..9cfd2bfd6 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -121,91 +121,65 @@ def insert_into_children(self, item, rect, index): # try to insert into children if rect[0] <= self.center[0]: if rect[1] <= self.center[1]: - # return self.children[0].insert(item, rect, index) self.children[0].insert(item, rect, index) - # new_nodes = self.children[0].insert(item, rect, index) - # return_nodes.extend(new_nodes) if rect[3] >= self.center[1]: - # return self.children[1].insert(item, rect, index) self.children[1].insert(item, rect, index) - # new_nodes = self.children[1].insert(item, rect, index) - # return_nodes.extend(new_nodes) if rect[2] >= self.center[0]: if rect[1] <= self.center[1]: - # return self.children[2].insert(item, rect, index) self.children[2].insert(item, rect, index) - # new_nodes = self.children[2].insert(item, rect, index) - # return_nodes.extend(new_nodes) if rect[3] >= self.center[1]: self.children[3].insert(item, rect, index) return return_nodes def split(self): + half_size = [s / 2 for s in self.size] + x_center, y_center = self.center[0], self.center[1] + hx, hy = half_size[0], half_size[1] + + new_centers = [ + (x_center - hx, y_center - hy), + (x_center - hx, y_center + hy), + (x_center + hx, y_center - hy), + (x_center + hx, y_center + hy), + ] + self.children = [ - QuadTree( - self.center[0] - self.size[0] / 2, - self.center[1] - self.size[1] / 2, - [s / 2 for s in self.size], - self.depth + 1, - ), - QuadTree( - self.center[0] - self.size[0] / 2, - self.center[1] + self.size[1] / 2, - [s / 2 for s in self.size], - self.depth + 1, - ), - QuadTree( - self.center[0] + self.size[0] / 2, - self.center[1] - self.size[1] / 2, - [s / 2 for s in self.size], - self.depth + 1, - ), - QuadTree( - self.center[0] + self.size[0] / 2, - self.center[1] + self.size[1] / 2, - [s / 2 for s in self.size], - self.depth + 1, - ), + QuadTree(new_center[0], new_center[1], half_size, self.depth + 1) + for new_center in new_centers ] + # self.children = [ + # QuadTree( + # self.center[0] - self.size[0] / 2, + # self.center[1] - self.size[1] / 2, + # [s / 2 for s in self.size], + # self.depth + 1, + # ), + # QuadTree( + # self.center[0] - self.size[0] / 2, + # self.center[1] + self.size[1] / 2, + # [s / 2 for s in self.size], + # self.depth + 1, + # ), + # QuadTree( + # self.center[0] + self.size[0] / 2, + # self.center[1] - self.size[1] / 2, + # [s / 2 for s in self.size], + # self.depth + 1, + # ), + # QuadTree( + # self.center[0] + self.size[0] / 2, + # self.center[1] + self.size[1] / 2, + # [s / 2 for s in self.size], + # self.depth + 1, + # ), + # ] + nodes = self.nodes self.nodes = [] for node in nodes: self.insert_into_children(node.item, node.rect, node.index) - # def query_polygon(self, polygon, results=None): - # # intersect quad tree with a 2D polygon - # if results is None: - # results = set() - - # # intersect the children with the polygon - # # TODO: here, we create None polygons... think about how to handle them - # if polygon is None: - # pass - # else: - # if len(self.children) > 0: - - # # first slice vertically - # left_polygon, right_polygon = slice_in_two(polygon, self.center[0], 0) - - # # then slice horizontally - # # ie need to slice the left and right polygons each in two to have the 4 quadrant polygons - - # q1_polygon, q2_polygon = slice_in_two(left_polygon, self.center[1], 1) - # q3_polygon, q4_polygon = slice_in_two(right_polygon, self.center[1], 1) - - # # now query these 4 polygons further down the quadtree - # self.children[0].query_polygon(q1_polygon, results) - # self.children[1].query_polygon(q2_polygon, results) - # self.children[2].query_polygon(q3_polygon, results) - # self.children[3].query_polygon(q4_polygon, results) - - # for node in self.nodes: - # if node.is_contained_in(polygon): - # results.add(node) - - # return results - def query_polygon(self, polygon, results=None): # intersect quad tree with a 2D polygon if results is None: From 6046cd9c4aa84145b03f97627e7a605fc966cd2c Mon Sep 17 00:00:00 2001 From: mathleur Date: Wed, 17 Jul 2024 15:40:59 +0200 Subject: [PATCH 48/75] optimise quad tree --- polytope/datacube/quad_tree.py | 57 +++++++++++++++++++++++--------- tests/profiled_quadtree.profile | Bin 813261 -> 813175 bytes 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index 9cfd2bfd6..c9eaf999e 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -110,26 +110,51 @@ def insert_into_children(self, item, rect, index): # if rect spans center then insert here # NOTE: probably do not need this since rect[0] = rect[2] and rect[1] = rect[3] when we work with points only # so these conditions will never be true - if (rect[0] <= self.center[0] and rect[2] > self.center[0]) and ( - rect[1] <= self.center[1] and rect[3] > self.center[1] - ): + # if (rect[0] <= self.center[0] and rect[2] > self.center[0]) and ( + # rect[1] <= self.center[1] and rect[3] > self.center[1] + # ): + # node = QuadNode(item, rect, index) + # self.nodes.append(node) + # return node + # else: + # return_nodes = [] + # # try to insert into children + # if rect[0] <= self.center[0]: + # if rect[1] <= self.center[1]: + # self.children[0].insert(item, rect, index) + # if rect[3] >= self.center[1]: + # self.children[1].insert(item, rect, index) + # if rect[2] >= self.center[0]: + # if rect[1] <= self.center[1]: + # self.children[2].insert(item, rect, index) + # if rect[3] >= self.center[1]: + # self.children[3].insert(item, rect, index) + # return return_nodes + x_center, y_center = self.center + + # Check if the rect spans the center + if (rect[0] <= x_center < rect[2]) and (rect[1] <= y_center < rect[3]): node = QuadNode(item, rect, index) self.nodes.append(node) return node else: - return_nodes = [] - # try to insert into children - if rect[0] <= self.center[0]: - if rect[1] <= self.center[1]: - self.children[0].insert(item, rect, index) - if rect[3] >= self.center[1]: - self.children[1].insert(item, rect, index) - if rect[2] >= self.center[0]: - if rect[1] <= self.center[1]: - self.children[2].insert(item, rect, index) - if rect[3] >= self.center[1]: - self.children[3].insert(item, rect, index) - return return_nodes + # Conditions to check for each child + left = rect[0] <= x_center + right = rect[2] > x_center + bottom = rect[1] <= y_center + top = rect[3] > y_center + + # Insert into the appropriate children + if left and bottom: + self.children[0].insert(item, rect, index) + if left and top: + self.children[1].insert(item, rect, index) + if right and bottom: + self.children[2].insert(item, rect, index) + if right and top: + self.children[3].insert(item, rect, index) + + return [] def split(self): half_size = [s / 2 for s in self.size] diff --git a/tests/profiled_quadtree.profile b/tests/profiled_quadtree.profile index 91bdfe9f850a41a2580dbbc36733d1c8e3565926..72008161405b6b2d7dc796e9b0692afd0ca3a8a7 100644 GIT binary patch literal 813175 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%0D<_5wW zx^Njw5X4AURnyznSXPh5Vw)Y2u?iJZC%ogDnRQI01r8}O@fr8+Gts2UW?I{~`1$ID z_wAotchK&}mzWUe#5-i&3whPF#MK{0ot}Oc&q2CCnw+N(YUJFbUq0oZOr7w4{gX@m z(uNgFUO_au7toe|kEiRJZ=3cWnh!1pE|A8-C-$MhdpBQrvEw(0yHIccI~LXplPxW#i5{?zO;+m!=vwZjpHxu`H3SjO-QCpgUCQD%}Cv$!rTEGKKG5VljYGccwm6fJJFstHBb5J8zIwMW5gi zPW8UMRa;i)IGv~L$03Pr!sn@chP6hP+mV*!sfMcZU28r+Ws{WGT!bbPhV_ zt3s@-^lH;@HXzQ40j6#vRFPDOwTr~JG0#J*X5gRjf$xqpur?mKRVL_>#n2ZO;^OGZ zcU@{S8ZTJ70PQjA!sR$D-w1-y7cTe?D8>}QXHgHF5vfS=agzDw^}%9 z{bwIdTCB;a0qPKIM^H58qu1wNtdDyO7f6%sfjdTNCC|S7V_%Fd1|Mq%X^AdJtLgcae;q^u=E+)5 z?tS{6`jZ+yg;*jN2p_)xJ#TmT?ve}f4Jf_-?oE4oB2I?^(kY2HauaZ%rGOX?dJNLK z6L3xQNqFaewNiHugHANHMf;K!m~7B8maR0Is)?UPo$wAb8*Qqq;)LkzZ;l%FL}Vd^ z^fExB{SvFdd6$S?2(I~2WU+`C7#|)w@!p8`I~J@(jzb3IX07Yng|YvMs(nf{!|etG zlEQ?;mRHZ)Pq#Qb6n8}o$d%qI3%c*>SR@vX9t?z!)vxd{aRpc#h(}`UNR*1mcIkiK zeZcD8pTen$fi#(%*MpnyE>;c!Ny5-)vz4`9t?;(OMhRn`2uI()HEHw_OhWg$(mscG zs^y2fZ-23GP+Uuzb#colebsH`ZNSKR4kSZ_9etwiYqIzzyz|V2C3306B=iqw%dfXC zoBG>aTpTb!jDmZK9L_v&i@Z;h#3kt| zK2%F>+c{S=^}{>QOcs1x2_4WIs@Cz&i8 zU{OQ@!To`p&xz!=RjoShV6A*dfJQx=X1oOiLV9uE=V83*`#Kz_%;r8;J#h|1oCw^5 zs6xCwrTc-Yt8jtEK$4wkW`2-O4h21W!C=z!VRwpiU%R(ASN_

;APYm>5F)NV5WV!Z~FpxU?CG-FpJ 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 literal 813261 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⪼PPc{*~`MPOk|9HprQ*=(Q=y=8NC75LbJ#}lxXQ@ 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%0DpdCB|7y8D_3%ovO-Q+3fRG!nBJ9bx#gu~*Fr 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 Date: Wed, 17 Jul 2024 16:01:44 +0200 Subject: [PATCH 49/75] fix tests back --- polytope/datacube/quad_tree.py | 57 +++++++++----------------------- tests/profiled_quadtree.profile | Bin 813175 -> 813105 bytes 2 files changed, 16 insertions(+), 41 deletions(-) diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index c9eaf999e..9cfd2bfd6 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -110,51 +110,26 @@ def insert_into_children(self, item, rect, index): # if rect spans center then insert here # NOTE: probably do not need this since rect[0] = rect[2] and rect[1] = rect[3] when we work with points only # so these conditions will never be true - # if (rect[0] <= self.center[0] and rect[2] > self.center[0]) and ( - # rect[1] <= self.center[1] and rect[3] > self.center[1] - # ): - # node = QuadNode(item, rect, index) - # self.nodes.append(node) - # return node - # else: - # return_nodes = [] - # # try to insert into children - # if rect[0] <= self.center[0]: - # if rect[1] <= self.center[1]: - # self.children[0].insert(item, rect, index) - # if rect[3] >= self.center[1]: - # self.children[1].insert(item, rect, index) - # if rect[2] >= self.center[0]: - # if rect[1] <= self.center[1]: - # self.children[2].insert(item, rect, index) - # if rect[3] >= self.center[1]: - # self.children[3].insert(item, rect, index) - # return return_nodes - x_center, y_center = self.center - - # Check if the rect spans the center - if (rect[0] <= x_center < rect[2]) and (rect[1] <= y_center < rect[3]): + if (rect[0] <= self.center[0] and rect[2] > self.center[0]) and ( + rect[1] <= self.center[1] and rect[3] > self.center[1] + ): node = QuadNode(item, rect, index) self.nodes.append(node) return node else: - # Conditions to check for each child - left = rect[0] <= x_center - right = rect[2] > x_center - bottom = rect[1] <= y_center - top = rect[3] > y_center - - # Insert into the appropriate children - if left and bottom: - self.children[0].insert(item, rect, index) - if left and top: - self.children[1].insert(item, rect, index) - if right and bottom: - self.children[2].insert(item, rect, index) - if right and top: - self.children[3].insert(item, rect, index) - - return [] + return_nodes = [] + # try to insert into children + if rect[0] <= self.center[0]: + if rect[1] <= self.center[1]: + self.children[0].insert(item, rect, index) + if rect[3] >= self.center[1]: + self.children[1].insert(item, rect, index) + if rect[2] >= self.center[0]: + if rect[1] <= self.center[1]: + self.children[2].insert(item, rect, index) + if rect[3] >= self.center[1]: + self.children[3].insert(item, rect, index) + return return_nodes def split(self): half_size = [s / 2 for s in self.size] diff --git a/tests/profiled_quadtree.profile b/tests/profiled_quadtree.profile index 72008161405b6b2d7dc796e9b0692afd0ca3a8a7..cdd4e5a3417e902c9581ce4514b7f3cc3c6ab18c 100644 GIT binary patch literal 813105 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�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∋2X`xlYX>#!ESHCh4)*RE~Cif{}Uj!THgs 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%0D<_5wW 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ÐaiL=Z4B4ef;q_*>n*tQnMcm^H0%sR><+=+A>1`s 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

;APYm>5F)NV5WV!Z~FpxU?CG-FpJ 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 From 9425e73eae3b3e91ed0b4122189465c826b2a7cd Mon Sep 17 00:00:00 2001 From: mathleur Date: Wed, 17 Jul 2024 16:57:07 +0200 Subject: [PATCH 50/75] optimise quad tree --- polytope/datacube/quad_tree.py | 132 ++++++++++++++-------------- polytope/engine/quadtree_slicer.py | 4 +- tests/test_quad_tree.py | 30 +++---- tests/test_quadtree_optimisation.py | 10 +-- 4 files changed, 87 insertions(+), 89 deletions(-) diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index 9cfd2bfd6..3c5004726 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -22,15 +22,15 @@ def normalize_rect(rect): class QuadNode: - def __init__(self, item, rect, index): + def __init__(self, item, index): self.item = item - self.rect = rect + # self.rect = rect self.index = index def is_contained_in(self, polygon): # implement method to check if the node point is inside the polygon - node_x = self.rect[0] - node_y = self.rect[1] + node_x = self.item[0] + node_y = self.item[1] sliced_vertical_polygon = slice(polygon, polygon._axes[0], node_x, 0) if sliced_vertical_polygon: @@ -48,8 +48,8 @@ class QuadTree: def __init__(self, x=0, y=0, size=[180, 90], depth=0): self.nodes = [] self.children = [] - self.center = [x, y] - self.size = size + self.center = (x, y) + self.size = tuple(size) self.depth = depth self.node_items = set() # self.parent = self @@ -66,16 +66,20 @@ def quadrant_rectangle_points(self): def build_point_tree(self, points): # TODO: SLOW, scales linearly with number of points + # normalized_points = [(tuple(p), (p[0], p[1], p[0], p[1])) for p in points] + + # for index, (point, p_rect) in enumerate(normalized_points): + # self.insert(point, p_rect, index) for index, p in enumerate(points): - p_rect = (p[0], p[1], p[0], p[1]) - self.insert(tuple(p), p_rect, index) + # p_rect = (p[0], p[1], p[0], p[1]) + self.insert(tuple(p), index) def pprint(self): if self.depth == 0: print("\n") if len(self.children) == 0: for n in self.nodes: - print("\t" * (self.depth + 1) + "\u21b3" + str(n.rect[0]) + " , " + str(n.rect[1])) + print("\t" * (self.depth + 1) + "\u21b3" + str(n.item[0]) + " , " + str(n.item[1])) for child in self.children: print( "\t" * (self.depth + 1) @@ -90,12 +94,11 @@ def pprint(self): ) child.pprint() - def insert(self, item, rect, index): - rect = normalize_rect(rect) + def insert(self, item, index): # node_items = [node.item for node in self.nodes] - if len(self.children) == 0: - node = QuadNode(item, rect, index) + if not self.children: + node = QuadNode(item, index) if item not in self.node_items: self.nodes.append(node) self.node_items.add(node.item) @@ -104,37 +107,58 @@ def insert(self, item, rect, index): self.split() return node else: - return self.insert_into_children(item, rect, index) + return self.insert_into_children(item, index) - def insert_into_children(self, item, rect, index): + def insert_into_children(self, item, index): # if rect spans center then insert here # NOTE: probably do not need this since rect[0] = rect[2] and rect[1] = rect[3] when we work with points only # so these conditions will never be true - if (rect[0] <= self.center[0] and rect[2] > self.center[0]) and ( - rect[1] <= self.center[1] and rect[3] > self.center[1] - ): - node = QuadNode(item, rect, index) - self.nodes.append(node) - return node - else: - return_nodes = [] - # try to insert into children - if rect[0] <= self.center[0]: - if rect[1] <= self.center[1]: - self.children[0].insert(item, rect, index) - if rect[3] >= self.center[1]: - self.children[1].insert(item, rect, index) - if rect[2] >= self.center[0]: - if rect[1] <= self.center[1]: - self.children[2].insert(item, rect, index) - if rect[3] >= self.center[1]: - self.children[3].insert(item, rect, index) - return return_nodes + # if (rect[0] <= self.center[0] and rect[2] > self.center[0]) and ( + # rect[1] <= self.center[1] and rect[3] > self.center[1] + # ): + # node = QuadNode(item, rect, index) + # self.nodes.append(node) + # return node + # else: + # return_nodes = [] + # # try to insert into children + # if rect[0] <= self.center[0]: + # if rect[1] <= self.center[1]: + # self.children[0].insert(item, rect, index) + # if rect[3] >= self.center[1]: + # self.children[1].insert(item, rect, index) + # if rect[2] >= self.center[0]: + # if rect[1] <= self.center[1]: + # self.children[2].insert(item, rect, index) + # if rect[3] >= self.center[1]: + # self.children[3].insert(item, rect, index) + # return return_nodes + # if (item[0] <= self.center[0] and item[0] > self.center[0]) and ( + # item[1] <= self.center[1] and item[1] > self.center[1] + # ): + # node = QuadNode(item, index) + # self.nodes.append(node) + # return node + # else: + # if True: + # return_nodes = [] + # try to insert into children + if item[0] <= self.center[0]: + if item[1] <= self.center[1]: + self.children[0].insert(item, index) + if item[1] >= self.center[1]: + self.children[1].insert(item, index) + if item[0] >= self.center[0]: + if item[1] <= self.center[1]: + self.children[2].insert(item, index) + if item[1] >= self.center[1]: + self.children[3].insert(item, index) + # return return_nodes def split(self): half_size = [s / 2 for s in self.size] x_center, y_center = self.center[0], self.center[1] - hx, hy = half_size[0], half_size[1] + hx, hy = half_size new_centers = [ (x_center - hx, y_center - hy), @@ -148,37 +172,10 @@ def split(self): for new_center in new_centers ] - # self.children = [ - # QuadTree( - # self.center[0] - self.size[0] / 2, - # self.center[1] - self.size[1] / 2, - # [s / 2 for s in self.size], - # self.depth + 1, - # ), - # QuadTree( - # self.center[0] - self.size[0] / 2, - # self.center[1] + self.size[1] / 2, - # [s / 2 for s in self.size], - # self.depth + 1, - # ), - # QuadTree( - # self.center[0] + self.size[0] / 2, - # self.center[1] - self.size[1] / 2, - # [s / 2 for s in self.size], - # self.depth + 1, - # ), - # QuadTree( - # self.center[0] + self.size[0] / 2, - # self.center[1] + self.size[1] / 2, - # [s / 2 for s in self.size], - # self.depth + 1, - # ), - # ] - nodes = self.nodes self.nodes = [] for node in nodes: - self.insert_into_children(node.item, node.rect, node.index) + self.insert_into_children(node.item, node.index) def query_polygon(self, polygon, results=None): # intersect quad tree with a 2D polygon @@ -213,9 +210,10 @@ def query_polygon(self, polygon, results=None): self.children[2].query_polygon(q3_polygon, results) self.children[3].query_polygon(q4_polygon, results) - for node in self.nodes: - if node.is_contained_in(polygon): - results.add(node) + # for node in self.nodes: + # if node.is_contained_in(polygon): + # results.add(node) + results.update(node for node in self.nodes if node.is_contained_in(polygon)) return results diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index f2e8d8d76..18ae49787 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -79,8 +79,8 @@ def _build_sliceable_child(self, polytope, ax, node, datacube, next_nodes): for point in extracted_points: # convert to float for slicing value = point.index - lat_val = point.rect[0] - lon_val = point.rect[1] + lat_val = point.item[0] + lon_val = point.item[1] # values_axis = IntDatacubeAxis() lat_ax = ax diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index 6e1578813..1be5f7a32 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -68,18 +68,18 @@ def test_quad_tree_query_polygon(self): polytope = Box(["lat", "lon"], [1, 1], [20, 30]).polytope()[0] results = slicer.quad_tree.query_polygon(polytope) assert len(results) == 3 - assert (10, 10, 10, 10) in [node.rect for node in results] - assert (5, 10, 5, 10) in [node.rect for node in results] - assert (5, 20, 5, 20) in [node.rect for node in results] + assert (10, 10) in [node.item for node in results] + assert (5, 10) in [node.item for node in results] + assert (5, 20) in [node.item for node in results] points = [[10, 10], [80, 10], [-5, 5], [5, 50], [5, 10], [50, 10], [2, 10], [15, 15]] slicer = QuadTreeSlicer(points) polytope = ConvexPolytope(["lat", "lon"], [[-10, 1], [20, 1], [5, 20]]) results = slicer.quad_tree.query_polygon(polytope) assert len(results) == 4 - assert (-5, 5, -5, 5) in [node.rect for node in results] - assert (5, 10, 5, 10) in [node.rect for node in results] - assert (10, 10, 10, 10) in [node.rect for node in results] - assert (2, 10, 2, 10) in [node.rect for node in results] + assert (-5, 5) in [node.item for node in results] + assert (5, 10) in [node.item for node in results] + assert (10, 10) in [node.item for node in results] + assert (2, 10) in [node.item for node in results] @pytest.mark.fdb def test_slice_in_two_vertically(self): @@ -97,26 +97,26 @@ def test_slice_in_two_horizontally(self): @pytest.mark.fdb def test_quad_node_is_contained_in_box(self): - node = QuadNode(1, [1, 1, 1, 1], 0) + node = QuadNode([1, 1], 0) polytope = Box(["lat", "lon"], [0, 0], [2, 2]).polytope()[0] assert node.is_contained_in(polytope) - second_node = QuadNode(1, [3, 3, 3, 3], 0) + second_node = QuadNode([3, 3], 0) assert not second_node.is_contained_in(polytope) - third_node = QuadNode(1, [1, 0, 1, 0], 0) + third_node = QuadNode([1, 0], 0) assert third_node.is_contained_in(polytope) @pytest.mark.fdb def test_quad_node_is_contained_in_triangle(self): - node = QuadNode(1, [1, 1, 1, 1], 0) + node = QuadNode([1, 1], 0) polytope = ConvexPolytope(["lat", "lon"], [[0, 0], [1, 1], [2, 0]]) assert node.is_contained_in(polytope) - node = QuadNode(1, [1, 0.5, 1, 0.5], 0) + node = QuadNode([1, 0.5], 0) assert node.is_contained_in(polytope) - second_node = QuadNode(1, [3, 3, 3, 3], 0) + second_node = QuadNode([3, 3], 0) assert not second_node.is_contained_in(polytope) - third_node = QuadNode(1, [1, 0, 1, 0], 0) + third_node = QuadNode([1, 0], 0) assert third_node.is_contained_in(polytope) - third_node = QuadNode(1, [0.1, 0.5, 0.1, 0.5], 0) + third_node = QuadNode([0.1, 0.5], 0) assert not third_node.is_contained_in(polytope) @pytest.mark.fdb diff --git a/tests/test_quadtree_optimisation.py b/tests/test_quadtree_optimisation.py index 494899b11..727029850 100644 --- a/tests/test_quadtree_optimisation.py +++ b/tests/test_quadtree_optimisation.py @@ -66,8 +66,8 @@ def test_quad_tree_query_polygon(self): polytope = Box(["lat", "lon"], [0, 0], [90, 45]).polytope()[0] results = slicer.quad_tree.query_polygon(polytope) assert len(results) == 5 - assert (10, 10, 10, 10) in [node.rect for node in results] - assert (5, 10, 5, 10) in [node.rect for node in results] - assert (5, 20, 5, 20) in [node.rect for node in results] - assert (80, 10, 80, 10) in [node.rect for node in results] - assert (50, 10, 50, 10) in [node.rect for node in results] + assert (10, 10) in [node.item for node in results] + assert (5, 10) in [node.item for node in results] + assert (5, 20) in [node.item for node in results] + assert (80, 10) in [node.item for node in results] + assert (50, 10) in [node.item for node in results] From 0558ac834de2fd983333dd128048740255f37835 Mon Sep 17 00:00:00 2001 From: mathleur Date: Wed, 17 Jul 2024 17:09:34 +0200 Subject: [PATCH 51/75] optimise --- polytope/datacube/quad_tree.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index 3c5004726..14c08e723 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -29,8 +29,7 @@ def __init__(self, item, index): def is_contained_in(self, polygon): # implement method to check if the node point is inside the polygon - node_x = self.item[0] - node_y = self.item[1] + node_x, node_y = self.item sliced_vertical_polygon = slice(polygon, polygon._axes[0], node_x, 0) if sliced_vertical_polygon: From 0f337f6dc26798d7e3456a1c149092ba7963a5d8 Mon Sep 17 00:00:00 2001 From: mathleur Date: Wed, 17 Jul 2024 17:14:22 +0200 Subject: [PATCH 52/75] clean up quad tree --- polytope/datacube/quad_tree.py | 53 ---------------------------------- 1 file changed, 53 deletions(-) diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index 14c08e723..3889787ab 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -12,19 +12,9 @@ """ -def normalize_rect(rect): - x1, y1, x2, y2 = rect - if x1 > x2: - x1, x2 = x2, x1 - if y1 > y2: - y1, y2 = y2, y1 - return (x1, y1, x2, y2) - - class QuadNode: def __init__(self, item, index): self.item = item - # self.rect = rect self.index = index def is_contained_in(self, polygon): @@ -51,7 +41,6 @@ def __init__(self, x=0, y=0, size=[180, 90], depth=0): self.size = tuple(size) self.depth = depth self.node_items = set() - # self.parent = self def quadrant_rectangle_points(self): return set( @@ -65,12 +54,7 @@ def quadrant_rectangle_points(self): def build_point_tree(self, points): # TODO: SLOW, scales linearly with number of points - # normalized_points = [(tuple(p), (p[0], p[1], p[0], p[1])) for p in points] - - # for index, (point, p_rect) in enumerate(normalized_points): - # self.insert(point, p_rect, index) for index, p in enumerate(points): - # p_rect = (p[0], p[1], p[0], p[1]) self.insert(tuple(p), index) def pprint(self): @@ -95,7 +79,6 @@ def pprint(self): def insert(self, item, index): - # node_items = [node.item for node in self.nodes] if not self.children: node = QuadNode(item, index) if item not in self.node_items: @@ -109,38 +92,6 @@ def insert(self, item, index): return self.insert_into_children(item, index) def insert_into_children(self, item, index): - # if rect spans center then insert here - # NOTE: probably do not need this since rect[0] = rect[2] and rect[1] = rect[3] when we work with points only - # so these conditions will never be true - # if (rect[0] <= self.center[0] and rect[2] > self.center[0]) and ( - # rect[1] <= self.center[1] and rect[3] > self.center[1] - # ): - # node = QuadNode(item, rect, index) - # self.nodes.append(node) - # return node - # else: - # return_nodes = [] - # # try to insert into children - # if rect[0] <= self.center[0]: - # if rect[1] <= self.center[1]: - # self.children[0].insert(item, rect, index) - # if rect[3] >= self.center[1]: - # self.children[1].insert(item, rect, index) - # if rect[2] >= self.center[0]: - # if rect[1] <= self.center[1]: - # self.children[2].insert(item, rect, index) - # if rect[3] >= self.center[1]: - # self.children[3].insert(item, rect, index) - # return return_nodes - # if (item[0] <= self.center[0] and item[0] > self.center[0]) and ( - # item[1] <= self.center[1] and item[1] > self.center[1] - # ): - # node = QuadNode(item, index) - # self.nodes.append(node) - # return node - # else: - # if True: - # return_nodes = [] # try to insert into children if item[0] <= self.center[0]: if item[1] <= self.center[1]: @@ -152,7 +103,6 @@ def insert_into_children(self, item, index): self.children[2].insert(item, index) if item[1] >= self.center[1]: self.children[3].insert(item, index) - # return return_nodes def split(self): half_size = [s / 2 for s in self.size] @@ -209,9 +159,6 @@ def query_polygon(self, polygon, results=None): self.children[2].query_polygon(q3_polygon, results) self.children[3].query_polygon(q4_polygon, results) - # for node in self.nodes: - # if node.is_contained_in(polygon): - # results.add(node) results.update(node for node in self.nodes if node.is_contained_in(polygon)) return results From c590e858d3ed0a56485aaf91b2bbb1aee7fe7ae2 Mon Sep 17 00:00:00 2001 From: mathleur Date: Thu, 18 Jul 2024 10:14:14 +0200 Subject: [PATCH 53/75] optimise quad tree --- polytope/datacube/quad_tree.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index 3889787ab..a61bdc771 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -92,16 +92,18 @@ def insert(self, item, index): return self.insert_into_children(item, index) def insert_into_children(self, item, index): + x, y = item + cx, cy = self.center # try to insert into children - if item[0] <= self.center[0]: - if item[1] <= self.center[1]: + if x <= cx: + if y <= cy: self.children[0].insert(item, index) - if item[1] >= self.center[1]: + if y >= cy: self.children[1].insert(item, index) - if item[0] >= self.center[0]: - if item[1] <= self.center[1]: + if x >= cx: + if y <= cy: self.children[2].insert(item, index) - if item[1] >= self.center[1]: + if y >= cy: self.children[3].insert(item, index) def split(self): From a2028e71677bc6173f96c901284a94eaea18b30e Mon Sep 17 00:00:00 2001 From: mathleur Date: Thu, 18 Jul 2024 10:48:27 +0200 Subject: [PATCH 54/75] optimise and clean up --- polytope/datacube/quad_tree.py | 4 +--- polytope/engine/hullslicer.py | 6 +++-- polytope/engine/quadtree_slicer.py | 2 +- polytope/polytope.py | 15 ++++++------ tests/quadtree_slicer_profiler.py | 7 +++--- tests/test_cyclic_axis_over_negative_vals.py | 4 +--- tests/test_cyclic_axis_slicer_not_0.py | 3 --- tests/test_cyclic_axis_slicing.py | 3 --- tests/test_cyclic_nearest.py | 5 ---- tests/test_cyclic_simple.py | 3 --- tests/test_cyclic_snapping.py | 4 +--- tests/test_datacube_axes_init.py | 3 --- tests/test_ecmwf_oper_data_fdb.py | 9 -------- tests/test_engine_slicer.py | 24 ++++++++------------ tests/test_fdb_datacube.py | 5 ---- tests/test_fdb_unmap_tree.py | 3 --- tests/test_float_type.py | 4 +--- tests/test_healpix_mapper.py | 3 --- tests/test_hullslicer_engine.py | 8 ++----- tests/test_incomplete_tree_fdb.py | 5 ---- tests/test_local_grid_cyclic.py | 5 ---- tests/test_local_regular_grid.py | 21 ----------------- tests/test_merge_octahedral_one_axis.py | 3 --- tests/test_merge_transformation.py | 3 --- tests/test_multiple_param_fdb.py | 3 --- tests/test_octahedral_grid.py | 3 --- tests/test_orca_irregular_grid.py | 3 --- tests/test_point_nearest.py | 13 ----------- tests/test_point_shape.py | 4 +--- tests/test_polytope_extract.py | 12 ---------- tests/test_polytope_extract_fdb.py | 12 ---------- tests/test_quad_tree.py | 14 ++++-------- tests/test_quadtree_edge_cases.py | 5 +--- tests/test_quadtree_indices.py | 22 +++--------------- tests/test_regular_grid.py | 3 --- tests/test_request_trees_after_slicing.py | 4 +--- tests/test_reverse_transformation.py | 4 +--- tests/test_shapes.py | 6 +---- tests/test_slice_date_range_fdb.py | 7 ------ tests/test_slice_date_range_fdb_v2.py | 3 --- tests/test_slicer_engine.py | 6 ++--- tests/test_slicer_era5.py | 3 --- tests/test_slicer_xarray.py | 4 +--- tests/test_slicing_unsliceable_axis.py | 4 +--- tests/test_slicing_xarray_3D.py | 4 +--- tests/test_slicing_xarray_4D.py | 4 +--- tests/test_snapping.py | 4 +--- tests/test_snapping_real_data.py | 3 --- tests/test_tree_protobuf_encoding.py | 3 --- tests/test_tree_protobuf_encoding_fdb.py | 3 --- tests/test_type_change_transformation.py | 4 +--- tests/test_union_gj.py | 3 --- 52 files changed, 52 insertions(+), 263 deletions(-) diff --git a/polytope/datacube/quad_tree.py b/polytope/datacube/quad_tree.py index a61bdc771..96c1ba44b 100644 --- a/polytope/datacube/quad_tree.py +++ b/polytope/datacube/quad_tree.py @@ -78,7 +78,6 @@ def pprint(self): child.pprint() def insert(self, item, index): - if not self.children: node = QuadNode(item, index) if item not in self.node_items: @@ -119,8 +118,7 @@ def split(self): ] self.children = [ - QuadTree(new_center[0], new_center[1], half_size, self.depth + 1) - for new_center in new_centers + QuadTree(new_center[0], new_center[1], half_size, self.depth + 1) for new_center in new_centers ] nodes = self.nodes diff --git a/polytope/engine/hullslicer.py b/polytope/engine/hullslicer.py index be7ccf521..bf7e8de86 100644 --- a/polytope/engine/hullslicer.py +++ b/polytope/engine/hullslicer.py @@ -17,9 +17,9 @@ class HullSlicer(Engine): - def __init__(self): super().__init__() + # self.ax_is_unsliceable = {} # self.axis_values_between = {} # self.sliced_polytopes = {} @@ -151,7 +151,9 @@ def _build_branch(self, ax, node, datacube, next_nodes, engine): self._build_unsliceable_child(polytope, ax, node, datacube, [lower], next_nodes, slice_axis_idx) else: values = self.find_values_between(polytope, ax, node, datacube, lower, upper) - self._build_sliceable_child(polytope, ax, node, datacube, values, next_nodes, slice_axis_idx, engine) + self._build_sliceable_child( + polytope, ax, node, datacube, values, next_nodes, slice_axis_idx, engine + ) else: all_values = [] all_lowers = [] diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 18ae49787..8b99c4a41 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -92,7 +92,7 @@ def _build_sliceable_child(self, polytope, ax, node, datacube, next_nodes): # store the native type # child = node.create_child(ax, value) (child, _) = node.create_child(lat_ax, lat_val, []) - (grand_child , _) = child.create_child(lon_ax, lon_val, []) + (grand_child, _) = child.create_child(lon_ax, lon_val, []) # NOTE: the index of the point is stashed in the branches' result grand_child.indexes = [value] grand_child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) diff --git a/polytope/polytope.py b/polytope/polytope.py index 36e35af70..1a64facd2 100644 --- a/polytope/polytope.py +++ b/polytope/polytope.py @@ -1,14 +1,12 @@ from typing import List +from .datacube.backends.datacube import Datacube +from .datacube.datacube_axis import UnsliceableDatacubeAxis from .datacube.tensor_index_tree import TensorIndexTree from .engine.hullslicer import HullSlicer from .engine.quadtree_slicer import QuadTreeSlicer from .options import PolytopeOptions from .shapes import ConvexPolytope -from .datacube.backends.datacube import Datacube -from .datacube.datacube_axis import UnsliceableDatacubeAxis - -# from .utility.engine_tools import find_polytope_combinations from .utility.combinatorics import group, tensor_product, unique from .utility.exceptions import AxisOverdefinedError @@ -50,13 +48,14 @@ def __init__( self, request, datacube, - engine=None, + # engine=None, options=None, engine_options=None, point_cloud_options=None, ): from .datacube import Datacube - from .engine import Engine + + # from .engine import Engine if options is None: options = {} @@ -75,7 +74,7 @@ def __init__( point_cloud_options, alternative_axes, ) - self.engine = engine if engine is not None else Engine.default() + # self.engine = engine if engine is not None else Engine.default() if engine_options == {}: for ax_name in self.datacube._axes.keys(): engine_options[ax_name] = "hullslicer" @@ -94,7 +93,7 @@ def create_engines(self): if "hullslicer" in engine_types: engines["hullslicer"] = HullSlicer() return engines - + def _unique_continuous_points(self, p: ConvexPolytope, datacube: Datacube): for i, ax in enumerate(p._axes): mapper = datacube.get_mapper(ax) diff --git a/tests/quadtree_slicer_profiler.py b/tests/quadtree_slicer_profiler.py index 5fb35422e..c3cca5984 100644 --- a/tests/quadtree_slicer_profiler.py +++ b/tests/quadtree_slicer_profiler.py @@ -1,9 +1,10 @@ +import numpy as np +import pygribjump as gj + from polytope.engine.quadtree_slicer import QuadTreeSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box -import pygribjump as gj - options = { "axis_config": [ {"axis_name": "step", "transformations": [{"name": "type_change", "type": "int"}]}, @@ -36,8 +37,6 @@ } fdbdatacube = gj.GribJump() -import numpy as np - x = np.linspace(0, 100, 1000) y = np.linspace(0, 100, 1000) # create the mesh based on these arrays diff --git a/tests/test_cyclic_axis_over_negative_vals.py b/tests/test_cyclic_axis_over_negative_vals.py index 85b5e18c6..76bbe3865 100644 --- a/tests/test_cyclic_axis_over_negative_vals.py +++ b/tests/test_cyclic_axis_over_negative_vals.py @@ -2,7 +2,6 @@ import pandas as pd import xarray as xr -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -27,8 +26,7 @@ def setup_method(self, method): ], "compressed_axes_config": ["long", "level", "step", "date"], } - self.slicer = HullSlicer() - self.API = Polytope(request={}, datacube=array, engine=self.slicer, options=options) + self.API = Polytope(request={}, datacube=array, options=options) # Testing different shapes diff --git a/tests/test_cyclic_axis_slicer_not_0.py b/tests/test_cyclic_axis_slicer_not_0.py index f75f441d9..947d98de4 100644 --- a/tests/test_cyclic_axis_slicer_not_0.py +++ b/tests/test_cyclic_axis_slicer_not_0.py @@ -2,7 +2,6 @@ import pandas as pd import xarray as xr -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -27,11 +26,9 @@ def setup_method(self, method): ], "compressed_axes_config": ["long", "level", "step", "date"], } - self.slicer = HullSlicer() self.API = Polytope( request={}, datacube=array, - engine=self.slicer, options=self.options, ) diff --git a/tests/test_cyclic_axis_slicing.py b/tests/test_cyclic_axis_slicing.py index 91dc9fb61..c0bb24c1d 100644 --- a/tests/test_cyclic_axis_slicing.py +++ b/tests/test_cyclic_axis_slicing.py @@ -2,7 +2,6 @@ import pandas as pd import xarray as xr -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -27,11 +26,9 @@ def setup_method(self, method): ], "compressed_axes_config": ["long", "level", "step", "date"], } - self.slicer = HullSlicer() self.API = Polytope( request={}, datacube=array, - engine=self.slicer, options=self.options, ) diff --git a/tests/test_cyclic_nearest.py b/tests/test_cyclic_nearest.py index fc463ea0f..39b95ee43 100644 --- a/tests/test_cyclic_nearest.py +++ b/tests/test_cyclic_nearest.py @@ -3,7 +3,6 @@ from eccodes import codes_grib_find_nearest, codes_grib_new_from_file from helper_functions import download_test_data -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Point, Select @@ -85,11 +84,9 @@ def test_regular_grid(self): Point(["latitude", "longitude"], [[39, 360 - 76.45]], method="nearest"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -110,11 +107,9 @@ def test_regular_grid(self): Point(["latitude", "longitude"], [[39, -76.45]], method="nearest"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) diff --git a/tests/test_cyclic_simple.py b/tests/test_cyclic_simple.py index 05398fb2c..ae9f67c9d 100644 --- a/tests/test_cyclic_simple.py +++ b/tests/test_cyclic_simple.py @@ -2,7 +2,6 @@ import pandas as pd import xarray as xr -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -27,11 +26,9 @@ def setup_method(self, method): ], "compressed_axes_config": ["long", "level", "step", "date"], } - self.slicer = HullSlicer() self.API = Polytope( request={}, datacube=array, - engine=self.slicer, options=options, ) diff --git a/tests/test_cyclic_snapping.py b/tests/test_cyclic_snapping.py index 0b66ad91f..7e6109786 100644 --- a/tests/test_cyclic_snapping.py +++ b/tests/test_cyclic_snapping.py @@ -1,6 +1,5 @@ import xarray as xr -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Select @@ -20,8 +19,7 @@ def setup_method(self, method): "axis_config": [{"axis_name": "long", "transformations": [{"name": "cyclic", "range": [0, 1.0]}]}], "compressed_axes_config": ["long"], } - self.slicer = HullSlicer() - self.API = Polytope(request={}, datacube=array, engine=self.slicer, options=options) + self.API = Polytope(request={}, datacube=array, options=options) # Testing different shapes diff --git a/tests/test_datacube_axes_init.py b/tests/test_datacube_axes_init.py index 46c20ecd9..b34ff1b03 100644 --- a/tests/test_datacube_axes_init.py +++ b/tests/test_datacube_axes_init.py @@ -3,7 +3,6 @@ from helper_functions import download_test_data from polytope.datacube.datacube_axis import FloatDatacubeAxis -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -41,11 +40,9 @@ def setup_method(self, method): "type", ], } - self.slicer = HullSlicer() self.API = Polytope( request={}, datacube=latlon_array, - engine=self.slicer, options=self.options, ) self.datacube = self.API.datacube diff --git a/tests/test_ecmwf_oper_data_fdb.py b/tests/test_ecmwf_oper_data_fdb.py index 27b670345..290c5a80f 100644 --- a/tests/test_ecmwf_oper_data_fdb.py +++ b/tests/test_ecmwf_oper_data_fdb.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Point, Select, Span @@ -59,11 +58,9 @@ def test_fdb_datacube(self): Box(["latitude", "longitude"], [0, 0], [0.2, 0.2]), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -87,11 +84,9 @@ def test_fdb_datacube_point(self): Point(["latitude", "longitude"], [[0.035149384216, 0.0]], method="surrounding"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -116,11 +111,9 @@ def test_fdb_datacube_point_v2(self): Point(["latitude", "longitude"], [[0.035149384216, 0.0]], method="surrounding"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -175,11 +168,9 @@ def test_fdb_datacube_point_step_not_compressed(self): Point(["latitude", "longitude"], [[0.035149384216, 0.0]], method="surrounding"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) diff --git a/tests/test_engine_slicer.py b/tests/test_engine_slicer.py index e30ba52fa..96ed17b7e 100644 --- a/tests/test_engine_slicer.py +++ b/tests/test_engine_slicer.py @@ -1,21 +1,17 @@ from polytope.datacube.backends.mock import MockDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.shapes import Box, Polygon -import numpy as np -import xarray as xr from polytope.polytope import Polytope -from polytope.datacube.backends.xarray import XArrayDatacube +from polytope.shapes import Box, Polygon class TestEngineSlicer: def setup_method(self, method): - self.slicer = HullSlicer() + pass def test_2D_box(self): datacube = MockDatacube({"x": 100, "y": 100}) polytopes = Box(["x", "y"], lower_corner=[3, 3], upper_corner=[6, 6]).polytope() # result = self.slicer.extract(datacube, polytopes) - API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, polytopes) assert len(result.leaves) == 4 * 4 @@ -23,7 +19,7 @@ def test_3D_box(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100}) polytopes = Box(["x", "y", "z"], lower_corner=[3, 3, 3], upper_corner=[6, 6, 6]).polytope() # result = self.slicer.extract(datacube, polytopes) - API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, polytopes) assert len(result.leaves) == 4 * 4 * 4 @@ -31,7 +27,7 @@ def test_4D_box(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100, "q": 100}) polytopes = Box(["x", "y", "z", "q"], lower_corner=[3, 3, 3, 3], upper_corner=[6, 6, 6, 6]).polytope() # result = self.slicer.extract(datacube, polytopes) - API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, polytopes) assert len(result.leaves) == 4 * 4 * 4 * 4 @@ -39,7 +35,7 @@ def test_triangle(self): datacube = MockDatacube({"x": 100, "y": 100}) triangle = Polygon(["x", "y"], [[3, 3], [3, 6], [6, 3]]).polytope() # result = self.slicer.extract(datacube, triangle) - API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, triangle) assert len(result.leaves) == 4 + 3 + 2 + 1 @@ -47,7 +43,7 @@ def test_reusable(self): datacube = MockDatacube({"x": 100, "y": 100}) polytopes = Polygon(["x", "y"], [[3, 3], [3, 6], [6, 3]]).polytope() # result = self.slicer.extract(datacube, polytopes) - API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, polytopes) assert len(result.leaves) == 4 + 3 + 2 + 1 polytopes = Box(["x", "y"], lower_corner=[3, 3], upper_corner=[6, 6]).polytope() @@ -62,7 +58,7 @@ def test_2D_box_get_function(self): datacube = MockDatacube({"x": 100, "y": 100}) polytopes = Box(["x", "y"], lower_corner=[2, -2], upper_corner=[4, -1]).polytope() # result = self.slicer.extract(datacube, polytopes) - API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, polytopes) datacube.get(result) result.pprint() @@ -71,7 +67,7 @@ def test_3D_box_get_function(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100}) polytopes = Box(["x", "y", "z"], lower_corner=[3, 2, -2], upper_corner=[6, 2, -1]).polytope() # result = self.slicer.extract(datacube, polytopes) - API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, polytopes) datacube.get(result) result.pprint() @@ -80,7 +76,7 @@ def test_3D_box_get_function2(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100}) polytopes = Box(["x", "y", "z"], lower_corner=[3, 2, 1], upper_corner=[6, 2, 1]).polytope() # result = self.slicer.extract(datacube, polytopes) - API = Polytope(request={}, datacube=datacube, engine=self.slicer, options={}) + API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, polytopes) datacube.get(result) result.pprint() diff --git a/tests/test_fdb_datacube.py b/tests/test_fdb_datacube.py index 985dba230..1ad16a0d0 100644 --- a/tests/test_fdb_datacube.py +++ b/tests/test_fdb_datacube.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select, Span @@ -63,11 +62,9 @@ def test_fdb_datacube(self): Box(["latitude", "longitude"], [0, 0], [0.2, 0.2]), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -114,11 +111,9 @@ def test_fdb_datacube_select_grid(self): Span("longitude", 0, 0.070093457944), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) diff --git a/tests/test_fdb_unmap_tree.py b/tests/test_fdb_unmap_tree.py index 1bf809c14..5ba2b5a40 100644 --- a/tests/test_fdb_unmap_tree.py +++ b/tests/test_fdb_unmap_tree.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -63,11 +62,9 @@ def test_fdb_datacube(self): Box(["latitude", "longitude"], [0, 0], [0.2, 0.2]), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) diff --git a/tests/test_float_type.py b/tests/test_float_type.py index 3c50d699e..1ecfc5006 100644 --- a/tests/test_float_type.py +++ b/tests/test_float_type.py @@ -2,7 +2,6 @@ import pytest import xarray as xr -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Select, Span @@ -19,9 +18,8 @@ def setup_method(self, method): "alt": np.arange(0.0, 20.0, 0.1), }, ) - self.slicer = HullSlicer() options = {"compressed_axes_config": ["lat", "long", "alt"]} - self.API = Polytope(request={}, datacube=array, engine=self.slicer, options=options) + self.API = Polytope(request={}, datacube=array, options=options) def test_slicing_span(self): request = Request(Span("lat", 4.1, 4.3), Select("long", [4.1]), Select("alt", [4.1])) diff --git a/tests/test_healpix_mapper.py b/tests/test_healpix_mapper.py index c14f2b50e..8bcae9a05 100644 --- a/tests/test_healpix_mapper.py +++ b/tests/test_healpix_mapper.py @@ -5,7 +5,6 @@ from polytope.datacube.transformations.datacube_mappers.mapper_types.healpix import ( HealpixGridMapper, ) -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -30,11 +29,9 @@ def setup_method(self, method): ], "compressed_axes_config": ["longitude", "latitude", "step", "time", "isobaricInhPa", "valid_time"], } - self.slicer = HullSlicer() self.API = Polytope( request={}, datacube=self.latlon_array, - engine=self.slicer, options=self.options, ) diff --git a/tests/test_hullslicer_engine.py b/tests/test_hullslicer_engine.py index 19aa37bdb..65e96c3f9 100644 --- a/tests/test_hullslicer_engine.py +++ b/tests/test_hullslicer_engine.py @@ -3,7 +3,6 @@ from polytope.datacube.backends.xarray import XArrayDatacube from polytope.datacube.tensor_index_tree import TensorIndexTree -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope from polytope.shapes import Box @@ -19,16 +18,13 @@ def setup_method(self, method): }, ) self.xarraydatacube = XArrayDatacube(self.array) - self.slicer = HullSlicer() options = {"compressed_axes_config": ["step", "level"]} - self.API = Polytope(request={}, datacube=self.array, engine=self.slicer, options=options) + self.API = Polytope(request={}, datacube=self.array, options=options) def test_extract(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - # request = self.slicer.extract(self.xarraydatacube, polytope) - API = Polytope(request={}, datacube=self.xarraydatacube, engine=self.slicer, options={}) - request = API.slice(self.xarraydatacube, polytope) + request = self.API.slice(self.xarraydatacube, polytope) assert request.axis == TensorIndexTree.root assert request.parent is None assert request.values is tuple() diff --git a/tests/test_incomplete_tree_fdb.py b/tests/test_incomplete_tree_fdb.py index 4015df9ae..73dc273ad 100644 --- a/tests/test_incomplete_tree_fdb.py +++ b/tests/test_incomplete_tree_fdb.py @@ -2,7 +2,6 @@ import pytest from helper_functions import download_test_data -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Select @@ -67,11 +66,9 @@ def test_incomplete_fdb_branch(self): Select("number", ["0"]), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -100,11 +97,9 @@ def test_incomplete_fdb_branch_2(self): Select("number", ["0"]), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) diff --git a/tests/test_local_grid_cyclic.py b/tests/test_local_grid_cyclic.py index 165a2edde..5d97c5649 100644 --- a/tests/test_local_grid_cyclic.py +++ b/tests/test_local_grid_cyclic.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Point, Select @@ -66,11 +65,9 @@ def test_fdb_datacube(self): Point(["latitude", "longitude"], [[-20, -20]]), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -96,11 +93,9 @@ def test_fdb_datacube_2(self): Point(["latitude", "longitude"], [[-20, 50 + 360]]), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) diff --git a/tests/test_local_regular_grid.py b/tests/test_local_regular_grid.py index 8a800b265..b9a114651 100644 --- a/tests/test_local_regular_grid.py +++ b/tests/test_local_regular_grid.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Point, Select @@ -65,11 +64,9 @@ def test_fdb_datacube(self): Point(["latitude", "longitude"], [[0.16, 0.176]], method="nearest"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -95,11 +92,9 @@ def test_point_outside_local_region(self): Point(["latitude", "longitude"], [[0.16, 61]], method="nearest"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -125,11 +120,9 @@ def test_point_outside_local_region_2(self): Point(["latitude", "longitude"], [[41, 1]], method="nearest"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -155,11 +148,9 @@ def test_point_outside_local_region_3(self): Point(["latitude", "longitude"], [[1, 61]]), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -184,11 +175,9 @@ def test_point_outside_local_region_4(self): Point(["latitude", "longitude"], [[41, 1]]), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -213,11 +202,9 @@ def test_point_outside_local_region_5(self): Point(["latitude", "longitude"], [[-41, 1]]), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -242,11 +229,9 @@ def test_point_outside_local_region_6(self): Point(["latitude", "longitude"], [[-30, -21]]), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -271,11 +256,9 @@ def test_point_outside_local_region_7(self): Point(["latitude", "longitude"], [[-41, 1]], method="nearest"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -301,11 +284,9 @@ def test_point_outside_local_region_8(self): Point(["latitude", "longitude"], [[-30, -21]], method="nearest"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -331,11 +312,9 @@ def test_point_outside_local_region_9(self): Point(["latitude", "longitude"], [[-30, -21]], method="surrounding"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) diff --git a/tests/test_merge_octahedral_one_axis.py b/tests/test_merge_octahedral_one_axis.py index 974fd394a..8e03ca424 100644 --- a/tests/test_merge_octahedral_one_axis.py +++ b/tests/test_merge_octahedral_one_axis.py @@ -2,7 +2,6 @@ from earthkit import data from helper_functions import download_test_data -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -28,11 +27,9 @@ def setup_method(self, method): ], "compressed_axes_config": ["longitude", "latitude", "surface", "step", "time", "valid_time", "number"], } - self.slicer = HullSlicer() self.API = Polytope( request={}, datacube=self.latlon_array, - engine=self.slicer, options=self.options, ) diff --git a/tests/test_merge_transformation.py b/tests/test_merge_transformation.py index a8e7c818b..21374f1fa 100644 --- a/tests/test_merge_transformation.py +++ b/tests/test_merge_transformation.py @@ -2,7 +2,6 @@ import pandas as pd import xarray as xr -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Select @@ -27,11 +26,9 @@ def setup_method(self, method): ], "compressed_axes_config": ["date", "time"], } - self.slicer = HullSlicer() self.API = Polytope( request={}, datacube=self.array, - engine=self.slicer, options=self.options, ) diff --git a/tests/test_multiple_param_fdb.py b/tests/test_multiple_param_fdb.py index 3bf6b6168..9c40f2335 100644 --- a/tests/test_multiple_param_fdb.py +++ b/tests/test_multiple_param_fdb.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -59,11 +58,9 @@ def test_fdb_datacube(self): Box(["latitude", "longitude"], [0, 0], [0.2, 0.2]), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) diff --git a/tests/test_octahedral_grid.py b/tests/test_octahedral_grid.py index 0e223341e..e5f64b10f 100644 --- a/tests/test_octahedral_grid.py +++ b/tests/test_octahedral_grid.py @@ -2,7 +2,6 @@ from earthkit import data from helper_functions import download_test_data, find_nearest_latlon -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -27,11 +26,9 @@ def setup_method(self, method): ], "compressed_axes_config": ["longitude", "latitude", "number", "step", "time", "surface", "valid_time"], } - self.slicer = HullSlicer() self.API = Polytope( request={}, datacube=self.latlon_array, - engine=self.slicer, options=self.options, ) diff --git a/tests/test_orca_irregular_grid.py b/tests/test_orca_irregular_grid.py index 468ad2af7..da2b92645 100644 --- a/tests/test_orca_irregular_grid.py +++ b/tests/test_orca_irregular_grid.py @@ -6,14 +6,12 @@ import xarray as xr from helper_functions import find_nearest_latlon -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select class TestQuadTreeSlicer: def setup_method(self, method): - self.slicer = HullSlicer() self.engine_options = { "step": "hullslicer", "time": "hullslicer", @@ -53,7 +51,6 @@ def test_quad_tree_slicer_extract(self): self.API = Polytope( request=request, datacube=self.arr, - engine=self.slicer, options=self.options, engine_options=self.engine_options, point_cloud_options=self.points, diff --git a/tests/test_point_nearest.py b/tests/test_point_nearest.py index 3a5ffbd90..2d5c4425d 100644 --- a/tests/test_point_nearest.py +++ b/tests/test_point_nearest.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Point, Select @@ -60,11 +59,9 @@ def test_fdb_datacube(self): Point(["latitude", "longitude"], [[0.16, 0.176]], method="nearest"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -87,11 +84,9 @@ def test_fdb_datacube_true_point(self): Point(["latitude", "longitude"], [[0.175746921078, 0.210608424337]], method="nearest"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -115,11 +110,9 @@ def test_fdb_datacube_true_point_2(self): Point(["latitude", "longitude"], [[0.035149384216, 0.0]], method="nearest"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -143,11 +136,9 @@ def test_fdb_datacube_true_point_3(self): Point(["latitude", "longitude"], [[0.035149384216, -0.01]], method="nearest"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -173,11 +164,9 @@ def test_fdb_datacube_true_point_5(self): Point(["latitude", "longitude"], [[0.035149384216, 360 - 0.01]], method="nearest"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -203,11 +192,9 @@ def test_fdb_datacube_true_point_4(self): Point(["latitude", "longitude"], [[0.035149384216, 359.97]], method="nearest"), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) diff --git a/tests/test_point_shape.py b/tests/test_point_shape.py index cff6017b2..713337e42 100644 --- a/tests/test_point_shape.py +++ b/tests/test_point_shape.py @@ -2,7 +2,6 @@ import pandas as pd import xarray as xr -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Point, Select @@ -19,9 +18,8 @@ def setup_method(self, method): "level": range(1, 130), }, ) - self.slicer = HullSlicer() options = {"compressed_axes_config": ["level", "step", "date"]} - self.API = Polytope(request={}, datacube=array, engine=self.slicer, options=options) + self.API = Polytope(request={}, datacube=array, options=options) def test_point(self): request = Request(Point(["step", "level"], [[3, 10]]), Select("date", ["2000-01-01"])) diff --git a/tests/test_polytope_extract.py b/tests/test_polytope_extract.py index 5e3fb658d..facbcb706 100644 --- a/tests/test_polytope_extract.py +++ b/tests/test_polytope_extract.py @@ -1,8 +1,6 @@ import numpy as np import xarray as xr -# from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box @@ -19,8 +17,6 @@ def setup_method(self, method): "values": range(0, 100), }, ) - # self.xarraydatacube = XArrayDatacube(array) - self.slicer = HullSlicer() self.engine_options = { "step": "hullslicer", "level": "hullslicer", @@ -38,13 +34,6 @@ def setup_method(self, method): }, ], } - # self.API = Polytope( - # datacube=array, - # engine=self.slicer, - # axis_options=self.options, - # engine_options=self.engine_options, - # point_cloud_options=quadtree_points, - # ) # Testing different shapes @@ -53,7 +42,6 @@ def test_2D_box(self): self.API = Polytope( request=request, datacube=self.array, - engine=self.slicer, options=self.options, engine_options=self.engine_options, point_cloud_options=self.quadtree_points, diff --git a/tests/test_polytope_extract_fdb.py b/tests/test_polytope_extract_fdb.py index 6ff76b2e7..f8db433c9 100644 --- a/tests/test_polytope_extract_fdb.py +++ b/tests/test_polytope_extract_fdb.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -11,7 +10,6 @@ def setup_method(self, method): # from polytope.datacube.backends.fdb import FDBDatacube # Create a dataarray with 3 labelled axes using different index types - self.slicer = HullSlicer() self.engine_options = { "step": "hullslicer", "levtype": "hullslicer", @@ -56,14 +54,6 @@ def setup_method(self, method): ], "pre_path": {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"}, } - # self.fdbdatacube = FDBDatacube(self.config, axis_options=self.options, point_cloud_options=quadtree_points) - # self.API = Polytope( - # datacube=self.fdbdatacube, - # engine=self.slicer, - # axis_options=self.options, - # engine_options=self.engine_options, - # point_cloud_options=quadtree_points, - # ) # Testing different shapes @pytest.mark.fdb @@ -83,11 +73,9 @@ def test_2D_box(self): Box(["latitude", "longitude"], [0, -0.1], [10, 10]), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, engine_options=self.engine_options, point_cloud_options=self.quadtree_points, diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index 1be5f7a32..65e9401e4 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -122,23 +122,20 @@ def test_quad_node_is_contained_in_triangle(self): @pytest.mark.fdb def test_quad_tree_slicer_extract(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] - slicer = QuadTreeSlicer(points) polytope = Box(["latitude", "longitude"], [1, 1], [20, 30]).polytope()[0] self.API = Polytope( request=Request(polytope), datacube=self.fdbdatacube, - engine=slicer, options=self.options, engine_options={"latitude": "quadtree", "longitude": "quadtree"}, point_cloud_options=points, ) - tree = slicer.extract(self.API.datacube, [polytope]) + tree = self.API.engines["quadtree"].extract(self.API.datacube, [polytope]) assert len(tree.leaves) == 3 tree.pprint() points = [[10, 10], [80, 10], [-5, 5], [5, 50], [5, 10], [50, 10], [2, 10], [15, 15]] - slicer = QuadTreeSlicer(points) polytope = ConvexPolytope(["latitude", "longitude"], [[-10, 1], [20, 1], [5, 20]]) - tree = slicer.extract(self.API.datacube, [polytope]) + tree = self.API.engines["quadtree"].extract(self.API.datacube, [polytope]) assert len(tree.leaves) == 4 tree.pprint() @@ -158,19 +155,18 @@ def test_large_scale_extraction(self): coords = zip(X, Y) points = [list(coord) for coord in coords] time0 = time.time() - slicer = QuadTreeSlicer(points) - print(time.time() - time0) polytope = Box(["latitude", "longitude"], [1, 1], [20, 30]).polytope()[0] self.API = Polytope( request=Request(polytope), datacube=self.fdbdatacube, - engine=slicer, options=self.options, engine_options={"latitude": "quadtree", "longitude": "quadtree"}, point_cloud_options=points, ) + print(time.time() - time0) time1 = time.time() - tree = slicer.extract(self.API.datacube, [polytope]) + print(self.API.engines) + tree = self.API.engines["quadtree"].extract(self.API.datacube, [polytope]) print(time.time() - time1) # = 5.919436931610107 print(len(tree.leaves)) # = 55100 # NOTE: maybe for 2D qhull here, scipy is not the fastest diff --git a/tests/test_quadtree_edge_cases.py b/tests/test_quadtree_edge_cases.py index db05651ad..9d5a7bf68 100644 --- a/tests/test_quadtree_edge_cases.py +++ b/tests/test_quadtree_edge_cases.py @@ -1,6 +1,5 @@ import pytest -from polytope.engine.quadtree_slicer import QuadTreeSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box @@ -46,17 +45,15 @@ def setup_method(self, method): @pytest.mark.fdb def test_quad_tree_slicer_extract(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10], [0.035149384216, 0.0]] - slicer = QuadTreeSlicer(points) polytope = Box(["latitude", "longitude"], [0, 0], [15, 15]).polytope()[0] self.API = Polytope( request=Request(polytope), datacube=self.fdbdatacube, - engine=slicer, options=self.options, engine_options={"latitude": "quadtree", "longitude": "quadtree"}, point_cloud_options=points, ) - tree = slicer.extract(self.API.datacube, [polytope]) + tree = self.API.engines["quadtree"].extract(self.API.datacube, [polytope]) tree.pprint() assert len(tree.leaves) == 3 assert set([leaf.flatten()["values"] for leaf in tree.leaves]) == set([(0,), (4,), (6,)]) diff --git a/tests/test_quadtree_indices.py b/tests/test_quadtree_indices.py index a8a169911..44db2e459 100644 --- a/tests/test_quadtree_indices.py +++ b/tests/test_quadtree_indices.py @@ -1,23 +1,11 @@ import pytest -from polytope.engine.quadtree_slicer import QuadTreeSlicer -from polytope.polytope import Request, Polytope +from polytope.polytope import Polytope, Request from polytope.shapes import Box, ConvexPolytope class TestQuadTreeSlicer: def setup_method(self, method): - # from polytope.datacube.backends.fdb import FDBDatacube - - # self.options = { - # "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, - # "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, - # "step": {"type_change": "int"}, - # "number": {"type_change": "int"}, - # "longitude": {"cyclic": [0, 360]}, - # } - # self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} - # self.datacube = FDBDatacube(self.config, axis_options=self.options) import pygribjump as gj self.options = { @@ -56,32 +44,28 @@ def setup_method(self, method): @pytest.mark.fdb def test_quad_tree_slicer_extract(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] - slicer = QuadTreeSlicer(points) polytope = Box(["latitude", "longitude"], [1, 1], [20, 30]).polytope()[0] self.API = Polytope( request=Request(polytope), datacube=self.fdbdatacube, - engine=slicer, options=self.options, engine_options={"latitude": "quadtree", "longitude": "quadtree"}, point_cloud_options=points, ) - tree = slicer.extract(self.API.datacube, [polytope]) + tree = self.API.engines["quadtree"].extract(self.API.datacube, [polytope]) assert len(tree.leaves) == 3 assert set([leaf.flatten()["values"] for leaf in tree.leaves]) == set([(0,), (3,), (4,)]) tree.pprint() points = [[10, 10], [80, 10], [-5, 5], [5, 50], [5, 10], [50, 10], [2, 10], [15, 15]] - slicer = QuadTreeSlicer(points) polytope = ConvexPolytope(["latitude", "longitude"], [[-10, 1], [20, 1], [5, 20]]) self.API = Polytope( request=Request(polytope), datacube=self.fdbdatacube, - engine=slicer, options=self.options, engine_options={"latitude": "quadtree", "longitude": "quadtree"}, point_cloud_options=points, ) - tree = slicer.extract(self.API.datacube, [polytope]) + tree = self.API.engines["quadtree"].extract(self.API.datacube, [polytope]) assert len(tree.leaves) == 4 assert set([leaf.flatten()["values"] for leaf in tree.leaves]) == set([(0,), (2,), (4,), (6,)]) tree.pprint() diff --git a/tests/test_regular_grid.py b/tests/test_regular_grid.py index 610070c9d..ddc0dd0ab 100644 --- a/tests/test_regular_grid.py +++ b/tests/test_regular_grid.py @@ -2,7 +2,6 @@ import pytest from helper_functions import download_test_data, find_nearest_latlon -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Disk, Select @@ -69,11 +68,9 @@ def test_regular_grid(self): Select("number", ["0", "1"]), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) diff --git a/tests/test_request_trees_after_slicing.py b/tests/test_request_trees_after_slicing.py index 9e13924d6..34343f6e1 100644 --- a/tests/test_request_trees_after_slicing.py +++ b/tests/test_request_trees_after_slicing.py @@ -3,7 +3,6 @@ from polytope.datacube.backends.xarray import XArrayDatacube from polytope.datacube.datacube_axis import IntDatacubeAxis -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope from polytope.shapes import Box @@ -19,9 +18,8 @@ def setup_method(self, method): }, ) self.xarraydatacube = XArrayDatacube(array) - self.slicer = HullSlicer() options = {"compressed_axes_config": ["level", "step"]} - self.API = Polytope(request={}, datacube=array, engine=self.slicer, options=options) + self.API = Polytope(request={}, datacube=array, options=options) def test_path_values(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) diff --git a/tests/test_reverse_transformation.py b/tests/test_reverse_transformation.py index ffb7413f2..9a7619063 100644 --- a/tests/test_reverse_transformation.py +++ b/tests/test_reverse_transformation.py @@ -1,7 +1,6 @@ import numpy as np import xarray as xr -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Select @@ -20,8 +19,7 @@ def setup_method(self, method): "axis_config": [{"axis_name": "lat", "transformations": [{"name": "reverse", "is_reverse": True}]}], "compressed_axes_config": ["lat"], } - self.slicer = HullSlicer() - self.API = Polytope(request={}, datacube=array, engine=self.slicer, options=options) + self.API = Polytope(request={}, datacube=array, options=options) def test_reverse_transformation(self): request = Request(Select("lat", [1, 2, 3])) diff --git a/tests/test_shapes.py b/tests/test_shapes.py index 510a58857..9a8f3c14e 100644 --- a/tests/test_shapes.py +++ b/tests/test_shapes.py @@ -3,7 +3,6 @@ import pytest import xarray as xr -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import All, Select, Span @@ -25,11 +24,9 @@ def setup_method(self, method): "axis_config": [{"axis_name": "longitude", "transformations": [{"name": "cyclic", "range": [0, 360]}]}], "compressed_axes_config": ["date", "step", "level", "longitude"], } - self.slicer = HullSlicer() self.API = Polytope( request={}, datacube=array, - engine=self.slicer, options=self.options, ) @@ -71,7 +68,6 @@ def test_all_mapper_cyclic(self): "pre_path": {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"}, } self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() request = Request( Select("step", [11]), @@ -86,7 +82,7 @@ def test_all_mapper_cyclic(self): Span("latitude", 89.9, 90), All("longitude"), ) - self.API = Polytope(request=request, datacube=self.fdbdatacube, engine=self.slicer, options=self.options) + self.API = Polytope(request=request, datacube=self.fdbdatacube, options=self.options) result = self.API.retrieve(request) # result.pprint() assert len(result.leaves) == 20 diff --git a/tests/test_slice_date_range_fdb.py b/tests/test_slice_date_range_fdb.py index 0589eb694..910735caf 100644 --- a/tests/test_slice_date_range_fdb.py +++ b/tests/test_slice_date_range_fdb.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Disk, Select, Span @@ -61,11 +60,9 @@ def test_fdb_datacube(self): ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -90,11 +87,9 @@ def test_fdb_datacube_disk(self): ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) @@ -121,11 +116,9 @@ def test_fdb_datacube_disk_2(self): ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) diff --git a/tests/test_slice_date_range_fdb_v2.py b/tests/test_slice_date_range_fdb_v2.py index e0d284f53..ebef54d99 100644 --- a/tests/test_slice_date_range_fdb_v2.py +++ b/tests/test_slice_date_range_fdb_v2.py @@ -2,7 +2,6 @@ import pandas as pd import pytest -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Select, Span @@ -67,11 +66,9 @@ def test_fdb_datacube(self): Select("number", ["0"]), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) diff --git a/tests/test_slicer_engine.py b/tests/test_slicer_engine.py index 2ee18a8de..e7917900a 100644 --- a/tests/test_slicer_engine.py +++ b/tests/test_slicer_engine.py @@ -3,7 +3,6 @@ from polytope.datacube.backends.xarray import XArrayDatacube from polytope.datacube.tensor_index_tree import TensorIndexTree -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope from polytope.shapes import Box @@ -19,15 +18,14 @@ def setup_method(self, method): }, ) self.xarraydatacube = XArrayDatacube(array) - self.slicer = HullSlicer() options = {"compressed_axes_config": ["level", "step"]} - self.API = Polytope(request={}, datacube=array, engine=self.slicer, options=options) + self.API = Polytope(request={}, datacube=array, options=options) def test_extract(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() # request = self.slicer.extract(self.xarraydatacube, polytope) - API = Polytope(request={}, datacube=self.xarraydatacube, engine=self.slicer, options={}) + API = Polytope(request={}, datacube=self.xarraydatacube, options={}) request = API.slice(self.xarraydatacube, polytope) assert request.axis == TensorIndexTree.root assert request.parent is None diff --git a/tests/test_slicer_era5.py b/tests/test_slicer_era5.py index b8a97fcd1..8b4d59139 100644 --- a/tests/test_slicer_era5.py +++ b/tests/test_slicer_era5.py @@ -3,7 +3,6 @@ from earthkit import data from helper_functions import download_test_data -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -15,7 +14,6 @@ def setup_method(self, method): ds = data.from_source("file", "./tests/data/era5-levels-members.grib") array = ds.to_xarray().isel(step=0).t - self.slicer = HullSlicer() options = { "axis_config": [{"axis_name": "latitude", "transformations": [{"name": "reverse", "is_reverse": True}]}], "compressed_axes_config": ["number", "time", "latitude", "longitude", "step", "isobaricInhPa"], @@ -23,7 +21,6 @@ def setup_method(self, method): self.API = Polytope( request={}, datacube=array, - engine=self.slicer, options=options, ) diff --git a/tests/test_slicer_xarray.py b/tests/test_slicer_xarray.py index a6c2d15dc..5109fe848 100644 --- a/tests/test_slicer_xarray.py +++ b/tests/test_slicer_xarray.py @@ -2,7 +2,6 @@ import pandas as pd import xarray as xr -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select, Span @@ -19,9 +18,8 @@ def setup_method(self, method): "level": range(1, 130), }, ) - self.slicer = HullSlicer() options = {"compressed_axes_config": ["date", "step", "level"]} - self.API = Polytope(request={}, datacube=array, engine=self.slicer, options=options) + self.API = Polytope(request={}, datacube=array, options=options) def test_2D_box(self): request = Request(Box(["step", "level"], [3, 10], [6, 11]), Select("date", ["2000-01-01"])) diff --git a/tests/test_slicing_unsliceable_axis.py b/tests/test_slicing_unsliceable_axis.py index b195bab67..478c2054d 100644 --- a/tests/test_slicing_unsliceable_axis.py +++ b/tests/test_slicing_unsliceable_axis.py @@ -3,7 +3,6 @@ import pytest import xarray as xr -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select from polytope.utility.exceptions import UnsliceableShapeError @@ -17,9 +16,8 @@ def setup_method(self, method): dims=("date", "variable", "level"), coords={"date": pd.date_range("2000-01-01", "2000-01-03", 3), "variable": ["a"], "level": range(1, 130)}, ) - self.slicer = HullSlicer() options = {"compressed_axes_config": ["date", "variable", "level"]} - self.API = Polytope(request={}, datacube=array, engine=self.slicer, options=options) + self.API = Polytope(request={}, datacube=array, options=options) # Testing different shapes diff --git a/tests/test_slicing_xarray_3D.py b/tests/test_slicing_xarray_3D.py index 95f967fc2..4c124d1db 100644 --- a/tests/test_slicing_xarray_3D.py +++ b/tests/test_slicing_xarray_3D.py @@ -7,7 +7,6 @@ from polytope.datacube.backends.xarray import XArrayDatacube from polytope.datacube.tensor_index_tree import TensorIndexTree -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import ( Box, @@ -34,9 +33,8 @@ def setup_method(self, method): }, ) self.xarraydatacube = XArrayDatacube(array) - self.slicer = HullSlicer() options = {"compressed_axes_config": ["date", "step", "level"]} - self.API = Polytope(request={}, datacube=array, engine=self.slicer, options=options) + self.API = Polytope(request={}, datacube=array, options=options) # Testing different shapes diff --git a/tests/test_slicing_xarray_4D.py b/tests/test_slicing_xarray_4D.py index f8ac6c5f5..3dc12a204 100644 --- a/tests/test_slicing_xarray_4D.py +++ b/tests/test_slicing_xarray_4D.py @@ -4,7 +4,6 @@ import xarray as xr from polytope.datacube.tensor_index_tree import TensorIndexTree -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import ( Box, @@ -33,9 +32,8 @@ def setup_method(self, method): "lat": np.around(np.arange(0.0, 10.0, 0.1), 15), }, ) - self.slicer = HullSlicer() options = {"compressed_axes_config": ["date", "step", "level", "lat"]} - self.API = Polytope(request={}, datacube=array, engine=self.slicer, options=options) + self.API = Polytope(request={}, datacube=array, options=options) # Testing different shapes diff --git a/tests/test_snapping.py b/tests/test_snapping.py index eb51113fb..56b2ddd18 100644 --- a/tests/test_snapping.py +++ b/tests/test_snapping.py @@ -1,7 +1,6 @@ import numpy as np import xarray as xr -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Select @@ -17,9 +16,8 @@ def setup_method(self, method): "step": [1, 3, 5], }, ) - self.slicer = HullSlicer() options = {"compressed_axes_config": ["level", "step"]} - self.API = Polytope(request={}, datacube=array, engine=self.slicer, options=options) + self.API = Polytope(request={}, datacube=array, options=options) # Testing different shapes diff --git a/tests/test_snapping_real_data.py b/tests/test_snapping_real_data.py index 4cf19c6ee..5b654a607 100644 --- a/tests/test_snapping_real_data.py +++ b/tests/test_snapping_real_data.py @@ -6,7 +6,6 @@ from earthkit import data from helper_functions import download_test_data -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -18,7 +17,6 @@ def setup_method(self, method): ds = data.from_source("file", "./tests/data/era5-levels-members.grib") array = ds.to_xarray().isel(step=0).t - self.slicer = HullSlicer() options = { "axis_config": [ {"axis_name": "latitude", "transformations": [{"name": "reverse", "is_reverse": True}]}, @@ -29,7 +27,6 @@ def setup_method(self, method): self.API = Polytope( request={}, datacube=array, - engine=self.slicer, options=options, ) diff --git a/tests/test_tree_protobuf_encoding.py b/tests/test_tree_protobuf_encoding.py index aaa1874bd..e36c96cac 100644 --- a/tests/test_tree_protobuf_encoding.py +++ b/tests/test_tree_protobuf_encoding.py @@ -50,7 +50,6 @@ def setup_method(self): def test_encoding(self): import pygribjump as gj - from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -70,11 +69,9 @@ def test_encoding(self): "pre_path": {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"}, } self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) fdb_datacube = self.API.datacube diff --git a/tests/test_tree_protobuf_encoding_fdb.py b/tests/test_tree_protobuf_encoding_fdb.py index 01bc83d99..e7e22fb6e 100644 --- a/tests/test_tree_protobuf_encoding_fdb.py +++ b/tests/test_tree_protobuf_encoding_fdb.py @@ -12,7 +12,6 @@ def setup_method(self): def test_encoding(self): import pygribjump as gj - from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select @@ -61,11 +60,9 @@ def test_encoding(self): "pre_path": {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"}, } self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) diff --git a/tests/test_type_change_transformation.py b/tests/test_type_change_transformation.py index b1b604871..9d31366df 100644 --- a/tests/test_type_change_transformation.py +++ b/tests/test_type_change_transformation.py @@ -1,7 +1,6 @@ import numpy as np import xarray as xr -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Select @@ -21,8 +20,7 @@ def setup_method(self, method): "axis_config": [{"axis_name": "step", "transformations": [{"name": "type_change", "type": "int"}]}], "compressed_axes_config": ["step"], } - self.slicer = HullSlicer() - self.API = Polytope(request={}, datacube=array, engine=self.slicer, options=options) + self.API = Polytope(request={}, datacube=array, options=options) def test_merge_axis(self): request = Request(Select("step", [0])) diff --git a/tests/test_union_gj.py b/tests/test_union_gj.py index 227cac476..859e8fa5e 100644 --- a/tests/test_union_gj.py +++ b/tests/test_union_gj.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope.engine.hullslicer import HullSlicer from polytope.polytope import Polytope, Request from polytope.shapes import Box, Select, Span, Union @@ -67,11 +66,9 @@ def test_fdb_datacube(self): ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( request=request, datacube=self.fdbdatacube, - engine=self.slicer, options=self.options, ) result = self.API.retrieve(request) From 809d78876e0c8d6332e586c2d332851f6975c6b3 Mon Sep 17 00:00:00 2001 From: mathleur Date: Thu, 18 Jul 2024 11:35:44 +0200 Subject: [PATCH 55/75] clean up --- .gitignore | 4 +++- polytope/datacube/tensor_index_tree.py | 15 +++++++++------ polytope/engine/engine.py | 23 ----------------------- polytope/engine/hullslicer.py | 7 +------ tests/profiled_quadtree.profile | Bin 813105 -> 813153 bytes tests/quadtree_slicer_profiler.py | 6 ++---- tests/test_quad_tree.py | 1 - tests/test_request_tree.py | 5 +++-- 8 files changed, 18 insertions(+), 43 deletions(-) diff --git a/.gitignore b/.gitignore index 8a09fd761..b32e5f211 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,6 @@ new_test_venv_polytope new_venv_polytope polytope_venv polytope_venv_latest -newest-polytope-venv \ No newline at end of file +newest-polytope-venv +*.pstats +*.profile \ No newline at end of file diff --git a/polytope/datacube/tensor_index_tree.py b/polytope/datacube/tensor_index_tree.py index cc157204a..a369d8d7f 100644 --- a/polytope/datacube/tensor_index_tree.py +++ b/polytope/datacube/tensor_index_tree.py @@ -134,12 +134,15 @@ def is_root(self): def find_child(self, node): index = self.children.bisect_left(node) - if index >= len(self.children): - return None - child = self.children[index] - if not child == node: - return None - return child + # if index >= len(self.children): + # return None + # child = self.children[index] + # if not child == node: + # return None + # return child + if index < len(self.children) and self.children[index] == node: + return self.children[index] + return None def add_node_layer_after(self, ax_name, vals): ax = IntDatacubeAxis() diff --git a/polytope/engine/engine.py b/polytope/engine/engine.py index 18eb86696..d232e1ec9 100644 --- a/polytope/engine/engine.py +++ b/polytope/engine/engine.py @@ -5,7 +5,6 @@ from ..datacube.datacube_axis import UnsliceableDatacubeAxis from ..datacube.tensor_index_tree import TensorIndexTree from ..shapes import ConvexPolytope -from ..utility.combinatorics import unique class Engine: @@ -20,18 +19,6 @@ def __init__(self, engine_options=None): self.remapped_vals = {} self.compressed_axes = [] - # def _unique_continuous_points(self, p: ConvexPolytope, datacube: Datacube): - # for i, ax in enumerate(p._axes): - # mapper = datacube.get_mapper(ax) - # if self.ax_is_unsliceable.get(ax, None) is None: - # self.ax_is_unsliceable[ax] = isinstance(mapper, UnsliceableDatacubeAxis) - # if self.ax_is_unsliceable[ax]: - # break - # for j, val in enumerate(p.points): - # p.points[j][i] = mapper.to_float(mapper.parse(p.points[j][i])) - # # Remove duplicate points - # unique(p.points) - def extract(self, datacube: Datacube, polytopes: List[ConvexPolytope]) -> TensorIndexTree: # Delegate to the right slicer that the axes within the polytopes need to use pass @@ -45,16 +32,6 @@ def check_slicer(self, ax): slicer = self.generate_slicer(slicer_type) return slicer - # def generate_slicer(self, slicer_type): - # # TODO: instantiate the slicer (hullslicer or quadtree) instance - # pass - - # def determine_slicer(self, ax): - # pass - - # def build_unsliceable_node(self): - # pass - @staticmethod def default(): from .hullslicer import HullSlicer diff --git a/polytope/engine/hullslicer.py b/polytope/engine/hullslicer.py index bf7e8de86..82b4e7361 100644 --- a/polytope/engine/hullslicer.py +++ b/polytope/engine/hullslicer.py @@ -1,16 +1,11 @@ import math from copy import copy from itertools import chain -from typing import List import scipy.spatial -from ..datacube.backends.datacube import Datacube -from ..datacube.datacube_axis import UnsliceableDatacubeAxis -from ..datacube.tensor_index_tree import TensorIndexTree from ..shapes import ConvexPolytope -from ..utility.combinatorics import argmax, argmin, group, tensor_product, unique -from ..utility.engine_tools import unique_continuous_points_in_polytope +from ..utility.combinatorics import argmax, argmin from ..utility.exceptions import UnsliceableShapeError from ..utility.geometry import lerp from .engine import Engine diff --git a/tests/profiled_quadtree.profile b/tests/profiled_quadtree.profile index cdd4e5a3417e902c9581ce4514b7f3cc3c6ab18c..59795762423961c33b83decffd2dc885e21e2fc0 100644 GIT binary patch literal 813153 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

?6W!+UFM}XjACvVpKkJpRXtDTiuI5&Pd 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 %$1uy7u} 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%0AAkQ(+4maPGK2@6&Q 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

uQPjayWHaJ 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 z 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

    ndZMZ{2?jZHVOwJ{o%}=L4mvPn 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 z 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 literal 813105 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�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∋2X`xlYX>#!ESHCh4)*RE~Cif{}Uj!THgs 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 Date: Thu, 18 Jul 2024 11:37:12 +0200 Subject: [PATCH 56/75] clean up --- tests/quadtree_slicer_profiler.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/quadtree_slicer_profiler.py b/tests/quadtree_slicer_profiler.py index d34c09ae5..5ae9fcc2d 100644 --- a/tests/quadtree_slicer_profiler.py +++ b/tests/quadtree_slicer_profiler.py @@ -1,6 +1,7 @@ +import cProfile + import numpy as np import pygribjump as gj -import cProfile from polytope.polytope import Polytope, Request from polytope.shapes import Box @@ -53,4 +54,6 @@ engine_options={"latitude": "quadtree", "longitude": "quadtree"}, point_cloud_options=points, ) -cProfile.runctx("API.engines['quadtree'].extract(API.datacube, [polytope])", globals(), locals(), "profiled_extract_quadtree.pstats") +cProfile.runctx( + "API.engines['quadtree'].extract(API.datacube, [polytope])", globals(), locals(), "profiled_extract_quadtree.pstats" +) From 4b9977029753a27b2e2571642a257bed5136801a Mon Sep 17 00:00:00 2001 From: mathleur Date: Thu, 18 Jul 2024 13:56:02 +0200 Subject: [PATCH 57/75] optimise more --- polytope/datacube/tensor_index_tree.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/polytope/datacube/tensor_index_tree.py b/polytope/datacube/tensor_index_tree.py index a369d8d7f..9cacbdcac 100644 --- a/polytope/datacube/tensor_index_tree.py +++ b/polytope/datacube/tensor_index_tree.py @@ -76,13 +76,8 @@ def __eq__(self, other): if isinstance(self.axis, UnsliceableDatacubeAxis): return False else: - if len(other.values) != len(self.values): + if len(other.values) != len(self.values) or other.values != self.values: return False - for i in range(len(other.values)): - other_val = other.values[i] - self_val = self.values[i] - if abs(other_val - self_val) > 2 * max(other.axis.tol, self.axis.tol): - return False return True def __lt__(self, other): From fa70c5588d6c8b2159e0874ed8a9256d633a74e1 Mon Sep 17 00:00:00 2001 From: mathleur Date: Thu, 18 Jul 2024 14:10:08 +0200 Subject: [PATCH 58/75] clena up --- polytope/datacube/tensor_index_tree.py | 6 --- polytope/engine/engine.py | 1 - polytope/engine/hullslicer.py | 70 -------------------------- polytope/engine/quadtree_slicer.py | 18 ------- polytope/polytope.py | 36 ------------- 5 files changed, 131 deletions(-) diff --git a/polytope/datacube/tensor_index_tree.py b/polytope/datacube/tensor_index_tree.py index 9cacbdcac..5a1b22edd 100644 --- a/polytope/datacube/tensor_index_tree.py +++ b/polytope/datacube/tensor_index_tree.py @@ -129,12 +129,6 @@ def is_root(self): def find_child(self, node): index = self.children.bisect_left(node) - # if index >= len(self.children): - # return None - # child = self.children[index] - # if not child == node: - # return None - # return child if index < len(self.children) and self.children[index] == node: return self.children[index] return None diff --git a/polytope/engine/engine.py b/polytope/engine/engine.py index d232e1ec9..fdd74db49 100644 --- a/polytope/engine/engine.py +++ b/polytope/engine/engine.py @@ -13,7 +13,6 @@ def __init__(self, engine_options=None): engine_options = {} self.engine_options = engine_options - # self.ax_is_unsliceable = {} self.axis_values_between = {} self.sliced_polytopes = {} self.remapped_vals = {} diff --git a/polytope/engine/hullslicer.py b/polytope/engine/hullslicer.py index 82b4e7361..aa3236d54 100644 --- a/polytope/engine/hullslicer.py +++ b/polytope/engine/hullslicer.py @@ -15,24 +15,6 @@ class HullSlicer(Engine): def __init__(self): super().__init__() - # self.ax_is_unsliceable = {} - # self.axis_values_between = {} - # self.sliced_polytopes = {} - # self.remapped_vals = {} - # self.compressed_axes = [] - - # def _unique_continuous_points(self, p: ConvexPolytope, datacube: Datacube): - # for i, ax in enumerate(p._axes): - # mapper = datacube.get_mapper(ax) - # if self.ax_is_unsliceable.get(ax, None) is None: - # self.ax_is_unsliceable[ax] = isinstance(mapper, UnsliceableDatacubeAxis) - # if self.ax_is_unsliceable[ax]: - # break - # for j, val in enumerate(p.points): - # p.points[j][i] = mapper.to_float(mapper.parse(p.points[j][i])) - # # Remove duplicate points - # unique(p.points) - def _build_unsliceable_child(self, polytope, ax, node, datacube, lowers, next_nodes, slice_axis_idx): if not polytope.is_flat: raise UnsliceableShapeError(ax) @@ -178,58 +160,6 @@ def _build_branch(self, ax, node, datacube, next_nodes, engine): del node["unsliced_polytopes"] - # def find_compressed_axes(self, datacube, polytopes): - # # First determine compressable axes from input polytopes - # compressable_axes = [] - # for polytope in polytopes: - # if polytope.is_orthogonal: - # for ax in polytope.axes(): - # compressable_axes.append(ax) - # # Cross check this list with list of compressable axis from datacube - # # (should not include any merged or coupled axes) - # for compressed_axis in compressable_axes: - # if compressed_axis in datacube.compressed_axes: - # self.compressed_axes.append(compressed_axis) - - # def extract(self, datacube: Datacube, polytopes: List[ConvexPolytope]): - # # Determine list of axes to compress - # self.find_compressed_axes(datacube, polytopes) - - # # Convert the polytope points to float type to support triangulation and interpolation - # for p in polytopes: - # unique_continuous_points_in_polytope(p, datacube) - - # groups, input_axes = group(polytopes) - # datacube.validate(input_axes) - # request = TensorIndexTree() - # combinations = tensor_product(groups) - - # # NOTE: could optimise here if we know combinations will always be for one request. - # # Then we do not need to create a new index tree and merge it to request, but can just - # # directly work on request and return it... - - # for c in combinations: - # r = TensorIndexTree() - # new_c = [] - # for combi in c: - # if isinstance(combi, list): - # new_c.extend(combi) - # else: - # new_c.append(combi) - # r["unsliced_polytopes"] = set(new_c) - # current_nodes = [r] - # for ax in datacube.axes.values(): - # next_nodes = [] - # interm_next_nodes = [] - # for node in current_nodes: - # self._build_branch(ax, node, datacube, interm_next_nodes) - # next_nodes.extend(interm_next_nodes) - # interm_next_nodes = [] - # current_nodes = next_nodes - - # request.merge(r) - # return request - def _find_intersects(polytope, slice_axis_idx, value): intersects = [] diff --git a/polytope/engine/quadtree_slicer.py b/polytope/engine/quadtree_slicer.py index 8b99c4a41..8d9126dbd 100644 --- a/polytope/engine/quadtree_slicer.py +++ b/polytope/engine/quadtree_slicer.py @@ -36,18 +36,6 @@ def extract(self, datacube, polytopes): (child, _) = request.create_child(values_axis, idx, []) child.result = result - # NOTE: code for getting lat/lon instead of point indices - # for point in extracted_points: - # # append each found leaf to the tree - # lat = point.rect[0] - # lon = point.rect[1] - # result = point.item - # # TODO: make finding the axes objects nicer? - # lat_axis = datacube.axes[polytope._axes[0]] - # lat_child = request.create_child(lat_axis, lat) - # lon_axis = datacube.axes[polytope._axes[1]] - # lon_child = lat_child.create_child(lon_axis, lon) - # lon_child.result = result return request def extract_single(self, datacube, polytope): @@ -81,23 +69,17 @@ def _build_sliceable_child(self, polytope, ax, node, datacube, next_nodes): value = point.index lat_val = point.item[0] lon_val = point.item[1] - # values_axis = IntDatacubeAxis() lat_ax = ax # TODO: is there a nicer way to get this axis that does not depend on knowing # the axis name in advance? lon_ax = datacube._axes["longitude"] - # values_axis.name = "pt_cloud_idx" # store the native type - # child = node.create_child(ax, value) (child, _) = node.create_child(lat_ax, lat_val, []) (grand_child, _) = child.create_child(lon_ax, lon_val, []) # NOTE: the index of the point is stashed in the branches' result grand_child.indexes = [value] grand_child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) grand_child["unsliced_polytopes"].remove(polytope) - # child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) - # child["unsliced_polytopes"].remove(polytope) - # next_nodes.append(grand_child) # TODO: but now what happens to the second axis in the point cloud?? Do we create a second node for it?? diff --git a/polytope/polytope.py b/polytope/polytope.py index 1a64facd2..bbe63faa5 100644 --- a/polytope/polytope.py +++ b/polytope/polytope.py @@ -48,15 +48,12 @@ def __init__( self, request, datacube, - # engine=None, options=None, engine_options=None, point_cloud_options=None, ): from .datacube import Datacube - # from .engine import Engine - if options is None: options = {} if engine_options is None: @@ -74,7 +71,6 @@ def __init__( point_cloud_options, alternative_axes, ) - # self.engine = engine if engine is not None else Engine.default() if engine_options == {}: for ax_name in self.datacube._axes.keys(): engine_options[ax_name] = "hullslicer" @@ -86,7 +82,6 @@ def create_engines(self): engines = {} engine_types = set(self.engine_options.values()) if "quadtree" in engine_types: - # quadtree_axes = [key for key in self.engine_options.keys() if self.engine_options[key] == "quadtree"] # TODO: need to get the corresponding point cloud from the datacube quadtree_points = self.datacube.find_point_cloud() engines["quadtree"] = QuadTreeSlicer(quadtree_points) @@ -119,8 +114,6 @@ def slice(self, datacube, polytopes: List[ConvexPolytope]): datacube.validate(input_axes) request = TensorIndexTree() combinations = tensor_product(groups) - # combinations = find_polytope_combinations(self.datacube, polytopes) - # request = TensorIndexTree() # NOTE: could optimise here if we know combinations will always be for one request. # Then we do not need to create a new index tree and merge it to request, but can just @@ -149,33 +142,6 @@ def slice(self, datacube, polytopes: List[ConvexPolytope]): request.merge(r) return request - # combinations = find_polytope_combinations(self.datacube, polytopes) - - # request = TensorIndexTree() - - # for c in combinations: - # r = TensorIndexTree() - # r["unsliced_polytopes"] = set(c) - # current_nodes = [r] - # for ax in self.datacube.axes.values(): - # # determine the slicer for each axis - # engine = self.find_engine(ax) - - # # TODO: what happens when we have a quadtree engine and we handle two axes at once?? - # # Need to build the two axes nodes as just one node within the slicer engine... - - # next_nodes = [] - # for node in current_nodes: - # print(node) - # engine._build_branch(ax, node, self.datacube, next_nodes) - # current_nodes = next_nodes - # request.merge(r) - - # # TODO: return tree - # # return self.engine.extract(self.datacube, polytopes) - # request.pprint() - # return request - def find_engine(self, ax): slicer_type = self.engine_options[ax.name] return self.engines[slicer_type] @@ -205,5 +171,3 @@ def find_compressed_axes(self, datacube, polytopes): for compressed_axis in compressable_axes: if compressed_axis in datacube.compressed_axes: self.compressed_axes.append(compressed_axis) - # print("WHAT ARE THE COMPRESSED AXES?") - # print(self.compressed_axes) From 142fd3f2327a0ce434fe327b2ac286c1435f3ff1 Mon Sep 17 00:00:00 2001 From: mathleur Date: Thu, 19 Dec 2024 16:02:23 +0100 Subject: [PATCH 59/75] rename module --- .gitignore | 3 +- examples/3D_shipping_route.py | 6 +- examples/3D_shipping_route_wave_model.py | 8 +- examples/4D_flight_path.py | 8 +- examples/country_slicing.py | 8 +- examples/cyclic_route_around_earth.py | 8 +- examples/healpix_grid_box_example.py | 8 +- examples/octahedral_grid_box_example.py | 8 +- examples/octahedral_grid_country_example.py | 8 +- examples/read_me_example.py | 4 +- examples/slicing_all_ecmwf_countries.py | 8 +- examples/timeseries_example.py | 8 +- examples/wind_farms.py | 8 +- performance/fdb_performance.py | 8 +- performance/fdb_performance_3D.py | 8 +- .../fdb_slice_many_numbers_timeseries.py | 6 +- performance/performance_many_num_steps.py | 6 +- performance/scalability_test.py | 8 +- performance/scalability_test_2.py | 8 +- .../datacube_mappers/mapper_axis_decorator.py | 110 ------------------ {polytope => polytope_feature}/__init__.py | 0 .../datacube/__init__.py | 0 .../datacube/backends/__init__.py | 0 .../datacube/backends/datacube.py | 0 .../datacube/backends/fdb.py | 0 .../datacube/backends/mock.py | 0 .../datacube/backends/xarray.py | 0 .../datacube/datacube_axis.py | 0 .../datacube/index_tree.proto | 0 .../datacube/index_tree_pb2.py | 0 .../datacube/quad_tree.py | 0 .../datacube/tensor_index_tree.py | 0 .../datacube/transformations/__init__.py | 0 .../datacube_cyclic/__init__.py | 0 .../datacube_cyclic/datacube_cyclic.py | 0 .../datacube_mappers/__init__.py | 0 .../datacube_mappers/datacube_mappers.py | 3 +- .../datacube_mappers/mapper_types/__init__.py | 0 .../datacube_mappers/mapper_types/healpix.py | 0 .../mapper_types/healpix_nested.py | 0 .../mapper_types/irregular.py | 0 .../mapper_types/local_regular.py | 0 .../mapper_types/octahedral.py | 0 .../mapper_types/reduced_ll.py | 0 .../datacube_mappers/mapper_types/regular.py | 0 .../datacube_merger/__init__.py | 0 .../datacube_merger/datacube_merger.py | 0 .../datacube_reverse/__init__.py | 0 .../datacube_reverse/datacube_reverse.py | 0 .../datacube_transformations.py | 2 +- .../datacube_type_change/__init__.py | 0 .../datacube_type_change.py | 2 +- .../datacube/tree_encoding.py | 0 .../engine/__init__.py | 0 .../engine/engine.py | 0 .../engine/hullslicer.py | 0 .../engine/quadtree_slicer.py | 0 .../engine/slicing_tools.py | 0 {polytope => polytope_feature}/options.py | 0 {polytope => polytope_feature}/polytope.py | 0 {polytope => polytope_feature}/shapes.py | 0 .../utility/__init__.py | 0 .../utility/combinatorics.py | 0 .../utility/engine_tools.py | 0 .../utility/exceptions.py | 0 .../utility/geometry.py | 0 .../utility/list_tools.py | 0 .../utility/profiling.py | 0 {polytope => polytope_feature}/version.py | 0 tests/quadtree_slicer_profiler.py | 4 +- tests/test_axis_mappers.py | 4 +- tests/test_combinatorics.py | 6 +- tests/test_cyclic_axis_over_negative_vals.py | 4 +- tests/test_cyclic_axis_slicer_not_0.py | 4 +- tests/test_cyclic_axis_slicing.py | 4 +- tests/test_cyclic_nearest.py | 4 +- tests/test_cyclic_simple.py | 4 +- tests/test_cyclic_snapping.py | 4 +- tests/test_datacube_axes_init.py | 6 +- tests/test_datacube_mock.py | 4 +- tests/test_datacube_xarray.py | 8 +- tests/test_ecmwf_oper_data_fdb.py | 4 +- tests/test_engine_slicer.py | 6 +- tests/test_fdb_datacube.py | 4 +- tests/test_fdb_unmap_tree.py | 4 +- tests/test_float_type.py | 4 +- tests/test_healpix_mapper.py | 6 +- tests/test_healpix_nested_grid.py | 8 +- tests/test_hull_slicer.py | 24 ++-- tests/test_hullslicer_engine.py | 8 +- tests/test_incomplete_tree_fdb.py | 4 +- tests/test_local_grid_cyclic.py | 4 +- tests/test_local_regular_grid.py | 4 +- tests/test_local_swiss_grid.py | 6 +- tests/test_mappers.py | 2 +- tests/test_merge_cyclic_octahedral.py | 6 +- tests/test_merge_octahedral_one_axis.py | 4 +- tests/test_merge_transformation.py | 4 +- tests/test_multiple_param_fdb.py | 4 +- tests/test_octahedral_grid.py | 4 +- tests/test_orca_irregular_grid.py | 4 +- tests/test_point_nearest.py | 4 +- tests/test_point_shape.py | 4 +- tests/test_polytope_extract.py | 4 +- tests/test_polytope_extract_fdb.py | 4 +- tests/test_profiling_requesttree.py | 8 +- tests/test_quad_tree.py | 10 +- tests/test_quadtree_edge_cases.py | 4 +- tests/test_quadtree_indices.py | 4 +- tests/test_quadtree_optimisation.py | 4 +- tests/test_reduced_ll_grid.py | 6 +- tests/test_regular_grid.py | 6 +- tests/test_request_tree.py | 4 +- tests/test_request_trees_after_slicing.py | 8 +- tests/test_reverse_transformation.py | 4 +- tests/test_shapes.py | 4 +- tests/test_slice_date_range_fdb.py | 4 +- tests/test_slice_date_range_fdb_v2.py | 4 +- tests/test_slicer_engine.py | 8 +- tests/test_slicer_era5.py | 4 +- tests/test_slicer_xarray.py | 4 +- tests/test_slicing_unsliceable_axis.py | 6 +- tests/test_slicing_xarray_3D.py | 8 +- tests/test_slicing_xarray_4D.py | 11 +- tests/test_snapping.py | 4 +- tests/test_snapping_real_data.py | 4 +- tests/test_tree_protobuf.py | 2 +- tests/test_tree_protobuf_encoding.py | 12 +- tests/test_tree_protobuf_encoding_fdb.py | 6 +- tests/test_type_change_transformation.py | 4 +- tests/test_union_gj.py | 4 +- 131 files changed, 241 insertions(+), 346 deletions(-) delete mode 100644 polytope/datacube/transformations/datacube_mappers/mapper_axis_decorator.py rename {polytope => polytope_feature}/__init__.py (100%) rename {polytope => polytope_feature}/datacube/__init__.py (100%) rename {polytope => polytope_feature}/datacube/backends/__init__.py (100%) rename {polytope => polytope_feature}/datacube/backends/datacube.py (100%) rename {polytope => polytope_feature}/datacube/backends/fdb.py (100%) rename {polytope => polytope_feature}/datacube/backends/mock.py (100%) rename {polytope => polytope_feature}/datacube/backends/xarray.py (100%) rename {polytope => polytope_feature}/datacube/datacube_axis.py (100%) rename {polytope => polytope_feature}/datacube/index_tree.proto (100%) rename {polytope => polytope_feature}/datacube/index_tree_pb2.py (100%) rename {polytope => polytope_feature}/datacube/quad_tree.py (100%) rename {polytope => polytope_feature}/datacube/tensor_index_tree.py (100%) rename {polytope => polytope_feature}/datacube/transformations/__init__.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_cyclic/__init__.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_cyclic/datacube_cyclic.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_mappers/__init__.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_mappers/datacube_mappers.py (97%) rename {polytope => polytope_feature}/datacube/transformations/datacube_mappers/mapper_types/__init__.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_mappers/mapper_types/healpix.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_mappers/mapper_types/healpix_nested.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_mappers/mapper_types/irregular.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_mappers/mapper_types/local_regular.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_mappers/mapper_types/octahedral.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_mappers/mapper_types/reduced_ll.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_mappers/mapper_types/regular.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_merger/__init__.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_merger/datacube_merger.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_reverse/__init__.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_reverse/datacube_reverse.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_transformations.py (96%) rename {polytope => polytope_feature}/datacube/transformations/datacube_type_change/__init__.py (100%) rename {polytope => polytope_feature}/datacube/transformations/datacube_type_change/datacube_type_change.py (95%) rename {polytope => polytope_feature}/datacube/tree_encoding.py (100%) rename {polytope => polytope_feature}/engine/__init__.py (100%) rename {polytope => polytope_feature}/engine/engine.py (100%) rename {polytope => polytope_feature}/engine/hullslicer.py (100%) rename {polytope => polytope_feature}/engine/quadtree_slicer.py (100%) rename {polytope => polytope_feature}/engine/slicing_tools.py (100%) rename {polytope => polytope_feature}/options.py (100%) rename {polytope => polytope_feature}/polytope.py (100%) rename {polytope => polytope_feature}/shapes.py (100%) rename {polytope => polytope_feature}/utility/__init__.py (100%) rename {polytope => polytope_feature}/utility/combinatorics.py (100%) rename {polytope => polytope_feature}/utility/engine_tools.py (100%) rename {polytope => polytope_feature}/utility/exceptions.py (100%) rename {polytope => polytope_feature}/utility/geometry.py (100%) rename {polytope => polytope_feature}/utility/list_tools.py (100%) rename {polytope => polytope_feature}/utility/profiling.py (100%) rename {polytope => polytope_feature}/version.py (100%) diff --git a/.gitignore b/.gitignore index b32e5f211..9225f2fff 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,5 @@ polytope_venv polytope_venv_latest newest-polytope-venv *.pstats -*.profile \ No newline at end of file +*.profile +new_polytope_venv \ No newline at end of file diff --git a/examples/3D_shipping_route.py b/examples/3D_shipping_route.py index 57322b513..a931f6d21 100644 --- a/examples/3D_shipping_route.py +++ b/examples/3D_shipping_route.py @@ -6,9 +6,9 @@ import numpy as np from earthkit import data -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Ellipsoid, Path, Select +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Ellipsoid, Path, Select class Test: diff --git a/examples/3D_shipping_route_wave_model.py b/examples/3D_shipping_route_wave_model.py index e4edabe9f..81463ba51 100644 --- a/examples/3D_shipping_route_wave_model.py +++ b/examples/3D_shipping_route_wave_model.py @@ -4,10 +4,10 @@ import pytest from eccodes import codes_grib_find_nearest, codes_grib_new_from_file -from polytope.datacube.backends.fdb import FDBDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Ellipsoid, Path, Select +from polytope_feature.datacube.backends.fdb import FDBDatacube +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Ellipsoid, Path, Select from tests.helper_functions import download_test_data diff --git a/examples/4D_flight_path.py b/examples/4D_flight_path.py index d2d1f1eaa..0dc0f8552 100644 --- a/examples/4D_flight_path.py +++ b/examples/4D_flight_path.py @@ -4,10 +4,10 @@ from earthkit import data from PIL import Image -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Path, Select +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Path, Select class Test: diff --git a/examples/country_slicing.py b/examples/country_slicing.py index 4a5ed30db..fa88b3a5f 100644 --- a/examples/country_slicing.py +++ b/examples/country_slicing.py @@ -4,10 +4,10 @@ from earthkit import data from shapely.geometry import shape -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Polygon, Select, Union +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Polygon, Select, Union class Test: diff --git a/examples/cyclic_route_around_earth.py b/examples/cyclic_route_around_earth.py index 4e971d677..26cf5ef81 100644 --- a/examples/cyclic_route_around_earth.py +++ b/examples/cyclic_route_around_earth.py @@ -3,10 +3,10 @@ import numpy as np from earthkit import data -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, PathSegment, Select +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, PathSegment, Select class Test: diff --git a/examples/healpix_grid_box_example.py b/examples/healpix_grid_box_example.py index 6cfbb5e78..4e759e28f 100644 --- a/examples/healpix_grid_box_example.py +++ b/examples/healpix_grid_box_example.py @@ -3,10 +3,10 @@ from earthkit import data from eccodes import codes_grib_find_nearest, codes_grib_new_from_file -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestOctahedralGrid: diff --git a/examples/octahedral_grid_box_example.py b/examples/octahedral_grid_box_example.py index a4cddcacd..8293c9eb7 100644 --- a/examples/octahedral_grid_box_example.py +++ b/examples/octahedral_grid_box_example.py @@ -6,10 +6,10 @@ from eccodes import codes_grib_find_nearest, codes_grib_new_from_file from matplotlib import markers -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select def find_nearest_latlon(grib_file, target_lat, target_lon): diff --git a/examples/octahedral_grid_country_example.py b/examples/octahedral_grid_country_example.py index 280701d2b..9d777872b 100644 --- a/examples/octahedral_grid_country_example.py +++ b/examples/octahedral_grid_country_example.py @@ -7,10 +7,10 @@ from matplotlib import markers from shapely.geometry import shape -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Polygon, Select, Union +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Polygon, Select, Union def find_nearest_latlon(grib_file, target_lat, target_lon): diff --git a/examples/read_me_example.py b/examples/read_me_example.py index 0c13e1274..41e3247e6 100644 --- a/examples/read_me_example.py +++ b/examples/read_me_example.py @@ -1,8 +1,8 @@ import numpy as np from earthkit import data -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select ds = data.from_source("file", "./examples/data/winds.grib") array = ds.to_xarray() diff --git a/examples/slicing_all_ecmwf_countries.py b/examples/slicing_all_ecmwf_countries.py index 7178305a9..dd5e029af 100644 --- a/examples/slicing_all_ecmwf_countries.py +++ b/examples/slicing_all_ecmwf_countries.py @@ -4,10 +4,10 @@ from earthkit import data from shapely.geometry import shape -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Polygon, Select, Union +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Polygon, Select, Union class Test: diff --git a/examples/timeseries_example.py b/examples/timeseries_example.py index bd350cc13..edbed2efc 100644 --- a/examples/timeseries_example.py +++ b/examples/timeseries_example.py @@ -3,10 +3,10 @@ from earthkit import data from shapely.geometry import shape -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Polygon, Select, Union +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Polygon, Select, Union class Test: diff --git a/examples/wind_farms.py b/examples/wind_farms.py index 23699eb36..7c8284c8a 100644 --- a/examples/wind_farms.py +++ b/examples/wind_farms.py @@ -6,10 +6,10 @@ from osgeo import gdal from shapely.geometry import shape -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Polygon, Select, Union +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Polygon, Select, Union class Test: diff --git a/performance/fdb_performance.py b/performance/fdb_performance.py index 78819d462..a8d9e0133 100644 --- a/performance/fdb_performance.py +++ b/performance/fdb_performance.py @@ -2,10 +2,10 @@ import pandas as pd -from polytope.datacube.backends.fdb import FDBDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.datacube.backends.fdb import FDBDatacube +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestSlicingFDBDatacube: diff --git a/performance/fdb_performance_3D.py b/performance/fdb_performance_3D.py index 88fb85c92..75c87ba62 100644 --- a/performance/fdb_performance_3D.py +++ b/performance/fdb_performance_3D.py @@ -2,10 +2,10 @@ import pandas as pd -from polytope.datacube.backends.fdb import FDBDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select, Span +from polytope_feature.datacube.backends.fdb import FDBDatacube +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select, Span class TestSlicingFDBDatacube: diff --git a/performance/fdb_slice_many_numbers_timeseries.py b/performance/fdb_slice_many_numbers_timeseries.py index 52c84be25..34174725a 100644 --- a/performance/fdb_slice_many_numbers_timeseries.py +++ b/performance/fdb_slice_many_numbers_timeseries.py @@ -2,9 +2,9 @@ import pandas as pd -from polytope.datacube.backends.fdb import FDBDatacube -from polytope.polytope import Polytope, Request -from polytope.shapes import All, Point, Select +from polytope_feature.datacube.backends.fdb import FDBDatacube +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import All, Point, Select time1 = time.time() # Create a dataarray with 3 labelled axes using different index types diff --git a/performance/performance_many_num_steps.py b/performance/performance_many_num_steps.py index eb47b0a06..0cdcefcb2 100644 --- a/performance/performance_many_num_steps.py +++ b/performance/performance_many_num_steps.py @@ -4,9 +4,9 @@ import pandas as pd from earthkit import data -from polytope.datacube.backends.fdb import FDBDatacube -from polytope.polytope import Polytope, Request -from polytope.shapes import All, Point, Select, Span +from polytope_feature.datacube.backends.fdb import FDBDatacube +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import All, Point, Select, Span time1 = time.time() # Create a dataarray with 3 labelled axes using different index types diff --git a/performance/scalability_test.py b/performance/scalability_test.py index ab3c5b299..c0aba173f 100644 --- a/performance/scalability_test.py +++ b/performance/scalability_test.py @@ -3,10 +3,10 @@ import numpy as np import xarray as xr -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Disk, Ellipsoid, Select +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Disk, Ellipsoid, Select class Test: diff --git a/performance/scalability_test_2.py b/performance/scalability_test_2.py index b10e86f4c..7ba0bff4a 100644 --- a/performance/scalability_test_2.py +++ b/performance/scalability_test_2.py @@ -3,10 +3,10 @@ import numpy as np import xarray as xr -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select, Union +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select, Union class Test: diff --git a/polytope/datacube/transformations/datacube_mappers/mapper_axis_decorator.py b/polytope/datacube/transformations/datacube_mappers/mapper_axis_decorator.py deleted file mode 100644 index 8335e592a..000000000 --- a/polytope/datacube/transformations/datacube_mappers/mapper_axis_decorator.py +++ /dev/null @@ -1,110 +0,0 @@ -# import bisect - -# from ....utility.list_tools import bisect_left_cmp, bisect_right_cmp -# from .datacube_mappers import DatacubeMapper - - -# def mapper(cls): -# if cls.has_mapper: - -# def find_indexes(path, datacube): -# # first, find the relevant transformation object that is a mapping in the cls.transformation dico -# for transform in cls.transformations: -# if isinstance(transform, DatacubeMapper): -# transformation = transform -# if cls.name == transformation._mapped_axes()[0]: -# return transformation.first_axis_vals() -# if cls.name == transformation._mapped_axes()[1]: -# first_val = path[transformation._mapped_axes()[0]] -# return transformation.second_axis_vals(first_val) - -# old_unmap_to_datacube = cls.unmap_to_datacube - -# def unmap_to_datacube(path, unmapped_path): -# (path, unmapped_path) = old_unmap_to_datacube(path, unmapped_path) -# for transform in cls.transformations: -# if isinstance(transform, DatacubeMapper): -# if cls.name == transform._mapped_axes()[0]: -# # if we are on the first axis, then need to add the first val to unmapped_path -# first_val = path.get(cls.name, None) -# path.pop(cls.name, None) -# if cls.name not in unmapped_path: -# # if for some reason, the unmapped_path already has the first axis val, then don't update -# unmapped_path[cls.name] = first_val -# if cls.name == transform._mapped_axes()[1]: -# # if we are on the second axis, then the val of the first axis is stored -# # inside unmapped_path so can get it from there -# second_val = path.get(cls.name, None) -# path.pop(cls.name, None) -# first_val = unmapped_path.get(transform._mapped_axes()[0], None) -# unmapped_path.pop(transform._mapped_axes()[0], None) -# # if the first_val was not in the unmapped_path, then it's still in path -# if first_val is None: -# first_val = path.get(transform._mapped_axes()[0], None) -# path.pop(transform._mapped_axes()[0], None) -# if first_val is not None and second_val is not None: -# unmapped_idx = path.get("result", None) -# unmapped_idx = transform.unmap(first_val, second_val, unmapped_idx) -# unmapped_path[transform.old_axis] = unmapped_idx -# return (path, unmapped_path) - -# old_unmap_path_key = cls.unmap_path_key - -# def unmap_path_key(key_value_path, leaf_path, unwanted_path): -# key_value_path, leaf_path, unwanted_path = old_unmap_path_key(key_value_path, leaf_path, unwanted_path) -# value = key_value_path[cls.name] -# for transform in cls.transformations: -# if isinstance(transform, DatacubeMapper): -# if cls.name == transform._mapped_axes()[0]: -# unwanted_val = key_value_path[transform._mapped_axes()[0]] -# unwanted_path[cls.name] = unwanted_val -# if cls.name == transform._mapped_axes()[1]: -# first_val = unwanted_path[transform._mapped_axes()[0]] -# unmapped_idx = leaf_path.get("result", None) -# unmapped_idx = transform.unmap(first_val, value, unmapped_idx) -# leaf_path.pop(transform._mapped_axes()[0], None) -# key_value_path.pop(cls.name) -# key_value_path[transform.old_axis] = unmapped_idx -# return (key_value_path, leaf_path, unwanted_path) - -# def find_indices_between(index_ranges, low, up, datacube, method=None): -# # TODO: add method for snappping -# indexes_between_ranges = [] -# for transform in cls.transformations: -# if isinstance(transform, DatacubeMapper): -# transformation = transform -# if cls.name in transformation._mapped_axes(): -# for idxs in index_ranges: -# if method == "surrounding" or method == "nearest": -# axis_reversed = transform._axis_reversed[cls.name] -# if not axis_reversed: -# start = bisect.bisect_left(idxs, low) -# end = bisect.bisect_right(idxs, up) -# else: -# # TODO: do the custom bisect -# end = bisect_left_cmp(idxs, low, cmp=lambda x, y: x > y) + 1 -# start = bisect_right_cmp(idxs, up, cmp=lambda x, y: x > y) -# start = max(start - 1, 0) -# end = min(end + 1, len(idxs)) -# indexes_between = idxs[start:end] -# indexes_between_ranges.append(indexes_between) -# else: -# axis_reversed = transform._axis_reversed[cls.name] -# if not axis_reversed: -# lower_idx = bisect.bisect_left(idxs, low) -# upper_idx = bisect.bisect_right(idxs, up) -# indexes_between = idxs[lower_idx:upper_idx] -# else: -# # TODO: do the custom bisect -# end_idx = bisect_left_cmp(idxs, low, cmp=lambda x, y: x > y) + 1 -# start_idx = bisect_right_cmp(idxs, up, cmp=lambda x, y: x > y) -# indexes_between = idxs[start_idx:end_idx] -# indexes_between_ranges.append(indexes_between) -# return indexes_between_ranges - -# cls.find_indexes = find_indexes -# cls.unmap_to_datacube = unmap_to_datacube -# cls.find_indices_between = find_indices_between -# cls.unmap_path_key = unmap_path_key - -# return cls diff --git a/polytope/__init__.py b/polytope_feature/__init__.py similarity index 100% rename from polytope/__init__.py rename to polytope_feature/__init__.py diff --git a/polytope/datacube/__init__.py b/polytope_feature/datacube/__init__.py similarity index 100% rename from polytope/datacube/__init__.py rename to polytope_feature/datacube/__init__.py diff --git a/polytope/datacube/backends/__init__.py b/polytope_feature/datacube/backends/__init__.py similarity index 100% rename from polytope/datacube/backends/__init__.py rename to polytope_feature/datacube/backends/__init__.py diff --git a/polytope/datacube/backends/datacube.py b/polytope_feature/datacube/backends/datacube.py similarity index 100% rename from polytope/datacube/backends/datacube.py rename to polytope_feature/datacube/backends/datacube.py diff --git a/polytope/datacube/backends/fdb.py b/polytope_feature/datacube/backends/fdb.py similarity index 100% rename from polytope/datacube/backends/fdb.py rename to polytope_feature/datacube/backends/fdb.py diff --git a/polytope/datacube/backends/mock.py b/polytope_feature/datacube/backends/mock.py similarity index 100% rename from polytope/datacube/backends/mock.py rename to polytope_feature/datacube/backends/mock.py diff --git a/polytope/datacube/backends/xarray.py b/polytope_feature/datacube/backends/xarray.py similarity index 100% rename from polytope/datacube/backends/xarray.py rename to polytope_feature/datacube/backends/xarray.py diff --git a/polytope/datacube/datacube_axis.py b/polytope_feature/datacube/datacube_axis.py similarity index 100% rename from polytope/datacube/datacube_axis.py rename to polytope_feature/datacube/datacube_axis.py diff --git a/polytope/datacube/index_tree.proto b/polytope_feature/datacube/index_tree.proto similarity index 100% rename from polytope/datacube/index_tree.proto rename to polytope_feature/datacube/index_tree.proto diff --git a/polytope/datacube/index_tree_pb2.py b/polytope_feature/datacube/index_tree_pb2.py similarity index 100% rename from polytope/datacube/index_tree_pb2.py rename to polytope_feature/datacube/index_tree_pb2.py diff --git a/polytope/datacube/quad_tree.py b/polytope_feature/datacube/quad_tree.py similarity index 100% rename from polytope/datacube/quad_tree.py rename to polytope_feature/datacube/quad_tree.py diff --git a/polytope/datacube/tensor_index_tree.py b/polytope_feature/datacube/tensor_index_tree.py similarity index 100% rename from polytope/datacube/tensor_index_tree.py rename to polytope_feature/datacube/tensor_index_tree.py diff --git a/polytope/datacube/transformations/__init__.py b/polytope_feature/datacube/transformations/__init__.py similarity index 100% rename from polytope/datacube/transformations/__init__.py rename to polytope_feature/datacube/transformations/__init__.py diff --git a/polytope/datacube/transformations/datacube_cyclic/__init__.py b/polytope_feature/datacube/transformations/datacube_cyclic/__init__.py similarity index 100% rename from polytope/datacube/transformations/datacube_cyclic/__init__.py rename to polytope_feature/datacube/transformations/datacube_cyclic/__init__.py diff --git a/polytope/datacube/transformations/datacube_cyclic/datacube_cyclic.py b/polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py similarity index 100% rename from polytope/datacube/transformations/datacube_cyclic/datacube_cyclic.py rename to polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py diff --git a/polytope/datacube/transformations/datacube_mappers/__init__.py b/polytope_feature/datacube/transformations/datacube_mappers/__init__.py similarity index 100% rename from polytope/datacube/transformations/datacube_mappers/__init__.py rename to polytope_feature/datacube/transformations/datacube_mappers/__init__.py diff --git a/polytope/datacube/transformations/datacube_mappers/datacube_mappers.py b/polytope_feature/datacube/transformations/datacube_mappers/datacube_mappers.py similarity index 97% rename from polytope/datacube/transformations/datacube_mappers/datacube_mappers.py rename to polytope_feature/datacube/transformations/datacube_mappers/datacube_mappers.py index 890ec0ca4..31c4fe781 100644 --- a/polytope/datacube/transformations/datacube_mappers/datacube_mappers.py +++ b/polytope_feature/datacube/transformations/datacube_mappers/datacube_mappers.py @@ -23,7 +23,8 @@ def __init__(self, name, mapper_options): def generate_final_transformation(self): map_type = _type_to_datacube_mapper_lookup[self.grid_type] - module = import_module("polytope.datacube.transformations.datacube_mappers.mapper_types." + self.grid_type) + module = import_module( + "polytope_feature.datacube.transformations.datacube_mappers.mapper_types." + self.grid_type) constructor = getattr(module, map_type) transformation = deepcopy(constructor(self.old_axis, self.grid_axes, self.grid_resolution, self.local_area)) return transformation diff --git a/polytope/datacube/transformations/datacube_mappers/mapper_types/__init__.py b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/__init__.py similarity index 100% rename from polytope/datacube/transformations/datacube_mappers/mapper_types/__init__.py rename to polytope_feature/datacube/transformations/datacube_mappers/mapper_types/__init__.py diff --git a/polytope/datacube/transformations/datacube_mappers/mapper_types/healpix.py b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/healpix.py similarity index 100% rename from polytope/datacube/transformations/datacube_mappers/mapper_types/healpix.py rename to polytope_feature/datacube/transformations/datacube_mappers/mapper_types/healpix.py diff --git a/polytope/datacube/transformations/datacube_mappers/mapper_types/healpix_nested.py b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/healpix_nested.py similarity index 100% rename from polytope/datacube/transformations/datacube_mappers/mapper_types/healpix_nested.py rename to polytope_feature/datacube/transformations/datacube_mappers/mapper_types/healpix_nested.py diff --git a/polytope/datacube/transformations/datacube_mappers/mapper_types/irregular.py b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py similarity index 100% rename from polytope/datacube/transformations/datacube_mappers/mapper_types/irregular.py rename to polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py diff --git a/polytope/datacube/transformations/datacube_mappers/mapper_types/local_regular.py b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/local_regular.py similarity index 100% rename from polytope/datacube/transformations/datacube_mappers/mapper_types/local_regular.py rename to polytope_feature/datacube/transformations/datacube_mappers/mapper_types/local_regular.py diff --git a/polytope/datacube/transformations/datacube_mappers/mapper_types/octahedral.py b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/octahedral.py similarity index 100% rename from polytope/datacube/transformations/datacube_mappers/mapper_types/octahedral.py rename to polytope_feature/datacube/transformations/datacube_mappers/mapper_types/octahedral.py diff --git a/polytope/datacube/transformations/datacube_mappers/mapper_types/reduced_ll.py b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/reduced_ll.py similarity index 100% rename from polytope/datacube/transformations/datacube_mappers/mapper_types/reduced_ll.py rename to polytope_feature/datacube/transformations/datacube_mappers/mapper_types/reduced_ll.py diff --git a/polytope/datacube/transformations/datacube_mappers/mapper_types/regular.py b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/regular.py similarity index 100% rename from polytope/datacube/transformations/datacube_mappers/mapper_types/regular.py rename to polytope_feature/datacube/transformations/datacube_mappers/mapper_types/regular.py diff --git a/polytope/datacube/transformations/datacube_merger/__init__.py b/polytope_feature/datacube/transformations/datacube_merger/__init__.py similarity index 100% rename from polytope/datacube/transformations/datacube_merger/__init__.py rename to polytope_feature/datacube/transformations/datacube_merger/__init__.py diff --git a/polytope/datacube/transformations/datacube_merger/datacube_merger.py b/polytope_feature/datacube/transformations/datacube_merger/datacube_merger.py similarity index 100% rename from polytope/datacube/transformations/datacube_merger/datacube_merger.py rename to polytope_feature/datacube/transformations/datacube_merger/datacube_merger.py diff --git a/polytope/datacube/transformations/datacube_reverse/__init__.py b/polytope_feature/datacube/transformations/datacube_reverse/__init__.py similarity index 100% rename from polytope/datacube/transformations/datacube_reverse/__init__.py rename to polytope_feature/datacube/transformations/datacube_reverse/__init__.py diff --git a/polytope/datacube/transformations/datacube_reverse/datacube_reverse.py b/polytope_feature/datacube/transformations/datacube_reverse/datacube_reverse.py similarity index 100% rename from polytope/datacube/transformations/datacube_reverse/datacube_reverse.py rename to polytope_feature/datacube/transformations/datacube_reverse/datacube_reverse.py diff --git a/polytope/datacube/transformations/datacube_transformations.py b/polytope_feature/datacube/transformations/datacube_transformations.py similarity index 96% rename from polytope/datacube/transformations/datacube_transformations.py rename to polytope_feature/datacube/transformations/datacube_transformations.py index 34af22550..3b6e93006 100644 --- a/polytope/datacube/transformations/datacube_transformations.py +++ b/polytope_feature/datacube/transformations/datacube_transformations.py @@ -12,7 +12,7 @@ def create_transform(name, transformation_type_key, transformation_options): transformation_type = _type_to_datacube_transformation_lookup[transformation_type_key] transformation_file_name = _type_to_transformation_file_lookup[transformation_type_key] file_name = ".datacube_" + transformation_file_name - module = import_module("polytope.datacube.transformations" + file_name + file_name) + module = import_module("polytope_feature.datacube.transformations" + file_name + file_name) constructor = getattr(module, transformation_type) # transformation_type_option = transformation_options[transformation_type_key] transformation_type_option = transformation_options diff --git a/polytope/datacube/transformations/datacube_type_change/__init__.py b/polytope_feature/datacube/transformations/datacube_type_change/__init__.py similarity index 100% rename from polytope/datacube/transformations/datacube_type_change/__init__.py rename to polytope_feature/datacube/transformations/datacube_type_change/__init__.py diff --git a/polytope/datacube/transformations/datacube_type_change/datacube_type_change.py b/polytope_feature/datacube/transformations/datacube_type_change/datacube_type_change.py similarity index 95% rename from polytope/datacube/transformations/datacube_type_change/datacube_type_change.py rename to polytope_feature/datacube/transformations/datacube_type_change/datacube_type_change.py index 8cbf2c44e..7d6cc4cd2 100644 --- a/polytope/datacube/transformations/datacube_type_change/datacube_type_change.py +++ b/polytope_feature/datacube/transformations/datacube_type_change/datacube_type_change.py @@ -15,7 +15,7 @@ def __init__(self, name, type_options): def generate_final_transformation(self): map_type = _type_to_datacube_type_change_lookup[self.new_type] - module = import_module("polytope.datacube.transformations.datacube_type_change.datacube_type_change") + module = import_module("polytope_feature.datacube.transformations.datacube_type_change.datacube_type_change") constructor = getattr(module, map_type) transformation = deepcopy(constructor(self.name, self.new_type)) return transformation diff --git a/polytope/datacube/tree_encoding.py b/polytope_feature/datacube/tree_encoding.py similarity index 100% rename from polytope/datacube/tree_encoding.py rename to polytope_feature/datacube/tree_encoding.py diff --git a/polytope/engine/__init__.py b/polytope_feature/engine/__init__.py similarity index 100% rename from polytope/engine/__init__.py rename to polytope_feature/engine/__init__.py diff --git a/polytope/engine/engine.py b/polytope_feature/engine/engine.py similarity index 100% rename from polytope/engine/engine.py rename to polytope_feature/engine/engine.py diff --git a/polytope/engine/hullslicer.py b/polytope_feature/engine/hullslicer.py similarity index 100% rename from polytope/engine/hullslicer.py rename to polytope_feature/engine/hullslicer.py diff --git a/polytope/engine/quadtree_slicer.py b/polytope_feature/engine/quadtree_slicer.py similarity index 100% rename from polytope/engine/quadtree_slicer.py rename to polytope_feature/engine/quadtree_slicer.py diff --git a/polytope/engine/slicing_tools.py b/polytope_feature/engine/slicing_tools.py similarity index 100% rename from polytope/engine/slicing_tools.py rename to polytope_feature/engine/slicing_tools.py diff --git a/polytope/options.py b/polytope_feature/options.py similarity index 100% rename from polytope/options.py rename to polytope_feature/options.py diff --git a/polytope/polytope.py b/polytope_feature/polytope.py similarity index 100% rename from polytope/polytope.py rename to polytope_feature/polytope.py diff --git a/polytope/shapes.py b/polytope_feature/shapes.py similarity index 100% rename from polytope/shapes.py rename to polytope_feature/shapes.py diff --git a/polytope/utility/__init__.py b/polytope_feature/utility/__init__.py similarity index 100% rename from polytope/utility/__init__.py rename to polytope_feature/utility/__init__.py diff --git a/polytope/utility/combinatorics.py b/polytope_feature/utility/combinatorics.py similarity index 100% rename from polytope/utility/combinatorics.py rename to polytope_feature/utility/combinatorics.py diff --git a/polytope/utility/engine_tools.py b/polytope_feature/utility/engine_tools.py similarity index 100% rename from polytope/utility/engine_tools.py rename to polytope_feature/utility/engine_tools.py diff --git a/polytope/utility/exceptions.py b/polytope_feature/utility/exceptions.py similarity index 100% rename from polytope/utility/exceptions.py rename to polytope_feature/utility/exceptions.py diff --git a/polytope/utility/geometry.py b/polytope_feature/utility/geometry.py similarity index 100% rename from polytope/utility/geometry.py rename to polytope_feature/utility/geometry.py diff --git a/polytope/utility/list_tools.py b/polytope_feature/utility/list_tools.py similarity index 100% rename from polytope/utility/list_tools.py rename to polytope_feature/utility/list_tools.py diff --git a/polytope/utility/profiling.py b/polytope_feature/utility/profiling.py similarity index 100% rename from polytope/utility/profiling.py rename to polytope_feature/utility/profiling.py diff --git a/polytope/version.py b/polytope_feature/version.py similarity index 100% rename from polytope/version.py rename to polytope_feature/version.py diff --git a/tests/quadtree_slicer_profiler.py b/tests/quadtree_slicer_profiler.py index 5ae9fcc2d..ecb3f67a9 100644 --- a/tests/quadtree_slicer_profiler.py +++ b/tests/quadtree_slicer_profiler.py @@ -3,8 +3,8 @@ import numpy as np import pygribjump as gj -from polytope.polytope import Polytope, Request -from polytope.shapes import Box +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box options = { "axis_config": [ diff --git a/tests/test_axis_mappers.py b/tests/test_axis_mappers.py index c1dc0cd24..b500b9a03 100644 --- a/tests/test_axis_mappers.py +++ b/tests/test_axis_mappers.py @@ -1,13 +1,13 @@ import pandas as pd -from polytope.datacube.datacube_axis import ( +from polytope_feature.datacube.datacube_axis import ( DatacubeAxisCyclic, FloatDatacubeAxis, IntDatacubeAxis, PandasTimedeltaDatacubeAxis, PandasTimestampDatacubeAxis, ) -from polytope.options import PolytopeOptions +from polytope_feature.options import PolytopeOptions class TestAxisMappers: diff --git a/tests/test_combinatorics.py b/tests/test_combinatorics.py index 980ad8e2c..0e4798720 100644 --- a/tests/test_combinatorics.py +++ b/tests/test_combinatorics.py @@ -1,9 +1,9 @@ import numpy as np import pytest -from polytope import ConvexPolytope -from polytope.utility.combinatorics import group, tensor_product, validate_axes -from polytope.utility.exceptions import ( +from polytope_feature import ConvexPolytope +from polytope_feature.utility.combinatorics import group, tensor_product, validate_axes +from polytope_feature.utility.exceptions import ( AxisNotFoundError, AxisOverdefinedError, AxisUnderdefinedError, diff --git a/tests/test_cyclic_axis_over_negative_vals.py b/tests/test_cyclic_axis_over_negative_vals.py index 76bbe3865..fd144ee18 100644 --- a/tests/test_cyclic_axis_over_negative_vals.py +++ b/tests/test_cyclic_axis_over_negative_vals.py @@ -2,8 +2,8 @@ import pandas as pd import xarray as xr -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestSlicingCyclicAxisNegVals: diff --git a/tests/test_cyclic_axis_slicer_not_0.py b/tests/test_cyclic_axis_slicer_not_0.py index 947d98de4..1a8baa0c6 100644 --- a/tests/test_cyclic_axis_slicer_not_0.py +++ b/tests/test_cyclic_axis_slicer_not_0.py @@ -2,8 +2,8 @@ import pandas as pd import xarray as xr -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestSlicingCyclicAxisNotOverZero: diff --git a/tests/test_cyclic_axis_slicing.py b/tests/test_cyclic_axis_slicing.py index c0bb24c1d..7379b815d 100644 --- a/tests/test_cyclic_axis_slicing.py +++ b/tests/test_cyclic_axis_slicing.py @@ -2,8 +2,8 @@ import pandas as pd import xarray as xr -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestSlicingCyclic: diff --git a/tests/test_cyclic_nearest.py b/tests/test_cyclic_nearest.py index 39b95ee43..c297e011f 100644 --- a/tests/test_cyclic_nearest.py +++ b/tests/test_cyclic_nearest.py @@ -3,8 +3,8 @@ from eccodes import codes_grib_find_nearest, codes_grib_new_from_file from helper_functions import download_test_data -from polytope.polytope import Polytope, Request -from polytope.shapes import Point, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Point, Select class TestRegularGrid: diff --git a/tests/test_cyclic_simple.py b/tests/test_cyclic_simple.py index ae9f67c9d..ce75c3a55 100644 --- a/tests/test_cyclic_simple.py +++ b/tests/test_cyclic_simple.py @@ -2,8 +2,8 @@ import pandas as pd import xarray as xr -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestSlicing3DXarrayDatacube: diff --git a/tests/test_cyclic_snapping.py b/tests/test_cyclic_snapping.py index 7e6109786..831b3a18f 100644 --- a/tests/test_cyclic_snapping.py +++ b/tests/test_cyclic_snapping.py @@ -1,7 +1,7 @@ import xarray as xr -from polytope.polytope import Polytope, Request -from polytope.shapes import Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Select class TestSlicing3DXarrayDatacube: diff --git a/tests/test_datacube_axes_init.py b/tests/test_datacube_axes_init.py index b34ff1b03..37f843726 100644 --- a/tests/test_datacube_axes_init.py +++ b/tests/test_datacube_axes_init.py @@ -2,9 +2,9 @@ from earthkit import data from helper_functions import download_test_data -from polytope.datacube.datacube_axis import FloatDatacubeAxis -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.datacube.datacube_axis import FloatDatacubeAxis +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestInitDatacubeAxes: diff --git a/tests/test_datacube_mock.py b/tests/test_datacube_mock.py index 0b147b95c..b941af1d3 100644 --- a/tests/test_datacube_mock.py +++ b/tests/test_datacube_mock.py @@ -1,7 +1,7 @@ import pytest -from polytope.datacube.backends.mock import MockDatacube -from polytope.utility.exceptions import AxisNotFoundError, AxisOverdefinedError +from polytope_feature.datacube.backends.mock import MockDatacube +from polytope_feature.utility.exceptions import AxisNotFoundError, AxisOverdefinedError class TestMockDatacube: diff --git a/tests/test_datacube_xarray.py b/tests/test_datacube_xarray.py index 178f5af77..9ac245518 100644 --- a/tests/test_datacube_xarray.py +++ b/tests/test_datacube_xarray.py @@ -5,14 +5,14 @@ import pytest import xarray as xr -from polytope.datacube import Datacube, DatacubePath -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.datacube.datacube_axis import ( +from polytope_feature.datacube import Datacube, DatacubePath +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.datacube.datacube_axis import ( FloatDatacubeAxis, IntDatacubeAxis, PandasTimestampDatacubeAxis, ) -from polytope.utility.exceptions import AxisNotFoundError, AxisOverdefinedError +from polytope_feature.utility.exceptions import AxisNotFoundError, AxisOverdefinedError class TestXarrayDatacube: diff --git a/tests/test_ecmwf_oper_data_fdb.py b/tests/test_ecmwf_oper_data_fdb.py index 290c5a80f..b61b76141 100644 --- a/tests/test_ecmwf_oper_data_fdb.py +++ b/tests/test_ecmwf_oper_data_fdb.py @@ -1,8 +1,8 @@ import pandas as pd import pytest -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Point, Select, Span +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Point, Select, Span class TestSlicingFDBDatacube: diff --git a/tests/test_engine_slicer.py b/tests/test_engine_slicer.py index 96ed17b7e..2a4ba588f 100644 --- a/tests/test_engine_slicer.py +++ b/tests/test_engine_slicer.py @@ -1,6 +1,6 @@ -from polytope.datacube.backends.mock import MockDatacube -from polytope.polytope import Polytope -from polytope.shapes import Box, Polygon +from polytope_feature.datacube.backends.mock import MockDatacube +from polytope_feature.polytope import Polytope +from polytope_feature.shapes import Box, Polygon class TestEngineSlicer: diff --git a/tests/test_fdb_datacube.py b/tests/test_fdb_datacube.py index 1ad16a0d0..b88cec7f9 100644 --- a/tests/test_fdb_datacube.py +++ b/tests/test_fdb_datacube.py @@ -1,8 +1,8 @@ import pandas as pd import pytest -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select, Span +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select, Span # import geopandas as gpd # import matplotlib.pyplot as plt diff --git a/tests/test_fdb_unmap_tree.py b/tests/test_fdb_unmap_tree.py index 5ba2b5a40..7fc0ccc08 100644 --- a/tests/test_fdb_unmap_tree.py +++ b/tests/test_fdb_unmap_tree.py @@ -1,8 +1,8 @@ import pandas as pd import pytest -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select # import geopandas as gpd # import matplotlib.pyplot as plt diff --git a/tests/test_float_type.py b/tests/test_float_type.py index 1ecfc5006..2a8805d16 100644 --- a/tests/test_float_type.py +++ b/tests/test_float_type.py @@ -2,8 +2,8 @@ import pytest import xarray as xr -from polytope.polytope import Polytope, Request -from polytope.shapes import Select, Span +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Select, Span class TestFloatType: diff --git a/tests/test_healpix_mapper.py b/tests/test_healpix_mapper.py index 8bcae9a05..e33d48bf5 100644 --- a/tests/test_healpix_mapper.py +++ b/tests/test_healpix_mapper.py @@ -2,11 +2,11 @@ from earthkit import data from helper_functions import download_test_data, find_nearest_latlon -from polytope.datacube.transformations.datacube_mappers.mapper_types.healpix import ( +from polytope_feature.datacube.transformations.datacube_mappers.mapper_types.healpix import ( HealpixGridMapper, ) -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestOctahedralGrid: diff --git a/tests/test_healpix_nested_grid.py b/tests/test_healpix_nested_grid.py index 7c5e7433d..3f19c2e3a 100644 --- a/tests/test_healpix_nested_grid.py +++ b/tests/test_healpix_nested_grid.py @@ -3,12 +3,12 @@ import pandas as pd import pytest -from polytope.datacube.transformations.datacube_mappers.mapper_types.healpix_nested import ( +from polytope_feature.datacube.transformations.datacube_mappers.mapper_types.healpix_nested import ( NestedHealpixGridMapper, ) -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestHealpixNestedGrid: diff --git a/tests/test_hull_slicer.py b/tests/test_hull_slicer.py index e733612f7..1b324879f 100644 --- a/tests/test_hull_slicer.py +++ b/tests/test_hull_slicer.py @@ -2,15 +2,15 @@ import pytest -import polytope.engine.hullslicer -from polytope import ConvexPolytope -from polytope.datacube.backends.mock import MockDatacube -from polytope.utility.profiling import benchmark +import polytope_feature.engine.hullslicer +from polytope_feature import ConvexPolytope +from polytope_feature.datacube.backends.mock import MockDatacube +from polytope_feature.utility.profiling import benchmark class TestHullSlicer: def setup_method(self, method): - self.slicer = polytope.engine.hullslicer.HullSlicer() + self.slicer = polytope_feature.engine.hullslicer.HullSlicer() def construct_nd_cube(self, dimension, lower=-1, upper=1): axes = [str(chr(97 + ax)) for ax in range(dimension)] @@ -20,9 +20,9 @@ def construct_nd_cube(self, dimension, lower=-1, upper=1): def test_3D(self): p3 = self.construct_nd_cube(3) print(p3) - p2 = polytope.engine.hullslicer.slice(p3, "c", 0.5, 2) + p2 = polytope_feature.engine.hullslicer.slice(p3, "c", 0.5, 2) print(p2) - p1 = polytope.engine.hullslicer.slice(p2, "b", 0.5, 1) + p1 = polytope_feature.engine.hullslicer.slice(p2, "b", 0.5, 1) print(p1) @pytest.mark.skip(reason="This is too slow.") @@ -30,7 +30,7 @@ def test_4D(self): p = self.construct_nd_cube(4) print(p) while len(p.axes()) > 1: - p = polytope.engine.hullslicer.slice(p, p._axes[-1], 0.5, -1) + p = polytope_feature.engine.hullslicer.slice(p, p._axes[-1], 0.5, -1) print(p) @pytest.mark.skip(reason="This is too slow.") @@ -38,22 +38,22 @@ def test_ND(self): with benchmark("4D"): p = self.construct_nd_cube(4) while len(p.axes()) > 1: - p = polytope.engine.hullslicer.slice(p, p._axes[-1], 0.5, -1) + p = polytope_feature.engine.hullslicer.slice(p, p._axes[-1], 0.5, -1) with benchmark("5D"): p = self.construct_nd_cube(5) while len(p.axes()) > 1: - p = polytope.engine.hullslicer.slice(p, p._axes[-1], 0.5, -1) + p = polytope_feature.engine.hullslicer.slice(p, p._axes[-1], 0.5, -1) with benchmark("6D"): p = self.construct_nd_cube(6) while len(p.axes()) > 1: - p = polytope.engine.hullslicer.slice(p, p._axes[-1], 0.5, -1) + p = polytope_feature.engine.hullslicer.slice(p, p._axes[-1], 0.5, -1) with benchmark("7D"): p = self.construct_nd_cube(7) while len(p.axes()) > 1: - p = polytope.engine.hullslicer.slice(p, p._axes[-1], 0.5, -1) + p = polytope_feature.engine.hullslicer.slice(p, p._axes[-1], 0.5, -1) # QHull is not performant above 7D as per its documentation # with benchmark("8D"): diff --git a/tests/test_hullslicer_engine.py b/tests/test_hullslicer_engine.py index 65e96c3f9..ac5e12637 100644 --- a/tests/test_hullslicer_engine.py +++ b/tests/test_hullslicer_engine.py @@ -1,10 +1,10 @@ import numpy as np import xarray as xr -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.datacube.tensor_index_tree import TensorIndexTree -from polytope.polytope import Polytope -from polytope.shapes import Box +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.datacube.tensor_index_tree import TensorIndexTree +from polytope_feature.polytope import Polytope +from polytope_feature.shapes import Box class TestSlicerComponents: diff --git a/tests/test_incomplete_tree_fdb.py b/tests/test_incomplete_tree_fdb.py index 73dc273ad..00da2014e 100644 --- a/tests/test_incomplete_tree_fdb.py +++ b/tests/test_incomplete_tree_fdb.py @@ -2,8 +2,8 @@ import pytest from helper_functions import download_test_data -from polytope.polytope import Polytope, Request -from polytope.shapes import Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Select class TestRegularGrid: diff --git a/tests/test_local_grid_cyclic.py b/tests/test_local_grid_cyclic.py index 5d97c5649..0f3e590b7 100644 --- a/tests/test_local_grid_cyclic.py +++ b/tests/test_local_grid_cyclic.py @@ -1,8 +1,8 @@ import pandas as pd import pytest -from polytope.polytope import Polytope, Request -from polytope.shapes import Point, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Point, Select class TestSlicingFDBDatacube: diff --git a/tests/test_local_regular_grid.py b/tests/test_local_regular_grid.py index b9a114651..c308e4baa 100644 --- a/tests/test_local_regular_grid.py +++ b/tests/test_local_regular_grid.py @@ -1,8 +1,8 @@ import pandas as pd import pytest -from polytope.polytope import Polytope, Request -from polytope.shapes import Point, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Point, Select class TestSlicingFDBDatacube: diff --git a/tests/test_local_swiss_grid.py b/tests/test_local_swiss_grid.py index 2a6c7f497..065717ad2 100644 --- a/tests/test_local_swiss_grid.py +++ b/tests/test_local_swiss_grid.py @@ -4,9 +4,9 @@ import pytest from eccodes import codes_grib_find_nearest, codes_grib_new_from_file -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestSlicingFDBDatacube: diff --git a/tests/test_mappers.py b/tests/test_mappers.py index fb4783a33..3a2cb4fb4 100644 --- a/tests/test_mappers.py +++ b/tests/test_mappers.py @@ -1,4 +1,4 @@ -from polytope.datacube.transformations.datacube_mappers.mapper_types.octahedral import ( +from polytope_feature.datacube.transformations.datacube_mappers.mapper_types.octahedral import ( OctahedralGridMapper, ) diff --git a/tests/test_merge_cyclic_octahedral.py b/tests/test_merge_cyclic_octahedral.py index 70009bc85..7867fc7d6 100644 --- a/tests/test_merge_cyclic_octahedral.py +++ b/tests/test_merge_cyclic_octahedral.py @@ -2,9 +2,9 @@ import pytest import xarray as xr -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select, Span +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select, Span class TestMultipleTransformations: diff --git a/tests/test_merge_octahedral_one_axis.py b/tests/test_merge_octahedral_one_axis.py index 8e03ca424..5bda12294 100644 --- a/tests/test_merge_octahedral_one_axis.py +++ b/tests/test_merge_octahedral_one_axis.py @@ -2,8 +2,8 @@ from earthkit import data from helper_functions import download_test_data -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestSlicingMultipleTransformationsOneAxis: diff --git a/tests/test_merge_transformation.py b/tests/test_merge_transformation.py index 21374f1fa..a53b25d37 100644 --- a/tests/test_merge_transformation.py +++ b/tests/test_merge_transformation.py @@ -2,8 +2,8 @@ import pandas as pd import xarray as xr -from polytope.polytope import Polytope, Request -from polytope.shapes import Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Select class TestMergeTransformation: diff --git a/tests/test_multiple_param_fdb.py b/tests/test_multiple_param_fdb.py index 9c40f2335..b970e0d98 100644 --- a/tests/test_multiple_param_fdb.py +++ b/tests/test_multiple_param_fdb.py @@ -1,8 +1,8 @@ import pandas as pd import pytest -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestSlicingFDBDatacube: diff --git a/tests/test_octahedral_grid.py b/tests/test_octahedral_grid.py index e5f64b10f..dc9e41628 100644 --- a/tests/test_octahedral_grid.py +++ b/tests/test_octahedral_grid.py @@ -2,8 +2,8 @@ from earthkit import data from helper_functions import download_test_data, find_nearest_latlon -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestOctahedralGrid: diff --git a/tests/test_orca_irregular_grid.py b/tests/test_orca_irregular_grid.py index da2b92645..b694500a4 100644 --- a/tests/test_orca_irregular_grid.py +++ b/tests/test_orca_irregular_grid.py @@ -6,8 +6,8 @@ import xarray as xr from helper_functions import find_nearest_latlon -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestQuadTreeSlicer: diff --git a/tests/test_point_nearest.py b/tests/test_point_nearest.py index 2d5c4425d..90a26f250 100644 --- a/tests/test_point_nearest.py +++ b/tests/test_point_nearest.py @@ -1,8 +1,8 @@ import pandas as pd import pytest -from polytope.polytope import Polytope, Request -from polytope.shapes import Point, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Point, Select class TestSlicingFDBDatacube: diff --git a/tests/test_point_shape.py b/tests/test_point_shape.py index 713337e42..fc106575a 100644 --- a/tests/test_point_shape.py +++ b/tests/test_point_shape.py @@ -2,8 +2,8 @@ import pandas as pd import xarray as xr -from polytope.polytope import Polytope, Request -from polytope.shapes import Point, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Point, Select class TestSlicing3DXarrayDatacube: diff --git a/tests/test_polytope_extract.py b/tests/test_polytope_extract.py index facbcb706..d67b31b22 100644 --- a/tests/test_polytope_extract.py +++ b/tests/test_polytope_extract.py @@ -1,8 +1,8 @@ import numpy as np import xarray as xr -from polytope.polytope import Polytope, Request -from polytope.shapes import Box +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box class TestPolytopeExtract: diff --git a/tests/test_polytope_extract_fdb.py b/tests/test_polytope_extract_fdb.py index f8db433c9..7abc2fa3f 100644 --- a/tests/test_polytope_extract_fdb.py +++ b/tests/test_polytope_extract_fdb.py @@ -1,8 +1,8 @@ import pandas as pd import pytest -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestPolytopeExtract: diff --git a/tests/test_profiling_requesttree.py b/tests/test_profiling_requesttree.py index 6bd6afac2..670da7881 100644 --- a/tests/test_profiling_requesttree.py +++ b/tests/test_profiling_requesttree.py @@ -3,10 +3,10 @@ import pytest import xarray as xr -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestProfiling: diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index f58cf093a..f8d49c52a 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -1,10 +1,10 @@ import pytest -from polytope.datacube.quad_tree import QuadNode -from polytope.engine.quadtree_slicer import QuadTreeSlicer -from polytope.engine.slicing_tools import slice_in_two -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, ConvexPolytope +from polytope_feature.datacube.quad_tree import QuadNode +from polytope_feature.engine.quadtree_slicer import QuadTreeSlicer +from polytope_feature.engine.slicing_tools import slice_in_two +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, ConvexPolytope class TestQuadTreeSlicer: diff --git a/tests/test_quadtree_edge_cases.py b/tests/test_quadtree_edge_cases.py index 9d5a7bf68..a23e665da 100644 --- a/tests/test_quadtree_edge_cases.py +++ b/tests/test_quadtree_edge_cases.py @@ -1,7 +1,7 @@ import pytest -from polytope.polytope import Polytope, Request -from polytope.shapes import Box +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box class TestQuadTreeSlicer: diff --git a/tests/test_quadtree_indices.py b/tests/test_quadtree_indices.py index 44db2e459..cc3161e4f 100644 --- a/tests/test_quadtree_indices.py +++ b/tests/test_quadtree_indices.py @@ -1,7 +1,7 @@ import pytest -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, ConvexPolytope +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, ConvexPolytope class TestQuadTreeSlicer: diff --git a/tests/test_quadtree_optimisation.py b/tests/test_quadtree_optimisation.py index 727029850..db6202104 100644 --- a/tests/test_quadtree_optimisation.py +++ b/tests/test_quadtree_optimisation.py @@ -1,7 +1,7 @@ import pytest -from polytope.engine.quadtree_slicer import QuadTreeSlicer -from polytope.shapes import Box +from polytope_feature.engine.quadtree_slicer import QuadTreeSlicer +from polytope_feature.shapes import Box class TestQuadTreeSlicer: diff --git a/tests/test_reduced_ll_grid.py b/tests/test_reduced_ll_grid.py index fdb9e63a8..b1fbbec2e 100644 --- a/tests/test_reduced_ll_grid.py +++ b/tests/test_reduced_ll_grid.py @@ -5,9 +5,9 @@ from eccodes import codes_grib_find_nearest, codes_grib_new_from_file from helper_functions import download_test_data -from polytope.engine.hullslicer import HullSlicer -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.engine.hullslicer import HullSlicer +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestReducedLatLonGrid: diff --git a/tests/test_regular_grid.py b/tests/test_regular_grid.py index ddc0dd0ab..1a1285d43 100644 --- a/tests/test_regular_grid.py +++ b/tests/test_regular_grid.py @@ -2,8 +2,8 @@ import pytest from helper_functions import download_test_data, find_nearest_latlon -from polytope.polytope import Polytope, Request -from polytope.shapes import Disk, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Disk, Select # import geopandas as gpd # import matplotlib.pyplot as plt @@ -77,7 +77,7 @@ def test_regular_grid(self): result.pprint() assert len(result.leaves) == 5 - from polytope.datacube.transformations.datacube_mappers.mapper_types.regular import ( + from polytope_feature.datacube.transformations.datacube_mappers.mapper_types.regular import ( RegularGridMapper, ) diff --git a/tests/test_request_tree.py b/tests/test_request_tree.py index 0b5392a59..87bd6f1ff 100644 --- a/tests/test_request_tree.py +++ b/tests/test_request_tree.py @@ -1,7 +1,7 @@ from sortedcontainers import SortedList -from polytope.datacube.datacube_axis import IntDatacubeAxis -from polytope.datacube.tensor_index_tree import TensorIndexTree +from polytope_feature.datacube.datacube_axis import IntDatacubeAxis +from polytope_feature.datacube.tensor_index_tree import TensorIndexTree class TestIndexTree: diff --git a/tests/test_request_trees_after_slicing.py b/tests/test_request_trees_after_slicing.py index 34343f6e1..01d24efa8 100644 --- a/tests/test_request_trees_after_slicing.py +++ b/tests/test_request_trees_after_slicing.py @@ -1,10 +1,10 @@ import numpy as np import xarray as xr -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.datacube.datacube_axis import IntDatacubeAxis -from polytope.polytope import Polytope -from polytope.shapes import Box +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.datacube.datacube_axis import IntDatacubeAxis +from polytope_feature.polytope import Polytope +from polytope_feature.shapes import Box class TestIndexTreesAfterSlicing: diff --git a/tests/test_reverse_transformation.py b/tests/test_reverse_transformation.py index 9a7619063..2aa00530c 100644 --- a/tests/test_reverse_transformation.py +++ b/tests/test_reverse_transformation.py @@ -1,8 +1,8 @@ import numpy as np import xarray as xr -from polytope.polytope import Polytope, Request -from polytope.shapes import Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Select class TestSlicingReverseTransformation: diff --git a/tests/test_shapes.py b/tests/test_shapes.py index 9a8f3c14e..834a358de 100644 --- a/tests/test_shapes.py +++ b/tests/test_shapes.py @@ -3,8 +3,8 @@ import pytest import xarray as xr -from polytope.polytope import Polytope, Request -from polytope.shapes import All, Select, Span +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import All, Select, Span class TestSlicing3DXarrayDatacube: diff --git a/tests/test_slice_date_range_fdb.py b/tests/test_slice_date_range_fdb.py index 910735caf..494f9b00a 100644 --- a/tests/test_slice_date_range_fdb.py +++ b/tests/test_slice_date_range_fdb.py @@ -1,8 +1,8 @@ import pandas as pd import pytest -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Disk, Select, Span +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Disk, Select, Span class TestSlicingFDBDatacube: diff --git a/tests/test_slice_date_range_fdb_v2.py b/tests/test_slice_date_range_fdb_v2.py index ebef54d99..02cf02c2c 100644 --- a/tests/test_slice_date_range_fdb_v2.py +++ b/tests/test_slice_date_range_fdb_v2.py @@ -2,8 +2,8 @@ import pandas as pd import pytest -from polytope.polytope import Polytope, Request -from polytope.shapes import Select, Span +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Select, Span class TestSlicingFDBDatacube: diff --git a/tests/test_slicer_engine.py b/tests/test_slicer_engine.py index e7917900a..d38ed7aba 100644 --- a/tests/test_slicer_engine.py +++ b/tests/test_slicer_engine.py @@ -1,10 +1,10 @@ import numpy as np import xarray as xr -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.datacube.tensor_index_tree import TensorIndexTree -from polytope.polytope import Polytope -from polytope.shapes import Box +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.datacube.tensor_index_tree import TensorIndexTree +from polytope_feature.polytope import Polytope +from polytope_feature.shapes import Box class TestSlicerComponents: diff --git a/tests/test_slicer_era5.py b/tests/test_slicer_era5.py index 8b4d59139..590b627d9 100644 --- a/tests/test_slicer_era5.py +++ b/tests/test_slicer_era5.py @@ -3,8 +3,8 @@ from earthkit import data from helper_functions import download_test_data -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestSlicingEra5Data: diff --git a/tests/test_slicer_xarray.py b/tests/test_slicer_xarray.py index 5109fe848..ddfb418d8 100644 --- a/tests/test_slicer_xarray.py +++ b/tests/test_slicer_xarray.py @@ -2,8 +2,8 @@ import pandas as pd import xarray as xr -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select, Span +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select, Span class TestXarraySlicing: diff --git a/tests/test_slicing_unsliceable_axis.py b/tests/test_slicing_unsliceable_axis.py index 478c2054d..a161cd4a8 100644 --- a/tests/test_slicing_unsliceable_axis.py +++ b/tests/test_slicing_unsliceable_axis.py @@ -3,9 +3,9 @@ import pytest import xarray as xr -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select -from polytope.utility.exceptions import UnsliceableShapeError +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select +from polytope_feature.utility.exceptions import UnsliceableShapeError class TestSlicingUnsliceableAxis: diff --git a/tests/test_slicing_xarray_3D.py b/tests/test_slicing_xarray_3D.py index 4c124d1db..a7b877bea 100644 --- a/tests/test_slicing_xarray_3D.py +++ b/tests/test_slicing_xarray_3D.py @@ -5,10 +5,10 @@ import pandas as pd import xarray as xr -from polytope.datacube.backends.xarray import XArrayDatacube -from polytope.datacube.tensor_index_tree import TensorIndexTree -from polytope.polytope import Polytope, Request -from polytope.shapes import ( +from polytope_feature.datacube.backends.xarray import XArrayDatacube +from polytope_feature.datacube.tensor_index_tree import TensorIndexTree +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import ( Box, ConvexPolytope, Disk, diff --git a/tests/test_slicing_xarray_4D.py b/tests/test_slicing_xarray_4D.py index 3dc12a204..44b5cb3b9 100644 --- a/tests/test_slicing_xarray_4D.py +++ b/tests/test_slicing_xarray_4D.py @@ -3,9 +3,9 @@ import pytest import xarray as xr -from polytope.datacube.tensor_index_tree import TensorIndexTree -from polytope.polytope import Polytope, Request -from polytope.shapes import ( +from polytope_feature.datacube.tensor_index_tree import TensorIndexTree +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import ( Box, Disk, Ellipsoid, @@ -16,7 +16,10 @@ Span, Union, ) -from polytope.utility.exceptions import AxisOverdefinedError, AxisUnderdefinedError +from polytope_feature.utility.exceptions import ( + AxisOverdefinedError, + AxisUnderdefinedError, +) class TestSlicing4DXarrayDatacube: diff --git a/tests/test_snapping.py b/tests/test_snapping.py index 56b2ddd18..64fdb924c 100644 --- a/tests/test_snapping.py +++ b/tests/test_snapping.py @@ -1,8 +1,8 @@ import numpy as np import xarray as xr -from polytope.polytope import Polytope, Request -from polytope.shapes import Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Select class TestSlicing3DXarrayDatacube: diff --git a/tests/test_snapping_real_data.py b/tests/test_snapping_real_data.py index 5b654a607..6ff4147a0 100644 --- a/tests/test_snapping_real_data.py +++ b/tests/test_snapping_real_data.py @@ -6,8 +6,8 @@ from earthkit import data from helper_functions import download_test_data -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestSlicingEra5Data: diff --git a/tests/test_tree_protobuf.py b/tests/test_tree_protobuf.py index a88633ea5..7f2e56f23 100644 --- a/tests/test_tree_protobuf.py +++ b/tests/test_tree_protobuf.py @@ -1,4 +1,4 @@ -import polytope.datacube.index_tree_pb2 as pb2 +import polytope_feature.datacube.index_tree_pb2 as pb2 class TestTreeProtobuf: diff --git a/tests/test_tree_protobuf_encoding.py b/tests/test_tree_protobuf_encoding.py index e36c96cac..12ac2486f 100644 --- a/tests/test_tree_protobuf_encoding.py +++ b/tests/test_tree_protobuf_encoding.py @@ -1,16 +1,16 @@ import pandas as pd import pytest -from polytope.datacube.backends.mock import MockDatacube -from polytope.datacube.datacube_axis import ( +from polytope_feature.datacube.backends.mock import MockDatacube +from polytope_feature.datacube.datacube_axis import ( FloatDatacubeAxis, IntDatacubeAxis, PandasTimedeltaDatacubeAxis, PandasTimestampDatacubeAxis, UnsliceableDatacubeAxis, ) -from polytope.datacube.tensor_index_tree import TensorIndexTree -from polytope.datacube.tree_encoding import decode_tree, encode_tree +from polytope_feature.datacube.tensor_index_tree import TensorIndexTree +from polytope_feature.datacube.tree_encoding import decode_tree, encode_tree class TestEncoder: @@ -50,8 +50,8 @@ def setup_method(self): def test_encoding(self): import pygribjump as gj - from polytope.polytope import Polytope, Request - from polytope.shapes import Box, Select + from polytope_feature.polytope import Polytope, Request + from polytope_feature.shapes import Box, Select request = Request( Select("step", [0]), diff --git a/tests/test_tree_protobuf_encoding_fdb.py b/tests/test_tree_protobuf_encoding_fdb.py index e7e22fb6e..e99cbd4c6 100644 --- a/tests/test_tree_protobuf_encoding_fdb.py +++ b/tests/test_tree_protobuf_encoding_fdb.py @@ -1,7 +1,7 @@ import pandas as pd import pytest -from polytope.datacube.tree_encoding import decode_tree, encode_tree +from polytope_feature.datacube.tree_encoding import decode_tree, encode_tree class TestEncoder: @@ -12,8 +12,8 @@ def setup_method(self): def test_encoding(self): import pygribjump as gj - from polytope.polytope import Polytope, Request - from polytope.shapes import Box, Select + from polytope_feature.polytope import Polytope, Request + from polytope_feature.shapes import Box, Select request = Request( Select("step", [0]), diff --git a/tests/test_type_change_transformation.py b/tests/test_type_change_transformation.py index 9d31366df..c524266b5 100644 --- a/tests/test_type_change_transformation.py +++ b/tests/test_type_change_transformation.py @@ -1,8 +1,8 @@ import numpy as np import xarray as xr -from polytope.polytope import Polytope, Request -from polytope.shapes import Select +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Select class TestTypeChangeTransformation: diff --git a/tests/test_union_gj.py b/tests/test_union_gj.py index 859e8fa5e..1dbb816bd 100644 --- a/tests/test_union_gj.py +++ b/tests/test_union_gj.py @@ -1,8 +1,8 @@ import pandas as pd import pytest -from polytope.polytope import Polytope, Request -from polytope.shapes import Box, Select, Span, Union +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select, Span, Union class TestSlicingFDBDatacube: From 0717920cc32eed071fe4e4cbd6b606bacd3209f3 Mon Sep 17 00:00:00 2001 From: mathleur Date: Thu, 2 Jan 2025 12:00:58 +0100 Subject: [PATCH 60/75] finish fixing all errors --- .../mapper_types/irregular.py | 1 + polytope_feature/engine/hullslicer.py | 14 +++--- polytope_feature/options.py | 2 +- polytope_feature/polytope.py | 9 ++++ tests/test_engine_slicer.py | 35 +++++++------ tests/test_orca_irregular_grid.py | 11 ++--- tests/test_point_nearest.py | 2 - tests/test_point_shape.py | 1 - tests/test_polytope_extract_fdb.py | 3 +- tests/test_slice_date_range_fdb.py | 34 ++++++++++++- tests/test_union_gj.py | 49 ++++++++++++++++++- 11 files changed, 122 insertions(+), 39 deletions(-) diff --git a/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py index dcf222a8e..adc0a43fc 100644 --- a/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py +++ b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py @@ -21,4 +21,5 @@ def unmap(self, first_val, second_val, unmapped_idx=None): _md5_hash = { + 0: "None", } diff --git a/polytope_feature/engine/hullslicer.py b/polytope_feature/engine/hullslicer.py index 9007cfcf4..49262ffa0 100644 --- a/polytope_feature/engine/hullslicer.py +++ b/polytope_feature/engine/hullslicer.py @@ -91,8 +91,6 @@ def remap_values(self, ax, value): return remapped_val def _build_sliceable_child(self, polytope, ax, node, datacube, values, next_nodes, slice_axis_idx, api): - if len(values) == 0: - node.remove_branch() for i, value in enumerate(values): if i == 0 or ax.name not in api.compressed_axes: @@ -183,12 +181,12 @@ def _build_branch(self, ax, node, datacube, next_nodes, api): # k, last_value = _, datacube.axes[k] = datacube.axes.popitem() # self.compressed_axes.append(k) - def remove_compressed_axis_in_union(self, polytopes): - for p in polytopes: - if p.is_in_union: - for axis in p.axes(): - if axis == self.compressed_axes[-1]: - self.compressed_axes.remove(axis) + # def remove_compressed_axis_in_union(self, polytopes): + # for p in polytopes: + # if p.is_in_union: + # for axis in p.axes(): + # if axis == self.compressed_axes[-1]: + # self.compressed_axes.remove(axis) # def extract(self, datacube: Datacube, polytopes: List[ConvexPolytope]): # # Determine list of axes to compress diff --git a/polytope_feature/options.py b/polytope_feature/options.py index 41ca2030b..6be164d4d 100644 --- a/polytope_feature/options.py +++ b/polytope_feature/options.py @@ -21,7 +21,7 @@ class CyclicConfig(TransformationConfig): class MapperConfig(TransformationConfig): name: Literal["mapper"] type: str = "" - resolution: Union[int, List[int]] = 0 + resolution: Optional[Union[int, List[int]]] = 0 axes: List[str] = [""] local: Optional[List[float]] = None diff --git a/polytope_feature/polytope.py b/polytope_feature/polytope.py index 672a75504..9502a6b30 100644 --- a/polytope_feature/polytope.py +++ b/polytope_feature/polytope.py @@ -144,6 +144,8 @@ def slice(self, datacube, polytopes: List[ConvexPolytope]): self.find_compressed_axes(datacube, polytopes) + self.remove_compressed_axis_in_union(polytopes) + # Convert the polytope points to float type to support triangulation and interpolation for p in polytopes: self._unique_continuous_points(p, datacube) @@ -212,3 +214,10 @@ def find_compressed_axes(self, datacube, polytopes): k, last_value = _, datacube.axes[k] = datacube.axes.popitem() self.compressed_axes.append(k) + + def remove_compressed_axis_in_union(self, polytopes): + for p in polytopes: + if p.is_in_union: + for axis in p.axes(): + if axis == self.compressed_axes[-1]: + self.compressed_axes.remove(axis) diff --git a/tests/test_engine_slicer.py b/tests/test_engine_slicer.py index 122b04a16..923a10af2 100644 --- a/tests/test_engine_slicer.py +++ b/tests/test_engine_slicer.py @@ -1,7 +1,6 @@ from polytope_feature.datacube.backends.mock import MockDatacube -from polytope_feature.engine.hullslicer import HullSlicer -from polytope_feature.shapes import Box, Polygon from polytope_feature.polytope import Polytope +from polytope_feature.shapes import Box, Polygon class TestEngineSlicer: @@ -11,31 +10,39 @@ def setup_method(self, method): def test_2D_box(self): datacube = MockDatacube({"x": 100, "y": 100}) polytopes = Box(["x", "y"], lower_corner=[3, 3], upper_corner=[6, 6]).polytope() - # result = self.slicer.extract(datacube, polytopes) API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, polytopes) - assert len(result.leaves) == 4 * 4 + assert len(result.leaves) == 4 + total_leaves = 0 + for leaf in result.leaves: + total_leaves += len(leaf.values) + assert total_leaves == 4 * 4 def test_3D_box(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100}) polytopes = Box(["x", "y", "z"], lower_corner=[3, 3, 3], upper_corner=[6, 6, 6]).polytope() - # result = self.slicer.extract(datacube, polytopes) API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, polytopes) - assert len(result.leaves) == 4 * 4 * 4 + assert len(result.leaves) == 4 * 4 + total_leaves = 0 + for leaf in result.leaves: + total_leaves += len(leaf.values) + assert total_leaves == 4 * 4 * 4 def test_4D_box(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100, "q": 100}) polytopes = Box(["x", "y", "z", "q"], lower_corner=[3, 3, 3, 3], upper_corner=[6, 6, 6, 6]).polytope() - # result = self.slicer.extract(datacube, polytopes) API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, polytopes) - assert len(result.leaves) == 4 * 4 * 4 * 4 + assert len(result.leaves) == 4 * 4 * 4 + total_leaves = 0 + for leaf in result.leaves: + total_leaves += len(leaf.values) + assert total_leaves == 4 * 4 * 4 * 4 def test_triangle(self): datacube = MockDatacube({"x": 100, "y": 100}) triangle = Polygon(["x", "y"], [[3, 3], [3, 6], [6, 3]]).polytope() - # result = self.slicer.extract(datacube, triangle) API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, triangle) assert len(result.leaves) == 4 + 3 + 2 + 1 @@ -43,22 +50,16 @@ def test_triangle(self): def test_reusable(self): datacube = MockDatacube({"x": 100, "y": 100}) polytopes = Polygon(["x", "y"], [[3, 3], [3, 6], [6, 3]]).polytope() - # result = self.slicer.extract(datacube, polytopes) API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, polytopes) assert len(result.leaves) == 4 + 3 + 2 + 1 polytopes = Box(["x", "y"], lower_corner=[3, 3], upper_corner=[6, 6]).polytope() - # result = self.slicer.extract(datacube, polytopes) - result = API.slice(datacube, polytopes) - assert len(result.leaves) == 4 * 4 - # result = self.slicer.extract(datacube, polytopes) result = API.slice(datacube, polytopes) - assert len(result.leaves) == 4 * 4 + assert len(result.leaves) == 4 def test_2D_box_get_function(self): datacube = MockDatacube({"x": 100, "y": 100}) polytopes = Box(["x", "y"], lower_corner=[2, -2], upper_corner=[4, -1]).polytope() - # result = self.slicer.extract(datacube, polytopes) API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, polytopes) datacube.get(result) @@ -67,7 +68,6 @@ def test_2D_box_get_function(self): def test_3D_box_get_function(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100}) polytopes = Box(["x", "y", "z"], lower_corner=[3, 2, -2], upper_corner=[6, 2, -1]).polytope() - # result = self.slicer.extract(datacube, polytopes) API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, polytopes) datacube.get(result) @@ -76,7 +76,6 @@ def test_3D_box_get_function(self): def test_3D_box_get_function2(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100}) polytopes = Box(["x", "y", "z"], lower_corner=[3, 2, 1], upper_corner=[6, 2, 1]).polytope() - # result = self.slicer.extract(datacube, polytopes) API = Polytope(request={}, datacube=datacube, options={}) result = API.slice(datacube, polytopes) datacube.get(result) diff --git a/tests/test_orca_irregular_grid.py b/tests/test_orca_irregular_grid.py index 009e836b2..375d09339 100644 --- a/tests/test_orca_irregular_grid.py +++ b/tests/test_orca_irregular_grid.py @@ -3,7 +3,7 @@ import numpy as np import pandas as pd import pytest -import xarray as xr +from earthkit import data from helper_functions import find_nearest_latlon from polytope_feature.polytope import Polytope, Request @@ -20,7 +20,10 @@ def setup_method(self, method): "oceanModelLayer": "hullslicer", "valid_time": "hullslicer", } - self.arr = xr.open_dataset("../../Downloads/Reference_eORCA12_U_to_HEALPix_32.grib", engine="cfgrib") + + ds = data.from_source("file", "../../Downloads/Reference_eORCA12_U_to_HEALPix_32.grib") + self.arr = ds.to_xarray(engine="cfgrib").avg_uox + self.latitudes = self.arr.latitude.values self.longitudes = self.arr.longitude.values self.points = list(zip(self.latitudes, self.longitudes)) @@ -34,9 +37,6 @@ def setup_method(self, method): }, ], } - print(self.arr) - # self.config = {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"} - # self.fdbdatacube = FDBDatacube(self.config, axis_options=self.options, point_cloud_options=self.points) @pytest.mark.fdb def test_quad_tree_slicer_extract(self): @@ -44,7 +44,6 @@ def test_quad_tree_slicer_extract(self): Select("step", [np.timedelta64(0, "ns")]), Select("oceanModelLayer", [65.0]), Select("time", [pd.Timestamp("2017-09-06T00:00:00.000000000")]), - Select("valid_time", [pd.Timestamp("2017-09-06T00:00:00.000000000")]), Box(["latitude", "longitude"], [65, 270], [75, 300]), ) diff --git a/tests/test_point_nearest.py b/tests/test_point_nearest.py index 614784138..0c3c4b3cb 100644 --- a/tests/test_point_nearest.py +++ b/tests/test_point_nearest.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Point, Select @@ -199,7 +198,6 @@ def test_fdb_datacube_true_point_4(self): options=self.options, ) result = self.API.retrieve(request) - # result.pprint_2() assert len(result.leaves) == 1 assert result.leaves[0].values == (359.929906542056,) assert result.leaves[0].axis.name == "longitude" diff --git a/tests/test_point_shape.py b/tests/test_point_shape.py index 7362f990d..fc106575a 100644 --- a/tests/test_point_shape.py +++ b/tests/test_point_shape.py @@ -2,7 +2,6 @@ import pandas as pd import xarray as xr -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Point, Select diff --git a/tests/test_polytope_extract_fdb.py b/tests/test_polytope_extract_fdb.py index 7abc2fa3f..35bfcfb8e 100644 --- a/tests/test_polytope_extract_fdb.py +++ b/tests/test_polytope_extract_fdb.py @@ -35,7 +35,8 @@ def setup_method(self, method): { "axis_name": "values", "transformations": [ - {"name": "mapper", "type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]} + {"name": "mapper", "type": "irregular", "axes": [ + "latitude", "longitude"], "md5_hash": "158db321ae8e773681eeb40e0a3d350f"} ], }, ], diff --git a/tests/test_slice_date_range_fdb.py b/tests/test_slice_date_range_fdb.py index e75395332..e71c47d1b 100644 --- a/tests/test_slice_date_range_fdb.py +++ b/tests/test_slice_date_range_fdb.py @@ -128,7 +128,9 @@ def test_fdb_datacube_select_non_existing_first(self): ) result = self.API.retrieve(request) result.pprint() - assert len(result.leaves) == 9 + assert len(result.leaves) == 3 + for i in range(len(result.leaves)): + assert len(result.leaves[i].result) == 3 @pytest.mark.fdb def test_fdb_datacube_disk(self): @@ -193,3 +195,33 @@ def test_fdb_datacube_disk_2(self): assert len(result.leaves[0].values) == 3 assert len(result.leaves[1].values) == 5 assert len(result.leaves[2].values) == 3 + + @pytest.mark.fdb + def test_fdb_datacube_select_completely_non_existing(self): + import pygribjump as gj + + request = Request( + Select("step", [0]), + Select("levtype", ["sfc"]), + Select("date", [pd.Timestamp("20230624T120000"), pd.Timestamp("20230626T120000")]), + Select("domain", ["g"]), + Select("expver", ["0001"]), + Select("param", ["167"]), + Select("class", ["od"]), + Select("stream", ["oper"]), + Select("type", ["an"]), + Box(["latitude", "longitude"], [0, 0], [0.2, 0.2]), + ) + + self.fdbdatacube = gj.GribJump() + self.slicer = HullSlicer() + self.API = Polytope( + request=request, + datacube=self.fdbdatacube, + options=self.options, + ) + result = self.API.retrieve(request) + result.pprint() + assert len(result.leaves) == 1 + for i in range(len(result.leaves)): + assert len(result.leaves[i].result) == 0 diff --git a/tests/test_union_gj.py b/tests/test_union_gj.py index ef8b8b69b..4c5b9b576 100644 --- a/tests/test_union_gj.py +++ b/tests/test_union_gj.py @@ -115,4 +115,51 @@ def test_fdb_datacube_complete_overlap(self): ) result = self.API.retrieve(request) result.pprint() - assert len(result.leaves) == 16 + assert len(result.leaves) == 4 + total_lons = 0 + total_vals = 0 + for leaf in result.leaves: + total_lons += len(leaf.values) + total_vals += len(leaf.result) + assert total_lons == 9 + assert total_vals == 9 + + @pytest.mark.fdb + def test_fdb_datacube_complete_overlap_v2(self): + import pygribjump as gj + + box1 = Box(["latitude", "longitude"], [0, 0], [0.2, 0.2]) + + box2 = Box(["latitude", "longitude"], [0.1, 0.05], [0.2, 0.2]) + + union = Union(["latitude", "longitude"], box2, box1) + + request = Request( + Select("step", [0]), + Select("levtype", ["sfc"]), + Span("date", pd.Timestamp("20230625T120000"), pd.Timestamp("20230626T120000")), + Select("domain", ["g"]), + Select("expver", ["0001"]), + Select("param", ["167"]), + Select("class", ["od"]), + Select("stream", ["oper"]), + Select("type", ["an"]), + union, + ) + + self.fdbdatacube = gj.GribJump() + self.slicer = HullSlicer() + self.API = Polytope( + request=request, + datacube=self.fdbdatacube, + options=self.options, + ) + result = self.API.retrieve(request) + result.pprint() + assert len(result.leaves) == 3 + total_lons = 0 + total_vals = 0 + for leaf in result.leaves: + total_lons += len(leaf.values) + total_vals += len(leaf.result) + assert total_lons == 9 From db6dd32bb4e87a9c4322debd0873a18213608c5a Mon Sep 17 00:00:00 2001 From: mathleur Date: Thu, 2 Jan 2025 12:35:02 +0100 Subject: [PATCH 61/75] clean up --- .../datacube/backends/datacube.py | 3 +- polytope_feature/datacube/backends/xarray.py | 3 +- .../mapper_types/octahedral.py | 2767 ----------------- polytope_feature/engine/engine.py | 16 +- polytope_feature/engine/hullslicer.py | 5 +- polytope_feature/options.py | 73 +- polytope_feature/polytope.py | 48 +- tests/test_cyclic_axis_slicer_not_0.py | 1 - tests/test_cyclic_axis_slicing.py | 1 - tests/test_cyclic_simple.py | 1 - tests/test_datacube_axes_init.py | 1 - tests/test_ecmwf_oper_data_fdb.py | 1 - tests/test_float_type.py | 1 - tests/test_healpix_mapper.py | 1 - tests/test_hullslicer_engine.py | 1 - tests/test_incomplete_tree_fdb.py | 1 - tests/test_local_grid_cyclic.py | 1 - tests/test_local_regular_grid.py | 1 - tests/test_merge_octahedral_one_axis.py | 1 - tests/test_merge_transformation.py | 1 - tests/test_multiple_param_fdb.py | 1 - tests/test_octahedral_grid.py | 1 - tests/test_regular_grid.py | 1 - tests/test_shapes.py | 1 - tests/test_slicer_xarray.py | 1 - tests/test_slicing_unsliceable_axis.py | 1 - tests/test_slicing_xarray_3D.py | 1 - tests/test_slicing_xarray_4D.py | 1 - tests/test_snapping.py | 1 - 29 files changed, 16 insertions(+), 2921 deletions(-) diff --git a/polytope_feature/datacube/backends/datacube.py b/polytope_feature/datacube/backends/datacube.py index 8bcbe7e81..67b3f1322 100644 --- a/polytope_feature/datacube/backends/datacube.py +++ b/polytope_feature/datacube/backends/datacube.py @@ -173,7 +173,8 @@ def create( from .fdb import FDBDatacube fdbdatacube = FDBDatacube( - datacube, request, config, axis_options, compressed_axes_options, point_cloud_options, alternative_axes, context + datacube, request, config, axis_options, compressed_axes_options, point_cloud_options, alternative_axes, + context ) return fdbdatacube if type(datacube).__name__ == "MockDatacube": diff --git a/polytope_feature/datacube/backends/xarray.py b/polytope_feature/datacube/backends/xarray.py index 87d41cee9..2c29b2361 100644 --- a/polytope_feature/datacube/backends/xarray.py +++ b/polytope_feature/datacube/backends/xarray.py @@ -10,7 +10,8 @@ class XArrayDatacube(Datacube): """Xarray arrays are labelled, axes can be defined as strings or integers (e.g. "time" or 0).""" def __init__( - self, dataarray: xr.DataArray, axis_options=None, compressed_axes_options=[], point_cloud_options=None, context=None + self, dataarray: xr.DataArray, axis_options=None, compressed_axes_options=[], point_cloud_options=None, + context=None ): super().__init__(axis_options, compressed_axes_options) if axis_options is None: diff --git a/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/octahedral.py b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/octahedral.py index 2e08b1a9e..415a5ba70 100644 --- a/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/octahedral.py +++ b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/octahedral.py @@ -5,2773 +5,6 @@ from ..datacube_mappers import DatacubeMapper -class OctahedralGridMapper(DatacubeMapper): - # def __init__(self, base_axis, mapped_axes, resolution, local_area=[]): - # # TODO: if local area is not empty list, raise NotImplemented - # self._mapped_axes = mapped_axes - # self._base_axis = base_axis - # self._resolution = resolution - # self._first_axis_vals = self.first_axis_vals() - # self._first_idx_map = self.create_first_idx_map() - # self._second_axis_spacing = {} - # self._axis_reversed = {mapped_axes[0]: True, mapped_axes[1]: False} - # self.compressed_grid_axes = [self._mapped_axes[1]] - - def __init__(self, base_axis, mapped_axes, resolution, md5_hash=None, local_area=[], axis_reversed=None): - # TODO: if local area is not empty list, raise NotImplemented - self._mapped_axes = mapped_axes - self._base_axis = base_axis - self._resolution = resolution - self._first_axis_vals = self.first_axis_vals() - self._first_idx_map = self.create_first_idx_map() - self._second_axis_spacing = {} - self._axis_reversed = {mapped_axes[0]: True, mapped_axes[1]: False} - if self._axis_reversed[mapped_axes[1]]: - raise NotImplementedError("Octahedral grid with second axis in decreasing order is not supported") - if not self._axis_reversed[mapped_axes[0]]: - raise NotImplementedError("Octahedral grid with first axis in increasing order is not supported") - self.compressed_grid_axes = [self._mapped_axes[1]] - if md5_hash is not None: - self.md5_hash = md5_hash - else: - self.md5_hash = _md5_hash.get(resolution, None) - - def gauss_first_guess(self): - i = 0 - gvals = [ - 2.4048255577e0, - 5.5200781103e0, - 8.6537279129e0, - 11.7915344391e0, - 14.9309177086e0, - 18.0710639679e0, - 21.2116366299e0, - 24.3524715308e0, - 27.4934791320e0, - 30.6346064684e0, - 33.7758202136e0, - 36.9170983537e0, - 40.0584257646e0, - 43.1997917132e0, - 46.3411883717e0, - 49.4826098974e0, - 52.6240518411e0, - 55.7655107550e0, - 58.9069839261e0, - 62.0484691902e0, - 65.1899648002e0, - 68.3314693299e0, - 71.4729816036e0, - 74.6145006437e0, - 77.7560256304e0, - 80.8975558711e0, - 84.0390907769e0, - 87.1806298436e0, - 90.3221726372e0, - 93.4637187819e0, - 96.6052679510e0, - 99.7468198587e0, - 102.8883742542e0, - 106.0299309165e0, - 109.1714896498e0, - 112.3130502805e0, - 115.4546126537e0, - 118.5961766309e0, - 121.7377420880e0, - 124.8793089132e0, - 128.0208770059e0, - 131.1624462752e0, - 134.3040166383e0, - 137.4455880203e0, - 140.5871603528e0, - 143.7287335737e0, - 146.8703076258e0, - 150.0118824570e0, - 153.1534580192e0, - 156.2950342685e0, - ] - - numVals = len(gvals) - vals = [] - for i in range(self._resolution): - if i < numVals: - vals.append(gvals[i]) - else: - vals.append(vals[i - 1] + math.pi) - return vals - - def get_precomputed_values_N1280(self): - lats = [0] * 2560 - lats[0] = 89.946187715665616 - lats[1] = 89.876478353332288 - lats[2] = 89.806357319542244 - lats[3] = 89.736143271609578 - lats[4] = 89.6658939412157 - lats[5] = 89.595627537554492 - lats[6] = 89.525351592371393 - lats[7] = 89.45506977912261 - lats[8] = 89.3847841013921 - lats[9] = 89.314495744374256 - lats[10] = 89.24420545380525 - lats[11] = 89.173913722284126 - lats[12] = 89.103620888238879 - lats[13] = 89.033327191845927 - lats[14] = 88.96303280826325 - lats[15] = 88.892737868230952 - lats[16] = 88.822442471310097 - lats[17] = 88.752146694650691 - lats[18] = 88.681850598961759 - lats[19] = 88.611554232668382 - lats[20] = 88.541257634868515 - lats[21] = 88.470960837474877 - lats[22] = 88.40066386679355 - lats[23] = 88.330366744702559 - lats[24] = 88.26006948954614 - lats[25] = 88.189772116820762 - lats[26] = 88.119474639706425 - lats[27] = 88.049177069484486 - lats[28] = 87.978879415867283 - lats[29] = 87.908581687261687 - lats[30] = 87.838283890981543 - lats[31] = 87.767986033419561 - lats[32] = 87.697688120188062 - lats[33] = 87.627390156234085 - lats[34] = 87.557092145935584 - lats[35] = 87.486794093180748 - lats[36] = 87.416496001434894 - lats[37] = 87.346197873795816 - lats[38] = 87.275899713041966 - lats[39] = 87.205601521672108 - lats[40] = 87.135303301939786 - lats[41] = 87.065005055882821 - lats[42] = 86.994706785348129 - lats[43] = 86.924408492014166 - lats[44] = 86.854110177408927 - lats[45] = 86.783811842927179 - lats[46] = 86.713513489844246 - lats[47] = 86.643215119328573 - lats[48] = 86.572916732453024 - lats[49] = 86.502618330203831 - lats[50] = 86.432319913489792 - lats[51] = 86.362021483149363 - lats[52] = 86.291723039957418 - lats[53] = 86.221424584631109 - lats[54] = 86.151126117835304 - lats[55] = 86.080827640187209 - lats[56] = 86.010529152260403 - lats[57] = 85.940230654588888 - lats[58] = 85.869932147670127 - lats[59] = 85.799633631968391 - lats[60] = 85.729335107917464 - lats[61] = 85.659036575922883 - lats[62] = 85.588738036364362 - lats[63] = 85.518439489597966 - lats[64] = 85.448140935957483 - lats[65] = 85.377842375756586 - lats[66] = 85.307543809290152 - lats[67] = 85.237245236835548 - lats[68] = 85.16694665865414 - lats[69] = 85.09664807499216 - lats[70] = 85.026349486081983 - lats[71] = 84.95605089214304 - lats[72] = 84.885752293382765 - lats[73] = 84.81545368999717 - lats[74] = 84.745155082171991 - lats[75] = 84.674856470082915 - lats[76] = 84.604557853896708 - lats[77] = 84.534259233771479 - lats[78] = 84.463960609857125 - lats[79] = 84.393661982296322 - lats[80] = 84.323363351224444 - lats[81] = 84.253064716770425 - lats[82] = 84.18276607905679 - lats[83] = 84.112467438200326 - lats[84] = 84.042168794312317 - lats[85] = 83.971870147498763 - lats[86] = 83.901571497860914 - lats[87] = 83.831272845495249 - lats[88] = 83.760974190494011 - lats[89] = 83.690675532945292 - lats[90] = 83.620376872933264 - lats[91] = 83.550078210538487 - lats[92] = 83.479779545838113 - lats[93] = 83.409480878905782 - lats[94] = 83.339182209812321 - lats[95] = 83.268883538625232 - lats[96] = 83.198584865409657 - lats[97] = 83.128286190227698 - lats[98] = 83.057987513139125 - lats[99] = 82.987688834201322 - lats[100] = 82.917390153469313 - lats[101] = 82.84709147099602 - lats[102] = 82.77679278683226 - lats[103] = 82.706494101026948 - lats[104] = 82.63619541362705 - lats[105] = 82.56589672467787 - lats[106] = 82.495598034222837 - lats[107] = 82.425299342304029 - lats[108] = 82.355000648961692 - lats[109] = 82.284701954234833 - lats[110] = 82.214403258160871 - lats[111] = 82.144104560776 - lats[112] = 82.073805862115165 - lats[113] = 82.003507162211946 - lats[114] = 81.933208461098829 - lats[115] = 81.862909758807191 - lats[116] = 81.792611055367345 - lats[117] = 81.722312350808508 - lats[118] = 81.652013645158945 - lats[119] = 81.581714938445955 - lats[120] = 81.511416230696042 - lats[121] = 81.441117521934686 - lats[122] = 81.370818812186627 - lats[123] = 81.300520101475826 - lats[124] = 81.230221389825374 - lats[125] = 81.159922677257711 - lats[126] = 81.089623963794551 - lats[127] = 81.019325249456955 - lats[128] = 80.949026534265244 - lats[129] = 80.878727818239184 - lats[130] = 80.808429101397948 - lats[131] = 80.73813038376008 - lats[132] = 80.667831665343556 - lats[133] = 80.59753294616587 - lats[134] = 80.527234226243991 - lats[135] = 80.456935505594302 - lats[136] = 80.386636784232863 - lats[137] = 80.316338062175078 - lats[138] = 80.246039339436052 - lats[139] = 80.175740616030438 - lats[140] = 80.105441891972376 - lats[141] = 80.035143167275749 - lats[142] = 79.9648444419539 - lats[143] = 79.894545716019948 - lats[144] = 79.824246989486554 - lats[145] = 79.753948262366038 - lats[146] = 79.683649534670437 - lats[147] = 79.61335080641139 - lats[148] = 79.543052077600308 - lats[149] = 79.472753348248219 - lats[150] = 79.402454618365894 - lats[151] = 79.332155887963822 - lats[152] = 79.261857157052191 - lats[153] = 79.191558425640977 - lats[154] = 79.121259693739859 - lats[155] = 79.050960961358285 - lats[156] = 78.980662228505423 - lats[157] = 78.910363495190211 - lats[158] = 78.840064761421445 - lats[159] = 78.769766027207638 - lats[160] = 78.699467292557102 - lats[161] = 78.629168557477882 - lats[162] = 78.558869821977908 - lats[163] = 78.488571086064923 - lats[164] = 78.418272349746417 - lats[165] = 78.347973613029708 - lats[166] = 78.277674875922045 - lats[167] = 78.207376138430348 - lats[168] = 78.137077400561424 - lats[169] = 78.066778662322022 - lats[170] = 77.996479923718596 - lats[171] = 77.926181184757539 - lats[172] = 77.855882445445019 - lats[173] = 77.785583705787161 - lats[174] = 77.71528496578982 - lats[175] = 77.644986225458879 - lats[176] = 77.574687484799924 - lats[177] = 77.504388743818524 - lats[178] = 77.434090002520122 - lats[179] = 77.363791260909963 - lats[180] = 77.293492518993247 - lats[181] = 77.22319377677502 - lats[182] = 77.15289503426024 - lats[183] = 77.082596291453768 - lats[184] = 77.012297548360323 - lats[185] = 76.941998804984564 - lats[186] = 76.871700061330955 - lats[187] = 76.801401317404 - lats[188] = 76.731102573208048 - lats[189] = 76.660803828747362 - lats[190] = 76.59050508402602 - lats[191] = 76.520206339048215 - lats[192] = 76.449907593817869 - lats[193] = 76.379608848338933 - lats[194] = 76.3093101026152 - lats[195] = 76.239011356650423 - lats[196] = 76.16871261044831 - lats[197] = 76.098413864012443 - lats[198] = 76.028115117346374 - lats[199] = 75.957816370453543 - lats[200] = 75.887517623337317 - lats[201] = 75.81721887600105 - lats[202] = 75.746920128447996 - lats[203] = 75.67662138068134 - lats[204] = 75.60632263270422 - lats[205] = 75.536023884519707 - lats[206] = 75.465725136130786 - lats[207] = 75.395426387540439 - lats[208] = 75.325127638751567 - lats[209] = 75.254828889766983 - lats[210] = 75.184530140589501 - lats[211] = 75.114231391221821 - lats[212] = 75.043932641666672 - lats[213] = 74.973633891926625 - lats[214] = 74.903335142004323 - lats[215] = 74.833036391902269 - lats[216] = 74.762737641622991 - lats[217] = 74.692438891168877 - lats[218] = 74.622140140542356 - lats[219] = 74.551841389745761 - lats[220] = 74.481542638781434 - lats[221] = 74.411243887651622 - lats[222] = 74.340945136358584 - lats[223] = 74.270646384904481 - lats[224] = 74.200347633291472 - lats[225] = 74.13004888152166 - lats[226] = 74.059750129597163 - lats[227] = 73.98945137751997 - lats[228] = 73.919152625292114 - lats[229] = 73.848853872915541 - lats[230] = 73.778555120392184 - lats[231] = 73.70825636772399 - lats[232] = 73.637957614912779 - lats[233] = 73.567658861960396 - lats[234] = 73.497360108868662 - lats[235] = 73.427061355639339 - lats[236] = 73.356762602274188 - lats[237] = 73.2864638487749 - lats[238] = 73.216165095143182 - lats[239] = 73.145866341380668 - lats[240] = 73.075567587489019 - lats[241] = 73.005268833469799 - lats[242] = 72.934970079324657 - lats[243] = 72.864671325055056 - lats[244] = 72.794372570662574 - lats[245] = 72.724073816148703 - lats[246] = 72.653775061514935 - lats[247] = 72.583476306762691 - lats[248] = 72.513177551893421 - lats[249] = 72.442878796908545 - lats[250] = 72.3725800418094 - lats[251] = 72.302281286597392 - lats[252] = 72.231982531273843 - lats[253] = 72.161683775840089 - lats[254] = 72.091385020297409 - lats[255] = 72.02108626464711 - lats[256] = 71.950787508890414 - lats[257] = 71.880488753028587 - lats[258] = 71.810189997062835 - lats[259] = 71.739891240994368 - lats[260] = 71.669592484824364 - lats[261] = 71.599293728553988 - lats[262] = 71.528994972184378 - lats[263] = 71.458696215716685 - lats[264] = 71.388397459152031 - lats[265] = 71.318098702491469 - lats[266] = 71.247799945736105 - lats[267] = 71.177501188887007 - lats[268] = 71.107202431945211 - lats[269] = 71.036903674911756 - lats[270] = 70.966604917787635 - lats[271] = 70.896306160573886 - lats[272] = 70.826007403271475 - lats[273] = 70.755708645881384 - lats[274] = 70.685409888404578 - lats[275] = 70.615111130841967 - lats[276] = 70.544812373194532 - lats[277] = 70.474513615463138 - lats[278] = 70.404214857648739 - lats[279] = 70.333916099752187 - lats[280] = 70.263617341774406 - lats[281] = 70.193318583716191 - lats[282] = 70.123019825578467 - lats[283] = 70.052721067362043 - lats[284] = 69.982422309067744 - lats[285] = 69.912123550696421 - lats[286] = 69.841824792248843 - lats[287] = 69.771526033725834 - lats[288] = 69.701227275128161 - lats[289] = 69.630928516456592 - lats[290] = 69.560629757711908 - lats[291] = 69.490330998894862 - lats[292] = 69.420032240006194 - lats[293] = 69.349733481046613 - lats[294] = 69.279434722016902 - lats[295] = 69.209135962917699 - lats[296] = 69.138837203749759 - lats[297] = 69.068538444513763 - lats[298] = 68.998239685210365 - lats[299] = 68.927940925840304 - lats[300] = 68.85764216640419 - lats[301] = 68.787343406902693 - lats[302] = 68.717044647336493 - lats[303] = 68.646745887706189 - lats[304] = 68.576447128012447 - lats[305] = 68.506148368255865 - lats[306] = 68.435849608437067 - lats[307] = 68.365550848556666 - lats[308] = 68.295252088615257 - lats[309] = 68.224953328613438 - lats[310] = 68.154654568551791 - lats[311] = 68.084355808430871 - lats[312] = 68.014057048251274 - lats[313] = 67.943758288013555 - lats[314] = 67.873459527718282 - lats[315] = 67.803160767365966 - lats[316] = 67.732862006957205 - lats[317] = 67.662563246492482 - lats[318] = 67.592264485972336 - lats[319] = 67.521965725397308 - lats[320] = 67.451666964767895 - lats[321] = 67.381368204084609 - lats[322] = 67.311069443347961 - lats[323] = 67.240770682558434 - lats[324] = 67.170471921716526 - lats[325] = 67.100173160822706 - lats[326] = 67.029874399877471 - lats[327] = 66.95957563888129 - lats[328] = 66.889276877834618 - lats[329] = 66.818978116737924 - lats[330] = 66.748679355591662 - lats[331] = 66.678380594396273 - lats[332] = 66.608081833152212 - lats[333] = 66.537783071859891 - lats[334] = 66.467484310519808 - lats[335] = 66.397185549132331 - lats[336] = 66.326886787697887 - lats[337] = 66.256588026216932 - lats[338] = 66.186289264689833 - lats[339] = 66.115990503117033 - lats[340] = 66.045691741498899 - lats[341] = 65.975392979835888 - lats[342] = 65.905094218128355 - lats[343] = 65.834795456376696 - lats[344] = 65.764496694581283 - lats[345] = 65.694197932742526 - lats[346] = 65.623899170860767 - lats[347] = 65.553600408936404 - lats[348] = 65.483301646969792 - lats[349] = 65.413002884961315 - lats[350] = 65.342704122911286 - lats[351] = 65.272405360820116 - lats[352] = 65.202106598688133 - lats[353] = 65.131807836515677 - lats[354] = 65.061509074303089 - lats[355] = 64.991210312050711 - lats[356] = 64.920911549758912 - lats[357] = 64.850612787427963 - lats[358] = 64.780314025058246 - lats[359] = 64.710015262650074 - lats[360] = 64.639716500203733 - lats[361] = 64.569417737719576 - lats[362] = 64.499118975197902 - lats[363] = 64.428820212639039 - lats[364] = 64.358521450043284 - lats[365] = 64.288222687410922 - lats[366] = 64.21792392474228 - lats[367] = 64.147625162037642 - lats[368] = 64.07732639929732 - lats[369] = 64.00702763652157 - lats[370] = 63.93672887371072 - lats[371] = 63.866430110865004 - lats[372] = 63.796131347984762 - lats[373] = 63.725832585070251 - lats[374] = 63.655533822121711 - lats[375] = 63.585235059139464 - lats[376] = 63.514936296123757 - lats[377] = 63.444637533074854 - lats[378] = 63.374338769993031 - lats[379] = 63.304040006878537 - lats[380] = 63.23374124373165 - lats[381] = 63.163442480552604 - lats[382] = 63.093143717341647 - lats[383] = 63.022844954099064 - lats[384] = 62.952546190825068 - lats[385] = 62.882247427519928 - lats[386] = 62.811948664183866 - lats[387] = 62.741649900817137 - lats[388] = 62.67135113741999 - lats[389] = 62.60105237399263 - lats[390] = 62.530753610535321 - lats[391] = 62.460454847048261 - lats[392] = 62.3901560835317 - lats[393] = 62.319857319985871 - lats[394] = 62.249558556410982 - lats[395] = 62.179259792807258 - lats[396] = 62.108961029174914 - lats[397] = 62.038662265514176 - lats[398] = 61.968363501825259 - lats[399] = 61.898064738108381 - lats[400] = 61.827765974363729 - lats[401] = 61.757467210591535 - lats[402] = 61.687168446791986 - lats[403] = 61.616869682965287 - lats[404] = 61.546570919111666 - lats[405] = 61.476272155231321 - lats[406] = 61.405973391324409 - lats[407] = 61.335674627391185 - lats[408] = 61.265375863431785 - lats[409] = 61.195077099446451 - lats[410] = 61.124778335435344 - lats[411] = 61.054479571398652 - lats[412] = 60.984180807336578 - lats[413] = 60.913882043249295 - lats[414] = 60.843583279137007 - lats[415] = 60.773284514999872 - lats[416] = 60.702985750838074 - lats[417] = 60.632686986651805 - lats[418] = 60.562388222441243 - lats[419] = 60.492089458206543 - lats[420] = 60.421790693947884 - lats[421] = 60.35149192966545 - lats[422] = 60.28119316535939 - lats[423] = 60.21089440102989 - lats[424] = 60.140595636677112 - lats[425] = 60.070296872301235 - lats[426] = 59.999998107902378 - lats[427] = 59.929699343480763 - lats[428] = 59.859400579036503 - lats[429] = 59.78910181456979 - lats[430] = 59.718803050080759 - lats[431] = 59.64850428556958 - lats[432] = 59.578205521036402 - lats[433] = 59.507906756481383 - lats[434] = 59.43760799190467 - lats[435] = 59.3673092273064 - lats[436] = 59.29701046268675 - lats[437] = 59.226711698045854 - lats[438] = 59.156412933383855 - lats[439] = 59.086114168700909 - lats[440] = 59.015815403997145 - lats[441] = 58.945516639272725 - lats[442] = 58.875217874527763 - lats[443] = 58.804919109762423 - lats[444] = 58.73462034497684 - lats[445] = 58.664321580171141 - lats[446] = 58.594022815345468 - lats[447] = 58.523724050499972 - lats[448] = 58.453425285634758 - lats[449] = 58.383126520749968 - lats[450] = 58.312827755845746 - lats[451] = 58.242528990922203 - lats[452] = 58.172230225979497 - lats[453] = 58.101931461017728 - lats[454] = 58.031632696037022 - lats[455] = 57.961333931037537 - lats[456] = 57.891035166019364 - lats[457] = 57.820736400982646 - lats[458] = 57.75043763592749 - lats[459] = 57.680138870854037 - lats[460] = 57.60984010576238 - lats[461] = 57.539541340652676 - lats[462] = 57.469242575525016 - lats[463] = 57.398943810379521 - lats[464] = 57.328645045216312 - lats[465] = 57.258346280035504 - lats[466] = 57.188047514837208 - lats[467] = 57.117748749621541 - lats[468] = 57.047449984388614 - lats[469] = 56.977151219138541 - lats[470] = 56.90685245387143 - lats[471] = 56.836553688587379 - lats[472] = 56.766254923286517 - lats[473] = 56.695956157968951 - lats[474] = 56.625657392634771 - lats[475] = 56.555358627284086 - lats[476] = 56.485059861917016 - lats[477] = 56.41476109653366 - lats[478] = 56.34446233113411 - lats[479] = 56.274163565718467 - lats[480] = 56.203864800286865 - lats[481] = 56.133566034839362 - lats[482] = 56.063267269376091 - lats[483] = 55.992968503897131 - lats[484] = 55.922669738402583 - lats[485] = 55.852370972892551 - lats[486] = 55.782072207367136 - lats[487] = 55.711773441826416 - lats[488] = 55.641474676270505 - lats[489] = 55.571175910699488 - lats[490] = 55.500877145113449 - lats[491] = 55.430578379512511 - lats[492] = 55.360279613896743 - lats[493] = 55.289980848266232 - lats[494] = 55.219682082621084 - lats[495] = 55.149383316961377 - lats[496] = 55.07908455128721 - lats[497] = 55.008785785598668 - lats[498] = 54.938487019895831 - lats[499] = 54.868188254178797 - lats[500] = 54.797889488447652 - lats[501] = 54.727590722702473 - lats[502] = 54.657291956943347 - lats[503] = 54.586993191170357 - lats[504] = 54.516694425383605 - lats[505] = 54.446395659583146 - lats[506] = 54.376096893769081 - lats[507] = 54.305798127941479 - lats[508] = 54.235499362100448 - lats[509] = 54.165200596246031 - lats[510] = 54.094901830378333 - lats[511] = 54.024603064497434 - lats[512] = 53.954304298603383 - lats[513] = 53.884005532696307 - lats[514] = 53.813706766776235 - lats[515] = 53.743408000843282 - lats[516] = 53.673109234897495 - lats[517] = 53.602810468938962 - lats[518] = 53.53251170296776 - lats[519] = 53.462212936983953 - lats[520] = 53.391914170987633 - lats[521] = 53.321615404978871 - lats[522] = 53.251316638957725 - lats[523] = 53.181017872924265 - lats[524] = 53.110719106878584 - lats[525] = 53.040420340820731 - lats[526] = 52.970121574750792 - lats[527] = 52.899822808668837 - lats[528] = 52.829524042574917 - lats[529] = 52.759225276469131 - lats[530] = 52.688926510351514 - lats[531] = 52.618627744222159 - lats[532] = 52.548328978081123 - lats[533] = 52.478030211928477 - lats[534] = 52.407731445764284 - lats[535] = 52.337432679588609 - lats[536] = 52.26713391340153 - lats[537] = 52.196835147203096 - lats[538] = 52.126536380993372 - lats[539] = 52.056237614772435 - lats[540] = 51.985938848540336 - lats[541] = 51.915640082297152 - lats[542] = 51.845341316042933 - lats[543] = 51.775042549777737 - lats[544] = 51.704743783501634 - lats[545] = 51.634445017214695 - lats[546] = 51.56414625091697 - lats[547] = 51.493847484608516 - lats[548] = 51.423548718289396 - lats[549] = 51.353249951959683 - lats[550] = 51.282951185619417 - lats[551] = 51.21265241926865 - lats[552] = 51.14235365290746 - lats[553] = 51.072054886535909 - lats[554] = 51.001756120154049 - lats[555] = 50.931457353761914 - lats[556] = 50.86115858735959 - lats[557] = 50.790859820947119 - lats[558] = 50.720561054524559 - lats[559] = 50.650262288091959 - lats[560] = 50.579963521649397 - lats[561] = 50.509664755196901 - lats[562] = 50.439365988734544 - lats[563] = 50.369067222262359 - lats[564] = 50.298768455780426 - lats[565] = 50.228469689288779 - lats[566] = 50.158170922787484 - lats[567] = 50.087872156276575 - lats[568] = 50.017573389756123 - lats[569] = 49.947274623226157 - lats[570] = 49.876975856686762 - lats[571] = 49.80667709013796 - lats[572] = 49.736378323579807 - lats[573] = 49.66607955701236 - lats[574] = 49.595780790435676 - lats[575] = 49.525482023849783 - lats[576] = 49.455183257254745 - lats[577] = 49.384884490650613 - lats[578] = 49.314585724037435 - lats[579] = 49.244286957415234 - lats[580] = 49.173988190784094 - lats[581] = 49.103689424144044 - lats[582] = 49.03339065749514 - lats[583] = 48.963091890837418 - lats[584] = 48.892793124170929 - lats[585] = 48.822494357495721 - lats[586] = 48.752195590811837 - lats[587] = 48.681896824119335 - lats[588] = 48.611598057418242 - lats[589] = 48.541299290708608 - lats[590] = 48.47100052399049 - lats[591] = 48.400701757263917 - lats[592] = 48.330402990528938 - lats[593] = 48.260104223785596 - lats[594] = 48.189805457033941 - lats[595] = 48.119506690274015 - lats[596] = 48.049207923505868 - lats[597] = 47.978909156729507 - lats[598] = 47.908610389945018 - lats[599] = 47.838311623152421 - lats[600] = 47.76801285635176 - lats[601] = 47.697714089543084 - lats[602] = 47.627415322726435 - lats[603] = 47.557116555901828 - lats[604] = 47.486817789069342 - lats[605] = 47.416519022228997 - lats[606] = 47.346220255380835 - lats[607] = 47.275921488524894 - lats[608] = 47.205622721661214 - lats[609] = 47.13532395478984 - lats[610] = 47.065025187910805 - lats[611] = 46.994726421024154 - lats[612] = 46.924427654129929 - lats[613] = 46.85412888722815 - lats[614] = 46.783830120318882 - lats[615] = 46.713531353402139 - lats[616] = 46.643232586477971 - lats[617] = 46.572933819546414 - lats[618] = 46.502635052607502 - lats[619] = 46.432336285661272 - lats[620] = 46.362037518707766 - lats[621] = 46.291738751747012 - lats[622] = 46.221439984779053 - lats[623] = 46.151141217803925 - lats[624] = 46.080842450821663 - lats[625] = 46.01054368383231 - lats[626] = 45.94024491683588 - lats[627] = 45.869946149832437 - lats[628] = 45.799647382821995 - lats[629] = 45.729348615804589 - lats[630] = 45.659049848780263 - lats[631] = 45.588751081749038 - lats[632] = 45.51845231471097 - lats[633] = 45.448153547666081 - lats[634] = 45.377854780614399 - lats[635] = 45.30755601355596 - lats[636] = 45.237257246490813 - lats[637] = 45.166958479418959 - lats[638] = 45.096659712340461 - lats[639] = 45.026360945255341 - lats[640] = 44.956062178163634 - lats[641] = 44.885763411065362 - lats[642] = 44.81546464396056 - lats[643] = 44.745165876849271 - lats[644] = 44.674867109731515 - lats[645] = 44.604568342607337 - lats[646] = 44.534269575476756 - lats[647] = 44.463970808339802 - lats[648] = 44.39367204119651 - lats[649] = 44.323373274046915 - lats[650] = 44.253074506891046 - lats[651] = 44.182775739728925 - lats[652] = 44.112476972560586 - lats[653] = 44.042178205386072 - lats[654] = 43.971879438205391 - lats[655] = 43.9015806710186 - lats[656] = 43.831281903825705 - lats[657] = 43.760983136626741 - lats[658] = 43.690684369421732 - lats[659] = 43.620385602210717 - lats[660] = 43.550086834993728 - lats[661] = 43.479788067770777 - lats[662] = 43.409489300541907 - lats[663] = 43.339190533307139 - lats[664] = 43.26889176606651 - lats[665] = 43.19859299882004 - lats[666] = 43.128294231567757 - lats[667] = 43.057995464309691 - lats[668] = 42.987696697045862 - lats[669] = 42.917397929776307 - lats[670] = 42.847099162501053 - lats[671] = 42.776800395220121 - lats[672] = 42.706501627933541 - lats[673] = 42.63620286064134 - lats[674] = 42.565904093343548 - lats[675] = 42.495605326040177 - lats[676] = 42.425306558731272 - lats[677] = 42.355007791416853 - lats[678] = 42.284709024096927 - lats[679] = 42.214410256771551 - lats[680] = 42.144111489440725 - lats[681] = 42.073812722104492 - lats[682] = 42.003513954762873 - lats[683] = 41.933215187415882 - lats[684] = 41.862916420063563 - lats[685] = 41.792617652705921 - lats[686] = 41.722318885343 - lats[687] = 41.6520201179748 - lats[688] = 41.581721350601363 - lats[689] = 41.511422583222718 - lats[690] = 41.441123815838885 - lats[691] = 41.370825048449873 - lats[692] = 41.300526281055724 - lats[693] = 41.230227513656445 - lats[694] = 41.159928746252085 - lats[695] = 41.089629978842645 - lats[696] = 41.01933121142816 - lats[697] = 40.949032444008644 - lats[698] = 40.878733676584126 - lats[699] = 40.808434909154634 - lats[700] = 40.738136141720176 - lats[701] = 40.667837374280786 - lats[702] = 40.597538606836487 - lats[703] = 40.527239839387299 - lats[704] = 40.456941071933244 - lats[705] = 40.386642304474343 - lats[706] = 40.316343537010617 - lats[707] = 40.246044769542102 - lats[708] = 40.175746002068806 - lats[709] = 40.105447234590748 - lats[710] = 40.035148467107952 - lats[711] = 39.964849699620437 - lats[712] = 39.894550932128247 - lats[713] = 39.824252164631375 - lats[714] = 39.753953397129855 - lats[715] = 39.683654629623703 - lats[716] = 39.613355862112947 - lats[717] = 39.543057094597607 - lats[718] = 39.472758327077692 - lats[719] = 39.402459559553229 - lats[720] = 39.332160792024254 - lats[721] = 39.261862024490775 - lats[722] = 39.191563256952804 - lats[723] = 39.121264489410365 - lats[724] = 39.050965721863491 - lats[725] = 38.980666954312184 - lats[726] = 38.910368186756479 - lats[727] = 38.840069419196389 - lats[728] = 38.769770651631937 - lats[729] = 38.699471884063136 - lats[730] = 38.629173116490001 - lats[731] = 38.558874348912568 - lats[732] = 38.488575581330842 - lats[733] = 38.418276813744846 - lats[734] = 38.347978046154608 - lats[735] = 38.277679278560143 - lats[736] = 38.20738051096145 - lats[737] = 38.137081743358586 - lats[738] = 38.066782975751536 - lats[739] = 37.99648420814033 - lats[740] = 37.926185440524989 - lats[741] = 37.855886672905527 - lats[742] = 37.785587905281965 - lats[743] = 37.715289137654317 - lats[744] = 37.644990370022605 - lats[745] = 37.574691602386856 - lats[746] = 37.504392834747065 - lats[747] = 37.434094067103274 - lats[748] = 37.363795299455489 - lats[749] = 37.293496531803719 - lats[750] = 37.223197764147997 - lats[751] = 37.152898996488332 - lats[752] = 37.082600228824752 - lats[753] = 37.012301461157264 - lats[754] = 36.942002693485883 - lats[755] = 36.871703925810628 - lats[756] = 36.801405158131523 - lats[757] = 36.731106390448581 - lats[758] = 36.660807622761808 - lats[759] = 36.590508855071242 - lats[760] = 36.520210087376888 - lats[761] = 36.449911319678755 - lats[762] = 36.379612551976876 - lats[763] = 36.309313784271254 - lats[764] = 36.239015016561908 - lats[765] = 36.16871624884886 - lats[766] = 36.098417481132117 - lats[767] = 36.028118713411708 - lats[768] = 35.957819945687639 - lats[769] = 35.887521177959933 - lats[770] = 35.817222410228595 - lats[771] = 35.746923642493655 - lats[772] = 35.676624874755113 - lats[773] = 35.606326107012997 - lats[774] = 35.536027339267314 - lats[775] = 35.465728571518085 - lats[776] = 35.395429803765317 - lats[777] = 35.325131036009047 - lats[778] = 35.254832268249267 - lats[779] = 35.184533500486005 - lats[780] = 35.114234732719261 - lats[781] = 35.043935964949064 - lats[782] = 34.973637197175435 - lats[783] = 34.903338429398374 - lats[784] = 34.833039661617903 - lats[785] = 34.762740893834028 - lats[786] = 34.692442126046771 - lats[787] = 34.622143358256153 - lats[788] = 34.551844590462188 - lats[789] = 34.481545822664863 - lats[790] = 34.411247054864234 - lats[791] = 34.340948287060286 - lats[792] = 34.270649519253041 - lats[793] = 34.200350751442521 - lats[794] = 34.130051983628725 - lats[795] = 34.059753215811682 - lats[796] = 33.989454447991392 - lats[797] = 33.919155680167876 - lats[798] = 33.848856912341155 - lats[799] = 33.778558144511237 - lats[800] = 33.708259376678136 - lats[801] = 33.637960608841851 - lats[802] = 33.567661841002426 - lats[803] = 33.497363073159853 - lats[804] = 33.42706430531414 - lats[805] = 33.356765537465314 - lats[806] = 33.286466769613391 - lats[807] = 33.216168001758369 - lats[808] = 33.145869233900278 - lats[809] = 33.075570466039117 - lats[810] = 33.005271698174909 - lats[811] = 32.934972930307666 - lats[812] = 32.864674162437396 - lats[813] = 32.794375394564113 - lats[814] = 32.724076626687825 - lats[815] = 32.653777858808567 - lats[816] = 32.583479090926325 - lats[817] = 32.513180323041112 - lats[818] = 32.442881555152965 - lats[819] = 32.372582787261891 - lats[820] = 32.302284019367875 - lats[821] = 32.231985251470959 - lats[822] = 32.161686483571145 - lats[823] = 32.091387715668439 - lats[824] = 32.021088947762863 - lats[825] = 31.950790179854422 - lats[826] = 31.880491411943137 - lats[827] = 31.810192644029012 - lats[828] = 31.739893876112063 - lats[829] = 31.669595108192297 - lats[830] = 31.599296340269738 - lats[831] = 31.528997572344384 - lats[832] = 31.458698804416255 - lats[833] = 31.388400036485361 - lats[834] = 31.318101268551715 - lats[835] = 31.247802500615318 - lats[836] = 31.177503732676204 - lats[837] = 31.107204964734358 - lats[838] = 31.036906196789811 - lats[839] = 30.966607428842572 - lats[840] = 30.896308660892647 - lats[841] = 30.826009892940046 - lats[842] = 30.755711124984781 - lats[843] = 30.685412357026873 - lats[844] = 30.615113589066322 - lats[845] = 30.544814821103138 - lats[846] = 30.47451605313735 - lats[847] = 30.404217285168947 - lats[848] = 30.333918517197947 - lats[849] = 30.263619749224372 - lats[850] = 30.19332098124822 - lats[851] = 30.123022213269511 - lats[852] = 30.052723445288244 - lats[853] = 29.98242467730444 - lats[854] = 29.91212590931811 - lats[855] = 29.841827141329258 - lats[856] = 29.771528373337894 - lats[857] = 29.701229605344039 - lats[858] = 29.630930837347698 - lats[859] = 29.560632069348884 - lats[860] = 29.490333301347597 - lats[861] = 29.420034533343859 - lats[862] = 29.349735765337677 - lats[863] = 29.279436997329057 - lats[864] = 29.209138229318015 - lats[865] = 29.138839461304556 - lats[866] = 29.068540693288696 - lats[867] = 28.998241925270449 - lats[868] = 28.927943157249814 - lats[869] = 28.857644389226806 - lats[870] = 28.787345621201432 - lats[871] = 28.717046853173709 - lats[872] = 28.646748085143642 - lats[873] = 28.576449317111244 - lats[874] = 28.506150549076519 - lats[875] = 28.435851781039485 - lats[876] = 28.365553013000145 - lats[877] = 28.29525424495851 - lats[878] = 28.224955476914594 - lats[879] = 28.154656708868405 - lats[880] = 28.084357940819952 - lats[881] = 28.014059172769244 - lats[882] = 27.94376040471629 - lats[883] = 27.873461636661098 - lats[884] = 27.803162868603682 - lats[885] = 27.732864100544052 - lats[886] = 27.662565332482213 - lats[887] = 27.592266564418171 - lats[888] = 27.521967796351948 - lats[889] = 27.451669028283543 - lats[890] = 27.381370260212968 - lats[891] = 27.311071492140236 - lats[892] = 27.240772724065348 - lats[893] = 27.170473955988321 - lats[894] = 27.100175187909159 - lats[895] = 27.029876419827872 - lats[896] = 26.959577651744471 - lats[897] = 26.889278883658971 - lats[898] = 26.818980115571364 - lats[899] = 26.748681347481678 - lats[900] = 26.678382579389908 - lats[901] = 26.608083811296069 - lats[902] = 26.53778504320017 - lats[903] = 26.467486275102218 - lats[904] = 26.397187507002222 - lats[905] = 26.326888738900195 - lats[906] = 26.256589970796135 - lats[907] = 26.186291202690064 - lats[908] = 26.115992434581983 - lats[909] = 26.045693666471902 - lats[910] = 25.975394898359827 - lats[911] = 25.90509613024577 - lats[912] = 25.834797362129745 - lats[913] = 25.764498594011751 - lats[914] = 25.694199825891793 - lats[915] = 25.623901057769892 - lats[916] = 25.553602289646051 - lats[917] = 25.483303521520277 - lats[918] = 25.413004753392578 - lats[919] = 25.342705985262967 - lats[920] = 25.272407217131445 - lats[921] = 25.202108448998025 - lats[922] = 25.13180968086272 - lats[923] = 25.061510912725527 - lats[924] = 24.991212144586456 - lats[925] = 24.920913376445526 - lats[926] = 24.850614608302738 - lats[927] = 24.780315840158096 - lats[928] = 24.710017072011613 - lats[929] = 24.639718303863294 - lats[930] = 24.569419535713152 - lats[931] = 24.499120767561195 - lats[932] = 24.428821999407425 - lats[933] = 24.358523231251851 - lats[934] = 24.288224463094483 - lats[935] = 24.217925694935328 - lats[936] = 24.1476269267744 - lats[937] = 24.077328158611696 - lats[938] = 24.007029390447226 - lats[939] = 23.936730622281004 - lats[940] = 23.866431854113038 - lats[941] = 23.796133085943328 - lats[942] = 23.725834317771888 - lats[943] = 23.655535549598721 - lats[944] = 23.585236781423838 - lats[945] = 23.514938013247242 - lats[946] = 23.444639245068949 - lats[947] = 23.374340476888957 - lats[948] = 23.304041708707278 - lats[949] = 23.233742940523921 - lats[950] = 23.163444172338895 - lats[951] = 23.0931454041522 - lats[952] = 23.022846635963852 - lats[953] = 22.952547867773848 - lats[954] = 22.882249099582204 - lats[955] = 22.811950331388925 - lats[956] = 22.741651563194019 - lats[957] = 22.671352794997489 - lats[958] = 22.60105402679935 - lats[959] = 22.530755258599601 - lats[960] = 22.460456490398254 - lats[961] = 22.390157722195315 - lats[962] = 22.319858953990789 - lats[963] = 22.249560185784691 - lats[964] = 22.179261417577013 - lats[965] = 22.108962649367779 - lats[966] = 22.038663881156989 - lats[967] = 21.968365112944642 - lats[968] = 21.898066344730758 - lats[969] = 21.827767576515338 - lats[970] = 21.757468808298391 - lats[971] = 21.687170040079913 - lats[972] = 21.616871271859928 - lats[973] = 21.546572503638437 - lats[974] = 21.47627373541544 - lats[975] = 21.40597496719095 - lats[976] = 21.335676198964972 - lats[977] = 21.265377430737512 - lats[978] = 21.195078662508585 - lats[979] = 21.124779894278181 - lats[980] = 21.054481126046323 - lats[981] = 20.984182357813012 - lats[982] = 20.913883589578251 - lats[983] = 20.843584821342048 - lats[984] = 20.773286053104417 - lats[985] = 20.702987284865355 - lats[986] = 20.632688516624874 - lats[987] = 20.562389748382977 - lats[988] = 20.492090980139672 - lats[989] = 20.421792211894967 - lats[990] = 20.35149344364887 - lats[991] = 20.28119467540138 - lats[992] = 20.210895907152516 - lats[993] = 20.140597138902272 - lats[994] = 20.070298370650661 - lats[995] = 19.999999602397686 - lats[996] = 19.929700834143357 - lats[997] = 19.859402065887682 - lats[998] = 19.789103297630657 - lats[999] = 19.718804529372303 - lats[1000] = 19.648505761112613 - lats[1001] = 19.578206992851602 - lats[1002] = 19.507908224589269 - lats[1003] = 19.437609456325632 - lats[1004] = 19.367310688060684 - lats[1005] = 19.297011919794439 - lats[1006] = 19.226713151526898 - lats[1007] = 19.15641438325807 - lats[1008] = 19.086115614987968 - lats[1009] = 19.015816846716586 - lats[1010] = 18.945518078443939 - lats[1011] = 18.875219310170031 - lats[1012] = 18.804920541894862 - lats[1013] = 18.734621773618446 - lats[1014] = 18.664323005340787 - lats[1015] = 18.594024237061891 - lats[1016] = 18.523725468781763 - lats[1017] = 18.453426700500408 - lats[1018] = 18.383127932217832 - lats[1019] = 18.312829163934047 - lats[1020] = 18.242530395649048 - lats[1021] = 18.172231627362851 - lats[1022] = 18.101932859075458 - lats[1023] = 18.031634090786874 - lats[1024] = 17.96133532249711 - lats[1025] = 17.89103655420616 - lats[1026] = 17.820737785914044 - lats[1027] = 17.75043901762076 - lats[1028] = 17.680140249326314 - lats[1029] = 17.60984148103071 - lats[1030] = 17.539542712733962 - lats[1031] = 17.469243944436066 - lats[1032] = 17.39894517613704 - lats[1033] = 17.328646407836878 - lats[1034] = 17.258347639535586 - lats[1035] = 17.188048871233182 - lats[1036] = 17.117750102929655 - lats[1037] = 17.04745133462502 - lats[1038] = 16.977152566319283 - lats[1039] = 16.906853798012452 - lats[1040] = 16.836555029704527 - lats[1041] = 16.766256261395515 - lats[1042] = 16.69595749308542 - lats[1043] = 16.625658724774254 - lats[1044] = 16.555359956462013 - lats[1045] = 16.485061188148713 - lats[1046] = 16.41476241983435 - lats[1047] = 16.344463651518936 - lats[1048] = 16.274164883202477 - lats[1049] = 16.203866114884974 - lats[1050] = 16.133567346566434 - lats[1051] = 16.063268578246863 - lats[1052] = 15.992969809926265 - lats[1053] = 15.922671041604652 - lats[1054] = 15.852372273282016 - lats[1055] = 15.78207350495838 - lats[1056] = 15.711774736633735 - lats[1057] = 15.641475968308091 - lats[1058] = 15.571177199981456 - lats[1059] = 15.500878431653829 - lats[1060] = 15.430579663325226 - lats[1061] = 15.360280894995643 - lats[1062] = 15.289982126665089 - lats[1063] = 15.219683358333569 - lats[1064] = 15.149384590001089 - lats[1065] = 15.07908582166765 - lats[1066] = 15.008787053333259 - lats[1067] = 14.938488284997929 - lats[1068] = 14.868189516661655 - lats[1069] = 14.797890748324447 - lats[1070] = 14.727591979986309 - lats[1071] = 14.657293211647247 - lats[1072] = 14.586994443307265 - lats[1073] = 14.516695674966371 - lats[1074] = 14.446396906624567 - lats[1075] = 14.376098138281863 - lats[1076] = 14.305799369938256 - lats[1077] = 14.23550060159376 - lats[1078] = 14.165201833248371 - lats[1079] = 14.0949030649021 - lats[1080] = 14.024604296554955 - lats[1081] = 13.954305528206934 - lats[1082] = 13.884006759858046 - lats[1083] = 13.813707991508297 - lats[1084] = 13.743409223157688 - lats[1085] = 13.673110454806226 - lats[1086] = 13.602811686453919 - lats[1087] = 13.532512918100766 - lats[1088] = 13.46221414974678 - lats[1089] = 13.391915381391959 - lats[1090] = 13.32161661303631 - lats[1091] = 13.251317844679837 - lats[1092] = 13.181019076322551 - lats[1093] = 13.110720307964451 - lats[1094] = 13.040421539605545 - lats[1095] = 12.970122771245832 - lats[1096] = 12.899824002885323 - lats[1097] = 12.829525234524022 - lats[1098] = 12.759226466161934 - lats[1099] = 12.688927697799061 - lats[1100] = 12.618628929435411 - lats[1101] = 12.548330161070988 - lats[1102] = 12.478031392705796 - lats[1103] = 12.407732624339841 - lats[1104] = 12.337433855973126 - lats[1105] = 12.267135087605659 - lats[1106] = 12.196836319237443 - lats[1107] = 12.126537550868482 - lats[1108] = 12.056238782498781 - lats[1109] = 11.985940014128348 - lats[1110] = 11.915641245757183 - lats[1111] = 11.845342477385294 - lats[1112] = 11.775043709012685 - lats[1113] = 11.704744940639358 - lats[1114] = 11.634446172265324 - lats[1115] = 11.564147403890583 - lats[1116] = 11.493848635515141 - lats[1117] = 11.423549867139002 - lats[1118] = 11.35325109876217 - lats[1119] = 11.282952330384653 - lats[1120] = 11.212653562006453 - lats[1121] = 11.142354793627575 - lats[1122] = 11.072056025248026 - lats[1123] = 11.001757256867807 - lats[1124] = 10.931458488486923 - lats[1125] = 10.861159720105382 - lats[1126] = 10.790860951723188 - lats[1127] = 10.720562183340341 - lats[1128] = 10.65026341495685 - lats[1129] = 10.579964646572719 - lats[1130] = 10.509665878187954 - lats[1131] = 10.439367109802557 - lats[1132] = 10.369068341416533 - lats[1133] = 10.298769573029887 - lats[1134] = 10.228470804642624 - lats[1135] = 10.158172036254747 - lats[1136] = 10.087873267866264 - lats[1137] = 10.017574499477174 - lats[1138] = 9.9472757310874869 - lats[1139] = 9.8769769626972046 - lats[1140] = 9.8066781943063344 - lats[1141] = 9.7363794259148779 - lats[1142] = 9.6660806575228388 - lats[1143] = 9.5957818891302242 - lats[1144] = 9.5254831207370376 - lats[1145] = 9.4551843523432826 - lats[1146] = 9.3848855839489662 - lats[1147] = 9.3145868155540921 - lats[1148] = 9.2442880471586619 - lats[1149] = 9.1739892787626829 - lats[1150] = 9.1036905103661585 - lats[1151] = 9.0333917419690941 - lats[1152] = 8.963092973571495 - lats[1153] = 8.8927942051733631 - lats[1154] = 8.8224954367747017 - lats[1155] = 8.7521966683755217 - lats[1156] = 8.6818978999758194 - lats[1157] = 8.6115991315756055 - lats[1158] = 8.5413003631748801 - lats[1159] = 8.4710015947736537 - lats[1160] = 8.4007028263719228 - lats[1161] = 8.3304040579696963 - lats[1162] = 8.2601052895669778 - lats[1163] = 8.1898065211637725 - lats[1164] = 8.1195077527600841 - lats[1165] = 8.049208984355916 - lats[1166] = 7.9789102159512737 - lats[1167] = 7.9086114475461606 - lats[1168] = 7.8383126791405831 - lats[1169] = 7.7680139107345463 - lats[1170] = 7.6977151423280494 - lats[1171] = 7.6274163739210996 - lats[1172] = 7.557117605513703 - lats[1173] = 7.4868188371058624 - lats[1174] = 7.4165200686975803 - lats[1175] = 7.3462213002888648 - lats[1176] = 7.2759225318797176 - lats[1177] = 7.2056237634701441 - lats[1178] = 7.1353249950601469 - lats[1179] = 7.0650262266497315 - lats[1180] = 6.994727458238903 - lats[1181] = 6.924428689827665 - lats[1182] = 6.8541299214160212 - lats[1183] = 6.7838311530039768 - lats[1184] = 6.7135323845915353 - lats[1185] = 6.6432336161787013 - lats[1186] = 6.5729348477654792 - lats[1187] = 6.5026360793518734 - lats[1188] = 6.4323373109378874 - lats[1189] = 6.3620385425235257 - lats[1190] = 6.2917397741087928 - lats[1191] = 6.2214410056936931 - lats[1192] = 6.151142237278231 - lats[1193] = 6.0808434688624091 - lats[1194] = 6.0105447004462347 - lats[1195] = 5.9402459320297085 - lats[1196] = 5.869947163612836 - lats[1197] = 5.7996483951956233 - lats[1198] = 5.729349626778073 - lats[1199] = 5.6590508583601888 - lats[1200] = 5.5887520899419751 - lats[1201] = 5.5184533215234373 - lats[1202] = 5.4481545531045787 - lats[1203] = 5.3778557846854023 - lats[1204] = 5.3075570162659149 - lats[1205] = 5.2372582478461194 - lats[1206] = 5.1669594794260192 - lats[1207] = 5.0966607110056197 - lats[1208] = 5.0263619425849244 - lats[1209] = 4.9560631741639369 - lats[1210] = 4.8857644057426626 - lats[1211] = 4.8154656373211049 - lats[1212] = 4.7451668688992683 - lats[1213] = 4.6748681004771564 - lats[1214] = 4.6045693320547736 - lats[1215] = 4.5342705636321252 - lats[1216] = 4.4639717952092139 - lats[1217] = 4.3936730267860451 - lats[1218] = 4.3233742583626205 - lats[1219] = 4.2530754899389471 - lats[1220] = 4.1827767215150269 - lats[1221] = 4.1124779530908659 - lats[1222] = 4.0421791846664661 - lats[1223] = 3.9718804162418326 - lats[1224] = 3.90158164781697 - lats[1225] = 3.8312828793918823 - lats[1226] = 3.7609841109665734 - lats[1227] = 3.6906853425410477 - lats[1228] = 3.6203865741153085 - lats[1229] = 3.5500878056893601 - lats[1230] = 3.4797890372632065 - lats[1231] = 3.4094902688368531 - lats[1232] = 3.339191500410303 - lats[1233] = 3.2688927319835597 - lats[1234] = 3.1985939635566285 - lats[1235] = 3.1282951951295126 - lats[1236] = 3.0579964267022164 - lats[1237] = 2.9876976582747439 - lats[1238] = 2.9173988898470999 - lats[1239] = 2.8471001214192873 - lats[1240] = 2.7768013529913107 - lats[1241] = 2.7065025845631743 - lats[1242] = 2.6362038161348824 - lats[1243] = 2.5659050477064382 - lats[1244] = 2.4956062792778466 - lats[1245] = 2.4253075108491116 - lats[1246] = 2.3550087424202366 - lats[1247] = 2.2847099739912267 - lats[1248] = 2.2144112055620848 - lats[1249] = 2.1441124371328155 - lats[1250] = 2.0738136687034232 - lats[1251] = 2.0035149002739114 - lats[1252] = 1.9332161318442849 - lats[1253] = 1.8629173634145471 - lats[1254] = 1.792618594984702 - lats[1255] = 1.7223198265547539 - lats[1256] = 1.6520210581247066 - lats[1257] = 1.5817222896945646 - lats[1258] = 1.5114235212643317 - lats[1259] = 1.4411247528340119 - lats[1260] = 1.3708259844036093 - lats[1261] = 1.300527215973128 - lats[1262] = 1.2302284475425722 - lats[1263] = 1.1599296791119456 - lats[1264] = 1.0896309106812523 - lats[1265] = 1.0193321422504964 - lats[1266] = 0.949033373819682 - lats[1267] = 0.87873460538881287 - lats[1268] = 0.80843583695789356 - lats[1269] = 0.73813706852692773 - lats[1270] = 0.66783830009591949 - lats[1271] = 0.59753953166487306 - lats[1272] = 0.52724076323379232 - lats[1273] = 0.45694199480268116 - lats[1274] = 0.3866432263715438 - lats[1275] = 0.31634445794038429 - lats[1276] = 0.24604568950920663 - lats[1277] = 0.17574692107801482 - lats[1278] = 0.10544815264681295 - lats[1279] = 0.035149384215604956 - lats[1280] = -0.035149384215604956 - lats[1281] = -0.10544815264681295 - lats[1282] = -0.17574692107801482 - lats[1283] = -0.24604568950920663 - lats[1284] = -0.31634445794038429 - lats[1285] = -0.3866432263715438 - lats[1286] = -0.45694199480268116 - lats[1287] = -0.52724076323379232 - lats[1288] = -0.59753953166487306 - lats[1289] = -0.66783830009591949 - lats[1290] = -0.73813706852692773 - lats[1291] = -0.80843583695789356 - lats[1292] = -0.87873460538881287 - lats[1293] = -0.949033373819682 - lats[1294] = -1.0193321422504964 - lats[1295] = -1.0896309106812523 - lats[1296] = -1.1599296791119456 - lats[1297] = -1.2302284475425722 - lats[1298] = -1.300527215973128 - lats[1299] = -1.3708259844036093 - lats[1300] = -1.4411247528340119 - lats[1301] = -1.5114235212643317 - lats[1302] = -1.5817222896945646 - lats[1303] = -1.6520210581247066 - lats[1304] = -1.7223198265547539 - lats[1305] = -1.792618594984702 - lats[1306] = -1.8629173634145471 - lats[1307] = -1.9332161318442849 - lats[1308] = -2.0035149002739114 - lats[1309] = -2.0738136687034232 - lats[1310] = -2.1441124371328155 - lats[1311] = -2.2144112055620848 - lats[1312] = -2.2847099739912267 - lats[1313] = -2.3550087424202366 - lats[1314] = -2.4253075108491116 - lats[1315] = -2.4956062792778466 - lats[1316] = -2.5659050477064382 - lats[1317] = -2.6362038161348824 - lats[1318] = -2.7065025845631743 - lats[1319] = -2.7768013529913107 - lats[1320] = -2.8471001214192873 - lats[1321] = -2.9173988898470999 - lats[1322] = -2.9876976582747439 - lats[1323] = -3.0579964267022164 - lats[1324] = -3.1282951951295126 - lats[1325] = -3.1985939635566285 - lats[1326] = -3.2688927319835597 - lats[1327] = -3.339191500410303 - lats[1328] = -3.4094902688368531 - lats[1329] = -3.4797890372632065 - lats[1330] = -3.5500878056893601 - lats[1331] = -3.6203865741153085 - lats[1332] = -3.6906853425410477 - lats[1333] = -3.7609841109665734 - lats[1334] = -3.8312828793918823 - lats[1335] = -3.90158164781697 - lats[1336] = -3.9718804162418326 - lats[1337] = -4.0421791846664661 - lats[1338] = -4.1124779530908659 - lats[1339] = -4.1827767215150269 - lats[1340] = -4.2530754899389471 - lats[1341] = -4.3233742583626205 - lats[1342] = -4.3936730267860451 - lats[1343] = -4.4639717952092139 - lats[1344] = -4.5342705636321252 - lats[1345] = -4.6045693320547736 - lats[1346] = -4.6748681004771564 - lats[1347] = -4.7451668688992683 - lats[1348] = -4.8154656373211049 - lats[1349] = -4.8857644057426626 - lats[1350] = -4.9560631741639369 - lats[1351] = -5.0263619425849244 - lats[1352] = -5.0966607110056197 - lats[1353] = -5.1669594794260192 - lats[1354] = -5.2372582478461194 - lats[1355] = -5.3075570162659149 - lats[1356] = -5.3778557846854023 - lats[1357] = -5.4481545531045787 - lats[1358] = -5.5184533215234373 - lats[1359] = -5.5887520899419751 - lats[1360] = -5.6590508583601888 - lats[1361] = -5.729349626778073 - lats[1362] = -5.7996483951956233 - lats[1363] = -5.869947163612836 - lats[1364] = -5.9402459320297085 - lats[1365] = -6.0105447004462347 - lats[1366] = -6.0808434688624091 - lats[1367] = -6.151142237278231 - lats[1368] = -6.2214410056936931 - lats[1369] = -6.2917397741087928 - lats[1370] = -6.3620385425235257 - lats[1371] = -6.4323373109378874 - lats[1372] = -6.5026360793518734 - lats[1373] = -6.5729348477654792 - lats[1374] = -6.6432336161787013 - lats[1375] = -6.7135323845915353 - lats[1376] = -6.7838311530039768 - lats[1377] = -6.8541299214160212 - lats[1378] = -6.924428689827665 - lats[1379] = -6.994727458238903 - lats[1380] = -7.0650262266497315 - lats[1381] = -7.1353249950601469 - lats[1382] = -7.2056237634701441 - lats[1383] = -7.2759225318797176 - lats[1384] = -7.3462213002888648 - lats[1385] = -7.4165200686975803 - lats[1386] = -7.4868188371058624 - lats[1387] = -7.557117605513703 - lats[1388] = -7.6274163739210996 - lats[1389] = -7.6977151423280494 - lats[1390] = -7.7680139107345463 - lats[1391] = -7.8383126791405831 - lats[1392] = -7.9086114475461606 - lats[1393] = -7.9789102159512737 - lats[1394] = -8.049208984355916 - lats[1395] = -8.1195077527600841 - lats[1396] = -8.1898065211637725 - lats[1397] = -8.2601052895669778 - lats[1398] = -8.3304040579696963 - lats[1399] = -8.4007028263719228 - lats[1400] = -8.4710015947736537 - lats[1401] = -8.5413003631748801 - lats[1402] = -8.6115991315756055 - lats[1403] = -8.6818978999758194 - lats[1404] = -8.7521966683755217 - lats[1405] = -8.8224954367747017 - lats[1406] = -8.8927942051733631 - lats[1407] = -8.963092973571495 - lats[1408] = -9.0333917419690941 - lats[1409] = -9.1036905103661585 - lats[1410] = -9.1739892787626829 - lats[1411] = -9.2442880471586619 - lats[1412] = -9.3145868155540921 - lats[1413] = -9.3848855839489662 - lats[1414] = -9.4551843523432826 - lats[1415] = -9.5254831207370376 - lats[1416] = -9.5957818891302242 - lats[1417] = -9.6660806575228388 - lats[1418] = -9.7363794259148779 - lats[1419] = -9.8066781943063344 - lats[1420] = -9.8769769626972046 - lats[1421] = -9.9472757310874869 - lats[1422] = -10.017574499477174 - lats[1423] = -10.087873267866264 - lats[1424] = -10.158172036254747 - lats[1425] = -10.228470804642624 - lats[1426] = -10.298769573029887 - lats[1427] = -10.369068341416533 - lats[1428] = -10.439367109802557 - lats[1429] = -10.509665878187954 - lats[1430] = -10.579964646572719 - lats[1431] = -10.65026341495685 - lats[1432] = -10.720562183340341 - lats[1433] = -10.790860951723188 - lats[1434] = -10.861159720105382 - lats[1435] = -10.931458488486923 - lats[1436] = -11.001757256867807 - lats[1437] = -11.072056025248026 - lats[1438] = -11.142354793627575 - lats[1439] = -11.212653562006453 - lats[1440] = -11.282952330384653 - lats[1441] = -11.35325109876217 - lats[1442] = -11.423549867139002 - lats[1443] = -11.493848635515141 - lats[1444] = -11.564147403890583 - lats[1445] = -11.634446172265324 - lats[1446] = -11.704744940639358 - lats[1447] = -11.775043709012685 - lats[1448] = -11.845342477385294 - lats[1449] = -11.915641245757183 - lats[1450] = -11.985940014128348 - lats[1451] = -12.056238782498781 - lats[1452] = -12.126537550868482 - lats[1453] = -12.196836319237443 - lats[1454] = -12.267135087605659 - lats[1455] = -12.337433855973126 - lats[1456] = -12.407732624339841 - lats[1457] = -12.478031392705796 - lats[1458] = -12.548330161070988 - lats[1459] = -12.618628929435411 - lats[1460] = -12.688927697799061 - lats[1461] = -12.759226466161934 - lats[1462] = -12.829525234524022 - lats[1463] = -12.899824002885323 - lats[1464] = -12.970122771245832 - lats[1465] = -13.040421539605545 - lats[1466] = -13.110720307964451 - lats[1467] = -13.181019076322551 - lats[1468] = -13.251317844679837 - lats[1469] = -13.32161661303631 - lats[1470] = -13.391915381391959 - lats[1471] = -13.46221414974678 - lats[1472] = -13.532512918100766 - lats[1473] = -13.602811686453919 - lats[1474] = -13.673110454806226 - lats[1475] = -13.743409223157688 - lats[1476] = -13.813707991508297 - lats[1477] = -13.884006759858046 - lats[1478] = -13.954305528206934 - lats[1479] = -14.024604296554955 - lats[1480] = -14.0949030649021 - lats[1481] = -14.165201833248371 - lats[1482] = -14.23550060159376 - lats[1483] = -14.305799369938256 - lats[1484] = -14.376098138281863 - lats[1485] = -14.446396906624567 - lats[1486] = -14.516695674966371 - lats[1487] = -14.586994443307265 - lats[1488] = -14.657293211647247 - lats[1489] = -14.727591979986309 - lats[1490] = -14.797890748324447 - lats[1491] = -14.868189516661655 - lats[1492] = -14.938488284997929 - lats[1493] = -15.008787053333259 - lats[1494] = -15.07908582166765 - lats[1495] = -15.149384590001089 - lats[1496] = -15.219683358333569 - lats[1497] = -15.289982126665089 - lats[1498] = -15.360280894995643 - lats[1499] = -15.430579663325226 - lats[1500] = -15.500878431653829 - lats[1501] = -15.571177199981456 - lats[1502] = -15.641475968308091 - lats[1503] = -15.711774736633735 - lats[1504] = -15.78207350495838 - lats[1505] = -15.852372273282016 - lats[1506] = -15.922671041604652 - lats[1507] = -15.992969809926265 - lats[1508] = -16.063268578246863 - lats[1509] = -16.133567346566434 - lats[1510] = -16.203866114884974 - lats[1511] = -16.274164883202477 - lats[1512] = -16.344463651518936 - lats[1513] = -16.41476241983435 - lats[1514] = -16.485061188148713 - lats[1515] = -16.555359956462013 - lats[1516] = -16.625658724774254 - lats[1517] = -16.69595749308542 - lats[1518] = -16.766256261395515 - lats[1519] = -16.836555029704527 - lats[1520] = -16.906853798012452 - lats[1521] = -16.977152566319283 - lats[1522] = -17.04745133462502 - lats[1523] = -17.117750102929655 - lats[1524] = -17.188048871233182 - lats[1525] = -17.258347639535586 - lats[1526] = -17.328646407836878 - lats[1527] = -17.39894517613704 - lats[1528] = -17.469243944436066 - lats[1529] = -17.539542712733962 - lats[1530] = -17.60984148103071 - lats[1531] = -17.680140249326314 - lats[1532] = -17.75043901762076 - lats[1533] = -17.820737785914044 - lats[1534] = -17.89103655420616 - lats[1535] = -17.96133532249711 - lats[1536] = -18.031634090786874 - lats[1537] = -18.101932859075458 - lats[1538] = -18.172231627362851 - lats[1539] = -18.242530395649048 - lats[1540] = -18.312829163934047 - lats[1541] = -18.383127932217832 - lats[1542] = -18.453426700500408 - lats[1543] = -18.523725468781763 - lats[1544] = -18.594024237061891 - lats[1545] = -18.664323005340787 - lats[1546] = -18.734621773618446 - lats[1547] = -18.804920541894862 - lats[1548] = -18.875219310170031 - lats[1549] = -18.945518078443939 - lats[1550] = -19.015816846716586 - lats[1551] = -19.086115614987968 - lats[1552] = -19.15641438325807 - lats[1553] = -19.226713151526898 - lats[1554] = -19.297011919794439 - lats[1555] = -19.367310688060684 - lats[1556] = -19.437609456325632 - lats[1557] = -19.507908224589269 - lats[1558] = -19.578206992851602 - lats[1559] = -19.648505761112613 - lats[1560] = -19.718804529372303 - lats[1561] = -19.789103297630657 - lats[1562] = -19.859402065887682 - lats[1563] = -19.929700834143357 - lats[1564] = -19.999999602397686 - lats[1565] = -20.070298370650661 - lats[1566] = -20.140597138902272 - lats[1567] = -20.210895907152516 - lats[1568] = -20.28119467540138 - lats[1569] = -20.35149344364887 - lats[1570] = -20.421792211894967 - lats[1571] = -20.492090980139672 - lats[1572] = -20.562389748382977 - lats[1573] = -20.632688516624874 - lats[1574] = -20.702987284865355 - lats[1575] = -20.773286053104417 - lats[1576] = -20.843584821342048 - lats[1577] = -20.913883589578251 - lats[1578] = -20.984182357813012 - lats[1579] = -21.054481126046323 - lats[1580] = -21.124779894278181 - lats[1581] = -21.195078662508585 - lats[1582] = -21.265377430737512 - lats[1583] = -21.335676198964972 - lats[1584] = -21.40597496719095 - lats[1585] = -21.47627373541544 - lats[1586] = -21.546572503638437 - lats[1587] = -21.616871271859928 - lats[1588] = -21.687170040079913 - lats[1589] = -21.757468808298391 - lats[1590] = -21.827767576515338 - lats[1591] = -21.898066344730758 - lats[1592] = -21.968365112944642 - lats[1593] = -22.038663881156989 - lats[1594] = -22.108962649367779 - lats[1595] = -22.179261417577013 - lats[1596] = -22.249560185784691 - lats[1597] = -22.319858953990789 - lats[1598] = -22.390157722195315 - lats[1599] = -22.460456490398254 - lats[1600] = -22.530755258599601 - lats[1601] = -22.60105402679935 - lats[1602] = -22.671352794997489 - lats[1603] = -22.741651563194019 - lats[1604] = -22.811950331388925 - lats[1605] = -22.882249099582204 - lats[1606] = -22.952547867773848 - lats[1607] = -23.022846635963852 - lats[1608] = -23.0931454041522 - lats[1609] = -23.163444172338895 - lats[1610] = -23.233742940523921 - lats[1611] = -23.304041708707278 - lats[1612] = -23.374340476888957 - lats[1613] = -23.444639245068949 - lats[1614] = -23.514938013247242 - lats[1615] = -23.585236781423838 - lats[1616] = -23.655535549598721 - lats[1617] = -23.725834317771888 - lats[1618] = -23.796133085943328 - lats[1619] = -23.866431854113038 - lats[1620] = -23.936730622281004 - lats[1621] = -24.007029390447226 - lats[1622] = -24.077328158611696 - lats[1623] = -24.1476269267744 - lats[1624] = -24.217925694935328 - lats[1625] = -24.288224463094483 - lats[1626] = -24.358523231251851 - lats[1627] = -24.428821999407425 - lats[1628] = -24.499120767561195 - lats[1629] = -24.569419535713152 - lats[1630] = -24.639718303863294 - lats[1631] = -24.710017072011613 - lats[1632] = -24.780315840158096 - lats[1633] = -24.850614608302738 - lats[1634] = -24.920913376445526 - lats[1635] = -24.991212144586456 - lats[1636] = -25.061510912725527 - lats[1637] = -25.13180968086272 - lats[1638] = -25.202108448998025 - lats[1639] = -25.272407217131445 - lats[1640] = -25.342705985262967 - lats[1641] = -25.413004753392578 - lats[1642] = -25.483303521520277 - lats[1643] = -25.553602289646051 - lats[1644] = -25.623901057769892 - lats[1645] = -25.694199825891793 - lats[1646] = -25.764498594011751 - lats[1647] = -25.834797362129745 - lats[1648] = -25.90509613024577 - lats[1649] = -25.975394898359827 - lats[1650] = -26.045693666471902 - lats[1651] = -26.115992434581983 - lats[1652] = -26.186291202690064 - lats[1653] = -26.256589970796135 - lats[1654] = -26.326888738900195 - lats[1655] = -26.397187507002222 - lats[1656] = -26.467486275102218 - lats[1657] = -26.53778504320017 - lats[1658] = -26.608083811296069 - lats[1659] = -26.678382579389908 - lats[1660] = -26.748681347481678 - lats[1661] = -26.818980115571364 - lats[1662] = -26.889278883658971 - lats[1663] = -26.959577651744471 - lats[1664] = -27.029876419827872 - lats[1665] = -27.100175187909159 - lats[1666] = -27.170473955988321 - lats[1667] = -27.240772724065348 - lats[1668] = -27.311071492140236 - lats[1669] = -27.381370260212968 - lats[1670] = -27.451669028283543 - lats[1671] = -27.521967796351948 - lats[1672] = -27.592266564418171 - lats[1673] = -27.662565332482213 - lats[1674] = -27.732864100544052 - lats[1675] = -27.803162868603682 - lats[1676] = -27.873461636661098 - lats[1677] = -27.94376040471629 - lats[1678] = -28.014059172769244 - lats[1679] = -28.084357940819952 - lats[1680] = -28.154656708868405 - lats[1681] = -28.224955476914594 - lats[1682] = -28.29525424495851 - lats[1683] = -28.365553013000145 - lats[1684] = -28.435851781039485 - lats[1685] = -28.506150549076519 - lats[1686] = -28.576449317111244 - lats[1687] = -28.646748085143642 - lats[1688] = -28.717046853173709 - lats[1689] = -28.787345621201432 - lats[1690] = -28.857644389226806 - lats[1691] = -28.927943157249814 - lats[1692] = -28.998241925270449 - lats[1693] = -29.068540693288696 - lats[1694] = -29.138839461304556 - lats[1695] = -29.209138229318015 - lats[1696] = -29.279436997329057 - lats[1697] = -29.349735765337677 - lats[1698] = -29.420034533343859 - lats[1699] = -29.490333301347597 - lats[1700] = -29.560632069348884 - lats[1701] = -29.630930837347698 - lats[1702] = -29.701229605344039 - lats[1703] = -29.771528373337894 - lats[1704] = -29.841827141329258 - lats[1705] = -29.91212590931811 - lats[1706] = -29.98242467730444 - lats[1707] = -30.052723445288244 - lats[1708] = -30.123022213269511 - lats[1709] = -30.19332098124822 - lats[1710] = -30.263619749224372 - lats[1711] = -30.333918517197947 - lats[1712] = -30.404217285168947 - lats[1713] = -30.47451605313735 - lats[1714] = -30.544814821103138 - lats[1715] = -30.615113589066322 - lats[1716] = -30.685412357026873 - lats[1717] = -30.755711124984781 - lats[1718] = -30.826009892940046 - lats[1719] = -30.896308660892647 - lats[1720] = -30.966607428842572 - lats[1721] = -31.036906196789811 - lats[1722] = -31.107204964734358 - lats[1723] = -31.177503732676204 - lats[1724] = -31.247802500615318 - lats[1725] = -31.318101268551715 - lats[1726] = -31.388400036485361 - lats[1727] = -31.458698804416255 - lats[1728] = -31.528997572344384 - lats[1729] = -31.599296340269738 - lats[1730] = -31.669595108192297 - lats[1731] = -31.739893876112063 - lats[1732] = -31.810192644029012 - lats[1733] = -31.880491411943137 - lats[1734] = -31.950790179854422 - lats[1735] = -32.021088947762863 - lats[1736] = -32.091387715668439 - lats[1737] = -32.161686483571145 - lats[1738] = -32.231985251470959 - lats[1739] = -32.302284019367875 - lats[1740] = -32.372582787261891 - lats[1741] = -32.442881555152965 - lats[1742] = -32.513180323041112 - lats[1743] = -32.583479090926325 - lats[1744] = -32.653777858808567 - lats[1745] = -32.724076626687825 - lats[1746] = -32.794375394564113 - lats[1747] = -32.864674162437396 - lats[1748] = -32.934972930307666 - lats[1749] = -33.005271698174909 - lats[1750] = -33.075570466039117 - lats[1751] = -33.145869233900278 - lats[1752] = -33.216168001758369 - lats[1753] = -33.286466769613391 - lats[1754] = -33.356765537465314 - lats[1755] = -33.42706430531414 - lats[1756] = -33.497363073159853 - lats[1757] = -33.567661841002426 - lats[1758] = -33.637960608841851 - lats[1759] = -33.708259376678136 - lats[1760] = -33.778558144511237 - lats[1761] = -33.848856912341155 - lats[1762] = -33.919155680167876 - lats[1763] = -33.989454447991392 - lats[1764] = -34.059753215811682 - lats[1765] = -34.130051983628725 - lats[1766] = -34.200350751442521 - lats[1767] = -34.270649519253041 - lats[1768] = -34.340948287060286 - lats[1769] = -34.411247054864234 - lats[1770] = -34.481545822664863 - lats[1771] = -34.551844590462188 - lats[1772] = -34.622143358256153 - lats[1773] = -34.692442126046771 - lats[1774] = -34.762740893834028 - lats[1775] = -34.833039661617903 - lats[1776] = -34.903338429398374 - lats[1777] = -34.973637197175435 - lats[1778] = -35.043935964949064 - lats[1779] = -35.114234732719261 - lats[1780] = -35.184533500486005 - lats[1781] = -35.254832268249267 - lats[1782] = -35.325131036009047 - lats[1783] = -35.395429803765317 - lats[1784] = -35.465728571518085 - lats[1785] = -35.536027339267314 - lats[1786] = -35.606326107012997 - lats[1787] = -35.676624874755113 - lats[1788] = -35.746923642493655 - lats[1789] = -35.817222410228595 - lats[1790] = -35.887521177959933 - lats[1791] = -35.957819945687639 - lats[1792] = -36.028118713411708 - lats[1793] = -36.098417481132117 - lats[1794] = -36.16871624884886 - lats[1795] = -36.239015016561908 - lats[1796] = -36.309313784271254 - lats[1797] = -36.379612551976876 - lats[1798] = -36.449911319678755 - lats[1799] = -36.520210087376888 - lats[1800] = -36.590508855071242 - lats[1801] = -36.660807622761808 - lats[1802] = -36.731106390448581 - lats[1803] = -36.801405158131523 - lats[1804] = -36.871703925810628 - lats[1805] = -36.942002693485883 - lats[1806] = -37.012301461157264 - lats[1807] = -37.082600228824752 - lats[1808] = -37.152898996488332 - lats[1809] = -37.223197764147997 - lats[1810] = -37.293496531803719 - lats[1811] = -37.363795299455489 - lats[1812] = -37.434094067103274 - lats[1813] = -37.504392834747065 - lats[1814] = -37.574691602386856 - lats[1815] = -37.644990370022605 - lats[1816] = -37.715289137654317 - lats[1817] = -37.785587905281965 - lats[1818] = -37.855886672905527 - lats[1819] = -37.926185440524989 - lats[1820] = -37.99648420814033 - lats[1821] = -38.066782975751536 - lats[1822] = -38.137081743358586 - lats[1823] = -38.20738051096145 - lats[1824] = -38.277679278560143 - lats[1825] = -38.347978046154608 - lats[1826] = -38.418276813744846 - lats[1827] = -38.488575581330842 - lats[1828] = -38.558874348912568 - lats[1829] = -38.629173116490001 - lats[1830] = -38.699471884063136 - lats[1831] = -38.769770651631937 - lats[1832] = -38.840069419196389 - lats[1833] = -38.910368186756479 - lats[1834] = -38.980666954312184 - lats[1835] = -39.050965721863491 - lats[1836] = -39.121264489410365 - lats[1837] = -39.191563256952804 - lats[1838] = -39.261862024490775 - lats[1839] = -39.332160792024254 - lats[1840] = -39.402459559553229 - lats[1841] = -39.472758327077692 - lats[1842] = -39.543057094597607 - lats[1843] = -39.613355862112947 - lats[1844] = -39.683654629623703 - lats[1845] = -39.753953397129855 - lats[1846] = -39.824252164631375 - lats[1847] = -39.894550932128247 - lats[1848] = -39.964849699620437 - lats[1849] = -40.035148467107952 - lats[1850] = -40.105447234590748 - lats[1851] = -40.175746002068806 - lats[1852] = -40.246044769542102 - lats[1853] = -40.316343537010617 - lats[1854] = -40.386642304474343 - lats[1855] = -40.456941071933244 - lats[1856] = -40.527239839387299 - lats[1857] = -40.597538606836487 - lats[1858] = -40.667837374280786 - lats[1859] = -40.738136141720176 - lats[1860] = -40.808434909154634 - lats[1861] = -40.878733676584126 - lats[1862] = -40.949032444008644 - lats[1863] = -41.01933121142816 - lats[1864] = -41.089629978842645 - lats[1865] = -41.159928746252085 - lats[1866] = -41.230227513656445 - lats[1867] = -41.300526281055724 - lats[1868] = -41.370825048449873 - lats[1869] = -41.441123815838885 - lats[1870] = -41.511422583222718 - lats[1871] = -41.581721350601363 - lats[1872] = -41.6520201179748 - lats[1873] = -41.722318885343 - lats[1874] = -41.792617652705921 - lats[1875] = -41.862916420063563 - lats[1876] = -41.933215187415882 - lats[1877] = -42.003513954762873 - lats[1878] = -42.073812722104492 - lats[1879] = -42.144111489440725 - lats[1880] = -42.214410256771551 - lats[1881] = -42.284709024096927 - lats[1882] = -42.355007791416853 - lats[1883] = -42.425306558731272 - lats[1884] = -42.495605326040177 - lats[1885] = -42.565904093343548 - lats[1886] = -42.63620286064134 - lats[1887] = -42.706501627933541 - lats[1888] = -42.776800395220121 - lats[1889] = -42.847099162501053 - lats[1890] = -42.917397929776307 - lats[1891] = -42.987696697045862 - lats[1892] = -43.057995464309691 - lats[1893] = -43.128294231567757 - lats[1894] = -43.19859299882004 - lats[1895] = -43.26889176606651 - lats[1896] = -43.339190533307139 - lats[1897] = -43.409489300541907 - lats[1898] = -43.479788067770777 - lats[1899] = -43.550086834993728 - lats[1900] = -43.620385602210717 - lats[1901] = -43.690684369421732 - lats[1902] = -43.760983136626741 - lats[1903] = -43.831281903825705 - lats[1904] = -43.9015806710186 - lats[1905] = -43.971879438205391 - lats[1906] = -44.042178205386072 - lats[1907] = -44.112476972560586 - lats[1908] = -44.182775739728925 - lats[1909] = -44.253074506891046 - lats[1910] = -44.323373274046915 - lats[1911] = -44.39367204119651 - lats[1912] = -44.463970808339802 - lats[1913] = -44.534269575476756 - lats[1914] = -44.604568342607337 - lats[1915] = -44.674867109731515 - lats[1916] = -44.745165876849271 - lats[1917] = -44.81546464396056 - lats[1918] = -44.885763411065362 - lats[1919] = -44.956062178163634 - lats[1920] = -45.026360945255341 - lats[1921] = -45.096659712340461 - lats[1922] = -45.166958479418959 - lats[1923] = -45.237257246490813 - lats[1924] = -45.30755601355596 - lats[1925] = -45.377854780614399 - lats[1926] = -45.448153547666081 - lats[1927] = -45.51845231471097 - lats[1928] = -45.588751081749038 - lats[1929] = -45.659049848780263 - lats[1930] = -45.729348615804589 - lats[1931] = -45.799647382821995 - lats[1932] = -45.869946149832437 - lats[1933] = -45.94024491683588 - lats[1934] = -46.01054368383231 - lats[1935] = -46.080842450821663 - lats[1936] = -46.151141217803925 - lats[1937] = -46.221439984779053 - lats[1938] = -46.291738751747012 - lats[1939] = -46.362037518707766 - lats[1940] = -46.432336285661272 - lats[1941] = -46.502635052607502 - lats[1942] = -46.572933819546414 - lats[1943] = -46.643232586477971 - lats[1944] = -46.713531353402139 - lats[1945] = -46.783830120318882 - lats[1946] = -46.85412888722815 - lats[1947] = -46.924427654129929 - lats[1948] = -46.994726421024154 - lats[1949] = -47.065025187910805 - lats[1950] = -47.13532395478984 - lats[1951] = -47.205622721661214 - lats[1952] = -47.275921488524894 - lats[1953] = -47.346220255380835 - lats[1954] = -47.416519022228997 - lats[1955] = -47.486817789069342 - lats[1956] = -47.557116555901828 - lats[1957] = -47.627415322726435 - lats[1958] = -47.697714089543084 - lats[1959] = -47.76801285635176 - lats[1960] = -47.838311623152421 - lats[1961] = -47.908610389945018 - lats[1962] = -47.978909156729507 - lats[1963] = -48.049207923505868 - lats[1964] = -48.119506690274015 - lats[1965] = -48.189805457033941 - lats[1966] = -48.260104223785596 - lats[1967] = -48.330402990528938 - lats[1968] = -48.400701757263917 - lats[1969] = -48.47100052399049 - lats[1970] = -48.541299290708608 - lats[1971] = -48.611598057418242 - lats[1972] = -48.681896824119335 - lats[1973] = -48.752195590811837 - lats[1974] = -48.822494357495721 - lats[1975] = -48.892793124170929 - lats[1976] = -48.963091890837418 - lats[1977] = -49.03339065749514 - lats[1978] = -49.103689424144044 - lats[1979] = -49.173988190784094 - lats[1980] = -49.244286957415234 - lats[1981] = -49.314585724037435 - lats[1982] = -49.384884490650613 - lats[1983] = -49.455183257254745 - lats[1984] = -49.525482023849783 - lats[1985] = -49.595780790435676 - lats[1986] = -49.66607955701236 - lats[1987] = -49.736378323579807 - lats[1988] = -49.80667709013796 - lats[1989] = -49.876975856686762 - lats[1990] = -49.947274623226157 - lats[1991] = -50.017573389756123 - lats[1992] = -50.087872156276575 - lats[1993] = -50.158170922787484 - lats[1994] = -50.228469689288779 - lats[1995] = -50.298768455780426 - lats[1996] = -50.369067222262359 - lats[1997] = -50.439365988734544 - lats[1998] = -50.509664755196901 - lats[1999] = -50.579963521649397 - lats[2000] = -50.650262288091959 - lats[2001] = -50.720561054524559 - lats[2002] = -50.790859820947119 - lats[2003] = -50.86115858735959 - lats[2004] = -50.931457353761914 - lats[2005] = -51.001756120154049 - lats[2006] = -51.072054886535909 - lats[2007] = -51.14235365290746 - lats[2008] = -51.21265241926865 - lats[2009] = -51.282951185619417 - lats[2010] = -51.353249951959683 - lats[2011] = -51.423548718289396 - lats[2012] = -51.493847484608516 - lats[2013] = -51.56414625091697 - lats[2014] = -51.634445017214695 - lats[2015] = -51.704743783501634 - lats[2016] = -51.775042549777737 - lats[2017] = -51.845341316042933 - lats[2018] = -51.915640082297152 - lats[2019] = -51.985938848540336 - lats[2020] = -52.056237614772435 - lats[2021] = -52.126536380993372 - lats[2022] = -52.196835147203096 - lats[2023] = -52.26713391340153 - lats[2024] = -52.337432679588609 - lats[2025] = -52.407731445764284 - lats[2026] = -52.478030211928477 - lats[2027] = -52.548328978081123 - lats[2028] = -52.618627744222159 - lats[2029] = -52.688926510351514 - lats[2030] = -52.759225276469131 - lats[2031] = -52.829524042574917 - lats[2032] = -52.899822808668837 - lats[2033] = -52.970121574750792 - lats[2034] = -53.040420340820731 - lats[2035] = -53.110719106878584 - lats[2036] = -53.181017872924265 - lats[2037] = -53.251316638957725 - lats[2038] = -53.321615404978871 - lats[2039] = -53.391914170987633 - lats[2040] = -53.462212936983953 - lats[2041] = -53.53251170296776 - lats[2042] = -53.602810468938962 - lats[2043] = -53.673109234897495 - lats[2044] = -53.743408000843282 - lats[2045] = -53.813706766776235 - lats[2046] = -53.884005532696307 - lats[2047] = -53.954304298603383 - lats[2048] = -54.024603064497434 - lats[2049] = -54.094901830378333 - lats[2050] = -54.165200596246031 - lats[2051] = -54.235499362100448 - lats[2052] = -54.305798127941479 - lats[2053] = -54.376096893769081 - lats[2054] = -54.446395659583146 - lats[2055] = -54.516694425383605 - lats[2056] = -54.586993191170357 - lats[2057] = -54.657291956943347 - lats[2058] = -54.727590722702473 - lats[2059] = -54.797889488447652 - lats[2060] = -54.868188254178797 - lats[2061] = -54.938487019895831 - lats[2062] = -55.008785785598668 - lats[2063] = -55.07908455128721 - lats[2064] = -55.149383316961377 - lats[2065] = -55.219682082621084 - lats[2066] = -55.289980848266232 - lats[2067] = -55.360279613896743 - lats[2068] = -55.430578379512511 - lats[2069] = -55.500877145113449 - lats[2070] = -55.571175910699488 - lats[2071] = -55.641474676270505 - lats[2072] = -55.711773441826416 - lats[2073] = -55.782072207367136 - lats[2074] = -55.852370972892551 - lats[2075] = -55.922669738402583 - lats[2076] = -55.992968503897131 - lats[2077] = -56.063267269376091 - lats[2078] = -56.133566034839362 - lats[2079] = -56.203864800286865 - lats[2080] = -56.274163565718467 - lats[2081] = -56.34446233113411 - lats[2082] = -56.41476109653366 - lats[2083] = -56.485059861917016 - lats[2084] = -56.555358627284086 - lats[2085] = -56.625657392634771 - lats[2086] = -56.695956157968951 - lats[2087] = -56.766254923286517 - lats[2088] = -56.836553688587379 - lats[2089] = -56.90685245387143 - lats[2090] = -56.977151219138541 - lats[2091] = -57.047449984388614 - lats[2092] = -57.117748749621541 - lats[2093] = -57.188047514837208 - lats[2094] = -57.258346280035504 - lats[2095] = -57.328645045216312 - lats[2096] = -57.398943810379521 - lats[2097] = -57.469242575525016 - lats[2098] = -57.539541340652676 - lats[2099] = -57.60984010576238 - lats[2100] = -57.680138870854037 - lats[2101] = -57.75043763592749 - lats[2102] = -57.820736400982646 - lats[2103] = -57.891035166019364 - lats[2104] = -57.961333931037537 - lats[2105] = -58.031632696037022 - lats[2106] = -58.101931461017728 - lats[2107] = -58.172230225979497 - lats[2108] = -58.242528990922203 - lats[2109] = -58.312827755845746 - lats[2110] = -58.383126520749968 - lats[2111] = -58.453425285634758 - lats[2112] = -58.523724050499972 - lats[2113] = -58.594022815345468 - lats[2114] = -58.664321580171141 - lats[2115] = -58.73462034497684 - lats[2116] = -58.804919109762423 - lats[2117] = -58.875217874527763 - lats[2118] = -58.945516639272725 - lats[2119] = -59.015815403997145 - lats[2120] = -59.086114168700909 - lats[2121] = -59.156412933383855 - lats[2122] = -59.226711698045854 - lats[2123] = -59.29701046268675 - lats[2124] = -59.3673092273064 - lats[2125] = -59.43760799190467 - lats[2126] = -59.507906756481383 - lats[2127] = -59.578205521036402 - lats[2128] = -59.64850428556958 - lats[2129] = -59.718803050080759 - lats[2130] = -59.78910181456979 - lats[2131] = -59.859400579036503 - lats[2132] = -59.929699343480763 - lats[2133] = -59.999998107902378 - lats[2134] = -60.070296872301235 - lats[2135] = -60.140595636677112 - lats[2136] = -60.21089440102989 - lats[2137] = -60.28119316535939 - lats[2138] = -60.35149192966545 - lats[2139] = -60.421790693947884 - lats[2140] = -60.492089458206543 - lats[2141] = -60.562388222441243 - lats[2142] = -60.632686986651805 - lats[2143] = -60.702985750838074 - lats[2144] = -60.773284514999872 - lats[2145] = -60.843583279137007 - lats[2146] = -60.913882043249295 - lats[2147] = -60.984180807336578 - lats[2148] = -61.054479571398652 - lats[2149] = -61.124778335435344 - lats[2150] = -61.195077099446451 - lats[2151] = -61.265375863431785 - lats[2152] = -61.335674627391185 - lats[2153] = -61.405973391324409 - lats[2154] = -61.476272155231321 - lats[2155] = -61.546570919111666 - lats[2156] = -61.616869682965287 - lats[2157] = -61.687168446791986 - lats[2158] = -61.757467210591535 - lats[2159] = -61.827765974363729 - lats[2160] = -61.898064738108381 - lats[2161] = -61.968363501825259 - lats[2162] = -62.038662265514176 - lats[2163] = -62.108961029174914 - lats[2164] = -62.179259792807258 - lats[2165] = -62.249558556410982 - lats[2166] = -62.319857319985871 - lats[2167] = -62.3901560835317 - lats[2168] = -62.460454847048261 - lats[2169] = -62.530753610535321 - lats[2170] = -62.60105237399263 - lats[2171] = -62.67135113741999 - lats[2172] = -62.741649900817137 - lats[2173] = -62.811948664183866 - lats[2174] = -62.882247427519928 - lats[2175] = -62.952546190825068 - lats[2176] = -63.022844954099064 - lats[2177] = -63.093143717341647 - lats[2178] = -63.163442480552604 - lats[2179] = -63.23374124373165 - lats[2180] = -63.304040006878537 - lats[2181] = -63.374338769993031 - lats[2182] = -63.444637533074854 - lats[2183] = -63.514936296123757 - lats[2184] = -63.585235059139464 - lats[2185] = -63.655533822121711 - lats[2186] = -63.725832585070251 - lats[2187] = -63.796131347984762 - lats[2188] = -63.866430110865004 - lats[2189] = -63.93672887371072 - lats[2190] = -64.00702763652157 - lats[2191] = -64.07732639929732 - lats[2192] = -64.147625162037642 - lats[2193] = -64.21792392474228 - lats[2194] = -64.288222687410922 - lats[2195] = -64.358521450043284 - lats[2196] = -64.428820212639039 - lats[2197] = -64.499118975197902 - lats[2198] = -64.569417737719576 - lats[2199] = -64.639716500203733 - lats[2200] = -64.710015262650074 - lats[2201] = -64.780314025058246 - lats[2202] = -64.850612787427963 - lats[2203] = -64.920911549758912 - lats[2204] = -64.991210312050711 - lats[2205] = -65.061509074303089 - lats[2206] = -65.131807836515677 - lats[2207] = -65.202106598688133 - lats[2208] = -65.272405360820116 - lats[2209] = -65.342704122911286 - lats[2210] = -65.413002884961315 - lats[2211] = -65.483301646969792 - lats[2212] = -65.553600408936404 - lats[2213] = -65.623899170860767 - lats[2214] = -65.694197932742526 - lats[2215] = -65.764496694581283 - lats[2216] = -65.834795456376696 - lats[2217] = -65.905094218128355 - lats[2218] = -65.975392979835888 - lats[2219] = -66.045691741498899 - lats[2220] = -66.115990503117033 - lats[2221] = -66.186289264689833 - lats[2222] = -66.256588026216932 - lats[2223] = -66.326886787697887 - lats[2224] = -66.397185549132331 - lats[2225] = -66.467484310519808 - lats[2226] = -66.537783071859891 - lats[2227] = -66.608081833152212 - lats[2228] = -66.678380594396273 - lats[2229] = -66.748679355591662 - lats[2230] = -66.818978116737924 - lats[2231] = -66.889276877834618 - lats[2232] = -66.95957563888129 - lats[2233] = -67.029874399877471 - lats[2234] = -67.100173160822706 - lats[2235] = -67.170471921716526 - lats[2236] = -67.240770682558434 - lats[2237] = -67.311069443347961 - lats[2238] = -67.381368204084609 - lats[2239] = -67.451666964767895 - lats[2240] = -67.521965725397308 - lats[2241] = -67.592264485972336 - lats[2242] = -67.662563246492482 - lats[2243] = -67.732862006957205 - lats[2244] = -67.803160767365966 - lats[2245] = -67.873459527718282 - lats[2246] = -67.943758288013555 - lats[2247] = -68.014057048251274 - lats[2248] = -68.084355808430871 - lats[2249] = -68.154654568551791 - lats[2250] = -68.224953328613438 - lats[2251] = -68.295252088615257 - lats[2252] = -68.365550848556666 - lats[2253] = -68.435849608437067 - lats[2254] = -68.506148368255865 - lats[2255] = -68.576447128012447 - lats[2256] = -68.646745887706189 - lats[2257] = -68.717044647336493 - lats[2258] = -68.787343406902693 - lats[2259] = -68.85764216640419 - lats[2260] = -68.927940925840304 - lats[2261] = -68.998239685210365 - lats[2262] = -69.068538444513763 - lats[2263] = -69.138837203749759 - lats[2264] = -69.209135962917699 - lats[2265] = -69.279434722016902 - lats[2266] = -69.349733481046613 - lats[2267] = -69.420032240006194 - lats[2268] = -69.490330998894862 - lats[2269] = -69.560629757711908 - lats[2270] = -69.630928516456592 - lats[2271] = -69.701227275128161 - lats[2272] = -69.771526033725834 - lats[2273] = -69.841824792248843 - lats[2274] = -69.912123550696421 - lats[2275] = -69.982422309067744 - lats[2276] = -70.052721067362043 - lats[2277] = -70.123019825578467 - lats[2278] = -70.193318583716191 - lats[2279] = -70.263617341774406 - lats[2280] = -70.333916099752187 - lats[2281] = -70.404214857648739 - lats[2282] = -70.474513615463138 - lats[2283] = -70.544812373194532 - lats[2284] = -70.615111130841967 - lats[2285] = -70.685409888404578 - lats[2286] = -70.755708645881384 - lats[2287] = -70.826007403271475 - lats[2288] = -70.896306160573886 - lats[2289] = -70.966604917787635 - lats[2290] = -71.036903674911756 - lats[2291] = -71.107202431945211 - lats[2292] = -71.177501188887007 - lats[2293] = -71.247799945736105 - lats[2294] = -71.318098702491469 - lats[2295] = -71.388397459152031 - lats[2296] = -71.458696215716685 - lats[2297] = -71.528994972184378 - lats[2298] = -71.599293728553988 - lats[2299] = -71.669592484824364 - lats[2300] = -71.739891240994368 - lats[2301] = -71.810189997062835 - lats[2302] = -71.880488753028587 - lats[2303] = -71.950787508890414 - lats[2304] = -72.02108626464711 - lats[2305] = -72.091385020297409 - lats[2306] = -72.161683775840089 - lats[2307] = -72.231982531273843 - lats[2308] = -72.302281286597392 - lats[2309] = -72.3725800418094 - lats[2310] = -72.442878796908545 - lats[2311] = -72.513177551893421 - lats[2312] = -72.583476306762691 - lats[2313] = -72.653775061514935 - lats[2314] = -72.724073816148703 - lats[2315] = -72.794372570662574 - lats[2316] = -72.864671325055056 - lats[2317] = -72.934970079324657 - lats[2318] = -73.005268833469799 - lats[2319] = -73.075567587489019 - lats[2320] = -73.145866341380668 - lats[2321] = -73.216165095143182 - lats[2322] = -73.2864638487749 - lats[2323] = -73.356762602274188 - lats[2324] = -73.427061355639339 - lats[2325] = -73.497360108868662 - lats[2326] = -73.567658861960396 - lats[2327] = -73.637957614912779 - lats[2328] = -73.70825636772399 - lats[2329] = -73.778555120392184 - lats[2330] = -73.848853872915541 - lats[2331] = -73.919152625292114 - lats[2332] = -73.98945137751997 - lats[2333] = -74.059750129597163 - lats[2334] = -74.13004888152166 - lats[2335] = -74.200347633291472 - lats[2336] = -74.270646384904481 - lats[2337] = -74.340945136358584 - lats[2338] = -74.411243887651622 - lats[2339] = -74.481542638781434 - lats[2340] = -74.551841389745761 - lats[2341] = -74.622140140542356 - lats[2342] = -74.692438891168877 - lats[2343] = -74.762737641622991 - lats[2344] = -74.833036391902269 - lats[2345] = -74.903335142004323 - lats[2346] = -74.973633891926625 - lats[2347] = -75.043932641666672 - lats[2348] = -75.114231391221821 - lats[2349] = -75.184530140589501 - lats[2350] = -75.254828889766983 - lats[2351] = -75.325127638751567 - lats[2352] = -75.395426387540439 - lats[2353] = -75.465725136130786 - lats[2354] = -75.536023884519707 - lats[2355] = -75.60632263270422 - lats[2356] = -75.67662138068134 - lats[2357] = -75.746920128447996 - lats[2358] = -75.81721887600105 - lats[2359] = -75.887517623337317 - lats[2360] = -75.957816370453543 - lats[2361] = -76.028115117346374 - lats[2362] = -76.098413864012443 - lats[2363] = -76.16871261044831 - lats[2364] = -76.239011356650423 - lats[2365] = -76.3093101026152 - lats[2366] = -76.379608848338933 - lats[2367] = -76.449907593817869 - lats[2368] = -76.520206339048215 - lats[2369] = -76.59050508402602 - lats[2370] = -76.660803828747362 - lats[2371] = -76.731102573208048 - lats[2372] = -76.801401317404 - lats[2373] = -76.871700061330955 - lats[2374] = -76.941998804984564 - lats[2375] = -77.012297548360323 - lats[2376] = -77.082596291453768 - lats[2377] = -77.15289503426024 - lats[2378] = -77.22319377677502 - lats[2379] = -77.293492518993247 - lats[2380] = -77.363791260909963 - lats[2381] = -77.434090002520122 - lats[2382] = -77.504388743818524 - lats[2383] = -77.574687484799924 - lats[2384] = -77.644986225458879 - lats[2385] = -77.71528496578982 - lats[2386] = -77.785583705787161 - lats[2387] = -77.855882445445019 - lats[2388] = -77.926181184757539 - lats[2389] = -77.996479923718596 - lats[2390] = -78.066778662322022 - lats[2391] = -78.137077400561424 - lats[2392] = -78.207376138430348 - lats[2393] = -78.277674875922045 - lats[2394] = -78.347973613029708 - lats[2395] = -78.418272349746417 - lats[2396] = -78.488571086064923 - lats[2397] = -78.558869821977908 - lats[2398] = -78.629168557477882 - lats[2399] = -78.699467292557102 - lats[2400] = -78.769766027207638 - lats[2401] = -78.840064761421445 - lats[2402] = -78.910363495190211 - lats[2403] = -78.980662228505423 - lats[2404] = -79.050960961358285 - lats[2405] = -79.121259693739859 - lats[2406] = -79.191558425640977 - lats[2407] = -79.261857157052191 - lats[2408] = -79.332155887963822 - lats[2409] = -79.402454618365894 - lats[2410] = -79.472753348248219 - lats[2411] = -79.543052077600308 - lats[2412] = -79.61335080641139 - lats[2413] = -79.683649534670437 - lats[2414] = -79.753948262366038 - lats[2415] = -79.824246989486554 - lats[2416] = -79.894545716019948 - lats[2417] = -79.9648444419539 - lats[2418] = -80.035143167275749 - lats[2419] = -80.105441891972376 - lats[2420] = -80.175740616030438 - lats[2421] = -80.246039339436052 - lats[2422] = -80.316338062175078 - lats[2423] = -80.386636784232863 - lats[2424] = -80.456935505594302 - lats[2425] = -80.527234226243991 - lats[2426] = -80.59753294616587 - lats[2427] = -80.667831665343556 - lats[2428] = -80.73813038376008 - lats[2429] = -80.808429101397948 - lats[2430] = -80.878727818239184 - lats[2431] = -80.949026534265244 - lats[2432] = -81.019325249456955 - lats[2433] = -81.089623963794551 - lats[2434] = -81.159922677257711 - lats[2435] = -81.230221389825374 - lats[2436] = -81.300520101475826 - lats[2437] = -81.370818812186627 - lats[2438] = -81.441117521934686 - lats[2439] = -81.511416230696042 - lats[2440] = -81.581714938445955 - lats[2441] = -81.652013645158945 - lats[2442] = -81.722312350808508 - lats[2443] = -81.792611055367345 - lats[2444] = -81.862909758807191 - lats[2445] = -81.933208461098829 - lats[2446] = -82.003507162211946 - lats[2447] = -82.073805862115165 - lats[2448] = -82.144104560776 - lats[2449] = -82.214403258160871 - lats[2450] = -82.284701954234833 - lats[2451] = -82.355000648961692 - lats[2452] = -82.425299342304029 - lats[2453] = -82.495598034222837 - lats[2454] = -82.56589672467787 - lats[2455] = -82.63619541362705 - lats[2456] = -82.706494101026948 - lats[2457] = -82.77679278683226 - lats[2458] = -82.84709147099602 - lats[2459] = -82.917390153469313 - lats[2460] = -82.987688834201322 - lats[2461] = -83.057987513139125 - lats[2462] = -83.128286190227698 - lats[2463] = -83.198584865409657 - lats[2464] = -83.268883538625232 - lats[2465] = -83.339182209812321 - lats[2466] = -83.409480878905782 - lats[2467] = -83.479779545838113 - lats[2468] = -83.550078210538487 - lats[2469] = -83.620376872933264 - lats[2470] = -83.690675532945292 - lats[2471] = -83.760974190494011 - lats[2472] = -83.831272845495249 - lats[2473] = -83.901571497860914 - lats[2474] = -83.971870147498763 - lats[2475] = -84.042168794312317 - lats[2476] = -84.112467438200326 - lats[2477] = -84.18276607905679 - lats[2478] = -84.253064716770425 - lats[2479] = -84.323363351224444 - lats[2480] = -84.393661982296322 - lats[2481] = -84.463960609857125 - lats[2482] = -84.534259233771479 - lats[2483] = -84.604557853896708 - lats[2484] = -84.674856470082915 - lats[2485] = -84.745155082171991 - lats[2486] = -84.81545368999717 - lats[2487] = -84.885752293382765 - lats[2488] = -84.95605089214304 - lats[2489] = -85.026349486081983 - lats[2490] = -85.09664807499216 - lats[2491] = -85.16694665865414 - lats[2492] = -85.237245236835548 - lats[2493] = -85.307543809290152 - lats[2494] = -85.377842375756586 - lats[2495] = -85.448140935957483 - lats[2496] = -85.518439489597966 - lats[2497] = -85.588738036364362 - lats[2498] = -85.659036575922883 - lats[2499] = -85.729335107917464 - lats[2500] = -85.799633631968391 - lats[2501] = -85.869932147670127 - lats[2502] = -85.940230654588888 - lats[2503] = -86.010529152260403 - lats[2504] = -86.080827640187209 - lats[2505] = -86.151126117835304 - lats[2506] = -86.221424584631109 - lats[2507] = -86.291723039957418 - lats[2508] = -86.362021483149363 - lats[2509] = -86.432319913489792 - lats[2510] = -86.502618330203831 - lats[2511] = -86.572916732453024 - lats[2512] = -86.643215119328573 - lats[2513] = -86.713513489844246 - lats[2514] = -86.783811842927179 - lats[2515] = -86.854110177408927 - lats[2516] = -86.924408492014166 - lats[2517] = -86.994706785348129 - lats[2518] = -87.065005055882821 - lats[2519] = -87.135303301939786 - lats[2520] = -87.205601521672108 - lats[2521] = -87.275899713041966 - lats[2522] = -87.346197873795816 - lats[2523] = -87.416496001434894 - lats[2524] = -87.486794093180748 - lats[2525] = -87.557092145935584 - lats[2526] = -87.627390156234085 - lats[2527] = -87.697688120188062 - lats[2528] = -87.767986033419561 - lats[2529] = -87.838283890981543 - lats[2530] = -87.908581687261687 - lats[2531] = -87.978879415867283 - lats[2532] = -88.049177069484486 - lats[2533] = -88.119474639706425 - lats[2534] = -88.189772116820762 - lats[2535] = -88.26006948954614 - lats[2536] = -88.330366744702559 - lats[2537] = -88.40066386679355 - lats[2538] = -88.470960837474877 - lats[2539] = -88.541257634868515 - lats[2540] = -88.611554232668382 - lats[2541] = -88.681850598961759 - lats[2542] = -88.752146694650691 - lats[2543] = -88.822442471310097 - lats[2544] = -88.892737868230952 - lats[2545] = -88.96303280826325 - lats[2546] = -89.033327191845927 - lats[2547] = -89.103620888238879 - lats[2548] = -89.173913722284126 - lats[2549] = -89.24420545380525 - lats[2550] = -89.314495744374256 - lats[2551] = -89.3847841013921 - lats[2552] = -89.45506977912261 - lats[2553] = -89.525351592371393 - lats[2554] = -89.595627537554492 - lats[2555] = -89.6658939412157 - lats[2556] = -89.736143271609578 - lats[2557] = -89.806357319542244 - lats[2558] = -89.876478353332288 - lats[2559] = -89.946187715665616 - return lats - - def first_axis_vals(self): - if self._resolution == 1280: - return self.get_precomputed_values_N1280() - else: - precision = 1.0e-14 - nval = self._resolution * 2 - rad2deg = 180 / math.pi - convval = 1 - ((2 / math.pi) * (2 / math.pi)) * 0.25 - vals = self.gauss_first_guess() - new_vals = [0] * nval - denom = math.sqrt(((nval + 0.5) * (nval + 0.5)) + convval) - for jval in range(self._resolution): - root = math.cos(vals[jval] / denom) - conv = 1 - while abs(conv) >= precision: - mem2 = 1 - mem1 = root - for legi in range(nval): - legfonc = ((2.0 * (legi + 1) - 1.0) * root * mem1 - legi * mem2) / (legi + 1) - mem2 = mem1 - mem1 = legfonc - conv = legfonc / ((nval * (mem2 - root * legfonc)) / (1.0 - (root * root))) - root = root - conv - # add maybe a max iter here to make sure we converge at some point - new_vals[jval] = math.asin(root) * rad2deg - new_vals[nval - 1 - jval] = -new_vals[jval] - return new_vals - - def map_first_axis(self, lower, upper): - axis_lines = self._first_axis_vals - end_idx = bisect_left_cmp(axis_lines, lower, cmp=lambda x, y: x > y) + 1 - start_idx = bisect_right_cmp(axis_lines, upper, cmp=lambda x, y: x > y) - return_vals = axis_lines[start_idx:end_idx] - return return_vals - - def second_axis_vals(self, first_val): - first_axis_vals = self._first_axis_vals - tol = 1e-10 - first_idx = bisect_left_cmp(first_axis_vals, first_val[0] - tol, cmp=lambda x, y: x > y) - if first_idx >= self._resolution: - first_idx = (2 * self._resolution) - 1 - first_idx - first_idx = first_idx + 1 - npoints = 4 * first_idx + 16 - second_axis_spacing = 360 / npoints - second_axis_vals = [i * second_axis_spacing for i in range(npoints)] - return second_axis_vals - - def second_axis_spacing(self, first_val): - first_axis_vals = self._first_axis_vals - tol = 1e-10 - _first_idx = bisect_left_cmp(first_axis_vals, first_val[0] - tol, cmp=lambda x, y: x > y) - first_idx = _first_idx - if first_idx >= self._resolution: - first_idx = (2 * self._resolution) - 1 - first_idx - first_idx = first_idx + 1 - npoints = 4 * first_idx + 16 - second_axis_spacing = 360 / npoints - return (second_axis_spacing, _first_idx + 1) - - def map_second_axis(self, first_val, lower, upper): - second_axis_spacing, first_idx = self.second_axis_spacing(first_val) - start_idx = int(lower / second_axis_spacing) - end_idx = int(upper / second_axis_spacing) + 1 - return_vals = [i * second_axis_spacing for i in range(start_idx, end_idx)] - return return_vals - - def axes_idx_to_octahedral_idx(self, first_idx, second_idx): - # NOTE: for now this takes ~2e-4s per point, so taking significant time -> for 20k points, takes 4s - # Would it be better to store a dictionary of first_idx with cumulative number of points on that idx? - # Because this is what we are doing here, but we are calculating for each point... - # But then this would only work for special grid resolutions, so need to do like a O1280 version of this - - # NOTE: OR somehow cache this for a given first_idx and then only modify the axis idx for second_idx when the - # first_idx changes - octa_idx = self._first_idx_map[first_idx - 1] + second_idx - return octa_idx - - def create_first_idx_map(self): - first_idx_list = {} - idx = 0 - for i in range(2 * self._resolution): - first_idx_list[i] = idx - if i <= self._resolution - 1: - idx += 20 + 4 * i - else: - i = i - self._resolution + 1 - if i == 1: - idx += 16 + 4 * self._resolution - else: - i = i - 1 - idx += 16 + 4 * (self._resolution - i) - return first_idx_list - - def find_second_axis_idx(self, first_val, second_val): - (second_axis_spacing, first_idx) = self.second_axis_spacing(first_val) - tol = 1e-8 - if second_val[0] / second_axis_spacing > int(second_val[0] / second_axis_spacing) + 1 - tol: - second_idx = int(second_val[0] / second_axis_spacing) + 1 - else: - second_idx = int(second_val[0] / second_axis_spacing) - return (first_idx, second_idx) - - def unmap(self, first_val, second_val, unmapped_idx=None): - (first_idx, second_idx) = self.find_second_axis_idx(first_val, second_val) - octahedral_index = self.axes_idx_to_octahedral_idx(first_idx, second_idx) - return octahedral_index - - class OctahedralGridMapper(DatacubeMapper): def __init__(self, base_axis, mapped_axes, resolution, md5_hash=None, local_area=[], axis_reversed=None): # TODO: if local area is not empty list, raise NotImplemented diff --git a/polytope_feature/engine/engine.py b/polytope_feature/engine/engine.py index 403718755..d9674aae1 100644 --- a/polytope_feature/engine/engine.py +++ b/polytope_feature/engine/engine.py @@ -1,26 +1,12 @@ from abc import abstractmethod -from ..datacube.datacube_axis import UnsliceableDatacubeAxis from typing import List from ..datacube.backends.datacube import Datacube +from ..datacube.datacube_axis import UnsliceableDatacubeAxis from ..datacube.tensor_index_tree import TensorIndexTree from ..shapes import ConvexPolytope -# class Engine: -# def __init__(self): -# pass - -# def extract(self, datacube: Datacube, polytopes: List[ConvexPolytope]) -> TensorIndexTree: -# pass - -# @staticmethod -# def default(): -# from .hullslicer import HullSlicer - -# return HullSlicer() - - class Engine: def __init__(self, engine_options=None): if engine_options is None: diff --git a/polytope_feature/engine/hullslicer.py b/polytope_feature/engine/hullslicer.py index 49262ffa0..0950a749b 100644 --- a/polytope_feature/engine/hullslicer.py +++ b/polytope_feature/engine/hullslicer.py @@ -5,13 +5,10 @@ import scipy.spatial from ..shapes import ConvexPolytope -from ..utility.combinatorics import group, tensor_product from ..utility.exceptions import UnsliceableShapeError from ..utility.geometry import lerp -from ..utility.list_tools import argmax, argmin, unique +from ..utility.list_tools import argmax, argmin from .engine import Engine -from ..datacube.backends.datacube import Datacube -from typing import List class HullSlicer(Engine): diff --git a/polytope_feature/options.py b/polytope_feature/options.py index 6be164d4d..d309c0bf3 100644 --- a/polytope_feature/options.py +++ b/polytope_feature/options.py @@ -1,77 +1,10 @@ -from conflator import ConfigModel -import argparse from abc import ABC from typing import Dict, List, Literal, Optional, Union -from conflator import ConfigModel, Conflator +from conflator import ConfigModel from pydantic import ConfigDict -class PolytopeOptions(ABC): - @staticmethod - def get_polytope_options(options): - class TransformationConfig(ConfigModel): - model_config = ConfigDict(extra="forbid") - name: str = "" - - class CyclicConfig(TransformationConfig): - name: Literal["cyclic"] - range: List[float] = [0] - - class MapperConfig(TransformationConfig): - name: Literal["mapper"] - type: str = "" - resolution: Optional[Union[int, List[int]]] = 0 - axes: List[str] = [""] - local: Optional[List[float]] = None - - class ReverseConfig(TransformationConfig): - name: Literal["reverse"] - is_reverse: bool = False - - class TypeChangeConfig(TransformationConfig): - name: Literal["type_change"] - type: str = "int" - - class MergeConfig(TransformationConfig): - name: Literal["merge"] - other_axis: str = "" - linkers: List[str] = [""] - - action_subclasses_union = Union[CyclicConfig, MapperConfig, ReverseConfig, TypeChangeConfig, MergeConfig] - - class AxisConfig(ConfigModel): - axis_name: str = "" - transformations: list[action_subclasses_union] - - path_subclasses_union = Union[str, int, float] - - class GribJumpAxesConfig(ConfigModel): - axis_name: str = "" - values: List[str] = [""] - - class Config(ConfigModel): - axis_config: List[AxisConfig] = [] - compressed_axes_config: List[str] = [""] - pre_path: Optional[Dict[str, path_subclasses_union]] = {} - alternative_axes: List[GribJumpAxesConfig] = [] - - parser = argparse.ArgumentParser(allow_abbrev=False) - config_options = Conflator(app_name="polytope", model=Config, cli=False, argparser=parser).load() - config_options = Config( - axis_config=options.get("axis_config", []), - compressed_axes_config=options.get("compressed_axes_config", [""]), - pre_path=options.get("pre_path", {}), - alternative_axes=options.get("alternative_axes", []), - ) - axis_config = config_options.axis_config - compressed_axes_config = config_options.compressed_axes_config - pre_path = config_options.pre_path - alternative_axes = config_options.alternative_axes - - return (axis_config, compressed_axes_config, pre_path, alternative_axes) - - class TransformationConfig(ConfigModel): model_config = ConfigDict(extra="forbid") name: str = "" @@ -85,7 +18,7 @@ class CyclicConfig(TransformationConfig): class MapperConfig(TransformationConfig): name: Literal["mapper"] type: str = "" - resolution: Union[int, List[int]] = 0 + resolution: Optional[Union[int, List[int]]] = 0 axes: List[str] = [""] md5_hash: Optional[str] = None local: Optional[List[float]] = None @@ -128,7 +61,7 @@ class Config(ConfigModel): axis_config: List[AxisConfig] = [] compressed_axes_config: List[str] = [""] pre_path: Optional[Dict[str, path_subclasses_union]] = {} - alternative_axes: List[GribJumpAxesConfig] = [] + alternative_axes: Optional[List[GribJumpAxesConfig]] = [] class PolytopeOptions(ABC): diff --git a/polytope_feature/polytope.py b/polytope_feature/polytope.py index 9502a6b30..909b2f584 100644 --- a/polytope_feature/polytope.py +++ b/polytope_feature/polytope.py @@ -1,16 +1,15 @@ -from .utility.combinatorics import group, tensor_product -from .utility.list_tools import unique -from .engine.quadtree_slicer import QuadTreeSlicer -from .engine.hullslicer import HullSlicer -from .datacube.tensor_index_tree import TensorIndexTree -from .datacube.datacube_axis import UnsliceableDatacubeAxis -from .datacube.backends.datacube import Datacube -import logging from typing import List +from .datacube.backends.datacube import Datacube +from .datacube.datacube_axis import UnsliceableDatacubeAxis +from .datacube.tensor_index_tree import TensorIndexTree +from .engine.hullslicer import HullSlicer +from .engine.quadtree_slicer import QuadTreeSlicer from .options import PolytopeOptions from .shapes import ConvexPolytope +from .utility.combinatorics import group, tensor_product from .utility.exceptions import AxisOverdefinedError +from .utility.list_tools import unique class Request: @@ -45,39 +44,6 @@ def __repr__(self): return return_str -# class Polytope: -# def __init__(self, datacube, engine=None, options=None, context=None): -# from .datacube import Datacube -# from .engine import Engine - -# if options is None: -# options = {} - -# axis_options, compressed_axes_options, config, alternative_axes = PolytopeOptions.get_polytope_options(options) - -# self.context = context - -# self.datacube = Datacube.create( -# datacube, config, axis_options, compressed_axes_options, alternative_axes, self.context -# ) -# self.engine = engine if engine is not None else Engine.default() -# self.time = 0 - -# def slice(self, polytopes: List[ConvexPolytope]): -# """Low-level API which takes a polytope geometry object and uses it to slice the datacube""" -# return self.engine.extract(self.datacube, polytopes) - -# def retrieve(self, request: Request, method="standard"): -# """Higher-level API which takes a request and uses it to slice the datacube""" -# logging.info("Starting request for %s ", self.context) -# self.datacube.check_branching_axes(request) -# request_tree = self.engine.extract(self.datacube, request.polytopes()) -# logging.info("Created request tree for %s ", self.context) -# self.datacube.get(request_tree, self.context) -# logging.info("Retrieved data for %s ", self.context) -# return request_tree - - class Polytope: def __init__( self, diff --git a/tests/test_cyclic_axis_slicer_not_0.py b/tests/test_cyclic_axis_slicer_not_0.py index 4940a2d97..9a8effcc4 100644 --- a/tests/test_cyclic_axis_slicer_not_0.py +++ b/tests/test_cyclic_axis_slicer_not_0.py @@ -2,7 +2,6 @@ import pandas as pd import xarray as xr -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select diff --git a/tests/test_cyclic_axis_slicing.py b/tests/test_cyclic_axis_slicing.py index 47f5e9e5a..11f111fc4 100644 --- a/tests/test_cyclic_axis_slicing.py +++ b/tests/test_cyclic_axis_slicing.py @@ -2,7 +2,6 @@ import pandas as pd import xarray as xr -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select diff --git a/tests/test_cyclic_simple.py b/tests/test_cyclic_simple.py index 8a11aad1e..7f09af332 100644 --- a/tests/test_cyclic_simple.py +++ b/tests/test_cyclic_simple.py @@ -2,7 +2,6 @@ import pandas as pd import xarray as xr -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select diff --git a/tests/test_datacube_axes_init.py b/tests/test_datacube_axes_init.py index ffe506a86..9f6377354 100644 --- a/tests/test_datacube_axes_init.py +++ b/tests/test_datacube_axes_init.py @@ -3,7 +3,6 @@ from helper_functions import download_test_data from polytope_feature.datacube.datacube_axis import FloatDatacubeAxis -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select diff --git a/tests/test_ecmwf_oper_data_fdb.py b/tests/test_ecmwf_oper_data_fdb.py index c66edde2f..d1f8dce91 100644 --- a/tests/test_ecmwf_oper_data_fdb.py +++ b/tests/test_ecmwf_oper_data_fdb.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Point, Select, Span diff --git a/tests/test_float_type.py b/tests/test_float_type.py index 8b942db3f..2a8805d16 100644 --- a/tests/test_float_type.py +++ b/tests/test_float_type.py @@ -2,7 +2,6 @@ import pytest import xarray as xr -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Select, Span diff --git a/tests/test_healpix_mapper.py b/tests/test_healpix_mapper.py index 576dc2e4c..8b86f08e7 100644 --- a/tests/test_healpix_mapper.py +++ b/tests/test_healpix_mapper.py @@ -5,7 +5,6 @@ from polytope_feature.datacube.transformations.datacube_mappers.mapper_types.healpix import ( HealpixGridMapper, ) -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select diff --git a/tests/test_hullslicer_engine.py b/tests/test_hullslicer_engine.py index fb26d7115..467b27cc4 100644 --- a/tests/test_hullslicer_engine.py +++ b/tests/test_hullslicer_engine.py @@ -3,7 +3,6 @@ from polytope_feature.datacube.backends.xarray import XArrayDatacube from polytope_feature.datacube.tensor_index_tree import TensorIndexTree -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope from polytope_feature.shapes import Box diff --git a/tests/test_incomplete_tree_fdb.py b/tests/test_incomplete_tree_fdb.py index ae7711b24..f20a11eee 100644 --- a/tests/test_incomplete_tree_fdb.py +++ b/tests/test_incomplete_tree_fdb.py @@ -2,7 +2,6 @@ import pytest from helper_functions import download_test_data -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Select diff --git a/tests/test_local_grid_cyclic.py b/tests/test_local_grid_cyclic.py index 595b438d1..85bcecee0 100644 --- a/tests/test_local_grid_cyclic.py +++ b/tests/test_local_grid_cyclic.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Point, Select diff --git a/tests/test_local_regular_grid.py b/tests/test_local_regular_grid.py index fd5eee947..a99a4b606 100644 --- a/tests/test_local_regular_grid.py +++ b/tests/test_local_regular_grid.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Point, Select diff --git a/tests/test_merge_octahedral_one_axis.py b/tests/test_merge_octahedral_one_axis.py index 04206694a..b8a1369ca 100644 --- a/tests/test_merge_octahedral_one_axis.py +++ b/tests/test_merge_octahedral_one_axis.py @@ -2,7 +2,6 @@ from earthkit import data from helper_functions import download_test_data -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select diff --git a/tests/test_merge_transformation.py b/tests/test_merge_transformation.py index 70560efa9..a53b25d37 100644 --- a/tests/test_merge_transformation.py +++ b/tests/test_merge_transformation.py @@ -2,7 +2,6 @@ import pandas as pd import xarray as xr -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Select diff --git a/tests/test_multiple_param_fdb.py b/tests/test_multiple_param_fdb.py index b1f0b4d96..65aa2566f 100644 --- a/tests/test_multiple_param_fdb.py +++ b/tests/test_multiple_param_fdb.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select diff --git a/tests/test_octahedral_grid.py b/tests/test_octahedral_grid.py index 31fffc38e..18783b580 100644 --- a/tests/test_octahedral_grid.py +++ b/tests/test_octahedral_grid.py @@ -2,7 +2,6 @@ from earthkit import data from helper_functions import download_test_data, find_nearest_latlon -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select diff --git a/tests/test_regular_grid.py b/tests/test_regular_grid.py index 67efc6d5e..4c4dd1a23 100644 --- a/tests/test_regular_grid.py +++ b/tests/test_regular_grid.py @@ -2,7 +2,6 @@ import pytest from helper_functions import download_test_data, find_nearest_latlon -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Disk, Select diff --git a/tests/test_shapes.py b/tests/test_shapes.py index 9645e2206..343601c55 100644 --- a/tests/test_shapes.py +++ b/tests/test_shapes.py @@ -3,7 +3,6 @@ import pytest import xarray as xr -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import All, Select, Span diff --git a/tests/test_slicer_xarray.py b/tests/test_slicer_xarray.py index f49b673f7..ddfb418d8 100644 --- a/tests/test_slicer_xarray.py +++ b/tests/test_slicer_xarray.py @@ -2,7 +2,6 @@ import pandas as pd import xarray as xr -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select, Span diff --git a/tests/test_slicing_unsliceable_axis.py b/tests/test_slicing_unsliceable_axis.py index 840d85261..a161cd4a8 100644 --- a/tests/test_slicing_unsliceable_axis.py +++ b/tests/test_slicing_unsliceable_axis.py @@ -3,7 +3,6 @@ import pytest import xarray as xr -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select from polytope_feature.utility.exceptions import UnsliceableShapeError diff --git a/tests/test_slicing_xarray_3D.py b/tests/test_slicing_xarray_3D.py index 494d46b50..6149c7e21 100644 --- a/tests/test_slicing_xarray_3D.py +++ b/tests/test_slicing_xarray_3D.py @@ -7,7 +7,6 @@ from polytope_feature.datacube.backends.xarray import XArrayDatacube from polytope_feature.datacube.tensor_index_tree import TensorIndexTree -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import ( Box, diff --git a/tests/test_slicing_xarray_4D.py b/tests/test_slicing_xarray_4D.py index d6456a0ad..0f0081b1c 100644 --- a/tests/test_slicing_xarray_4D.py +++ b/tests/test_slicing_xarray_4D.py @@ -4,7 +4,6 @@ import xarray as xr from polytope_feature.datacube.tensor_index_tree import TensorIndexTree -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import ( Box, diff --git a/tests/test_snapping.py b/tests/test_snapping.py index 1b856f6f0..64fdb924c 100644 --- a/tests/test_snapping.py +++ b/tests/test_snapping.py @@ -1,7 +1,6 @@ import numpy as np import xarray as xr -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Select From e5a5de7820c200b7dde7187487bf24171ae53f7c Mon Sep 17 00:00:00 2001 From: mathleur Date: Thu, 2 Jan 2025 15:24:06 +0100 Subject: [PATCH 62/75] clean up --- polytope_feature/datacube/backends/datacube.py | 13 ++++++++----- polytope_feature/datacube/backends/fdb.py | 3 +-- polytope_feature/datacube/backends/xarray.py | 8 ++++++-- polytope_feature/engine/hullslicer.py | 4 +--- polytope_feature/polytope.py | 4 +--- tests/test_bad_request_error.py | 1 - tests/test_cyclic_axis_over_negative_vals.py | 2 +- tests/test_cyclic_axis_slicer_not_0.py | 1 - tests/test_cyclic_axis_slicing.py | 1 - tests/test_cyclic_nearest.py | 2 -- tests/test_cyclic_simple.py | 1 - tests/test_cyclic_snapping.py | 2 +- tests/test_datacube_axes_init.py | 1 - tests/test_datacube_xarray.py | 4 ++-- tests/test_ecmwf_oper_data_fdb.py | 4 ---- tests/test_engine_slicer.py | 16 ++++++++-------- tests/test_fdb_datacube.py | 2 -- tests/test_fdb_unmap_tree.py | 1 - tests/test_float_type.py | 2 +- tests/test_healpix_mapper.py | 1 - tests/test_hullslicer_engine.py | 2 +- tests/test_incomplete_tree_fdb.py | 2 -- tests/test_local_grid_cyclic.py | 2 -- tests/test_local_regular_grid.py | 10 ---------- tests/test_merge_octahedral_one_axis.py | 1 - tests/test_merge_transformation.py | 1 - tests/test_multiple_param_fdb.py | 1 - tests/test_octahedral_grid.py | 1 - tests/test_orca_irregular_grid.py | 1 - tests/test_override_md5_hash_options.py | 3 --- tests/test_point_nearest.py | 6 ------ tests/test_point_shape.py | 2 +- tests/test_polytope_extract.py | 1 - tests/test_polytope_extract_fdb.py | 9 ++++++--- tests/test_quad_tree.py | 15 +-------------- tests/test_quadtree_edge_cases.py | 5 +---- tests/test_quadtree_indices.py | 5 +---- tests/test_quadtree_optimisation.py | 12 ------------ tests/test_regular_grid.py | 3 +-- tests/test_request_trees_after_slicing.py | 9 +-------- tests/test_reverse_transformation.py | 2 +- tests/test_shapes.py | 3 +-- tests/test_slice_date_range_fdb.py | 10 ---------- tests/test_slice_date_range_fdb_v2.py | 1 - tests/test_slicer_engine.py | 2 +- tests/test_slicer_era5.py | 3 --- tests/test_slicer_xarray.py | 2 +- tests/test_slicing_unsliceable_axis.py | 2 +- tests/test_slicing_xarray_3D.py | 2 +- tests/test_slicing_xarray_4D.py | 2 +- tests/test_snapping.py | 2 +- tests/test_snapping_real_data.py | 7 ------- tests/test_tree_protobuf_encoding.py | 1 - tests/test_tree_protobuf_encoding_fdb.py | 1 - tests/test_type_change_transformation.py | 4 +--- tests/test_union_gj.py | 6 ------ tests/test_union_point_box.py | 3 --- 57 files changed, 52 insertions(+), 165 deletions(-) diff --git a/polytope_feature/datacube/backends/datacube.py b/polytope_feature/datacube/backends/datacube.py index 67b3f1322..9f961b174 100644 --- a/polytope_feature/datacube/backends/datacube.py +++ b/polytope_feature/datacube/backends/datacube.py @@ -153,7 +153,6 @@ def remap_path(self, path: DatacubePath): @staticmethod def create( - request, datacube, config={}, axis_options={}, @@ -166,15 +165,19 @@ def create( if type(datacube).__name__ == "DataArray": from .xarray import XArrayDatacube - xadatacube = XArrayDatacube( - datacube, axis_options, compressed_axes_options, point_cloud_options, context) + xadatacube = XArrayDatacube(datacube, axis_options, compressed_axes_options, point_cloud_options, context) return xadatacube if type(datacube).__name__ == "GribJump": from .fdb import FDBDatacube fdbdatacube = FDBDatacube( - datacube, request, config, axis_options, compressed_axes_options, point_cloud_options, alternative_axes, - context + datacube, + config, + axis_options, + compressed_axes_options, + point_cloud_options, + alternative_axes, + context, ) return fdbdatacube if type(datacube).__name__ == "MockDatacube": diff --git a/polytope_feature/datacube/backends/fdb.py b/polytope_feature/datacube/backends/fdb.py index 9b0957936..87a034d64 100644 --- a/polytope_feature/datacube/backends/fdb.py +++ b/polytope_feature/datacube/backends/fdb.py @@ -12,13 +12,12 @@ class FDBDatacube(Datacube): def __init__( self, gj, - request, config=None, axis_options=None, compressed_axes_options=[], point_cloud_options=None, alternative_axes=[], - context=None + context=None, ): if config is None: config = {} diff --git a/polytope_feature/datacube/backends/xarray.py b/polytope_feature/datacube/backends/xarray.py index 2c29b2361..67f3e1cb5 100644 --- a/polytope_feature/datacube/backends/xarray.py +++ b/polytope_feature/datacube/backends/xarray.py @@ -10,8 +10,12 @@ class XArrayDatacube(Datacube): """Xarray arrays are labelled, axes can be defined as strings or integers (e.g. "time" or 0).""" def __init__( - self, dataarray: xr.DataArray, axis_options=None, compressed_axes_options=[], point_cloud_options=None, - context=None + self, + dataarray: xr.DataArray, + axis_options=None, + compressed_axes_options=[], + point_cloud_options=None, + context=None, ): super().__init__(axis_options, compressed_axes_options) if axis_options is None: diff --git a/polytope_feature/engine/hullslicer.py b/polytope_feature/engine/hullslicer.py index 0950a749b..a5150ea83 100644 --- a/polytope_feature/engine/hullslicer.py +++ b/polytope_feature/engine/hullslicer.py @@ -88,7 +88,6 @@ def remap_values(self, ax, value): return remapped_val def _build_sliceable_child(self, polytope, ax, node, datacube, values, next_nodes, slice_axis_idx, api): - for i, value in enumerate(values): if i == 0 or ax.name not in api.compressed_axes: fvalue = ax.to_float(value) @@ -127,8 +126,7 @@ def _build_branch(self, ax, node, datacube, next_nodes, api): # we have iterated all polytopes and we can now remove the node if we need to if len(values) == 0 and len(node.children) == 0: node.remove_branch() - self._build_sliceable_child(polytope, ax, node, datacube, values, - next_nodes, slice_axis_idx, api) + self._build_sliceable_child(polytope, ax, node, datacube, values, next_nodes, slice_axis_idx, api) else: all_values = [] all_lowers = [] diff --git a/polytope_feature/polytope.py b/polytope_feature/polytope.py index 909b2f584..2f1161c20 100644 --- a/polytope_feature/polytope.py +++ b/polytope_feature/polytope.py @@ -47,7 +47,6 @@ def __repr__(self): class Polytope: def __init__( self, - request, datacube, options=None, engine_options=None, @@ -66,14 +65,13 @@ def __init__( axis_options, compressed_axes_options, config, alternative_axes = PolytopeOptions.get_polytope_options(options) self.datacube = Datacube.create( - request, datacube, config, axis_options, compressed_axes_options, point_cloud_options, alternative_axes, - self.context + self.context, ) if engine_options == {}: for ax_name in self.datacube._axes.keys(): diff --git a/tests/test_bad_request_error.py b/tests/test_bad_request_error.py index f0f4b1683..dc2fc8fc2 100644 --- a/tests/test_bad_request_error.py +++ b/tests/test_bad_request_error.py @@ -59,7 +59,6 @@ def test_fdb_datacube(self): self.fdbdatacube = gj.GribJump() self.slicer = HullSlicer() self.API = Polytope( - request={}, datacube=self.fdbdatacube, options=self.options, ) diff --git a/tests/test_cyclic_axis_over_negative_vals.py b/tests/test_cyclic_axis_over_negative_vals.py index cdd8e2b33..5ba63c2e8 100644 --- a/tests/test_cyclic_axis_over_negative_vals.py +++ b/tests/test_cyclic_axis_over_negative_vals.py @@ -28,7 +28,7 @@ def setup_method(self, method): "compressed_axes_config": ["long", "level", "step", "date"], } self.slicer = HullSlicer() - self.API = Polytope(request={}, datacube=array, options=options) + self.API = Polytope(datacube=array, options=options) # Testing different shapes diff --git a/tests/test_cyclic_axis_slicer_not_0.py b/tests/test_cyclic_axis_slicer_not_0.py index 9a8effcc4..b6ca580b8 100644 --- a/tests/test_cyclic_axis_slicer_not_0.py +++ b/tests/test_cyclic_axis_slicer_not_0.py @@ -27,7 +27,6 @@ def setup_method(self, method): "compressed_axes_config": ["long", "level", "step", "date"], } self.API = Polytope( - request={}, datacube=array, options=self.options, ) diff --git a/tests/test_cyclic_axis_slicing.py b/tests/test_cyclic_axis_slicing.py index 11f111fc4..0f84c2c94 100644 --- a/tests/test_cyclic_axis_slicing.py +++ b/tests/test_cyclic_axis_slicing.py @@ -27,7 +27,6 @@ def setup_method(self, method): "compressed_axes_config": ["long", "level", "step", "date"], } self.API = Polytope( - request={}, datacube=array, options=self.options, ) diff --git a/tests/test_cyclic_nearest.py b/tests/test_cyclic_nearest.py index 8809f5be6..7622eb915 100644 --- a/tests/test_cyclic_nearest.py +++ b/tests/test_cyclic_nearest.py @@ -85,7 +85,6 @@ def test_regular_grid(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -108,7 +107,6 @@ def test_regular_grid(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) diff --git a/tests/test_cyclic_simple.py b/tests/test_cyclic_simple.py index 7f09af332..538932a6b 100644 --- a/tests/test_cyclic_simple.py +++ b/tests/test_cyclic_simple.py @@ -27,7 +27,6 @@ def setup_method(self, method): "compressed_axes_config": ["long", "level", "step", "date"], } self.API = Polytope( - request={}, datacube=array, options=options, ) diff --git a/tests/test_cyclic_snapping.py b/tests/test_cyclic_snapping.py index 15a31ed48..5c55eaeea 100644 --- a/tests/test_cyclic_snapping.py +++ b/tests/test_cyclic_snapping.py @@ -21,7 +21,7 @@ def setup_method(self, method): "compressed_axes_config": ["long"], } self.slicer = HullSlicer() - self.API = Polytope(request={}, datacube=array, options=options) + self.API = Polytope(datacube=array, options=options) # Testing different shapes diff --git a/tests/test_datacube_axes_init.py b/tests/test_datacube_axes_init.py index 9f6377354..5dc6b329a 100644 --- a/tests/test_datacube_axes_init.py +++ b/tests/test_datacube_axes_init.py @@ -41,7 +41,6 @@ def setup_method(self, method): ], } self.API = Polytope( - request={}, datacube=latlon_array, options=self.options, ) diff --git a/tests/test_datacube_xarray.py b/tests/test_datacube_xarray.py index c3e87796f..8f66eb822 100644 --- a/tests/test_datacube_xarray.py +++ b/tests/test_datacube_xarray.py @@ -24,7 +24,7 @@ def test_validate(self): array = xr.Dataset(data_vars=dict(param=(["x", "y", "z"], dims)), coords={"x": [1], "y": [1], "z": [1]}) array = array.to_array() - datacube = Datacube.create(request={}, datacube=array, axis_options={}) + datacube = Datacube.create(datacube=array, axis_options={}) datacube.validate(["x", "y", "z", "variable"]) datacube.validate(["x", "z", "y", "variable"]) @@ -53,7 +53,7 @@ def test_create(self): for d, v in array.coords.variables.items(): print(v.dtype) - datacube = Datacube.create(request={}, datacube=array, axis_options={}) + datacube = Datacube.create(datacube=array, axis_options={}) # Check the factory created the correct type of datacube assert isinstance(datacube, XArrayDatacube) diff --git a/tests/test_ecmwf_oper_data_fdb.py b/tests/test_ecmwf_oper_data_fdb.py index d1f8dce91..381cc566f 100644 --- a/tests/test_ecmwf_oper_data_fdb.py +++ b/tests/test_ecmwf_oper_data_fdb.py @@ -59,7 +59,6 @@ def test_fdb_datacube(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -86,7 +85,6 @@ def test_fdb_datacube_point(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -114,7 +112,6 @@ def test_fdb_datacube_point_v2(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -171,7 +168,6 @@ def test_fdb_datacube_point_step_not_compressed(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) diff --git a/tests/test_engine_slicer.py b/tests/test_engine_slicer.py index 923a10af2..738b462eb 100644 --- a/tests/test_engine_slicer.py +++ b/tests/test_engine_slicer.py @@ -10,7 +10,7 @@ def setup_method(self, method): def test_2D_box(self): datacube = MockDatacube({"x": 100, "y": 100}) polytopes = Box(["x", "y"], lower_corner=[3, 3], upper_corner=[6, 6]).polytope() - API = Polytope(request={}, datacube=datacube, options={}) + API = Polytope(datacube=datacube, options={}) result = API.slice(datacube, polytopes) assert len(result.leaves) == 4 total_leaves = 0 @@ -21,7 +21,7 @@ def test_2D_box(self): def test_3D_box(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100}) polytopes = Box(["x", "y", "z"], lower_corner=[3, 3, 3], upper_corner=[6, 6, 6]).polytope() - API = Polytope(request={}, datacube=datacube, options={}) + API = Polytope(datacube=datacube, options={}) result = API.slice(datacube, polytopes) assert len(result.leaves) == 4 * 4 total_leaves = 0 @@ -32,7 +32,7 @@ def test_3D_box(self): def test_4D_box(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100, "q": 100}) polytopes = Box(["x", "y", "z", "q"], lower_corner=[3, 3, 3, 3], upper_corner=[6, 6, 6, 6]).polytope() - API = Polytope(request={}, datacube=datacube, options={}) + API = Polytope(datacube=datacube, options={}) result = API.slice(datacube, polytopes) assert len(result.leaves) == 4 * 4 * 4 total_leaves = 0 @@ -43,14 +43,14 @@ def test_4D_box(self): def test_triangle(self): datacube = MockDatacube({"x": 100, "y": 100}) triangle = Polygon(["x", "y"], [[3, 3], [3, 6], [6, 3]]).polytope() - API = Polytope(request={}, datacube=datacube, options={}) + API = Polytope(datacube=datacube, options={}) result = API.slice(datacube, triangle) assert len(result.leaves) == 4 + 3 + 2 + 1 def test_reusable(self): datacube = MockDatacube({"x": 100, "y": 100}) polytopes = Polygon(["x", "y"], [[3, 3], [3, 6], [6, 3]]).polytope() - API = Polytope(request={}, datacube=datacube, options={}) + API = Polytope(datacube=datacube, options={}) result = API.slice(datacube, polytopes) assert len(result.leaves) == 4 + 3 + 2 + 1 polytopes = Box(["x", "y"], lower_corner=[3, 3], upper_corner=[6, 6]).polytope() @@ -60,7 +60,7 @@ def test_reusable(self): def test_2D_box_get_function(self): datacube = MockDatacube({"x": 100, "y": 100}) polytopes = Box(["x", "y"], lower_corner=[2, -2], upper_corner=[4, -1]).polytope() - API = Polytope(request={}, datacube=datacube, options={}) + API = Polytope(datacube=datacube, options={}) result = API.slice(datacube, polytopes) datacube.get(result) result.pprint() @@ -68,7 +68,7 @@ def test_2D_box_get_function(self): def test_3D_box_get_function(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100}) polytopes = Box(["x", "y", "z"], lower_corner=[3, 2, -2], upper_corner=[6, 2, -1]).polytope() - API = Polytope(request={}, datacube=datacube, options={}) + API = Polytope(datacube=datacube, options={}) result = API.slice(datacube, polytopes) datacube.get(result) result.pprint() @@ -76,7 +76,7 @@ def test_3D_box_get_function(self): def test_3D_box_get_function2(self): datacube = MockDatacube({"x": 100, "y": 100, "z": 100}) polytopes = Box(["x", "y", "z"], lower_corner=[3, 2, 1], upper_corner=[6, 2, 1]).polytope() - API = Polytope(request={}, datacube=datacube, options={}) + API = Polytope(datacube=datacube, options={}) result = API.slice(datacube, polytopes) datacube.get(result) result.pprint() diff --git a/tests/test_fdb_datacube.py b/tests/test_fdb_datacube.py index 7ae177e6e..0b20ce78a 100644 --- a/tests/test_fdb_datacube.py +++ b/tests/test_fdb_datacube.py @@ -63,7 +63,6 @@ def test_fdb_datacube(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -113,7 +112,6 @@ def test_fdb_datacube_select_grid(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) diff --git a/tests/test_fdb_unmap_tree.py b/tests/test_fdb_unmap_tree.py index 7cb808e0d..c875433e7 100644 --- a/tests/test_fdb_unmap_tree.py +++ b/tests/test_fdb_unmap_tree.py @@ -60,7 +60,6 @@ def test_fdb_datacube(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) diff --git a/tests/test_float_type.py b/tests/test_float_type.py index 2a8805d16..9916d6b1f 100644 --- a/tests/test_float_type.py +++ b/tests/test_float_type.py @@ -19,7 +19,7 @@ def setup_method(self, method): }, ) options = {"compressed_axes_config": ["lat", "long", "alt"]} - self.API = Polytope(request={}, datacube=array, options=options) + self.API = Polytope(datacube=array, options=options) def test_slicing_span(self): request = Request(Span("lat", 4.1, 4.3), Select("long", [4.1]), Select("alt", [4.1])) diff --git a/tests/test_healpix_mapper.py b/tests/test_healpix_mapper.py index 8b86f08e7..b2c9a7863 100644 --- a/tests/test_healpix_mapper.py +++ b/tests/test_healpix_mapper.py @@ -30,7 +30,6 @@ def setup_method(self, method): "compressed_axes_config": ["longitude", "latitude", "step", "time", "isobaricInhPa", "valid_time"], } self.API = Polytope( - request={}, datacube=self.latlon_array, options=self.options, ) diff --git a/tests/test_hullslicer_engine.py b/tests/test_hullslicer_engine.py index 467b27cc4..467ba3723 100644 --- a/tests/test_hullslicer_engine.py +++ b/tests/test_hullslicer_engine.py @@ -19,7 +19,7 @@ def setup_method(self, method): ) self.xarraydatacube = XArrayDatacube(self.array) options = {"compressed_axes_config": ["step", "level"]} - self.API = Polytope(request={}, datacube=self.array, options=options) + self.API = Polytope(datacube=self.array, options=options) def test_extract(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) diff --git a/tests/test_incomplete_tree_fdb.py b/tests/test_incomplete_tree_fdb.py index f20a11eee..b388d37fd 100644 --- a/tests/test_incomplete_tree_fdb.py +++ b/tests/test_incomplete_tree_fdb.py @@ -67,7 +67,6 @@ def test_incomplete_fdb_branch(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -98,7 +97,6 @@ def test_incomplete_fdb_branch_2(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) diff --git a/tests/test_local_grid_cyclic.py b/tests/test_local_grid_cyclic.py index 85bcecee0..32911dfce 100644 --- a/tests/test_local_grid_cyclic.py +++ b/tests/test_local_grid_cyclic.py @@ -68,7 +68,6 @@ def test_fdb_datacube(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -96,7 +95,6 @@ def test_fdb_datacube_2(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) diff --git a/tests/test_local_regular_grid.py b/tests/test_local_regular_grid.py index a99a4b606..ac23bf172 100644 --- a/tests/test_local_regular_grid.py +++ b/tests/test_local_regular_grid.py @@ -67,7 +67,6 @@ def test_fdb_datacube(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -95,7 +94,6 @@ def test_point_outside_local_region(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -123,7 +121,6 @@ def test_point_outside_local_region_2(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -151,7 +148,6 @@ def test_point_outside_local_region_3(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -178,7 +174,6 @@ def test_point_outside_local_region_4(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -205,7 +200,6 @@ def test_point_outside_local_region_5(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -232,7 +226,6 @@ def test_point_outside_local_region_6(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -259,7 +252,6 @@ def test_point_outside_local_region_7(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -287,7 +279,6 @@ def test_point_outside_local_region_8(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -315,7 +306,6 @@ def test_point_outside_local_region_9(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) diff --git a/tests/test_merge_octahedral_one_axis.py b/tests/test_merge_octahedral_one_axis.py index b8a1369ca..cde50d1d3 100644 --- a/tests/test_merge_octahedral_one_axis.py +++ b/tests/test_merge_octahedral_one_axis.py @@ -28,7 +28,6 @@ def setup_method(self, method): "compressed_axes_config": ["longitude", "latitude", "surface", "step", "time", "valid_time", "number"], } self.API = Polytope( - request={}, datacube=self.latlon_array, options=self.options, ) diff --git a/tests/test_merge_transformation.py b/tests/test_merge_transformation.py index a53b25d37..99fc6d926 100644 --- a/tests/test_merge_transformation.py +++ b/tests/test_merge_transformation.py @@ -27,7 +27,6 @@ def setup_method(self, method): "compressed_axes_config": ["date", "time"], } self.API = Polytope( - request={}, datacube=self.array, options=self.options, ) diff --git a/tests/test_multiple_param_fdb.py b/tests/test_multiple_param_fdb.py index 65aa2566f..cd82d4731 100644 --- a/tests/test_multiple_param_fdb.py +++ b/tests/test_multiple_param_fdb.py @@ -59,7 +59,6 @@ def test_fdb_datacube(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) diff --git a/tests/test_octahedral_grid.py b/tests/test_octahedral_grid.py index 18783b580..429794745 100644 --- a/tests/test_octahedral_grid.py +++ b/tests/test_octahedral_grid.py @@ -27,7 +27,6 @@ def setup_method(self, method): "compressed_axes_config": ["longitude", "latitude", "number", "step", "time", "surface", "valid_time"], } self.API = Polytope( - request={}, datacube=self.latlon_array, options=self.options, ) diff --git a/tests/test_orca_irregular_grid.py b/tests/test_orca_irregular_grid.py index 375d09339..145af2079 100644 --- a/tests/test_orca_irregular_grid.py +++ b/tests/test_orca_irregular_grid.py @@ -48,7 +48,6 @@ def test_quad_tree_slicer_extract(self): ) self.API = Polytope( - request=request, datacube=self.arr, options=self.options, engine_options=self.engine_options, diff --git a/tests/test_override_md5_hash_options.py b/tests/test_override_md5_hash_options.py index f27347c94..237dc2ede 100644 --- a/tests/test_override_md5_hash_options.py +++ b/tests/test_override_md5_hash_options.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select, Span @@ -67,9 +66,7 @@ def test_fdb_datacube(self): ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) diff --git a/tests/test_point_nearest.py b/tests/test_point_nearest.py index 0c3c4b3cb..7b2e605b3 100644 --- a/tests/test_point_nearest.py +++ b/tests/test_point_nearest.py @@ -60,7 +60,6 @@ def test_fdb_datacube(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request={}, datacube=self.fdbdatacube, options=self.options, ) @@ -85,7 +84,6 @@ def test_fdb_datacube_true_point(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request={}, datacube=self.fdbdatacube, options=self.options, ) @@ -111,7 +109,6 @@ def test_fdb_datacube_true_point_2(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request=request, datacube=self.fdbdatacube, options=self.options, ) @@ -137,7 +134,6 @@ def test_fdb_datacube_true_point_3(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -165,7 +161,6 @@ def test_fdb_datacube_true_point_5(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -193,7 +188,6 @@ def test_fdb_datacube_true_point_4(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) diff --git a/tests/test_point_shape.py b/tests/test_point_shape.py index fc106575a..03a261217 100644 --- a/tests/test_point_shape.py +++ b/tests/test_point_shape.py @@ -19,7 +19,7 @@ def setup_method(self, method): }, ) options = {"compressed_axes_config": ["level", "step", "date"]} - self.API = Polytope(request={}, datacube=array, options=options) + self.API = Polytope(datacube=array, options=options) def test_point(self): request = Request(Point(["step", "level"], [[3, 10]]), Select("date", ["2000-01-01"])) diff --git a/tests/test_polytope_extract.py b/tests/test_polytope_extract.py index d67b31b22..2bc7400fa 100644 --- a/tests/test_polytope_extract.py +++ b/tests/test_polytope_extract.py @@ -40,7 +40,6 @@ def setup_method(self, method): def test_2D_box(self): request = Request(Box(["step", "level"], [3, 10], [6, 11]), Box(["latitude", "longitude"], [0, 0], [20, 20])) self.API = Polytope( - request=request, datacube=self.array, options=self.options, engine_options=self.engine_options, diff --git a/tests/test_polytope_extract_fdb.py b/tests/test_polytope_extract_fdb.py index 35bfcfb8e..d466581b6 100644 --- a/tests/test_polytope_extract_fdb.py +++ b/tests/test_polytope_extract_fdb.py @@ -35,8 +35,12 @@ def setup_method(self, method): { "axis_name": "values", "transformations": [ - {"name": "mapper", "type": "irregular", "axes": [ - "latitude", "longitude"], "md5_hash": "158db321ae8e773681eeb40e0a3d350f"} + { + "name": "mapper", + "type": "irregular", + "axes": ["latitude", "longitude"], + "md5_hash": "158db321ae8e773681eeb40e0a3d350f", + } ], }, ], @@ -75,7 +79,6 @@ def test_2D_box(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request=request, datacube=self.fdbdatacube, options=self.options, engine_options=self.engine_options, diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index f8d49c52a..2d52875eb 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -3,13 +3,12 @@ from polytope_feature.datacube.quad_tree import QuadNode from polytope_feature.engine.quadtree_slicer import QuadTreeSlicer from polytope_feature.engine.slicing_tools import slice_in_two -from polytope_feature.polytope import Polytope, Request +from polytope_feature.polytope import Polytope from polytope_feature.shapes import Box, ConvexPolytope class TestQuadTreeSlicer: def setup_method(self, method): - # from polytope.datacube.backends.fdb import FDBDatacube import pygribjump as gj self.options = { @@ -42,17 +41,7 @@ def setup_method(self, method): ], "pre_path": {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"}, } - # self.datacube = FDBDatacube(self.config, axis_options=self.options) self.fdbdatacube = gj.GribJump() - # self.slicer = HullSlicer() - # self.API = Polytope( - # request=request, - # datacube=self.fdbdatacube, - # engine=self.slicer, - # options=self.options, - # engine_options=self.engine_options, - # point_cloud_options=self.quadtree_points - # ) @pytest.mark.fdb def test_quad_tree_slicer(self): @@ -124,7 +113,6 @@ def test_quad_tree_slicer_extract(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] polytope = Box(["latitude", "longitude"], [1, 1], [20, 30]).polytope()[0] self.API = Polytope( - request=Request(polytope), datacube=self.fdbdatacube, options=self.options, engine_options={"latitude": "quadtree", "longitude": "quadtree"}, @@ -157,7 +145,6 @@ def test_large_scale_extraction(self): time0 = time.time() polytope = Box(["latitude", "longitude"], [1, 1], [20, 30]).polytope()[0] self.API = Polytope( - request=Request(polytope), datacube=self.fdbdatacube, options=self.options, engine_options={"latitude": "quadtree", "longitude": "quadtree"}, diff --git a/tests/test_quadtree_edge_cases.py b/tests/test_quadtree_edge_cases.py index a23e665da..237ceac4c 100644 --- a/tests/test_quadtree_edge_cases.py +++ b/tests/test_quadtree_edge_cases.py @@ -1,12 +1,11 @@ import pytest -from polytope_feature.polytope import Polytope, Request +from polytope_feature.polytope import Polytope from polytope_feature.shapes import Box class TestQuadTreeSlicer: def setup_method(self, method): - # from polytope.datacube.backends.fdb import FDBDatacube import pygribjump as gj self.options = { @@ -39,7 +38,6 @@ def setup_method(self, method): ], "pre_path": {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"}, } - # self.datacube = FDBDatacube(self.config, axis_options=self.options) self.fdbdatacube = gj.GribJump() @pytest.mark.fdb @@ -47,7 +45,6 @@ def test_quad_tree_slicer_extract(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10], [0.035149384216, 0.0]] polytope = Box(["latitude", "longitude"], [0, 0], [15, 15]).polytope()[0] self.API = Polytope( - request=Request(polytope), datacube=self.fdbdatacube, options=self.options, engine_options={"latitude": "quadtree", "longitude": "quadtree"}, diff --git a/tests/test_quadtree_indices.py b/tests/test_quadtree_indices.py index cc3161e4f..c84c4ee4d 100644 --- a/tests/test_quadtree_indices.py +++ b/tests/test_quadtree_indices.py @@ -1,6 +1,6 @@ import pytest -from polytope_feature.polytope import Polytope, Request +from polytope_feature.polytope import Polytope from polytope_feature.shapes import Box, ConvexPolytope @@ -38,7 +38,6 @@ def setup_method(self, method): ], "pre_path": {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"}, } - # self.datacube = FDBDatacube(self.config, axis_options=self.options) self.fdbdatacube = gj.GribJump() @pytest.mark.fdb @@ -46,7 +45,6 @@ def test_quad_tree_slicer_extract(self): points = [[10, 10], [80, 10], [-5, 5], [5, 20], [5, 10], [50, 10]] polytope = Box(["latitude", "longitude"], [1, 1], [20, 30]).polytope()[0] self.API = Polytope( - request=Request(polytope), datacube=self.fdbdatacube, options=self.options, engine_options={"latitude": "quadtree", "longitude": "quadtree"}, @@ -59,7 +57,6 @@ def test_quad_tree_slicer_extract(self): points = [[10, 10], [80, 10], [-5, 5], [5, 50], [5, 10], [50, 10], [2, 10], [15, 15]] polytope = ConvexPolytope(["latitude", "longitude"], [[-10, 1], [20, 1], [5, 20]]) self.API = Polytope( - request=Request(polytope), datacube=self.fdbdatacube, options=self.options, engine_options={"latitude": "quadtree", "longitude": "quadtree"}, diff --git a/tests/test_quadtree_optimisation.py b/tests/test_quadtree_optimisation.py index db6202104..c1662a621 100644 --- a/tests/test_quadtree_optimisation.py +++ b/tests/test_quadtree_optimisation.py @@ -6,17 +6,6 @@ class TestQuadTreeSlicer: def setup_method(self, method): - # from polytope.datacube.backends.fdb import FDBDatacube - - # self.options = { - # "values": {"mapper": {"type": "regular", "resolution": 30, "axes": ["latitude", "longitude"]}}, - # "date": {"merge": {"with": "time", "linkers": ["T", "00"]}}, - # "step": {"type_change": "int"}, - # "number": {"type_change": "int"}, - # "longitude": {"cyclic": [0, 360]}, - # } - # self.config = {"class": "ea", "expver": "0001", "levtype": "pl"} - # self.datacube = FDBDatacube(self.config, axis_options=self.options) import pygribjump as gj self.options = { @@ -49,7 +38,6 @@ def setup_method(self, method): ], "pre_path": {"class": "od", "expver": "0001", "levtype": "sfc", "stream": "oper"}, } - # self.datacube = FDBDatacube(self.config, axis_options=self.options) self.fdbdatacube = gj.GribJump() @pytest.mark.fdb diff --git a/tests/test_regular_grid.py b/tests/test_regular_grid.py index 4c4dd1a23..bea22f265 100644 --- a/tests/test_regular_grid.py +++ b/tests/test_regular_grid.py @@ -76,7 +76,6 @@ def test_regular_grid(self): ) self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -100,7 +99,7 @@ def test_regular_grid(self): tol = 1e-8 leaves = result.leaves for i in range(len(leaves)): - right_pl_results = leaves[i].result[len(leaves[i].values):] + right_pl_results = leaves[i].result[len(leaves[i].values) :] result_tree = right_pl_results[0] cubepath = leaves[i].flatten() lat = cubepath["latitude"][0] diff --git a/tests/test_request_trees_after_slicing.py b/tests/test_request_trees_after_slicing.py index 7d162d0b9..af13ab352 100644 --- a/tests/test_request_trees_after_slicing.py +++ b/tests/test_request_trees_after_slicing.py @@ -19,12 +19,11 @@ def setup_method(self, method): ) self.xarraydatacube = XArrayDatacube(array) options = {"compressed_axes_config": ["level", "step"]} - self.API = Polytope(request={}, datacube=array, options=options) + self.API = Polytope(datacube=array, options=options) def test_path_values(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - # request = self.slicer.extract(self.xarraydatacube, polytope) request = self.API.slice(self.xarraydatacube, polytope) datacube_path = request.leaves[0].flatten() request.pprint() @@ -34,7 +33,6 @@ def test_path_values(self): def test_path_keys(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - # request = self.slicer.extract(self.xarraydatacube, polytope) request = self.API.slice(self.xarraydatacube, polytope) datacube_path = request.leaves[0].flatten() assert datacube_path.keys()[0] == "step" @@ -43,7 +41,6 @@ def test_path_keys(self): def test_path_pprint(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - # request = self.slicer.extract(self.xarraydatacube, polytope) request = self.API.slice(self.xarraydatacube, polytope) datacube_path = request.leaves[0].flatten() datacube_path.pprint() @@ -51,7 +48,6 @@ def test_path_pprint(self): def test_flatten(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - # request = self.slicer.extract(self.xarraydatacube, polytope) request = self.API.slice(self.xarraydatacube, polytope) path = request.leaves[0].flatten() request.pprint() @@ -61,7 +57,6 @@ def test_flatten(self): def test_add_child(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - # request = self.slicer.extract(self.xarraydatacube, polytope) request = self.API.slice(self.xarraydatacube, polytope) request1 = request.leaves[0] request2 = request.leaves[0] @@ -80,14 +75,12 @@ def test_add_child(self): def test_pprint(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - # request = self.slicer.extract(self.xarraydatacube, polytope) request = self.API.slice(self.xarraydatacube, polytope) request.pprint() def test_remove_branch(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) polytope = box.polytope() - # request = self.slicer.extract(self.xarraydatacube, polytope) request = self.API.slice(self.xarraydatacube, polytope) prev_request_size = len(request.leaves) request.leaves[0].remove_branch() diff --git a/tests/test_reverse_transformation.py b/tests/test_reverse_transformation.py index fc46b353b..1b752ae3a 100644 --- a/tests/test_reverse_transformation.py +++ b/tests/test_reverse_transformation.py @@ -21,7 +21,7 @@ def setup_method(self, method): "compressed_axes_config": ["lat"], } self.slicer = HullSlicer() - self.API = Polytope(request={}, datacube=array, options=options) + self.API = Polytope(datacube=array, options=options) def test_reverse_transformation(self): request = Request(Select("lat", [1, 2, 3])) diff --git a/tests/test_shapes.py b/tests/test_shapes.py index 343601c55..b6408ccc8 100644 --- a/tests/test_shapes.py +++ b/tests/test_shapes.py @@ -25,7 +25,6 @@ def setup_method(self, method): "compressed_axes_config": ["date", "step", "level", "longitude"], } self.API = Polytope( - request={}, datacube=array, options=self.options, ) @@ -88,7 +87,7 @@ def test_all_mapper_cyclic(self): Span("latitude", 89.9, 90), All("longitude"), ) - self.API = Polytope(request, datacube=self.fdbdatacube, options=self.options) + self.API = Polytope(datacube=self.fdbdatacube, options=self.options) result = self.API.retrieve(request) result.pprint() assert len(result.leaves) == 1 diff --git a/tests/test_slice_date_range_fdb.py b/tests/test_slice_date_range_fdb.py index e71c47d1b..ed90b903c 100644 --- a/tests/test_slice_date_range_fdb.py +++ b/tests/test_slice_date_range_fdb.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Disk, Select, Span @@ -62,7 +61,6 @@ def test_fdb_datacube(self): self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -90,9 +88,7 @@ def test_fdb_datacube_select_non_existing_last(self): ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -120,9 +116,7 @@ def test_fdb_datacube_select_non_existing_first(self): ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( - request=request, datacube=self.fdbdatacube, options=self.options, ) @@ -151,7 +145,6 @@ def test_fdb_datacube_disk(self): self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -182,7 +175,6 @@ def test_fdb_datacube_disk_2(self): self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -214,9 +206,7 @@ def test_fdb_datacube_select_completely_non_existing(self): ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( - request=request, datacube=self.fdbdatacube, options=self.options, ) diff --git a/tests/test_slice_date_range_fdb_v2.py b/tests/test_slice_date_range_fdb_v2.py index b2b75898a..cb76be722 100644 --- a/tests/test_slice_date_range_fdb_v2.py +++ b/tests/test_slice_date_range_fdb_v2.py @@ -2,7 +2,6 @@ import pandas as pd import pytest -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Select, Span diff --git a/tests/test_slicer_engine.py b/tests/test_slicer_engine.py index cb90c6095..ba04b2672 100644 --- a/tests/test_slicer_engine.py +++ b/tests/test_slicer_engine.py @@ -19,7 +19,7 @@ def setup_method(self, method): ) self.xarraydatacube = XArrayDatacube(array) options = {"compressed_axes_config": ["level", "step"]} - self.API = Polytope(request={}, datacube=array, options=options) + self.API = Polytope(datacube=array, options=options) def test_extract(self): box = Box(["step", "level"], [3.0, 1.0], [6.0, 3.0]) diff --git a/tests/test_slicer_era5.py b/tests/test_slicer_era5.py index 8b7234fab..c3e450c07 100644 --- a/tests/test_slicer_era5.py +++ b/tests/test_slicer_era5.py @@ -3,7 +3,6 @@ from earthkit import data from helper_functions import download_test_data -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select @@ -15,13 +14,11 @@ def setup_method(self, method): ds = data.from_source("file", "./tests/data/era5-levels-members.grib") array = ds.to_xarray(engine="cfgrib").isel(step=0).t - self.slicer = HullSlicer() options = { "axis_config": [{"axis_name": "latitude", "transformations": [{"name": "reverse", "is_reverse": True}]}], "compressed_axes_config": ["number", "time", "latitude", "longitude", "step", "isobaricInhPa"], } self.API = Polytope( - request={}, datacube=array, options=options, ) diff --git a/tests/test_slicer_xarray.py b/tests/test_slicer_xarray.py index ddfb418d8..3aa8d3f7c 100644 --- a/tests/test_slicer_xarray.py +++ b/tests/test_slicer_xarray.py @@ -19,7 +19,7 @@ def setup_method(self, method): }, ) options = {"compressed_axes_config": ["date", "step", "level"]} - self.API = Polytope(request={}, datacube=array, options=options) + self.API = Polytope(datacube=array, options=options) def test_2D_box(self): request = Request(Box(["step", "level"], [3, 10], [6, 11]), Select("date", ["2000-01-01"])) diff --git a/tests/test_slicing_unsliceable_axis.py b/tests/test_slicing_unsliceable_axis.py index a161cd4a8..f5a73aab0 100644 --- a/tests/test_slicing_unsliceable_axis.py +++ b/tests/test_slicing_unsliceable_axis.py @@ -17,7 +17,7 @@ def setup_method(self, method): coords={"date": pd.date_range("2000-01-01", "2000-01-03", 3), "variable": ["a"], "level": range(1, 130)}, ) options = {"compressed_axes_config": ["date", "variable", "level"]} - self.API = Polytope(request={}, datacube=array, options=options) + self.API = Polytope(datacube=array, options=options) # Testing different shapes diff --git a/tests/test_slicing_xarray_3D.py b/tests/test_slicing_xarray_3D.py index 6149c7e21..b1740810e 100644 --- a/tests/test_slicing_xarray_3D.py +++ b/tests/test_slicing_xarray_3D.py @@ -34,7 +34,7 @@ def setup_method(self, method): ) self.xarraydatacube = XArrayDatacube(array) options = {"compressed_axes_config": ["date", "step", "level"]} - self.API = Polytope(request={}, datacube=array, options=options) + self.API = Polytope(datacube=array, options=options) # Testing different shapes diff --git a/tests/test_slicing_xarray_4D.py b/tests/test_slicing_xarray_4D.py index 0f0081b1c..67db9292d 100644 --- a/tests/test_slicing_xarray_4D.py +++ b/tests/test_slicing_xarray_4D.py @@ -36,7 +36,7 @@ def setup_method(self, method): }, ) options = {"compressed_axes_config": ["date", "step", "level", "lat"]} - self.API = Polytope(request={}, datacube=array, options=options) + self.API = Polytope(datacube=array, options=options) # Testing different shapes diff --git a/tests/test_snapping.py b/tests/test_snapping.py index 64fdb924c..240ef9729 100644 --- a/tests/test_snapping.py +++ b/tests/test_snapping.py @@ -17,7 +17,7 @@ def setup_method(self, method): }, ) options = {"compressed_axes_config": ["level", "step"]} - self.API = Polytope(request={}, datacube=array, options=options) + self.API = Polytope(datacube=array, options=options) # Testing different shapes diff --git a/tests/test_snapping_real_data.py b/tests/test_snapping_real_data.py index 83077bd01..c2431d5c0 100644 --- a/tests/test_snapping_real_data.py +++ b/tests/test_snapping_real_data.py @@ -6,7 +6,6 @@ from earthkit import data from helper_functions import download_test_data -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select @@ -18,7 +17,6 @@ def setup_method(self, method): ds = data.from_source("file", "./tests/data/era5-levels-members.grib") self.array = ds.to_xarray(engine="cfgrib").isel(step=0).t - self.slicer = HullSlicer() self.options = { "axis_config": [ {"axis_name": "latitude", "transformations": [{"name": "reverse", "is_reverse": True}]}, @@ -26,10 +24,6 @@ def setup_method(self, method): ], "compressed_axes_config": ["longitude", "latitude", "step", "time", "number", "isobaricInhPa"], } - # self.API = Polytope( - # datacube=array, - # options=options, - # ) @pytest.mark.internet def test_surrounding_on_grid_point(self): @@ -44,7 +38,6 @@ def test_surrounding_on_grid_point(self): ) self.API = Polytope( - request, datacube=self.array, options=self.options, ) diff --git a/tests/test_tree_protobuf_encoding.py b/tests/test_tree_protobuf_encoding.py index e3e63ee55..710c01694 100644 --- a/tests/test_tree_protobuf_encoding.py +++ b/tests/test_tree_protobuf_encoding.py @@ -56,7 +56,6 @@ def test_encoding(self): } self.fdbdatacube = gj.GribJump() self.API = Polytope( - request={}, datacube=self.fdbdatacube, options=self.options, ) diff --git a/tests/test_tree_protobuf_encoding_fdb.py b/tests/test_tree_protobuf_encoding_fdb.py index 1ac03ab42..89a9075a2 100644 --- a/tests/test_tree_protobuf_encoding_fdb.py +++ b/tests/test_tree_protobuf_encoding_fdb.py @@ -61,7 +61,6 @@ def test_encoding(self): } self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) diff --git a/tests/test_type_change_transformation.py b/tests/test_type_change_transformation.py index fd711ebf3..2dd033f0d 100644 --- a/tests/test_type_change_transformation.py +++ b/tests/test_type_change_transformation.py @@ -1,7 +1,6 @@ import numpy as np import xarray as xr -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Select @@ -21,8 +20,7 @@ def setup_method(self, method): "axis_config": [{"axis_name": "step", "transformations": [{"name": "type_change", "type": "int"}]}], "compressed_axes_config": ["step"], } - self.slicer = HullSlicer() - self.API = Polytope(request={}, datacube=array, options=options) + self.API = Polytope(datacube=array, options=options) def test_merge_axis(self): request = Request(Select("step", [0])) diff --git a/tests/test_union_gj.py b/tests/test_union_gj.py index 4c5b9b576..13a99552d 100644 --- a/tests/test_union_gj.py +++ b/tests/test_union_gj.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select, Span, Union @@ -68,7 +67,6 @@ def test_fdb_datacube(self): self.fdbdatacube = gj.GribJump() self.API = Polytope( - request, datacube=self.fdbdatacube, options=self.options, ) @@ -107,9 +105,7 @@ def test_fdb_datacube_complete_overlap(self): ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( - request=request, datacube=self.fdbdatacube, options=self.options, ) @@ -148,9 +144,7 @@ def test_fdb_datacube_complete_overlap_v2(self): ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( - request=request, datacube=self.fdbdatacube, options=self.options, ) diff --git a/tests/test_union_point_box.py b/tests/test_union_point_box.py index ba280bc02..9132f14dc 100644 --- a/tests/test_union_point_box.py +++ b/tests/test_union_point_box.py @@ -1,7 +1,6 @@ import pandas as pd import pytest -from polytope_feature.engine.hullslicer import HullSlicer from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Point, Select, Union @@ -64,9 +63,7 @@ def test_fdb_datacube(self): Union(["latitude", "longitude"], box, point), ) self.fdbdatacube = gj.GribJump() - self.slicer = HullSlicer() self.API = Polytope( - request=request, datacube=self.fdbdatacube, engine=self.slicer, options=self.options, From 6f8a0d711be10eef40e736c5cc1ba7615282784d Mon Sep 17 00:00:00 2001 From: mathleur Date: Thu, 2 Jan 2025 15:39:36 +0100 Subject: [PATCH 63/75] fix flake8 --- performance/fdb_slice_many_numbers_timeseries.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/performance/fdb_slice_many_numbers_timeseries.py b/performance/fdb_slice_many_numbers_timeseries.py index ca0b9173e..662b5cc38 100644 --- a/performance/fdb_slice_many_numbers_timeseries.py +++ b/performance/fdb_slice_many_numbers_timeseries.py @@ -3,14 +3,12 @@ import pandas as pd import pygribjump as gj -from polytope_feature.datacube.backends.fdb import FDBDatacube from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import All, Point, Select time1 = time.time() # Create a dataarray with 3 labelled axes using different index types -# config = {"class": "od", "expver": "0001", "levtype": "sfc", "type": "pf"} options = { "axis_config": [ {"axis_name": "step", "transformations": [{"name": "type_change", "type": "int"}]}, @@ -63,7 +61,6 @@ Select("class", ["od"]), Select("stream", ["enfo"]), Select("type", ["pf"]), - # Select("latitude", [0.035149384216], method="surrounding"), Point(["latitude", "longitude"], [[0.04, 0]], method="surrounding"), All("number"), ) From 169af748f58421bbc5188218981a1e4772cf854b Mon Sep 17 00:00:00 2001 From: mathleur Date: Fri, 10 Jan 2025 13:17:56 +0100 Subject: [PATCH 64/75] add other unstructured grid example --- .gitignore | 3 +- .../datacube/backends/datacube.py | 1 + polytope_feature/engine/hullslicer.py | 2 + polytope_feature/engine/quadtree_slicer.py | 8 + polytope_feature/polytope.py | 4 +- tests/test_orca_irregular_grid_seas5.py | 155 ++++++++++++++++++ 6 files changed, 171 insertions(+), 2 deletions(-) create mode 100644 tests/test_orca_irregular_grid_seas5.py diff --git a/.gitignore b/.gitignore index 5feb29a77..0a5171b87 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,5 @@ new_polytope_venv newest-polytope-venv *.pstats *.profile -new_polytope_venv \ No newline at end of file +new_polytope_venv +*.json \ No newline at end of file diff --git a/polytope_feature/datacube/backends/datacube.py b/polytope_feature/datacube/backends/datacube.py index 9f961b174..300a9dbdf 100644 --- a/polytope_feature/datacube/backends/datacube.py +++ b/polytope_feature/datacube/backends/datacube.py @@ -143,6 +143,7 @@ def get_mapper(self, axis): """ Get the type mapper for a subaxis of the datacube given by label """ + print(self._axes) return self._axes[axis] def remap_path(self, path: DatacubePath): diff --git a/polytope_feature/engine/hullslicer.py b/polytope_feature/engine/hullslicer.py index a5150ea83..183072bba 100644 --- a/polytope_feature/engine/hullslicer.py +++ b/polytope_feature/engine/hullslicer.py @@ -93,6 +93,8 @@ def _build_sliceable_child(self, polytope, ax, node, datacube, values, next_node fvalue = ax.to_float(value) new_polytope = slice(polytope, ax.name, fvalue, slice_axis_idx) remapped_val = self.remap_values(ax, value) + print("AND NOW") + print(remapped_val) (child, next_nodes) = node.create_child(ax, remapped_val, next_nodes) child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) child["unsliced_polytopes"].remove(polytope) diff --git a/polytope_feature/engine/quadtree_slicer.py b/polytope_feature/engine/quadtree_slicer.py index 5614ecde0..1ebdf209d 100644 --- a/polytope_feature/engine/quadtree_slicer.py +++ b/polytope_feature/engine/quadtree_slicer.py @@ -10,8 +10,13 @@ class QuadTreeSlicer(Engine): def __init__(self, points): # here need to construct quadtree, which is specific to datacube # NOTE: should this be inside of the datacube instead that we create the quadtree? + import time quad_tree = QuadTree() + print("START BUILDING QUAD TREE") + time0 = time.time() quad_tree.build_point_tree(points) + print("FINISH BUILDING QUAD TREE") + print(time.time()-time0) self.quad_tree = quad_tree # method to slice polygon against quadtree @@ -44,6 +49,8 @@ def extract_single(self, datacube, polytope): # need to find points of the datacube contained within the polytope # We do this by intersecting the datacube point cloud quad tree with the polytope here polygon_points = self.quad_tree.query_polygon(polytope) + print("HERE") + print(polygon_points) return polygon_points def _build_branch(self, ax, node, datacube, next_nodes, api): @@ -59,6 +66,7 @@ def _build_branch(self, ax, node, datacube, next_nodes, api): del node["unsliced_polytopes"] def _build_sliceable_child(self, polytope, ax, node, datacube, next_nodes, api): + print("ARE USING QUADTREE SLICER") extracted_points = self.extract_single(datacube, polytope) # TODO: add the sliced points as node to the tree and update the next_nodes if len(extracted_points) == 0: diff --git a/polytope_feature/polytope.py b/polytope_feature/polytope.py index 2f1161c20..f3155b389 100644 --- a/polytope_feature/polytope.py +++ b/polytope_feature/polytope.py @@ -105,7 +105,6 @@ def _unique_continuous_points(self, p: ConvexPolytope, datacube: Datacube): def slice(self, datacube, polytopes: List[ConvexPolytope]): """Low-level API which takes a polytope geometry object and uses it to slice the datacube""" - self.find_compressed_axes(datacube, polytopes) self.remove_compressed_axis_in_union(polytopes) @@ -137,6 +136,9 @@ def slice(self, datacube, polytopes: List[ConvexPolytope]): engine = self.find_engine(ax) next_nodes = [] interm_next_nodes = [] + print(current_nodes) + print("AND NEXT NODES") + print(next_nodes) for node in current_nodes: engine._build_branch(ax, node, datacube, interm_next_nodes, self) next_nodes.extend(interm_next_nodes) diff --git a/tests/test_orca_irregular_grid_seas5.py b/tests/test_orca_irregular_grid_seas5.py new file mode 100644 index 000000000..6d558da73 --- /dev/null +++ b/tests/test_orca_irregular_grid_seas5.py @@ -0,0 +1,155 @@ +# import geopandas as gpd +# import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import pytest +from earthkit import data +import xarray as xr +from helper_functions import find_nearest_latlon +import time + +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select + + +class TestQuadTreeSlicer: + def setup_method(self, method): + self.engine_options = { + "deptht": "hullslicer", + "latitude": "quadtree", + "longitude": "quadtree", + } + print("SETTING UP THE XARRAY") + time_now = time.time() + + # ds = data.from_source("file", "../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.nc") + + ds = xr.open_dataset("../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.nc", engine="netcdf4") + + print(time.time()-time_now) + # self.arr = ds.to_xarray(engine="cfgrib").avg_uox + self.arr = ds.votemper + + # self.latitudes = self.arr.latitude.values + # self.longitudes = self.arr.longitude.values + self.latitudes = self.arr.coords["nav_lat"].values + lats = [] + for lat in self.latitudes: + lats.extend(lat) + self.latitudes = lats + self.longitudes = self.arr.nav_lon.values + lons = [] + for lon in self.longitudes: + lons.extend(lon) + self.longitudes = lons + + # self.arr["nav_lat_flat"] = (("grid_index",), self.arr.nav_lat.values.ravel()) + # self.arr["nav_lon_flat"] = (("grid_index",), self.arr.nav_lon.values.ravel()) + + # # Drop the x and y dimensions + # self.arr = self.arr.drop_dims(["x", "y"]) + nav_lat_flat = self.arr.nav_lat.values.ravel() + nav_lon_flat = self.arr.nav_lon.values.ravel() + deptht_flat = self.arr.deptht.values.ravel() + interm_data = self.arr.data[0] + new_interm_data = [] + for data in interm_data: + new_data = data.ravel() + new_interm_data.append(new_data) + print(len(interm_data)) + + # Create a new dimension, for example, "grid_index" + grid_index = np.arange(nav_lat_flat.size) + + # Add the flattened `nav_lat` and `nav_lon` as variables + # self.arr = self.arr.assign_coords(grid_index=("values", grid_index)) + nav_lat_flat_da = xr.DataArray(nav_lat_flat, dims=["grid_index"], coords={"grid_index": grid_index}) + nav_lon_flat_da = xr.DataArray(nav_lon_flat, dims=["grid_index"], coords={"grid_index": grid_index}) + + # Drop x and y from the original DataArray + # ds_cleaned = self.arr.drop(["x", "y"]) + + # Combine everything into a new Dataset if needed + # self.arr = xr.Dataset({ + # "original_data": ds_cleaned, + # "nav_lat_flat": nav_lat_flat_da, + # "nav_lon_flat": nav_lon_flat_da, + # }) + + self.arr = xr.DataArray( + new_interm_data, + dims=("deptht", "values"), + coords={ + "deptht": deptht_flat, + "values": grid_index, + }, + ) + + print(self.arr) + # self.arr = self.arr.rename({"y": "lat", "nav_lon": "longitude", "x": "values"}) + self.points = list(zip(self.latitudes, self.longitudes)) + print("FINISH SETTING UP POINTS") + self.options = { + "axis_config": [ + { + "axis_name": "values", + "transformations": [ + {"name": "mapper", "type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]} + ], + }, + ], + } + + @pytest.mark.fdb + def test_quad_tree_slicer_extract(self): + request = Request( + Select("deptht", [0.5058], method="nearest"), + # Select("time_counter", [pd.Timestamp("1979-02-15")]), + Box(["latitude", "longitude"], [-80, 50], [-50, 80]), + ) + + self.API = Polytope( + datacube=self.arr, + options=self.options, + engine_options=self.engine_options, + point_cloud_options=self.points, + ) + + time0 = time.time() + result = self.API.retrieve(request) + # result = self.API.slice(self.API.datacube, request.polytopes()) + time1 = time.time() + print("TIME TAKEN TO EXTRACT") + print(time1 - time0) + print(len(result.leaves)) + result.pprint() + + lats = [] + lons = [] + eccodes_lats = [] + eccodes_lons = [] + tol = 1e-8 + for i in range(len(result.leaves)): + cubepath = result.leaves[i].flatten() + lat = cubepath["latitude"][0] + lon = cubepath["longitude"][0] - 360 + lats.append(lat) + lons.append(lon) + nearest_points = find_nearest_latlon("../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.nc", lat, lon) + eccodes_lat = nearest_points[0][0]["lat"] + eccodes_lon = nearest_points[0][0]["lon"] - 360 + eccodes_lats.append(eccodes_lat) + eccodes_lons.append(eccodes_lon) + assert eccodes_lat - tol <= lat + assert lat <= eccodes_lat + tol + assert eccodes_lon - tol <= lon + assert lon <= eccodes_lon + tol + + # worldmap = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")) + # fig, ax = plt.subplots(figsize=(12, 6)) + # worldmap.plot(color="darkgrey", ax=ax) + + # plt.scatter(lons, lats, s=18, c="red", cmap="YlOrRd") + # plt.scatter(eccodes_lons, eccodes_lats, s=6, c="green") + # plt.colorbar(label="Temperature") + # plt.show() From 4225e943e52d7013d2a77c16d94b5d20b9bb7db1 Mon Sep 17 00:00:00 2001 From: mathleur Date: Fri, 10 Jan 2025 17:34:06 +0100 Subject: [PATCH 65/75] try to add icon grid example --- .../datacube/backends/datacube.py | 1 - polytope_feature/datacube/backends/fdb.py | 5 - polytope_feature/engine/hullslicer.py | 2 - polytope_feature/engine/quadtree_slicer.py | 3 - polytope_feature/polytope.py | 3 - tests/test_icon_grid_unstructured.py | 184 ++++++++++++++++++ tests/test_orca_irregular_grid_seas5.py | 50 ++--- 7 files changed, 212 insertions(+), 36 deletions(-) create mode 100644 tests/test_icon_grid_unstructured.py diff --git a/polytope_feature/datacube/backends/datacube.py b/polytope_feature/datacube/backends/datacube.py index 300a9dbdf..9f961b174 100644 --- a/polytope_feature/datacube/backends/datacube.py +++ b/polytope_feature/datacube/backends/datacube.py @@ -143,7 +143,6 @@ def get_mapper(self, axis): """ Get the type mapper for a subaxis of the datacube given by label """ - print(self._axes) return self._axes[axis] def remap_path(self, path: DatacubePath): diff --git a/polytope_feature/datacube/backends/fdb.py b/polytope_feature/datacube/backends/fdb.py index 87a034d64..fcf18996a 100644 --- a/polytope_feature/datacube/backends/fdb.py +++ b/polytope_feature/datacube/backends/fdb.py @@ -285,8 +285,6 @@ def get_2nd_last_values(self, requests, leaf_path=None): fdb_range_nodes = deepcopy(fdb_node_ranges[i]) key_value_path = {lat_child.axis.name: lat_child.values} ax = lat_child.axis - print("ABOVE CHILD LAYER BEFORE UNMAP") - print(leaf_path) (key_value_path, leaf_path, self.unwanted_path) = ax.unmap_path_key( key_value_path, leaf_path, self.unwanted_path ) @@ -306,9 +304,6 @@ def get_last_layer_before_leaf(self, requests, leaf_path, current_idx, fdb_range for i, c in enumerate(requests.children): # now c are the leaves of the initial tree key_value_path = {c.axis.name: c.values} - # print("LOOK NOW") - # print(leaf_path) - # print(key_value_path) leaf_path["index"] = c.indexes ax = c.axis (key_value_path, leaf_path, self.unwanted_path) = ax.unmap_path_key( diff --git a/polytope_feature/engine/hullslicer.py b/polytope_feature/engine/hullslicer.py index 183072bba..a5150ea83 100644 --- a/polytope_feature/engine/hullslicer.py +++ b/polytope_feature/engine/hullslicer.py @@ -93,8 +93,6 @@ def _build_sliceable_child(self, polytope, ax, node, datacube, values, next_node fvalue = ax.to_float(value) new_polytope = slice(polytope, ax.name, fvalue, slice_axis_idx) remapped_val = self.remap_values(ax, value) - print("AND NOW") - print(remapped_val) (child, next_nodes) = node.create_child(ax, remapped_val, next_nodes) child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) child["unsliced_polytopes"].remove(polytope) diff --git a/polytope_feature/engine/quadtree_slicer.py b/polytope_feature/engine/quadtree_slicer.py index 1ebdf209d..d15a3eedd 100644 --- a/polytope_feature/engine/quadtree_slicer.py +++ b/polytope_feature/engine/quadtree_slicer.py @@ -49,8 +49,6 @@ def extract_single(self, datacube, polytope): # need to find points of the datacube contained within the polytope # We do this by intersecting the datacube point cloud quad tree with the polytope here polygon_points = self.quad_tree.query_polygon(polytope) - print("HERE") - print(polygon_points) return polygon_points def _build_branch(self, ax, node, datacube, next_nodes, api): @@ -66,7 +64,6 @@ def _build_branch(self, ax, node, datacube, next_nodes, api): del node["unsliced_polytopes"] def _build_sliceable_child(self, polytope, ax, node, datacube, next_nodes, api): - print("ARE USING QUADTREE SLICER") extracted_points = self.extract_single(datacube, polytope) # TODO: add the sliced points as node to the tree and update the next_nodes if len(extracted_points) == 0: diff --git a/polytope_feature/polytope.py b/polytope_feature/polytope.py index f3155b389..5e575322b 100644 --- a/polytope_feature/polytope.py +++ b/polytope_feature/polytope.py @@ -136,9 +136,6 @@ def slice(self, datacube, polytopes: List[ConvexPolytope]): engine = self.find_engine(ax) next_nodes = [] interm_next_nodes = [] - print(current_nodes) - print("AND NEXT NODES") - print(next_nodes) for node in current_nodes: engine._build_branch(ax, node, datacube, interm_next_nodes, self) next_nodes.extend(interm_next_nodes) diff --git a/tests/test_icon_grid_unstructured.py b/tests/test_icon_grid_unstructured.py new file mode 100644 index 000000000..1bdecbd01 --- /dev/null +++ b/tests/test_icon_grid_unstructured.py @@ -0,0 +1,184 @@ +import geopandas as gpd +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import pytest +from earthkit import data +import xarray as xr +from helper_functions import find_nearest_latlon +import time +# import iris + +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select + + +class TestQuadTreeSlicer: + def setup_method(self, method): + self.engine_options = { + "step": "hullslicer", + "time": "hullslicer", + "heightAboveGround": "hullslicer", + "latitude": "quadtree", + "longitude": "quadtree", + } + print("SETTING UP THE XARRAY") + time_now = time.time() + + # ds = data.from_source( + # "file", "../../Downloads/icon-d2_germany_icosahedral_single-level_2025011000_024_2d_t_2m.grib2") + + # grid = xr.open_dataset("../../Downloads/icon_grid_0047_R19B07_L.nc", engine="netcdf4") + + ds = data.from_source( + "file", "../../Downloads/icon_global_icosahedral_single-level_2025011000_000_T_2M.grib2") + + grid = xr.open_dataset("../../Downloads/icon_grid_0026_R03B07_G.nc", engine="netcdf4") + + print(time.time()-time_now) + self.arr = ds.to_xarray(engine="cfgrib").t2m + + print(self.arr) + # print("AND GRID") + # print(grid.clon.values) + # print(len(grid.clon)) + self.longitudes = grid.clon.values + self.latitudes = grid.clat.values + print(grid) + + # self.arr = ds.votemper + + # self.latitudes = self.arr.latitude.values + # self.longitudes = self.arr.longitude.values + # self.latitudes = self.arr.coords["nav_lat"].values + # lats = [] + # for lat in self.latitudes: + # lats.extend(lat) + # self.latitudes = lats + # self.longitudes = self.arr.nav_lon.values + # lons = [] + # for lon in self.longitudes: + # lons.extend(lon) + # self.longitudes = lons + + # # self.arr["nav_lat_flat"] = (("grid_index",), self.arr.nav_lat.values.ravel()) + # # self.arr["nav_lon_flat"] = (("grid_index",), self.arr.nav_lon.values.ravel()) + + # # # Drop the x and y dimensions + # # self.arr = self.arr.drop_dims(["x", "y"]) + # nav_lat_flat = self.arr.nav_lat.values.ravel() + # nav_lon_flat = self.arr.nav_lon.values.ravel() + # deptht_flat = self.arr.deptht.values.ravel() + # interm_data = self.arr.data[0] + # new_interm_data = [] + # for data_pt in interm_data: + # new_data = data_pt.ravel() + # new_interm_data.append(new_data) + # print(len(interm_data)) + + # # Create a new dimension, for example, "grid_index" + # grid_index = np.arange(nav_lat_flat.size) + + # # Add the flattened `nav_lat` and `nav_lon` as variables + # # self.arr = self.arr.assign_coords(grid_index=("values", grid_index)) + # nav_lat_flat_da = xr.DataArray(nav_lat_flat, dims=["grid_index"], coords={"grid_index": grid_index}) + # nav_lon_flat_da = xr.DataArray(nav_lon_flat, dims=["grid_index"], coords={"grid_index": grid_index}) + + # # Drop x and y from the original DataArray + # # ds_cleaned = self.arr.drop(["x", "y"]) + + # # Combine everything into a new Dataset if needed + # # self.arr = xr.Dataset({ + # # "original_data": ds_cleaned, + # # "nav_lat_flat": nav_lat_flat_da, + # # "nav_lon_flat": nav_lon_flat_da, + # # }) + + # self.arr = xr.DataArray( + # new_interm_data, + # dims=("deptht", "values"), + # coords={ + # "deptht": deptht_flat, + # "values": grid_index, + # }, + # ) + + # print(self.arr) + # self.arr = self.arr.rename({"y": "lat", "nav_lon": "longitude", "x": "values"}) + self.points = list(zip(self.latitudes, self.longitudes)) + print((min(self.latitudes), max(self.latitudes), min(self.longitudes), max(self.longitudes))) + print("FINISH SETTING UP POINTS") + self.options = { + "axis_config": [ + { + "axis_name": "values", + "transformations": [ + {"name": "mapper", "type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]} + ], + }, + ], + } + + @pytest.mark.fdb + def test_quad_tree_slicer_extract(self): + import datetime + request = Request( + # Select("deptht", [0.5058], method="nearest"), + Select("time", [pd.Timestamp("2025-01-10")]), + Select("heightAboveGround", [2.0]), + Select("step", [datetime.timedelta(days=0)]), + # Select("time_counter", [pd.Timestamp("1979-02-15")]), + Box(["latitude", "longitude"], [0, 0], [10, 10]), + ) + + self.API = Polytope( + datacube=self.arr, + options=self.options, + engine_options=self.engine_options, + point_cloud_options=self.points, + ) + + time0 = time.time() + result = self.API.retrieve(request) + # result = self.API.slice(self.API.datacube, request.polytopes()) + time1 = time.time() + print("TIME TAKEN TO EXTRACT") + print(time1 - time0) + print(len(result.leaves)) + result.pprint() + + lats = [] + lons = [] + eccodes_lats = [] + eccodes_lons = [] + tol = 1e-8 + leaves = result.leaves + for i in range(len(leaves)): + cubepath = leaves[i].flatten() + lat = cubepath["latitude"][0] + lon = cubepath["longitude"][0] + lats.append(lat) + lons.append(lon) + + # # each variable in the netcdf file is a cube + # # cubes = iris.load('../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.nc') + # # iris.save(cubes, '../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.grib2') + # nearest_points = find_nearest_latlon( + # "../../Downloads/icon-d2_germany_icosahedral_single-level_2025011000_024_2d_t_2m.grib2", lat, lon) + # eccodes_lat = nearest_points[0][0]["lat"] + # eccodes_lon = nearest_points[0][0]["lon"] - 360 + # eccodes_lats.append(eccodes_lat) + # eccodes_lons.append(eccodes_lon) + # assert eccodes_lat - tol <= lat + # assert lat <= eccodes_lat + tol + # assert eccodes_lon - tol <= lon + # assert lon <= eccodes_lon + tol + + worldmap = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")) + fig, ax = plt.subplots(figsize=(12, 6)) + worldmap.plot(color="darkgrey", ax=ax) + + plt.scatter(lons, lats, s=18, c="red", cmap="YlOrRd") + plt.scatter(eccodes_lons, eccodes_lats, s=6, c="green") + plt.colorbar(label="Temperature") + plt.show() diff --git a/tests/test_orca_irregular_grid_seas5.py b/tests/test_orca_irregular_grid_seas5.py index 6d558da73..0fd0f1293 100644 --- a/tests/test_orca_irregular_grid_seas5.py +++ b/tests/test_orca_irregular_grid_seas5.py @@ -1,5 +1,5 @@ -# import geopandas as gpd -# import matplotlib.pyplot as plt +import geopandas as gpd +import matplotlib.pyplot as plt import numpy as np import pandas as pd import pytest @@ -7,6 +7,7 @@ import xarray as xr from helper_functions import find_nearest_latlon import time +# import iris from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select @@ -129,27 +130,32 @@ def test_quad_tree_slicer_extract(self): eccodes_lats = [] eccodes_lons = [] tol = 1e-8 - for i in range(len(result.leaves)): - cubepath = result.leaves[i].flatten() + leaves = result.leaves + for i in range(len(leaves)): + cubepath = leaves[i].flatten() lat = cubepath["latitude"][0] lon = cubepath["longitude"][0] - 360 lats.append(lat) lons.append(lon) - nearest_points = find_nearest_latlon("../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.nc", lat, lon) - eccodes_lat = nearest_points[0][0]["lat"] - eccodes_lon = nearest_points[0][0]["lon"] - 360 - eccodes_lats.append(eccodes_lat) - eccodes_lons.append(eccodes_lon) - assert eccodes_lat - tol <= lat - assert lat <= eccodes_lat + tol - assert eccodes_lon - tol <= lon - assert lon <= eccodes_lon + tol - - # worldmap = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")) - # fig, ax = plt.subplots(figsize=(12, 6)) - # worldmap.plot(color="darkgrey", ax=ax) - - # plt.scatter(lons, lats, s=18, c="red", cmap="YlOrRd") - # plt.scatter(eccodes_lons, eccodes_lats, s=6, c="green") - # plt.colorbar(label="Temperature") - # plt.show() + + # # each variable in the netcdf file is a cube + # # cubes = iris.load('../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.nc') + # # iris.save(cubes, '../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.grib2') + # nearest_points = find_nearest_latlon("../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.grib2", lat, lon) + # eccodes_lat = nearest_points[0][0]["lat"] + # eccodes_lon = nearest_points[0][0]["lon"] - 360 + # eccodes_lats.append(eccodes_lat) + # eccodes_lons.append(eccodes_lon) + # assert eccodes_lat - tol <= lat + # assert lat <= eccodes_lat + tol + # assert eccodes_lon - tol <= lon + # assert lon <= eccodes_lon + tol + + worldmap = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")) + fig, ax = plt.subplots(figsize=(12, 6)) + worldmap.plot(color="darkgrey", ax=ax) + + plt.scatter(lons, lats, s=18, c="red", cmap="YlOrRd") + plt.scatter(eccodes_lons, eccodes_lats, s=6, c="green") + plt.colorbar(label="Temperature") + plt.show() From 1ca57cc0899c3ab2161adf082b99d74d9350e2a6 Mon Sep 17 00:00:00 2001 From: mathleur Date: Mon, 13 Jan 2025 15:09:17 +0100 Subject: [PATCH 66/75] fix bug if polygon is in union, we can remove the right compressed axis --- polytope_feature/polytope.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/polytope_feature/polytope.py b/polytope_feature/polytope.py index 5e575322b..c787ceb00 100644 --- a/polytope_feature/polytope.py +++ b/polytope_feature/polytope.py @@ -182,5 +182,6 @@ def remove_compressed_axis_in_union(self, polytopes): for p in polytopes: if p.is_in_union: for axis in p.axes(): - if axis == self.compressed_axes[-1]: - self.compressed_axes.remove(axis) + if axis in self.compressed_axes: + if axis == self.compressed_axes[-1]: + self.compressed_axes.remove(axis) From 685205178d6db7cba81a177941a3ae46bd25217a Mon Sep 17 00:00:00 2001 From: mathleur Date: Thu, 16 Jan 2025 11:17:25 +0100 Subject: [PATCH 67/75] try to add unstructured grid on fdb backend --- .../mapper_types/irregular.py | 2 +- tests/test_icon_grid_unstructured_fdb.py | 134 ++++++++++++++++++ 2 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 tests/test_icon_grid_unstructured_fdb.py diff --git a/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py index adc0a43fc..bf38b6225 100644 --- a/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py +++ b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py @@ -21,5 +21,5 @@ def unmap(self, first_val, second_val, unmapped_idx=None): _md5_hash = { - 0: "None", + 0: "test", } diff --git a/tests/test_icon_grid_unstructured_fdb.py b/tests/test_icon_grid_unstructured_fdb.py new file mode 100644 index 000000000..7985a72bc --- /dev/null +++ b/tests/test_icon_grid_unstructured_fdb.py @@ -0,0 +1,134 @@ +from polytope_feature.shapes import Box, Select +from polytope_feature.polytope import Polytope, Request +import geopandas as gpd +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import pytest +from earthkit import data +import xarray as xr +from helper_functions import find_nearest_latlon +import time +# import iris +import os + + +class TestQuadTreeSlicer: + def setup_method(self, method): + self.engine_options = { + "step": "hullslicer", + "date": "hullslicer", + "levtype": "hullslicer", + "param": "hullslicer", + "latitude": "quadtree", + "longitude": "quadtree", + } + print("SETTING UP THE XARRAY") + time_now = time.time() + + # ds = data.from_source( + # "file", "../../Downloads/icon-d2_germany_icosahedral_single-level_2025011000_024_2d_t_2m.grib2") + + # grid = xr.open_dataset("../../Downloads/icon_grid_0047_R19B07_L.nc", engine="netcdf4") + + ds = data.from_source( + "file", "../../Downloads/icon_global_icosahedral_single-level_2025011000_000_T_2M.grib2") + + grid = xr.open_dataset("../../Downloads/icon_grid_0026_R03B07_G.nc", engine="netcdf4") + + print(time.time()-time_now) + self.arr = ds.to_xarray(engine="cfgrib").t2m + + self.longitudes = grid.clon.values + self.latitudes = grid.clat.values + + self.points = list(zip(self.latitudes, self.longitudes)) + print((min(self.latitudes), max(self.latitudes), min(self.longitudes), max(self.longitudes))) + print("FINISH SETTING UP POINTS") + self.options = { + "axis_config": [ + {"axis_name": "step", "transformations": [{"name": "type_change", "type": "int"}]}, + { + "axis_name": "date", + "transformations": [{"name": "merge", "other_axis": "time", "linkers": ["T", "00"]}], + }, + { + "axis_name": "values", + "transformations": [ + {"name": "mapper", "type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]} + ], + }, + ], + # "pre_path": {"time": "20250110", "heightAboveGround": "2"}, + "pre_path": {"date": "20250110"}, + } + + @pytest.mark.fdb + def test_quad_tree_slicer_extract(self): + import datetime + import pygribjump as gj + request = Request( + # Select("deptht", [0.5058], method="nearest"), + Select("date", [pd.Timestamp("20250110T0000")]), + # Select("heightAboveGround", [2.0]), + # Select("step", [datetime.timedelta(days=0)]), + Select("step", [0]), + Select("param", ["167"]), + Select("levtype", ["sfc"]), + # Select("time_counter", [pd.Timestamp("1979-02-15")]), + Box(["latitude", "longitude"], [0, 0], [10, 10]), + ) + + self.fdbdatacube = gj.GribJump() + + self.API = Polytope( + datacube=self.fdbdatacube, + options=self.options, + engine_options=self.engine_options, + point_cloud_options=self.points, + ) + + time0 = time.time() + result = self.API.retrieve(request) + # result = self.API.slice(self.API.datacube, request.polytopes()) + time1 = time.time() + print("TIME TAKEN TO EXTRACT") + print(time1 - time0) + print(len(result.leaves)) + result.pprint() + + lats = [] + lons = [] + eccodes_lats = [] + eccodes_lons = [] + tol = 1e-8 + leaves = result.leaves + for i in range(len(leaves)): + cubepath = leaves[i].flatten() + lat = cubepath["latitude"][0] + lon = cubepath["longitude"][0] + lats.append(lat) + lons.append(lon) + + # # each variable in the netcdf file is a cube + # # cubes = iris.load('../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.nc') + # # iris.save(cubes, '../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.grib2') + # nearest_points = find_nearest_latlon( + # "../../Downloads/icon-d2_germany_icosahedral_single-level_2025011000_024_2d_t_2m.grib2", lat, lon) + # eccodes_lat = nearest_points[0][0]["lat"] + # eccodes_lon = nearest_points[0][0]["lon"] - 360 + # eccodes_lats.append(eccodes_lat) + # eccodes_lons.append(eccodes_lon) + # assert eccodes_lat - tol <= lat + # assert lat <= eccodes_lat + tol + # assert eccodes_lon - tol <= lon + # assert lon <= eccodes_lon + tol + + worldmap = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")) + fig, ax = plt.subplots(figsize=(12, 6)) + worldmap.plot(color="darkgrey", ax=ax) + + plt.scatter(lons, lats, s=18, c="red", cmap="YlOrRd") + plt.scatter(eccodes_lons, eccodes_lats, s=6, c="green") + plt.colorbar(label="Temperature") + plt.show() From 4a06281a961714407a9353f3f270ddb42ba14a4f Mon Sep 17 00:00:00 2001 From: mathleur Date: Thu, 16 Jan 2025 16:05:02 +0100 Subject: [PATCH 68/75] make unstructured grid work with FDB and add example --- polytope_feature/datacube/backends/fdb.py | 1 + .../datacube_mappers/mapper_types/irregular.py | 1 - tests/test_icon_grid_unstructured_fdb.py | 8 +++++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/polytope_feature/datacube/backends/fdb.py b/polytope_feature/datacube/backends/fdb.py index fcf18996a..858cdafc7 100644 --- a/polytope_feature/datacube/backends/fdb.py +++ b/polytope_feature/datacube/backends/fdb.py @@ -134,6 +134,7 @@ def get(self, requests: TensorIndexTree, context=None): for i, key in enumerate(compressed_request[0].keys()): uncompressed_request[key] = combi[i] complete_uncompressed_request = (uncompressed_request, compressed_request[1], self.grid_md5_hash) + print(self.grid_md5_hash) complete_list_complete_uncompressed_requests.append(complete_uncompressed_request) complete_fdb_decoding_info.append(fdb_requests_decoding_info[j]) diff --git a/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py index bf38b6225..dcf222a8e 100644 --- a/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py +++ b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py @@ -21,5 +21,4 @@ def unmap(self, first_val, second_val, unmapped_idx=None): _md5_hash = { - 0: "test", } diff --git a/tests/test_icon_grid_unstructured_fdb.py b/tests/test_icon_grid_unstructured_fdb.py index 7985a72bc..5822c8fa7 100644 --- a/tests/test_icon_grid_unstructured_fdb.py +++ b/tests/test_icon_grid_unstructured_fdb.py @@ -9,6 +9,7 @@ import xarray as xr from helper_functions import find_nearest_latlon import time +import math # import iris import os @@ -39,8 +40,8 @@ def setup_method(self, method): print(time.time()-time_now) self.arr = ds.to_xarray(engine="cfgrib").t2m - self.longitudes = grid.clon.values - self.latitudes = grid.clat.values + self.longitudes = grid.clon.values * 180/math.pi + self.latitudes = grid.clat.values * 180/math.pi self.points = list(zip(self.latitudes, self.longitudes)) print((min(self.latitudes), max(self.latitudes), min(self.longitudes), max(self.longitudes))) @@ -55,7 +56,8 @@ def setup_method(self, method): { "axis_name": "values", "transformations": [ - {"name": "mapper", "type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]} + {"name": "mapper", "type": "irregular", "resolution": 0, "axes": [ + "latitude", "longitude"], "md5_hash": "f68071a8ac9bae4e965822afb963c04f"} ], }, ], From 86efa8d02fccd0c0746f32b90396c20b1ab5857d Mon Sep 17 00:00:00 2001 From: mathleur Date: Mon, 3 Feb 2025 16:27:25 +0100 Subject: [PATCH 69/75] start to add support for cyclic axes in quadtree slicer --- .../datacube_cyclic/datacube_cyclic.py | 28 +++++ .../datacube_transformations.py | 3 + polytope_feature/engine/engine.py | 13 ++ polytope_feature/engine/hullslicer.py | 22 ++-- polytope_feature/engine/quadtree_slicer.py | 74 ++++++++---- tests/test_icon_grid_unstructured.py | 112 ++++++++++++------ tests/test_quad_tree.py | 21 ++-- tests/test_quadtree_edge_cases.py | 8 +- tests/test_quadtree_indices.py | 16 +-- 9 files changed, 208 insertions(+), 89 deletions(-) diff --git a/polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py b/polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py index 3373dd082..55b9140a3 100644 --- a/polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py +++ b/polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py @@ -3,6 +3,7 @@ from ....utility.list_tools import unique from ..datacube_transformations import DatacubeAxisTransformation +from ....engine.slicing_tools import slice_in_two class DatacubeAxisCyclic(DatacubeAxisTransformation): @@ -28,6 +29,33 @@ def blocked_axes(self): def unwanted_axes(self): return [] + def remap_polytope(self, axis, polytope): + # TODO + # Find extents of the polytope on that axis + lower, upper, slice_axis_idx = polytope.extents(axis.name) + polytope_range = [lower, upper] + + # Find intervals within this range + intervals = self.to_intervals(polytope_range, [], axis) + + slice_vals = [] + + for interval in intervals[:-1]: + slice_vals.append(interval[1]) + + # Successively slice the polytope on each of the slice vals + sliced_polys = self.slice_polytope([polytope], slice_vals, slice_axis_idx) + return sliced_polys + + def slice_polytope(self, polytope_list, slice_vals, slice_axis_idx): + for slice_val in slice_vals: + polytope_to_slice = polytope_list[-1] + left_sliced_poly, right_sliced_poly = slice_in_two(polytope_to_slice, slice_val, slice_axis_idx) + polytope_list = polytope_list[:-1] + polytope_list.append(left_sliced_poly) + polytope_list.append(right_sliced_poly) + return polytope_list + def update_range(self, axis): axis.range = self.range diff --git a/polytope_feature/datacube/transformations/datacube_transformations.py b/polytope_feature/datacube/transformations/datacube_transformations.py index f174bf1aa..267200cf1 100644 --- a/polytope_feature/datacube/transformations/datacube_transformations.py +++ b/polytope_feature/datacube/transformations/datacube_transformations.py @@ -70,6 +70,9 @@ def remap(self, range, ranges, axis): def to_intervals(self, range, intervals, axis): return intervals + def remap_polytope(self, polytope): + return [polytope] + _type_to_datacube_transformation_lookup = { "mapper": "DatacubeMapper", diff --git a/polytope_feature/engine/engine.py b/polytope_feature/engine/engine.py index d9674aae1..f96f439df 100644 --- a/polytope_feature/engine/engine.py +++ b/polytope_feature/engine/engine.py @@ -5,6 +5,7 @@ from ..datacube.datacube_axis import UnsliceableDatacubeAxis from ..datacube.tensor_index_tree import TensorIndexTree from ..shapes import ConvexPolytope +import math class Engine: @@ -38,6 +39,18 @@ def default(): return HullSlicer() + def remap_values(self, ax, value): + remapped_val = self.remapped_vals.get((value, ax.name), None) + if remapped_val is None: + remapped_val = value + if ax.is_cyclic: + remapped_val_interm = ax.remap([value, value])[0] + remapped_val = (remapped_val_interm[0] + remapped_val_interm[1]) / 2 + if ax.can_round: + remapped_val = round(remapped_val, int(-math.log10(ax.tol))) + self.remapped_vals[(value, ax.name)] = remapped_val + return remapped_val + @abstractmethod def _build_branch(self, ax, node, datacube, next_nodes, api): pass diff --git a/polytope_feature/engine/hullslicer.py b/polytope_feature/engine/hullslicer.py index a5150ea83..6b11bc492 100644 --- a/polytope_feature/engine/hullslicer.py +++ b/polytope_feature/engine/hullslicer.py @@ -75,17 +75,17 @@ def find_values_between(self, polytope, ax, node, datacube, lower, upper): self.axis_values_between[(flattened_tuple, ax.name, lower, upper, method)] = values return values - def remap_values(self, ax, value): - remapped_val = self.remapped_vals.get((value, ax.name), None) - if remapped_val is None: - remapped_val = value - if ax.is_cyclic: - remapped_val_interm = ax.remap([value, value])[0] - remapped_val = (remapped_val_interm[0] + remapped_val_interm[1]) / 2 - if ax.can_round: - remapped_val = round(remapped_val, int(-math.log10(ax.tol))) - self.remapped_vals[(value, ax.name)] = remapped_val - return remapped_val + # def remap_values(self, ax, value): + # remapped_val = self.remapped_vals.get((value, ax.name), None) + # if remapped_val is None: + # remapped_val = value + # if ax.is_cyclic: + # remapped_val_interm = ax.remap([value, value])[0] + # remapped_val = (remapped_val_interm[0] + remapped_val_interm[1]) / 2 + # if ax.can_round: + # remapped_val = round(remapped_val, int(-math.log10(ax.tol))) + # self.remapped_vals[(value, ax.name)] = remapped_val + # return remapped_val def _build_sliceable_child(self, polytope, ax, node, datacube, values, next_nodes, slice_axis_idx, api): for i, value in enumerate(values): diff --git a/polytope_feature/engine/quadtree_slicer.py b/polytope_feature/engine/quadtree_slicer.py index d15a3eedd..4c9e11734 100644 --- a/polytope_feature/engine/quadtree_slicer.py +++ b/polytope_feature/engine/quadtree_slicer.py @@ -4,12 +4,14 @@ from ..datacube.quad_tree import QuadTree from ..datacube.tensor_index_tree import TensorIndexTree from .engine import Engine +from ..datacube.transformations.datacube_mappers import DatacubeMapper class QuadTreeSlicer(Engine): def __init__(self, points): # here need to construct quadtree, which is specific to datacube # NOTE: should this be inside of the datacube instead that we create the quadtree? + super().__init__() import time quad_tree = QuadTree() print("START BUILDING QUAD TREE") @@ -18,30 +20,31 @@ def __init__(self, points): print("FINISH BUILDING QUAD TREE") print(time.time()-time0) self.quad_tree = quad_tree + self.second_axis = None - # method to slice polygon against quadtree - def extract(self, datacube, polytopes): - # need to find the points to extract within the polytopes (polygons here in 2D) - request = TensorIndexTree() - extracted_points = [] - for polytope in polytopes: - assert len(polytope._axes) == 2 - extracted_points.extend(self.extract_single(datacube, polytope)) + # # method to slice polygon against quadtree + # def extract(self, datacube, polytopes): + # # need to find the points to extract within the polytopes (polygons here in 2D) + # request = TensorIndexTree() + # extracted_points = [] + # for polytope in polytopes: + # assert len(polytope._axes) == 2 + # extracted_points.extend(self.extract_single(datacube, polytope)) - # what data format do we return extracted points as? Append those points to the index tree? + # # what data format do we return extracted points as? Append those points to the index tree? - # NOTE: for now, we return the indices of the points in the point cloud, instead of lat/lon - for point in extracted_points: - # append each found leaf to the tree - idx = point.index - values_axis = IntDatacubeAxis() - values_axis.name = "values" - result = point.item - # TODO: make finding the axes objects nicer? - (child, _) = request.create_child(values_axis, idx, []) - child.result = result + # # NOTE: for now, we return the indices of the points in the point cloud, instead of lat/lon + # for point in extracted_points: + # # append each found leaf to the tree + # idx = point.index + # values_axis = IntDatacubeAxis() + # values_axis.name = "values" + # result = point.item + # # TODO: make finding the axes objects nicer? + # (child, _) = request.create_child(values_axis, idx, []) + # child.result = result - return request + # return request def extract_single(self, datacube, polytope): # extract a single polygon @@ -63,26 +66,51 @@ def _build_branch(self, ax, node, datacube, next_nodes, api): # It just modifies the next_nodes? del node["unsliced_polytopes"] + def break_up_polytope(self, polytope): + # TODO: slice polytope along all axes of it that are potentially cyclic + pass + def _build_sliceable_child(self, polytope, ax, node, datacube, next_nodes, api): extracted_points = self.extract_single(datacube, polytope) # TODO: add the sliced points as node to the tree and update the next_nodes if len(extracted_points) == 0: node.remove_branch() + lat_ax = ax + + if not self.second_axis: + for transform in ax.transformations: + if isinstance(transform, DatacubeMapper): + self.second_axis = datacube._axes[transform.grid_axes[1]] + for point in extracted_points: # convert to float for slicing value = point.index lat_val = point.item[0] lon_val = point.item[1] - lat_ax = ax + # lat_ax = ax # TODO: is there a nicer way to get this axis that does not depend on knowing # the axis name in advance? - lon_ax = datacube._axes["longitude"] + + # lon_ax = None + # NOTE: test to try to find the right second axis + # if not self.second_axis: + # for transform in ax.transformations: + # if isinstance(transform, DatacubeMapper): + # self.second_axis = datacube._axes[transform.grid_axes[1]] + # lon_ax = datacube._axes["longitude"] + + # remapped_lat_val = self.remap_values(lat_ax, lat_val) + # remapped_lon_val = self.remap_values(self.second_axis, lon_val) + # print(lon_val) + # print(remapped_lon_val) + + # TODO: need to remap the values before we add them to the tree here # store the native type (child, _) = node.create_child(lat_ax, lat_val, []) - (grand_child, _) = child.create_child(lon_ax, lon_val, []) + (grand_child, _) = child.create_child(self.second_axis, lon_val, []) # NOTE: the index of the point is stashed in the branches' result grand_child.indexes = [value] grand_child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) diff --git a/tests/test_icon_grid_unstructured.py b/tests/test_icon_grid_unstructured.py index 1bdecbd01..a530ed44b 100644 --- a/tests/test_icon_grid_unstructured.py +++ b/tests/test_icon_grid_unstructured.py @@ -8,6 +8,7 @@ from helper_functions import find_nearest_latlon import time # import iris +import math from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select @@ -42,8 +43,8 @@ def setup_method(self, method): # print("AND GRID") # print(grid.clon.values) # print(len(grid.clon)) - self.longitudes = grid.clon.values - self.latitudes = grid.clat.values + self.longitudes = grid.clon.values * (180 / math.pi) + self.latitudes = grid.clat.values * (180 / math.pi) print(grid) # self.arr = ds.votemper @@ -116,9 +117,17 @@ def setup_method(self, method): {"name": "mapper", "type": "irregular", "resolution": 1280, "axes": ["latitude", "longitude"]} ], }, + {"axis_name": "longitude", "transformations": [{"name": "cyclic", "range": [-180, 180]}]}, ], } + self.API = Polytope( + datacube=self.arr, + options=self.options, + engine_options=self.engine_options, + point_cloud_options=self.points, + ) + @pytest.mark.fdb def test_quad_tree_slicer_extract(self): import datetime @@ -128,15 +137,15 @@ def test_quad_tree_slicer_extract(self): Select("heightAboveGround", [2.0]), Select("step", [datetime.timedelta(days=0)]), # Select("time_counter", [pd.Timestamp("1979-02-15")]), - Box(["latitude", "longitude"], [0, 0], [10, 10]), + Box(["latitude", "longitude"], [0, 0], [5, 5]), ) - self.API = Polytope( - datacube=self.arr, - options=self.options, - engine_options=self.engine_options, - point_cloud_options=self.points, - ) + # self.API = Polytope( + # datacube=self.arr, + # options=self.options, + # engine_options=self.engine_options, + # point_cloud_options=self.points, + # ) time0 = time.time() result = self.API.retrieve(request) @@ -153,32 +162,65 @@ def test_quad_tree_slicer_extract(self): eccodes_lons = [] tol = 1e-8 leaves = result.leaves + # for i in range(len(leaves)): + # cubepath = leaves[i].flatten() + # lat = cubepath["latitude"][0] + # lon = cubepath["longitude"][0] + # lats.append(lat) + # lons.append(lon) + + # # # each variable in the netcdf file is a cube + # # # cubes = iris.load('../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.nc') + # # # iris.save(cubes, '../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.grib2') + # # nearest_points = find_nearest_latlon( + # # "../../Downloads/icon-d2_germany_icosahedral_single-level_2025011000_024_2d_t_2m.grib2", lat, lon) + # # eccodes_lat = nearest_points[0][0]["lat"] + # # eccodes_lon = nearest_points[0][0]["lon"] - 360 + # # eccodes_lats.append(eccodes_lat) + # # eccodes_lons.append(eccodes_lon) + # # assert eccodes_lat - tol <= lat + # # assert lat <= eccodes_lat + tol + # # assert eccodes_lon - tol <= lon + # # assert lon <= eccodes_lon + tol + + # worldmap = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")) + # fig, ax = plt.subplots(figsize=(12, 6)) + # worldmap.plot(color="darkgrey", ax=ax) + + # plt.scatter(lons, lats, s=18, c="red", cmap="YlOrRd") + # plt.scatter(eccodes_lons, eccodes_lats, s=6, c="green") + # plt.colorbar(label="Temperature") + # plt.show() + + @pytest.mark.fdb + def test_quad_tree_slicer_extract_cyclic(self): + import datetime + request = Request( + # Select("deptht", [0.5058], method="nearest"), + Select("time", [pd.Timestamp("2025-01-10")]), + Select("heightAboveGround", [2.0]), + Select("step", [datetime.timedelta(days=0)]), + # Select("time_counter", [pd.Timestamp("1979-02-15")]), + Box(["latitude", "longitude"], [0, 190], [1, 195]), + ) + + # self.API = Polytope( + # datacube=self.arr, + # options=self.options, + # engine_options=self.engine_options, + # point_cloud_options=self.points, + # ) + + time0 = time.time() + result = self.API.retrieve(request) + # result = self.API.slice(self.API.datacube, request.polytopes()) + time1 = time.time() + print("TIME TAKEN TO EXTRACT") + print(time1 - time0) + print(len(result.leaves)) + result.pprint() + leaves = result.leaves for i in range(len(leaves)): cubepath = leaves[i].flatten() - lat = cubepath["latitude"][0] lon = cubepath["longitude"][0] - lats.append(lat) - lons.append(lon) - - # # each variable in the netcdf file is a cube - # # cubes = iris.load('../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.nc') - # # iris.save(cubes, '../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.grib2') - # nearest_points = find_nearest_latlon( - # "../../Downloads/icon-d2_germany_icosahedral_single-level_2025011000_024_2d_t_2m.grib2", lat, lon) - # eccodes_lat = nearest_points[0][0]["lat"] - # eccodes_lon = nearest_points[0][0]["lon"] - 360 - # eccodes_lats.append(eccodes_lat) - # eccodes_lons.append(eccodes_lon) - # assert eccodes_lat - tol <= lat - # assert lat <= eccodes_lat + tol - # assert eccodes_lon - tol <= lon - # assert lon <= eccodes_lon + tol - - worldmap = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")) - fig, ax = plt.subplots(figsize=(12, 6)) - worldmap.plot(color="darkgrey", ax=ax) - - plt.scatter(lons, lats, s=18, c="red", cmap="YlOrRd") - plt.scatter(eccodes_lons, eccodes_lats, s=6, c="green") - plt.colorbar(label="Temperature") - plt.show() + assert -180 <= lon <= 180 diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index 2d52875eb..f9d513349 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -118,14 +118,18 @@ def test_quad_tree_slicer_extract(self): engine_options={"latitude": "quadtree", "longitude": "quadtree"}, point_cloud_options=points, ) - tree = self.API.engines["quadtree"].extract(self.API.datacube, [polytope]) - assert len(tree.leaves) == 3 - tree.pprint() + tree = self.API.engines["quadtree"].extract_single(self.API.datacube, polytope) + # tree = self.API.slice(self.API.datacube, [polytope]) + # assert len(tree.leaves) == 3 + assert len(tree) == 3 + # tree.pprint() points = [[10, 10], [80, 10], [-5, 5], [5, 50], [5, 10], [50, 10], [2, 10], [15, 15]] polytope = ConvexPolytope(["latitude", "longitude"], [[-10, 1], [20, 1], [5, 20]]) - tree = self.API.engines["quadtree"].extract(self.API.datacube, [polytope]) - assert len(tree.leaves) == 4 - tree.pprint() + tree = self.API.engines["quadtree"].extract_single(self.API.datacube, polytope) + # tree = self.API.slice(self.API.datacube, [polytope]) + # assert len(tree.leaves) == 4 + assert len(tree) == 4 + # tree.pprint() # @pytest.mark.skip("performance test") @pytest.mark.fdb @@ -152,8 +156,9 @@ def test_large_scale_extraction(self): ) print(time.time() - time0) time1 = time.time() - tree = self.API.engines["quadtree"].extract(self.API.datacube, [polytope]) + tree = self.API.engines["quadtree"].extract_single(self.API.datacube, polytope) print(time.time() - time1) # = 5.919436931610107 - print(len(tree.leaves)) # = 55100 + # print(len(tree.leaves)) # = 55100 + print(len(tree)) # = 55100 # NOTE: maybe for 2D qhull here, scipy is not the fastest # but use shewchuk's triangle algo: https://www.cs.cmu.edu/~quake/triangle.html? diff --git a/tests/test_quadtree_edge_cases.py b/tests/test_quadtree_edge_cases.py index 237ceac4c..8d78f5b60 100644 --- a/tests/test_quadtree_edge_cases.py +++ b/tests/test_quadtree_edge_cases.py @@ -50,7 +50,7 @@ def test_quad_tree_slicer_extract(self): engine_options={"latitude": "quadtree", "longitude": "quadtree"}, point_cloud_options=points, ) - tree = self.API.engines["quadtree"].extract(self.API.datacube, [polytope]) - tree.pprint() - assert len(tree.leaves) == 3 - assert set([leaf.flatten()["values"] for leaf in tree.leaves]) == set([(0,), (4,), (6,)]) + tree = self.API.engines["quadtree"].extract_single(self.API.datacube, polytope) + # tree.pprint() + assert len(tree) == 3 + assert set([leaf.index for leaf in tree]) == set([0, 4, 6]) diff --git a/tests/test_quadtree_indices.py b/tests/test_quadtree_indices.py index c84c4ee4d..21d9bab9d 100644 --- a/tests/test_quadtree_indices.py +++ b/tests/test_quadtree_indices.py @@ -50,10 +50,10 @@ def test_quad_tree_slicer_extract(self): engine_options={"latitude": "quadtree", "longitude": "quadtree"}, point_cloud_options=points, ) - tree = self.API.engines["quadtree"].extract(self.API.datacube, [polytope]) - assert len(tree.leaves) == 3 - assert set([leaf.flatten()["values"] for leaf in tree.leaves]) == set([(0,), (3,), (4,)]) - tree.pprint() + tree = self.API.engines["quadtree"].extract_single(self.API.datacube, polytope) + assert len(tree) == 3 + assert set([leaf.index for leaf in tree]) == set([0, 3, 4,]) + # tree.pprint() points = [[10, 10], [80, 10], [-5, 5], [5, 50], [5, 10], [50, 10], [2, 10], [15, 15]] polytope = ConvexPolytope(["latitude", "longitude"], [[-10, 1], [20, 1], [5, 20]]) self.API = Polytope( @@ -62,7 +62,7 @@ def test_quad_tree_slicer_extract(self): engine_options={"latitude": "quadtree", "longitude": "quadtree"}, point_cloud_options=points, ) - tree = self.API.engines["quadtree"].extract(self.API.datacube, [polytope]) - assert len(tree.leaves) == 4 - assert set([leaf.flatten()["values"] for leaf in tree.leaves]) == set([(0,), (2,), (4,), (6,)]) - tree.pprint() + tree = self.API.engines["quadtree"].extract_single(self.API.datacube, polytope) + assert len(tree) == 4 + assert set([leaf.index for leaf in tree]) == set([0, 2, 4, 6,]) + # tree.pprint() From 9aa917f955e9d414a2598e7c26823f70a95faadb Mon Sep 17 00:00:00 2001 From: mathleur Date: Tue, 4 Feb 2025 11:47:29 +0100 Subject: [PATCH 70/75] add cyclic axis support for unstructured grids --- polytope_feature/datacube/datacube_axis.py | 5 + polytope_feature/datacube/quad_tree.py | 4 +- .../datacube_cyclic/datacube_cyclic.py | 37 +++-- .../datacube_transformations.py | 4 +- polytope_feature/engine/hullslicer.py | 135 ++++++++--------- polytope_feature/engine/quadtree_slicer.py | 97 +++++++----- polytope_feature/engine/slicing_tools.py | 62 -------- polytope_feature/utility/slicing_tools.py | 140 ++++++++++++++++++ 8 files changed, 298 insertions(+), 186 deletions(-) delete mode 100644 polytope_feature/engine/slicing_tools.py create mode 100644 polytope_feature/utility/slicing_tools.py diff --git a/polytope_feature/datacube/datacube_axis.py b/polytope_feature/datacube/datacube_axis.py index bf4dd7b8d..d736cdfb6 100644 --- a/polytope_feature/datacube/datacube_axis.py +++ b/polytope_feature/datacube/datacube_axis.py @@ -100,6 +100,11 @@ def _remap_val_to_axis_range(self, value): value = transformation._remap_val_to_axis_range(value, self) return value + def remap_polytopes(self, polytopes): + for transformation in self.transformations[::-1]: + polytopes = transformation.remap_polytopes(self, polytopes) + return polytopes + def find_standard_indices_between(self, indexes, low, up, datacube, method=None): indexes_between_ranges = [] diff --git a/polytope_feature/datacube/quad_tree.py b/polytope_feature/datacube/quad_tree.py index 96c1ba44b..2ff65a40a 100644 --- a/polytope_feature/datacube/quad_tree.py +++ b/polytope_feature/datacube/quad_tree.py @@ -1,5 +1,5 @@ -from ..engine.hullslicer import slice -from ..engine.slicing_tools import slice_in_two +# from ..engine.hullslicer import slice +from ..utility.slicing_tools import slice_in_two, slice """ diff --git a/polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py b/polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py index 55b9140a3..213992470 100644 --- a/polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py +++ b/polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py @@ -3,7 +3,7 @@ from ....utility.list_tools import unique from ..datacube_transformations import DatacubeAxisTransformation -from ....engine.slicing_tools import slice_in_two +from ....utility.slicing_tools import slice_in_two class DatacubeAxisCyclic(DatacubeAxisTransformation): @@ -29,23 +29,36 @@ def blocked_axes(self): def unwanted_axes(self): return [] - def remap_polytope(self, axis, polytope): + def remap_polytopes(self, axis, polytopes): # TODO # Find extents of the polytope on that axis - lower, upper, slice_axis_idx = polytope.extents(axis.name) - polytope_range = [lower, upper] + all_sliced_polys = [] + for polytope in polytopes: + lower, upper, slice_axis_idx = polytope.extents(axis.name) + polytope_range = [lower, upper] - # Find intervals within this range - intervals = self.to_intervals(polytope_range, [], axis) + # Find intervals within this range + intervals = self.to_intervals(polytope_range, [], axis) - slice_vals = [] + slice_vals = [] - for interval in intervals[:-1]: - slice_vals.append(interval[1]) + print("WHAT ARE THE SLICE VALS?") - # Successively slice the polytope on each of the slice vals - sliced_polys = self.slice_polytope([polytope], slice_vals, slice_axis_idx) - return sliced_polys + for interval in intervals[:-1]: + slice_vals.append(interval[1]) + + print(slice_vals) + + # Successively slice the polytope on each of the slice vals + sliced_polys = self.slice_polytope([polytope], slice_vals, slice_axis_idx) + all_sliced_polys.extend(sliced_polys) + all_sliced_polys = [poly for poly in all_sliced_polys if poly is not None] + + # TODO: remap the right axis points of each of the polytopes to cyclic axis range + for poly in all_sliced_polys: + for point in poly.points: + point[slice_axis_idx] = self._remap_val_to_axis_range(point[slice_axis_idx], axis) + return all_sliced_polys def slice_polytope(self, polytope_list, slice_vals, slice_axis_idx): for slice_val in slice_vals: diff --git a/polytope_feature/datacube/transformations/datacube_transformations.py b/polytope_feature/datacube/transformations/datacube_transformations.py index 267200cf1..4bb9ca215 100644 --- a/polytope_feature/datacube/transformations/datacube_transformations.py +++ b/polytope_feature/datacube/transformations/datacube_transformations.py @@ -70,8 +70,8 @@ def remap(self, range, ranges, axis): def to_intervals(self, range, intervals, axis): return intervals - def remap_polytope(self, polytope): - return [polytope] + def remap_polytopes(self, axis, polytopes): + return polytopes _type_to_datacube_transformation_lookup = { diff --git a/polytope_feature/engine/hullslicer.py b/polytope_feature/engine/hullslicer.py index 6b11bc492..2fe4924cc 100644 --- a/polytope_feature/engine/hullslicer.py +++ b/polytope_feature/engine/hullslicer.py @@ -9,6 +9,7 @@ from ..utility.geometry import lerp from ..utility.list_tools import argmax, argmin from .engine import Engine +from ..utility.slicing_tools import slice class HullSlicer(Engine): @@ -226,70 +227,70 @@ def _build_branch(self, ax, node, datacube, next_nodes, api): # return request -def _find_intersects(polytope, slice_axis_idx, value): - intersects = [] - # Find all points above and below slice axis - above_slice = [p for p in polytope.points if p[slice_axis_idx] >= value] - below_slice = [p for p in polytope.points if p[slice_axis_idx] <= value] - - # Get the intersection of every pair above and below, this will create excess interior points - for a in above_slice: - for b in below_slice: - # edge is incident with slice plane, don't need these points - if a[slice_axis_idx] == b[slice_axis_idx]: - intersects.append(b) - continue - - # Linearly interpolate all coordinates of two points (a,b) of the polytope - interp_coeff = (value - b[slice_axis_idx]) / (a[slice_axis_idx] - b[slice_axis_idx]) - intersect = lerp(a, b, interp_coeff) - intersects.append(intersect) - return intersects - - -def _reduce_dimension(intersects, slice_axis_idx): - temp_intersects = [] - for point in intersects: - point = [p for i, p in enumerate(point) if i != slice_axis_idx] - temp_intersects.append(point) - return temp_intersects - - -def slice(polytope: ConvexPolytope, axis, value, slice_axis_idx): - # TODO: maybe these functions should go in the slicing tools? - if polytope.is_flat: - if value in chain(*polytope.points): - intersects = [[value]] - else: - return None - else: - intersects = _find_intersects(polytope, slice_axis_idx, value) - - if len(intersects) == 0: - return None - - # Reduce dimension of intersection points, removing slice axis - intersects = _reduce_dimension(intersects, slice_axis_idx) - - axes = copy(polytope._axes) - axes.remove(axis) - - if len(intersects) < len(intersects[0]) + 1: - return ConvexPolytope(axes, intersects) - # Compute convex hull (removing interior points) - if len(intersects[0]) == 0: - return None - elif len(intersects[0]) == 1: # qhull doesn't like 1D, do it ourselves - amin = argmin(intersects) - amax = argmax(intersects) - vertices = [amin, amax] - else: - try: - hull = scipy.spatial.ConvexHull(intersects) - vertices = hull.vertices - - except scipy.spatial.qhull.QhullError as e: - if "less than" or "flat" in str(e): - return ConvexPolytope(axes, intersects) - # Sliced result is simply the convex hull - return ConvexPolytope(axes, [intersects[i] for i in vertices]) +# def _find_intersects(polytope, slice_axis_idx, value): +# intersects = [] +# # Find all points above and below slice axis +# above_slice = [p for p in polytope.points if p[slice_axis_idx] >= value] +# below_slice = [p for p in polytope.points if p[slice_axis_idx] <= value] + +# # Get the intersection of every pair above and below, this will create excess interior points +# for a in above_slice: +# for b in below_slice: +# # edge is incident with slice plane, don't need these points +# if a[slice_axis_idx] == b[slice_axis_idx]: +# intersects.append(b) +# continue + +# # Linearly interpolate all coordinates of two points (a,b) of the polytope +# interp_coeff = (value - b[slice_axis_idx]) / (a[slice_axis_idx] - b[slice_axis_idx]) +# intersect = lerp(a, b, interp_coeff) +# intersects.append(intersect) +# return intersects + + +# def _reduce_dimension(intersects, slice_axis_idx): +# temp_intersects = [] +# for point in intersects: +# point = [p for i, p in enumerate(point) if i != slice_axis_idx] +# temp_intersects.append(point) +# return temp_intersects + + +# def slice(polytope: ConvexPolytope, axis, value, slice_axis_idx): +# # TODO: maybe these functions should go in the slicing tools? +# if polytope.is_flat: +# if value in chain(*polytope.points): +# intersects = [[value]] +# else: +# return None +# else: +# intersects = _find_intersects(polytope, slice_axis_idx, value) + +# if len(intersects) == 0: +# return None + +# # Reduce dimension of intersection points, removing slice axis +# intersects = _reduce_dimension(intersects, slice_axis_idx) + +# axes = copy(polytope._axes) +# axes.remove(axis) + +# if len(intersects) < len(intersects[0]) + 1: +# return ConvexPolytope(axes, intersects) +# # Compute convex hull (removing interior points) +# if len(intersects[0]) == 0: +# return None +# elif len(intersects[0]) == 1: # qhull doesn't like 1D, do it ourselves +# amin = argmin(intersects) +# amax = argmax(intersects) +# vertices = [amin, amax] +# else: +# try: +# hull = scipy.spatial.ConvexHull(intersects) +# vertices = hull.vertices + +# except scipy.spatial.qhull.QhullError as e: +# if "less than" or "flat" in str(e): +# return ConvexPolytope(axes, intersects) +# # Sliced result is simply the convex hull +# return ConvexPolytope(axes, [intersects[i] for i in vertices]) diff --git a/polytope_feature/engine/quadtree_slicer.py b/polytope_feature/engine/quadtree_slicer.py index 4c9e11734..92a152d24 100644 --- a/polytope_feature/engine/quadtree_slicer.py +++ b/polytope_feature/engine/quadtree_slicer.py @@ -66,53 +66,68 @@ def _build_branch(self, ax, node, datacube, next_nodes, api): # It just modifies the next_nodes? del node["unsliced_polytopes"] - def break_up_polytope(self, polytope): + def break_up_polytope(self, datacube, polytope): # TODO: slice polytope along all axes of it that are potentially cyclic - pass + new_polytopes = [polytope] + for ax in polytope.axes(): + axis = datacube._axes[ax] + if axis.is_cyclic: + new_polytopes = axis.remap_polytopes(new_polytopes) + return new_polytopes def _build_sliceable_child(self, polytope, ax, node, datacube, next_nodes, api): - extracted_points = self.extract_single(datacube, polytope) - # TODO: add the sliced points as node to the tree and update the next_nodes - if len(extracted_points) == 0: - node.remove_branch() - - lat_ax = ax + pre_sliced_polytopes = self.break_up_polytope(datacube, polytope) if not self.second_axis: for transform in ax.transformations: if isinstance(transform, DatacubeMapper): self.second_axis = datacube._axes[transform.grid_axes[1]] - for point in extracted_points: - # convert to float for slicing - value = point.index - lat_val = point.item[0] - lon_val = point.item[1] - # lat_ax = ax - - # TODO: is there a nicer way to get this axis that does not depend on knowing - # the axis name in advance? - - # lon_ax = None - # NOTE: test to try to find the right second axis - # if not self.second_axis: - # for transform in ax.transformations: - # if isinstance(transform, DatacubeMapper): - # self.second_axis = datacube._axes[transform.grid_axes[1]] - # lon_ax = datacube._axes["longitude"] - - # remapped_lat_val = self.remap_values(lat_ax, lat_val) - # remapped_lon_val = self.remap_values(self.second_axis, lon_val) - # print(lon_val) - # print(remapped_lon_val) - - # TODO: need to remap the values before we add them to the tree here - - # store the native type - (child, _) = node.create_child(lat_ax, lat_val, []) - (grand_child, _) = child.create_child(self.second_axis, lon_val, []) - # NOTE: the index of the point is stashed in the branches' result - grand_child.indexes = [value] - grand_child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) - grand_child["unsliced_polytopes"].remove(polytope) - # TODO: but now what happens to the second axis in the point cloud?? Do we create a second node for it?? + node["unsliced_polytopes"].remove(polytope) + + for poly in pre_sliced_polytopes: + node["unsliced_polytopes"].add(poly) + + print("HERE NOW LOOK") + print(len(pre_sliced_polytopes)) + print(pre_sliced_polytopes) + print(poly.points) + + extracted_points = self.extract_single(datacube, poly) + # TODO: add the sliced points as node to the tree and update the next_nodes + if len(extracted_points) == 0: + node.remove_branch() + + for point in extracted_points: + # convert to float for slicing + value = point.index + lat_val = point.item[0] + lon_val = point.item[1] + # lat_ax = ax + + # TODO: is there a nicer way to get this axis that does not depend on knowing + # the axis name in advance? + + # lon_ax = None + # NOTE: test to try to find the right second axis + # if not self.second_axis: + # for transform in ax.transformations: + # if isinstance(transform, DatacubeMapper): + # self.second_axis = datacube._axes[transform.grid_axes[1]] + # lon_ax = datacube._axes["longitude"] + + # remapped_lat_val = self.remap_values(lat_ax, lat_val) + # remapped_lon_val = self.remap_values(self.second_axis, lon_val) + # print(lon_val) + # print(remapped_lon_val) + + # TODO: need to remap the values before we add them to the tree here + + # store the native type + (child, _) = node.create_child(ax, lat_val, []) + (grand_child, _) = child.create_child(self.second_axis, lon_val, []) + # NOTE: the index of the point is stashed in the branches' result + grand_child.indexes = [value] + grand_child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) + grand_child["unsliced_polytopes"].remove(poly) + # TODO: but now what happens to the second axis in the point cloud?? Do we create a second node for it?? diff --git a/polytope_feature/engine/slicing_tools.py b/polytope_feature/engine/slicing_tools.py deleted file mode 100644 index a96645ecb..000000000 --- a/polytope_feature/engine/slicing_tools.py +++ /dev/null @@ -1,62 +0,0 @@ -import scipy - -from ..shapes import ConvexPolytope -from .hullslicer import _find_intersects - - -def slice_in_two(polytope: ConvexPolytope, value, slice_axis_idx): - if polytope is None: - return (None, None) - else: - assert len(polytope.points[0]) == 2 - - x_lower, x_upper, _ = polytope.extents(polytope._axes[slice_axis_idx]) - - intersects = _find_intersects(polytope, slice_axis_idx, value) - - if len(intersects) == 0: - if x_upper <= value: - # The vertical slicing line does not intersect the polygon, which is on the left of the line - # So we keep the same polygon for now since it is unsliced - left_polygon = polytope - right_polygon = None - if value < x_lower: - left_polygon = None - right_polygon = polytope - else: - left_points = [p for p in polytope.points if p[slice_axis_idx] <= value] - right_points = [p for p in polytope.points if p[slice_axis_idx] >= value] - left_points.extend(intersects) - right_points.extend(intersects) - # find left polygon - try: - hull = scipy.spatial.ConvexHull(left_points) - vertices = hull.vertices - except scipy.spatial.qhull.QhullError as e: - if "less than" or "is flat" in str(e): - # NOTE: this happens when we slice a polygon that has a border which coincides with the quadrant - # line and we slice this additional border with the quadrant line again. - # This is not actually a polygon we want to consider so we ignore it - vertices = None - - if vertices is not None: - left_polygon = ConvexPolytope(polytope._axes, [left_points[i] for i in vertices]) - else: - left_polygon = None - - try: - hull = scipy.spatial.ConvexHull(right_points) - vertices = hull.vertices - except scipy.spatial.qhull.QhullError as e: - # NOTE: this happens when we slice a polygon that has a border which coincides with the quadrant - # line and we slice this additional border with the quadrant line again. - # This is not actually a polygon we want to consider so we ignore it - if "less than" or "is flat" in str(e): - vertices = None - - if vertices is not None: - right_polygon = ConvexPolytope(polytope._axes, [right_points[i] for i in vertices]) - else: - right_polygon = None - - return (left_polygon, right_polygon) diff --git a/polytope_feature/utility/slicing_tools.py b/polytope_feature/utility/slicing_tools.py new file mode 100644 index 000000000..1d37d646c --- /dev/null +++ b/polytope_feature/utility/slicing_tools.py @@ -0,0 +1,140 @@ +import scipy + +from ..shapes import ConvexPolytope + +from copy import copy +from itertools import chain + +import scipy.spatial + +from ..shapes import ConvexPolytope +from .geometry import lerp +from .list_tools import argmax, argmin +# from ..engine.hullslicer import _find_intersects + + +def slice_in_two(polytope: ConvexPolytope, value, slice_axis_idx): + if polytope is None: + return (None, None) + else: + assert len(polytope.points[0]) == 2 + + x_lower, x_upper, _ = polytope.extents(polytope._axes[slice_axis_idx]) + + intersects = _find_intersects(polytope, slice_axis_idx, value) + + if len(intersects) == 0: + if x_upper <= value: + # The vertical slicing line does not intersect the polygon, which is on the left of the line + # So we keep the same polygon for now since it is unsliced + left_polygon = polytope + right_polygon = None + if value < x_lower: + left_polygon = None + right_polygon = polytope + else: + left_points = [p for p in polytope.points if p[slice_axis_idx] <= value] + right_points = [p for p in polytope.points if p[slice_axis_idx] >= value] + left_points.extend(intersects) + right_points.extend(intersects) + # find left polygon + try: + hull = scipy.spatial.ConvexHull(left_points) + vertices = hull.vertices + except scipy.spatial.qhull.QhullError as e: + if "less than" or "is flat" in str(e): + # NOTE: this happens when we slice a polygon that has a border which coincides with the quadrant + # line and we slice this additional border with the quadrant line again. + # This is not actually a polygon we want to consider so we ignore it + vertices = None + + if vertices is not None: + left_polygon = ConvexPolytope(polytope._axes, [left_points[i] for i in vertices]) + else: + left_polygon = None + + try: + hull = scipy.spatial.ConvexHull(right_points) + vertices = hull.vertices + except scipy.spatial.qhull.QhullError as e: + # NOTE: this happens when we slice a polygon that has a border which coincides with the quadrant + # line and we slice this additional border with the quadrant line again. + # This is not actually a polygon we want to consider so we ignore it + if "less than" or "is flat" in str(e): + vertices = None + + if vertices is not None: + right_polygon = ConvexPolytope(polytope._axes, [right_points[i] for i in vertices]) + else: + right_polygon = None + + return (left_polygon, right_polygon) + + +def _find_intersects(polytope, slice_axis_idx, value): + intersects = [] + # Find all points above and below slice axis + above_slice = [p for p in polytope.points if p[slice_axis_idx] >= value] + below_slice = [p for p in polytope.points if p[slice_axis_idx] <= value] + + # Get the intersection of every pair above and below, this will create excess interior points + for a in above_slice: + for b in below_slice: + # edge is incident with slice plane, don't need these points + if a[slice_axis_idx] == b[slice_axis_idx]: + intersects.append(b) + continue + + # Linearly interpolate all coordinates of two points (a,b) of the polytope + interp_coeff = (value - b[slice_axis_idx]) / (a[slice_axis_idx] - b[slice_axis_idx]) + intersect = lerp(a, b, interp_coeff) + intersects.append(intersect) + return intersects + + +def _reduce_dimension(intersects, slice_axis_idx): + temp_intersects = [] + for point in intersects: + point = [p for i, p in enumerate(point) if i != slice_axis_idx] + temp_intersects.append(point) + return temp_intersects + + +def slice(polytope: ConvexPolytope, axis, value, slice_axis_idx): + # TODO: maybe these functions should go in the slicing tools? + if polytope.is_flat: + if value in chain(*polytope.points): + intersects = [[value]] + else: + return None + else: + intersects = _find_intersects(polytope, slice_axis_idx, value) + + if len(intersects) == 0: + return None + + # Reduce dimension of intersection points, removing slice axis + intersects = _reduce_dimension(intersects, slice_axis_idx) + + axes = copy(polytope._axes) + axes.remove(axis) + + if len(intersects) < len(intersects[0]) + 1: + return ConvexPolytope(axes, intersects) + # Compute convex hull (removing interior points) + if len(intersects[0]) == 0: + return None + elif len(intersects[0]) == 1: # qhull doesn't like 1D, do it ourselves + amin = argmin(intersects) + amax = argmax(intersects) + vertices = [amin, amax] + else: + try: + hull = scipy.spatial.ConvexHull(intersects) + vertices = hull.vertices + + except scipy.spatial.qhull.QhullError as e: + if "less than" or "flat" in str(e): + return ConvexPolytope(axes, intersects) + # Sliced result is simply the convex hull + return ConvexPolytope(axes, [intersects[i] for i in vertices]) From 504b5c8c052aea841e1380d9f9c0ab5afc4464e3 Mon Sep 17 00:00:00 2001 From: mathleur Date: Tue, 4 Feb 2025 12:03:26 +0100 Subject: [PATCH 71/75] fix test --- tests/test_quad_tree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index f9d513349..8ed8e1285 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -2,7 +2,7 @@ from polytope_feature.datacube.quad_tree import QuadNode from polytope_feature.engine.quadtree_slicer import QuadTreeSlicer -from polytope_feature.engine.slicing_tools import slice_in_two +from polytope_feature.utility.slicing_tools import slice_in_two from polytope_feature.polytope import Polytope from polytope_feature.shapes import Box, ConvexPolytope From 11a2d2721e2cb6d5f0d13d229151fb5fc26460c8 Mon Sep 17 00:00:00 2001 From: mathleur Date: Tue, 4 Feb 2025 13:26:02 +0100 Subject: [PATCH 72/75] clean up --- polytope_feature/datacube/quad_tree.py | 3 +- .../datacube_cyclic/datacube_cyclic.py | 8 +- .../mapper_types/irregular.py | 3 +- polytope_feature/engine/engine.py | 2 +- polytope_feature/engine/hullslicer.py | 155 +----------------- polytope_feature/engine/quadtree_slicer.py | 65 +------- polytope_feature/utility/slicing_tools.py | 6 +- tests/test_icon_grid_unstructured.py | 133 +++------------ tests/test_icon_grid_unstructured_fdb.py | 20 ++- tests/test_orca_irregular_grid_seas5.py | 48 +----- tests/test_quad_tree.py | 2 +- tests/test_quadtree_indices.py | 17 +- 12 files changed, 65 insertions(+), 397 deletions(-) diff --git a/polytope_feature/datacube/quad_tree.py b/polytope_feature/datacube/quad_tree.py index 2ff65a40a..4dd5d3020 100644 --- a/polytope_feature/datacube/quad_tree.py +++ b/polytope_feature/datacube/quad_tree.py @@ -1,5 +1,4 @@ -# from ..engine.hullslicer import slice -from ..utility.slicing_tools import slice_in_two, slice +from ..utility.slicing_tools import slice, slice_in_two """ diff --git a/polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py b/polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py index 213992470..600e3718d 100644 --- a/polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py +++ b/polytope_feature/datacube/transformations/datacube_cyclic/datacube_cyclic.py @@ -2,8 +2,8 @@ from copy import deepcopy from ....utility.list_tools import unique -from ..datacube_transformations import DatacubeAxisTransformation from ....utility.slicing_tools import slice_in_two +from ..datacube_transformations import DatacubeAxisTransformation class DatacubeAxisCyclic(DatacubeAxisTransformation): @@ -30,7 +30,6 @@ def unwanted_axes(self): return [] def remap_polytopes(self, axis, polytopes): - # TODO # Find extents of the polytope on that axis all_sliced_polys = [] for polytope in polytopes: @@ -42,19 +41,14 @@ def remap_polytopes(self, axis, polytopes): slice_vals = [] - print("WHAT ARE THE SLICE VALS?") - for interval in intervals[:-1]: slice_vals.append(interval[1]) - print(slice_vals) - # Successively slice the polytope on each of the slice vals sliced_polys = self.slice_polytope([polytope], slice_vals, slice_axis_idx) all_sliced_polys.extend(sliced_polys) all_sliced_polys = [poly for poly in all_sliced_polys if poly is not None] - # TODO: remap the right axis points of each of the polytopes to cyclic axis range for poly in all_sliced_polys: for point in poly.points: point[slice_axis_idx] = self._remap_val_to_axis_range(point[slice_axis_idx], axis) diff --git a/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py index dcf222a8e..0dad07552 100644 --- a/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py +++ b/polytope_feature/datacube/transformations/datacube_mappers/mapper_types/irregular.py @@ -20,5 +20,4 @@ def unmap(self, first_val, second_val, unmapped_idx=None): return unmapped_idx[0] -_md5_hash = { -} +_md5_hash = {} diff --git a/polytope_feature/engine/engine.py b/polytope_feature/engine/engine.py index f96f439df..23d7e6238 100644 --- a/polytope_feature/engine/engine.py +++ b/polytope_feature/engine/engine.py @@ -1,3 +1,4 @@ +import math from abc import abstractmethod from typing import List @@ -5,7 +6,6 @@ from ..datacube.datacube_axis import UnsliceableDatacubeAxis from ..datacube.tensor_index_tree import TensorIndexTree from ..shapes import ConvexPolytope -import math class Engine: diff --git a/polytope_feature/engine/hullslicer.py b/polytope_feature/engine/hullslicer.py index 2fe4924cc..a505a888f 100644 --- a/polytope_feature/engine/hullslicer.py +++ b/polytope_feature/engine/hullslicer.py @@ -1,15 +1,8 @@ -import math from copy import copy -from itertools import chain -import scipy.spatial - -from ..shapes import ConvexPolytope from ..utility.exceptions import UnsliceableShapeError -from ..utility.geometry import lerp -from ..utility.list_tools import argmax, argmin -from .engine import Engine from ..utility.slicing_tools import slice +from .engine import Engine class HullSlicer(Engine): @@ -76,18 +69,6 @@ def find_values_between(self, polytope, ax, node, datacube, lower, upper): self.axis_values_between[(flattened_tuple, ax.name, lower, upper, method)] = values return values - # def remap_values(self, ax, value): - # remapped_val = self.remapped_vals.get((value, ax.name), None) - # if remapped_val is None: - # remapped_val = value - # if ax.is_cyclic: - # remapped_val_interm = ax.remap([value, value])[0] - # remapped_val = (remapped_val_interm[0] + remapped_val_interm[1]) / 2 - # if ax.can_round: - # remapped_val = round(remapped_val, int(-math.log10(ax.tol))) - # self.remapped_vals[(value, ax.name)] = remapped_val - # return remapped_val - def _build_sliceable_child(self, polytope, ax, node, datacube, values, next_nodes, slice_axis_idx, api): for i, value in enumerate(values): if i == 0 or ax.name not in api.compressed_axes: @@ -160,137 +141,3 @@ def _build_branch(self, ax, node, datacube, next_nodes, api): ) del node["unsliced_polytopes"] - - # def find_compressed_axes(self, datacube, polytopes): - # # First determine compressable axes from input polytopes - # compressable_axes = [] - # for polytope in polytopes: - # if polytope.is_orthogonal: - # for ax in polytope.axes(): - # compressable_axes.append(ax) - # # Cross check this list with list of compressable axis from datacube - # # (should not include any merged or coupled axes) - # for compressed_axis in compressable_axes: - # if compressed_axis in datacube.compressed_axes: - # self.compressed_axes.append(compressed_axis) - # # add the last axis of the grid always (longitude) as a compressed axis - # k, last_value = _, datacube.axes[k] = datacube.axes.popitem() - # self.compressed_axes.append(k) - - # def remove_compressed_axis_in_union(self, polytopes): - # for p in polytopes: - # if p.is_in_union: - # for axis in p.axes(): - # if axis == self.compressed_axes[-1]: - # self.compressed_axes.remove(axis) - - # def extract(self, datacube: Datacube, polytopes: List[ConvexPolytope]): - # # Determine list of axes to compress - # self.find_compressed_axes(datacube, polytopes) - - # # remove compressed axes which are in a union - # self.remove_compressed_axis_in_union(polytopes) - - # # Convert the polytope points to float type to support triangulation and interpolation - # for p in polytopes: - # self._unique_continuous_points(p, datacube) - - # groups, input_axes = group(polytopes) - # datacube.validate(input_axes) - # request = TensorIndexTree() - # combinations = tensor_product(groups) - - # # NOTE: could optimise here if we know combinations will always be for one request. - # # Then we do not need to create a new index tree and merge it to request, but can just - # # directly work on request and return it... - - # for c in combinations: - # r = TensorIndexTree() - # new_c = [] - # for combi in c: - # if isinstance(combi, list): - # new_c.extend(combi) - # else: - # new_c.append(combi) - # r["unsliced_polytopes"] = set(new_c) - # current_nodes = [r] - # for ax in datacube.axes.values(): - # next_nodes = [] - # interm_next_nodes = [] - # for node in current_nodes: - # self._build_branch(ax, node, datacube, interm_next_nodes) - # next_nodes.extend(interm_next_nodes) - # interm_next_nodes = [] - # current_nodes = next_nodes - - # request.merge(r) - # return request - - -# def _find_intersects(polytope, slice_axis_idx, value): -# intersects = [] -# # Find all points above and below slice axis -# above_slice = [p for p in polytope.points if p[slice_axis_idx] >= value] -# below_slice = [p for p in polytope.points if p[slice_axis_idx] <= value] - -# # Get the intersection of every pair above and below, this will create excess interior points -# for a in above_slice: -# for b in below_slice: -# # edge is incident with slice plane, don't need these points -# if a[slice_axis_idx] == b[slice_axis_idx]: -# intersects.append(b) -# continue - -# # Linearly interpolate all coordinates of two points (a,b) of the polytope -# interp_coeff = (value - b[slice_axis_idx]) / (a[slice_axis_idx] - b[slice_axis_idx]) -# intersect = lerp(a, b, interp_coeff) -# intersects.append(intersect) -# return intersects - - -# def _reduce_dimension(intersects, slice_axis_idx): -# temp_intersects = [] -# for point in intersects: -# point = [p for i, p in enumerate(point) if i != slice_axis_idx] -# temp_intersects.append(point) -# return temp_intersects - - -# def slice(polytope: ConvexPolytope, axis, value, slice_axis_idx): -# # TODO: maybe these functions should go in the slicing tools? -# if polytope.is_flat: -# if value in chain(*polytope.points): -# intersects = [[value]] -# else: -# return None -# else: -# intersects = _find_intersects(polytope, slice_axis_idx, value) - -# if len(intersects) == 0: -# return None - -# # Reduce dimension of intersection points, removing slice axis -# intersects = _reduce_dimension(intersects, slice_axis_idx) - -# axes = copy(polytope._axes) -# axes.remove(axis) - -# if len(intersects) < len(intersects[0]) + 1: -# return ConvexPolytope(axes, intersects) -# # Compute convex hull (removing interior points) -# if len(intersects[0]) == 0: -# return None -# elif len(intersects[0]) == 1: # qhull doesn't like 1D, do it ourselves -# amin = argmin(intersects) -# amax = argmax(intersects) -# vertices = [amin, amax] -# else: -# try: -# hull = scipy.spatial.ConvexHull(intersects) -# vertices = hull.vertices - -# except scipy.spatial.qhull.QhullError as e: -# if "less than" or "flat" in str(e): -# return ConvexPolytope(axes, intersects) -# # Sliced result is simply the convex hull -# return ConvexPolytope(axes, [intersects[i] for i in vertices]) diff --git a/polytope_feature/engine/quadtree_slicer.py b/polytope_feature/engine/quadtree_slicer.py index 92a152d24..6fd0236b2 100644 --- a/polytope_feature/engine/quadtree_slicer.py +++ b/polytope_feature/engine/quadtree_slicer.py @@ -1,10 +1,8 @@ from copy import copy -from ..datacube.datacube_axis import IntDatacubeAxis from ..datacube.quad_tree import QuadTree -from ..datacube.tensor_index_tree import TensorIndexTree -from .engine import Engine from ..datacube.transformations.datacube_mappers import DatacubeMapper +from .engine import Engine class QuadTreeSlicer(Engine): @@ -12,40 +10,11 @@ def __init__(self, points): # here need to construct quadtree, which is specific to datacube # NOTE: should this be inside of the datacube instead that we create the quadtree? super().__init__() - import time quad_tree = QuadTree() - print("START BUILDING QUAD TREE") - time0 = time.time() quad_tree.build_point_tree(points) - print("FINISH BUILDING QUAD TREE") - print(time.time()-time0) self.quad_tree = quad_tree self.second_axis = None - # # method to slice polygon against quadtree - # def extract(self, datacube, polytopes): - # # need to find the points to extract within the polytopes (polygons here in 2D) - # request = TensorIndexTree() - # extracted_points = [] - # for polytope in polytopes: - # assert len(polytope._axes) == 2 - # extracted_points.extend(self.extract_single(datacube, polytope)) - - # # what data format do we return extracted points as? Append those points to the index tree? - - # # NOTE: for now, we return the indices of the points in the point cloud, instead of lat/lon - # for point in extracted_points: - # # append each found leaf to the tree - # idx = point.index - # values_axis = IntDatacubeAxis() - # values_axis.name = "values" - # result = point.item - # # TODO: make finding the axes objects nicer? - # (child, _) = request.create_child(values_axis, idx, []) - # child.result = result - - # return request - def extract_single(self, datacube, polytope): # extract a single polygon @@ -60,14 +29,11 @@ def _build_branch(self, ax, node, datacube, next_nodes, api): # here, first check if the axis is an unsliceable axis and directly build node if it is # NOTE: here, we only have sliceable children, since the unsliceable children are handled by the - # hullslicer engine? IS THIS TRUE? + # hullslicer engine? self._build_sliceable_child(polytope, ax, node, datacube, next_nodes, api) - # TODO: what does this function actually return and what should it return? - # It just modifies the next_nodes? del node["unsliced_polytopes"] def break_up_polytope(self, datacube, polytope): - # TODO: slice polytope along all axes of it that are potentially cyclic new_polytopes = [polytope] for ax in polytope.axes(): axis = datacube._axes[ax] @@ -88,13 +54,8 @@ def _build_sliceable_child(self, polytope, ax, node, datacube, next_nodes, api): for poly in pre_sliced_polytopes: node["unsliced_polytopes"].add(poly) - print("HERE NOW LOOK") - print(len(pre_sliced_polytopes)) - print(pre_sliced_polytopes) - print(poly.points) - extracted_points = self.extract_single(datacube, poly) - # TODO: add the sliced points as node to the tree and update the next_nodes + # add the sliced points as node to the tree and update the next_nodes if len(extracted_points) == 0: node.remove_branch() @@ -103,25 +64,6 @@ def _build_sliceable_child(self, polytope, ax, node, datacube, next_nodes, api): value = point.index lat_val = point.item[0] lon_val = point.item[1] - # lat_ax = ax - - # TODO: is there a nicer way to get this axis that does not depend on knowing - # the axis name in advance? - - # lon_ax = None - # NOTE: test to try to find the right second axis - # if not self.second_axis: - # for transform in ax.transformations: - # if isinstance(transform, DatacubeMapper): - # self.second_axis = datacube._axes[transform.grid_axes[1]] - # lon_ax = datacube._axes["longitude"] - - # remapped_lat_val = self.remap_values(lat_ax, lat_val) - # remapped_lon_val = self.remap_values(self.second_axis, lon_val) - # print(lon_val) - # print(remapped_lon_val) - - # TODO: need to remap the values before we add them to the tree here # store the native type (child, _) = node.create_child(ax, lat_val, []) @@ -130,4 +72,3 @@ def _build_sliceable_child(self, polytope, ax, node, datacube, next_nodes, api): grand_child.indexes = [value] grand_child["unsliced_polytopes"] = copy(node["unsliced_polytopes"]) grand_child["unsliced_polytopes"].remove(poly) - # TODO: but now what happens to the second axis in the point cloud?? Do we create a second node for it?? diff --git a/polytope_feature/utility/slicing_tools.py b/polytope_feature/utility/slicing_tools.py index 1d37d646c..1c873d392 100644 --- a/polytope_feature/utility/slicing_tools.py +++ b/polytope_feature/utility/slicing_tools.py @@ -1,16 +1,12 @@ -import scipy - -from ..shapes import ConvexPolytope - from copy import copy from itertools import chain +import scipy import scipy.spatial from ..shapes import ConvexPolytope from .geometry import lerp from .list_tools import argmax, argmin -# from ..engine.hullslicer import _find_intersects def slice_in_two(polytope: ConvexPolytope, value, slice_axis_idx): diff --git a/tests/test_icon_grid_unstructured.py b/tests/test_icon_grid_unstructured.py index a530ed44b..763c8aed6 100644 --- a/tests/test_icon_grid_unstructured.py +++ b/tests/test_icon_grid_unstructured.py @@ -1,14 +1,16 @@ -import geopandas as gpd -import matplotlib.pyplot as plt -import numpy as np +# import geopandas as gpd +# import matplotlib.pyplot as plt +# import numpy as np +# import iris +import math + +# from helper_functions import find_nearest_latlon +import time + import pandas as pd import pytest -from earthkit import data import xarray as xr -from helper_functions import find_nearest_latlon -import time -# import iris -import math +from earthkit import data from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select @@ -23,92 +25,14 @@ def setup_method(self, method): "latitude": "quadtree", "longitude": "quadtree", } - print("SETTING UP THE XARRAY") - time_now = time.time() - - # ds = data.from_source( - # "file", "../../Downloads/icon-d2_germany_icosahedral_single-level_2025011000_024_2d_t_2m.grib2") - - # grid = xr.open_dataset("../../Downloads/icon_grid_0047_R19B07_L.nc", engine="netcdf4") - - ds = data.from_source( - "file", "../../Downloads/icon_global_icosahedral_single-level_2025011000_000_T_2M.grib2") + ds = data.from_source("file", "../../Downloads/icon_global_icosahedral_single-level_2025011000_000_T_2M.grib2") grid = xr.open_dataset("../../Downloads/icon_grid_0026_R03B07_G.nc", engine="netcdf4") - print(time.time()-time_now) self.arr = ds.to_xarray(engine="cfgrib").t2m - - print(self.arr) - # print("AND GRID") - # print(grid.clon.values) - # print(len(grid.clon)) self.longitudes = grid.clon.values * (180 / math.pi) self.latitudes = grid.clat.values * (180 / math.pi) - print(grid) - - # self.arr = ds.votemper - - # self.latitudes = self.arr.latitude.values - # self.longitudes = self.arr.longitude.values - # self.latitudes = self.arr.coords["nav_lat"].values - # lats = [] - # for lat in self.latitudes: - # lats.extend(lat) - # self.latitudes = lats - # self.longitudes = self.arr.nav_lon.values - # lons = [] - # for lon in self.longitudes: - # lons.extend(lon) - # self.longitudes = lons - - # # self.arr["nav_lat_flat"] = (("grid_index",), self.arr.nav_lat.values.ravel()) - # # self.arr["nav_lon_flat"] = (("grid_index",), self.arr.nav_lon.values.ravel()) - - # # # Drop the x and y dimensions - # # self.arr = self.arr.drop_dims(["x", "y"]) - # nav_lat_flat = self.arr.nav_lat.values.ravel() - # nav_lon_flat = self.arr.nav_lon.values.ravel() - # deptht_flat = self.arr.deptht.values.ravel() - # interm_data = self.arr.data[0] - # new_interm_data = [] - # for data_pt in interm_data: - # new_data = data_pt.ravel() - # new_interm_data.append(new_data) - # print(len(interm_data)) - - # # Create a new dimension, for example, "grid_index" - # grid_index = np.arange(nav_lat_flat.size) - - # # Add the flattened `nav_lat` and `nav_lon` as variables - # # self.arr = self.arr.assign_coords(grid_index=("values", grid_index)) - # nav_lat_flat_da = xr.DataArray(nav_lat_flat, dims=["grid_index"], coords={"grid_index": grid_index}) - # nav_lon_flat_da = xr.DataArray(nav_lon_flat, dims=["grid_index"], coords={"grid_index": grid_index}) - - # # Drop x and y from the original DataArray - # # ds_cleaned = self.arr.drop(["x", "y"]) - - # # Combine everything into a new Dataset if needed - # # self.arr = xr.Dataset({ - # # "original_data": ds_cleaned, - # # "nav_lat_flat": nav_lat_flat_da, - # # "nav_lon_flat": nav_lon_flat_da, - # # }) - - # self.arr = xr.DataArray( - # new_interm_data, - # dims=("deptht", "values"), - # coords={ - # "deptht": deptht_flat, - # "values": grid_index, - # }, - # ) - - # print(self.arr) - # self.arr = self.arr.rename({"y": "lat", "nav_lon": "longitude", "x": "values"}) self.points = list(zip(self.latitudes, self.longitudes)) - print((min(self.latitudes), max(self.latitudes), min(self.longitudes), max(self.longitudes))) - print("FINISH SETTING UP POINTS") self.options = { "axis_config": [ { @@ -131,37 +55,27 @@ def setup_method(self, method): @pytest.mark.fdb def test_quad_tree_slicer_extract(self): import datetime + request = Request( - # Select("deptht", [0.5058], method="nearest"), Select("time", [pd.Timestamp("2025-01-10")]), Select("heightAboveGround", [2.0]), Select("step", [datetime.timedelta(days=0)]), - # Select("time_counter", [pd.Timestamp("1979-02-15")]), Box(["latitude", "longitude"], [0, 0], [5, 5]), ) - # self.API = Polytope( - # datacube=self.arr, - # options=self.options, - # engine_options=self.engine_options, - # point_cloud_options=self.points, - # ) - time0 = time.time() result = self.API.retrieve(request) - # result = self.API.slice(self.API.datacube, request.polytopes()) time1 = time.time() print("TIME TAKEN TO EXTRACT") print(time1 - time0) - print(len(result.leaves)) result.pprint() - lats = [] - lons = [] - eccodes_lats = [] - eccodes_lons = [] - tol = 1e-8 - leaves = result.leaves + # lats = [] + # lons = [] + # eccodes_lats = [] + # eccodes_lons = [] + # tol = 1e-8 + # leaves = result.leaves # for i in range(len(leaves)): # cubepath = leaves[i].flatten() # lat = cubepath["latitude"][0] @@ -195,25 +109,16 @@ def test_quad_tree_slicer_extract(self): @pytest.mark.fdb def test_quad_tree_slicer_extract_cyclic(self): import datetime + request = Request( - # Select("deptht", [0.5058], method="nearest"), Select("time", [pd.Timestamp("2025-01-10")]), Select("heightAboveGround", [2.0]), Select("step", [datetime.timedelta(days=0)]), - # Select("time_counter", [pd.Timestamp("1979-02-15")]), Box(["latitude", "longitude"], [0, 190], [1, 195]), ) - # self.API = Polytope( - # datacube=self.arr, - # options=self.options, - # engine_options=self.engine_options, - # point_cloud_options=self.points, - # ) - time0 = time.time() result = self.API.retrieve(request) - # result = self.API.slice(self.API.datacube, request.polytopes()) time1 = time.time() print("TIME TAKEN TO EXTRACT") print(time1 - time0) diff --git a/tests/test_icon_grid_unstructured_fdb.py b/tests/test_icon_grid_unstructured_fdb.py index 5822c8fa7..5611fa59d 100644 --- a/tests/test_icon_grid_unstructured_fdb.py +++ b/tests/test_icon_grid_unstructured_fdb.py @@ -10,6 +10,7 @@ from helper_functions import find_nearest_latlon import time import math + # import iris import os @@ -32,16 +33,15 @@ def setup_method(self, method): # grid = xr.open_dataset("../../Downloads/icon_grid_0047_R19B07_L.nc", engine="netcdf4") - ds = data.from_source( - "file", "../../Downloads/icon_global_icosahedral_single-level_2025011000_000_T_2M.grib2") + ds = data.from_source("file", "../../Downloads/icon_global_icosahedral_single-level_2025011000_000_T_2M.grib2") grid = xr.open_dataset("../../Downloads/icon_grid_0026_R03B07_G.nc", engine="netcdf4") - print(time.time()-time_now) + print(time.time() - time_now) self.arr = ds.to_xarray(engine="cfgrib").t2m - self.longitudes = grid.clon.values * 180/math.pi - self.latitudes = grid.clat.values * 180/math.pi + self.longitudes = grid.clon.values * 180 / math.pi + self.latitudes = grid.clat.values * 180 / math.pi self.points = list(zip(self.latitudes, self.longitudes)) print((min(self.latitudes), max(self.latitudes), min(self.longitudes), max(self.longitudes))) @@ -56,8 +56,13 @@ def setup_method(self, method): { "axis_name": "values", "transformations": [ - {"name": "mapper", "type": "irregular", "resolution": 0, "axes": [ - "latitude", "longitude"], "md5_hash": "f68071a8ac9bae4e965822afb963c04f"} + { + "name": "mapper", + "type": "irregular", + "resolution": 0, + "axes": ["latitude", "longitude"], + "md5_hash": "f68071a8ac9bae4e965822afb963c04f", + } ], }, ], @@ -69,6 +74,7 @@ def setup_method(self, method): def test_quad_tree_slicer_extract(self): import datetime import pygribjump as gj + request = Request( # Select("deptht", [0.5058], method="nearest"), Select("date", [pd.Timestamp("20250110T0000")]), diff --git a/tests/test_orca_irregular_grid_seas5.py b/tests/test_orca_irregular_grid_seas5.py index 0fd0f1293..fb71c9687 100644 --- a/tests/test_orca_irregular_grid_seas5.py +++ b/tests/test_orca_irregular_grid_seas5.py @@ -1,13 +1,15 @@ +# from helper_functions import find_nearest_latlon +import time + import geopandas as gpd import matplotlib.pyplot as plt import numpy as np -import pandas as pd + +# import pandas as pd import pytest -from earthkit import data + +# from earthkit import data import xarray as xr -from helper_functions import find_nearest_latlon -import time -# import iris from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select @@ -20,19 +22,10 @@ def setup_method(self, method): "latitude": "quadtree", "longitude": "quadtree", } - print("SETTING UP THE XARRAY") - time_now = time.time() - - # ds = data.from_source("file", "../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.nc") ds = xr.open_dataset("../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.nc", engine="netcdf4") - - print(time.time()-time_now) - # self.arr = ds.to_xarray(engine="cfgrib").avg_uox self.arr = ds.votemper - # self.latitudes = self.arr.latitude.values - # self.longitudes = self.arr.longitude.values self.latitudes = self.arr.coords["nav_lat"].values lats = [] for lat in self.latitudes: @@ -44,39 +37,18 @@ def setup_method(self, method): lons.extend(lon) self.longitudes = lons - # self.arr["nav_lat_flat"] = (("grid_index",), self.arr.nav_lat.values.ravel()) - # self.arr["nav_lon_flat"] = (("grid_index",), self.arr.nav_lon.values.ravel()) - # # Drop the x and y dimensions - # self.arr = self.arr.drop_dims(["x", "y"]) nav_lat_flat = self.arr.nav_lat.values.ravel() - nav_lon_flat = self.arr.nav_lon.values.ravel() deptht_flat = self.arr.deptht.values.ravel() interm_data = self.arr.data[0] new_interm_data = [] for data in interm_data: new_data = data.ravel() new_interm_data.append(new_data) - print(len(interm_data)) # Create a new dimension, for example, "grid_index" grid_index = np.arange(nav_lat_flat.size) - # Add the flattened `nav_lat` and `nav_lon` as variables - # self.arr = self.arr.assign_coords(grid_index=("values", grid_index)) - nav_lat_flat_da = xr.DataArray(nav_lat_flat, dims=["grid_index"], coords={"grid_index": grid_index}) - nav_lon_flat_da = xr.DataArray(nav_lon_flat, dims=["grid_index"], coords={"grid_index": grid_index}) - - # Drop x and y from the original DataArray - # ds_cleaned = self.arr.drop(["x", "y"]) - - # Combine everything into a new Dataset if needed - # self.arr = xr.Dataset({ - # "original_data": ds_cleaned, - # "nav_lat_flat": nav_lat_flat_da, - # "nav_lon_flat": nav_lon_flat_da, - # }) - self.arr = xr.DataArray( new_interm_data, dims=("deptht", "values"), @@ -86,10 +58,7 @@ def setup_method(self, method): }, ) - print(self.arr) - # self.arr = self.arr.rename({"y": "lat", "nav_lon": "longitude", "x": "values"}) self.points = list(zip(self.latitudes, self.longitudes)) - print("FINISH SETTING UP POINTS") self.options = { "axis_config": [ { @@ -118,7 +87,6 @@ def test_quad_tree_slicer_extract(self): time0 = time.time() result = self.API.retrieve(request) - # result = self.API.slice(self.API.datacube, request.polytopes()) time1 = time.time() print("TIME TAKEN TO EXTRACT") print(time1 - time0) @@ -129,7 +97,7 @@ def test_quad_tree_slicer_extract(self): lons = [] eccodes_lats = [] eccodes_lons = [] - tol = 1e-8 + # tol = 1e-8 leaves = result.leaves for i in range(len(leaves)): cubepath = leaves[i].flatten() diff --git a/tests/test_quad_tree.py b/tests/test_quad_tree.py index 8ed8e1285..23be020fe 100644 --- a/tests/test_quad_tree.py +++ b/tests/test_quad_tree.py @@ -2,9 +2,9 @@ from polytope_feature.datacube.quad_tree import QuadNode from polytope_feature.engine.quadtree_slicer import QuadTreeSlicer -from polytope_feature.utility.slicing_tools import slice_in_two from polytope_feature.polytope import Polytope from polytope_feature.shapes import Box, ConvexPolytope +from polytope_feature.utility.slicing_tools import slice_in_two class TestQuadTreeSlicer: diff --git a/tests/test_quadtree_indices.py b/tests/test_quadtree_indices.py index 21d9bab9d..ff1ebad33 100644 --- a/tests/test_quadtree_indices.py +++ b/tests/test_quadtree_indices.py @@ -52,7 +52,13 @@ def test_quad_tree_slicer_extract(self): ) tree = self.API.engines["quadtree"].extract_single(self.API.datacube, polytope) assert len(tree) == 3 - assert set([leaf.index for leaf in tree]) == set([0, 3, 4,]) + assert set([leaf.index for leaf in tree]) == set( + [ + 0, + 3, + 4, + ] + ) # tree.pprint() points = [[10, 10], [80, 10], [-5, 5], [5, 50], [5, 10], [50, 10], [2, 10], [15, 15]] polytope = ConvexPolytope(["latitude", "longitude"], [[-10, 1], [20, 1], [5, 20]]) @@ -64,5 +70,12 @@ def test_quad_tree_slicer_extract(self): ) tree = self.API.engines["quadtree"].extract_single(self.API.datacube, polytope) assert len(tree) == 4 - assert set([leaf.index for leaf in tree]) == set([0, 2, 4, 6,]) + assert set([leaf.index for leaf in tree]) == set( + [ + 0, + 2, + 4, + 6, + ] + ) # tree.pprint() From 3876d95d2f9728a8efb3aaf428b49fe1b25aea65 Mon Sep 17 00:00:00 2001 From: mathleur Date: Tue, 4 Feb 2025 13:29:34 +0100 Subject: [PATCH 73/75] isort --- tests/test_icon_grid_unstructured_fdb.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/tests/test_icon_grid_unstructured_fdb.py b/tests/test_icon_grid_unstructured_fdb.py index 5611fa59d..0c7f8cc22 100644 --- a/tests/test_icon_grid_unstructured_fdb.py +++ b/tests/test_icon_grid_unstructured_fdb.py @@ -1,18 +1,20 @@ -from polytope_feature.shapes import Box, Select -from polytope_feature.polytope import Polytope, Request +import math + +# import iris +import os +import time + import geopandas as gpd import matplotlib.pyplot as plt import numpy as np import pandas as pd import pytest -from earthkit import data import xarray as xr +from earthkit import data from helper_functions import find_nearest_latlon -import time -import math -# import iris -import os +from polytope_feature.polytope import Polytope, Request +from polytope_feature.shapes import Box, Select class TestQuadTreeSlicer: @@ -73,6 +75,7 @@ def setup_method(self, method): @pytest.mark.fdb def test_quad_tree_slicer_extract(self): import datetime + import pygribjump as gj request = Request( From 1014abc32a367656d9ca395d357fc97d9e14e408 Mon Sep 17 00:00:00 2001 From: mathleur Date: Tue, 4 Feb 2025 14:50:41 +0100 Subject: [PATCH 74/75] clean up --- tests/test_icon_grid_unstructured.py | 18 ++---- tests/test_icon_grid_unstructured_fdb.py | 32 ++-------- tests/test_orca_irregular_grid.py | 2 +- tests/test_orca_irregular_grid_seas5.py | 78 ++++++++++++------------ 4 files changed, 50 insertions(+), 80 deletions(-) diff --git a/tests/test_icon_grid_unstructured.py b/tests/test_icon_grid_unstructured.py index 763c8aed6..97bf46459 100644 --- a/tests/test_icon_grid_unstructured.py +++ b/tests/test_icon_grid_unstructured.py @@ -4,9 +4,6 @@ # import iris import math -# from helper_functions import find_nearest_latlon -import time - import pandas as pd import pytest import xarray as xr @@ -15,6 +12,8 @@ from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select +# from helper_functions import find_nearest_latlon + class TestQuadTreeSlicer: def setup_method(self, method): @@ -60,14 +59,11 @@ def test_quad_tree_slicer_extract(self): Select("time", [pd.Timestamp("2025-01-10")]), Select("heightAboveGround", [2.0]), Select("step", [datetime.timedelta(days=0)]), - Box(["latitude", "longitude"], [0, 0], [5, 5]), + Box(["latitude", "longitude"], [0, 0], [1, 5]), ) - time0 = time.time() result = self.API.retrieve(request) - time1 = time.time() - print("TIME TAKEN TO EXTRACT") - print(time1 - time0) + assert len(result.leaves) == 345 result.pprint() # lats = [] @@ -117,12 +113,8 @@ def test_quad_tree_slicer_extract_cyclic(self): Box(["latitude", "longitude"], [0, 190], [1, 195]), ) - time0 = time.time() result = self.API.retrieve(request) - time1 = time.time() - print("TIME TAKEN TO EXTRACT") - print(time1 - time0) - print(len(result.leaves)) + assert len(result.leaves) == 346 result.pprint() leaves = result.leaves for i in range(len(leaves)): diff --git a/tests/test_icon_grid_unstructured_fdb.py b/tests/test_icon_grid_unstructured_fdb.py index 0c7f8cc22..52c01e51c 100644 --- a/tests/test_icon_grid_unstructured_fdb.py +++ b/tests/test_icon_grid_unstructured_fdb.py @@ -1,21 +1,20 @@ import math -# import iris -import os +# import os import time import geopandas as gpd import matplotlib.pyplot as plt -import numpy as np import pandas as pd import pytest import xarray as xr from earthkit import data -from helper_functions import find_nearest_latlon from polytope_feature.polytope import Polytope, Request from polytope_feature.shapes import Box, Select +# from helper_functions import find_nearest_latlon + class TestQuadTreeSlicer: def setup_method(self, method): @@ -27,27 +26,14 @@ def setup_method(self, method): "latitude": "quadtree", "longitude": "quadtree", } - print("SETTING UP THE XARRAY") - time_now = time.time() - - # ds = data.from_source( - # "file", "../../Downloads/icon-d2_germany_icosahedral_single-level_2025011000_024_2d_t_2m.grib2") - - # grid = xr.open_dataset("../../Downloads/icon_grid_0047_R19B07_L.nc", engine="netcdf4") ds = data.from_source("file", "../../Downloads/icon_global_icosahedral_single-level_2025011000_000_T_2M.grib2") - grid = xr.open_dataset("../../Downloads/icon_grid_0026_R03B07_G.nc", engine="netcdf4") - print(time.time() - time_now) self.arr = ds.to_xarray(engine="cfgrib").t2m - self.longitudes = grid.clon.values * 180 / math.pi self.latitudes = grid.clat.values * 180 / math.pi - self.points = list(zip(self.latitudes, self.longitudes)) - print((min(self.latitudes), max(self.latitudes), min(self.longitudes), max(self.longitudes))) - print("FINISH SETTING UP POINTS") self.options = { "axis_config": [ {"axis_name": "step", "transformations": [{"name": "type_change", "type": "int"}]}, @@ -68,25 +54,18 @@ def setup_method(self, method): ], }, ], - # "pre_path": {"time": "20250110", "heightAboveGround": "2"}, "pre_path": {"date": "20250110"}, } @pytest.mark.fdb def test_quad_tree_slicer_extract(self): - import datetime - import pygribjump as gj request = Request( - # Select("deptht", [0.5058], method="nearest"), Select("date", [pd.Timestamp("20250110T0000")]), - # Select("heightAboveGround", [2.0]), - # Select("step", [datetime.timedelta(days=0)]), Select("step", [0]), Select("param", ["167"]), Select("levtype", ["sfc"]), - # Select("time_counter", [pd.Timestamp("1979-02-15")]), Box(["latitude", "longitude"], [0, 0], [10, 10]), ) @@ -101,18 +80,17 @@ def test_quad_tree_slicer_extract(self): time0 = time.time() result = self.API.retrieve(request) - # result = self.API.slice(self.API.datacube, request.polytopes()) time1 = time.time() + assert len(result.leaves) == 1 print("TIME TAKEN TO EXTRACT") print(time1 - time0) - print(len(result.leaves)) result.pprint() lats = [] lons = [] eccodes_lats = [] eccodes_lons = [] - tol = 1e-8 + # tol = 1e-8 leaves = result.leaves for i in range(len(leaves)): cubepath = leaves[i].flatten() diff --git a/tests/test_orca_irregular_grid.py b/tests/test_orca_irregular_grid.py index 145af2079..25665040a 100644 --- a/tests/test_orca_irregular_grid.py +++ b/tests/test_orca_irregular_grid.py @@ -60,7 +60,7 @@ def test_quad_tree_slicer_extract(self): time1 = time.time() print("TIME TAKEN TO EXTRACT") print(time1 - time0) - print(len(result.leaves)) + assert len(result.leaves) == 27 result.pprint() lats = [] diff --git a/tests/test_orca_irregular_grid_seas5.py b/tests/test_orca_irregular_grid_seas5.py index fb71c9687..e7e70caba 100644 --- a/tests/test_orca_irregular_grid_seas5.py +++ b/tests/test_orca_irregular_grid_seas5.py @@ -1,8 +1,8 @@ # from helper_functions import find_nearest_latlon import time -import geopandas as gpd -import matplotlib.pyplot as plt +# import geopandas as gpd +# import matplotlib.pyplot as plt import numpy as np # import pandas as pd @@ -74,8 +74,7 @@ def setup_method(self, method): def test_quad_tree_slicer_extract(self): request = Request( Select("deptht", [0.5058], method="nearest"), - # Select("time_counter", [pd.Timestamp("1979-02-15")]), - Box(["latitude", "longitude"], [-80, 50], [-50, 80]), + Box(["latitude", "longitude"], [-55, 50], [-50, 55]), ) self.API = Polytope( @@ -90,40 +89,41 @@ def test_quad_tree_slicer_extract(self): time1 = time.time() print("TIME TAKEN TO EXTRACT") print(time1 - time0) - print(len(result.leaves)) + assert len(result.leaves) == 1386 result.pprint() - lats = [] - lons = [] - eccodes_lats = [] - eccodes_lons = [] - # tol = 1e-8 - leaves = result.leaves - for i in range(len(leaves)): - cubepath = leaves[i].flatten() - lat = cubepath["latitude"][0] - lon = cubepath["longitude"][0] - 360 - lats.append(lat) - lons.append(lon) - - # # each variable in the netcdf file is a cube - # # cubes = iris.load('../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.nc') - # # iris.save(cubes, '../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.grib2') - # nearest_points = find_nearest_latlon("../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.grib2", lat, lon) - # eccodes_lat = nearest_points[0][0]["lat"] - # eccodes_lon = nearest_points[0][0]["lon"] - 360 - # eccodes_lats.append(eccodes_lat) - # eccodes_lons.append(eccodes_lon) - # assert eccodes_lat - tol <= lat - # assert lat <= eccodes_lat + tol - # assert eccodes_lon - tol <= lon - # assert lon <= eccodes_lon + tol - - worldmap = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")) - fig, ax = plt.subplots(figsize=(12, 6)) - worldmap.plot(color="darkgrey", ax=ax) - - plt.scatter(lons, lats, s=18, c="red", cmap="YlOrRd") - plt.scatter(eccodes_lons, eccodes_lats, s=6, c="green") - plt.colorbar(label="Temperature") - plt.show() + # lats = [] + # lons = [] + # eccodes_lats = [] + # eccodes_lons = [] + # # tol = 1e-8 + # leaves = result.leaves + # for i in range(len(leaves)): + # cubepath = leaves[i].flatten() + # lat = cubepath["latitude"][0] + # lon = cubepath["longitude"][0] + # lats.append(lat) + # lons.append(lon) + + # # # each variable in the netcdf file is a cube + # # # cubes = iris.load('../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.nc') + # # # iris.save(cubes, '../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.grib2') + # # nearest_points = find_nearest_latlon("../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.grib2", lat, + # lon) + # # eccodes_lat = nearest_points[0][0]["lat"] + # # eccodes_lon = nearest_points[0][0]["lon"] - 360 + # # eccodes_lats.append(eccodes_lat) + # # eccodes_lons.append(eccodes_lon) + # # assert eccodes_lat - tol <= lat + # # assert lat <= eccodes_lat + tol + # # assert eccodes_lon - tol <= lon + # # assert lon <= eccodes_lon + tol + + # worldmap = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")) + # fig, ax = plt.subplots(figsize=(12, 6)) + # worldmap.plot(color="darkgrey", ax=ax) + + # plt.scatter(lons, lats, s=18, c="red", cmap="YlOrRd") + # plt.scatter(eccodes_lons, eccodes_lats, s=6, c="green") + # plt.colorbar(label="Temperature") + # plt.show() From a222d15d3adef3b7d4c77be68e89d9f4913f53d0 Mon Sep 17 00:00:00 2001 From: mathleur Date: Tue, 4 Feb 2025 15:01:42 +0100 Subject: [PATCH 75/75] fix test --- tests/test_icon_grid_unstructured_fdb.py | 74 ++++++++++++------------ 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/tests/test_icon_grid_unstructured_fdb.py b/tests/test_icon_grid_unstructured_fdb.py index 52c01e51c..327f5f45e 100644 --- a/tests/test_icon_grid_unstructured_fdb.py +++ b/tests/test_icon_grid_unstructured_fdb.py @@ -3,8 +3,8 @@ # import os import time -import geopandas as gpd -import matplotlib.pyplot as plt +# import geopandas as gpd +# import matplotlib.pyplot as plt import pandas as pd import pytest import xarray as xr @@ -86,38 +86,38 @@ def test_quad_tree_slicer_extract(self): print(time1 - time0) result.pprint() - lats = [] - lons = [] - eccodes_lats = [] - eccodes_lons = [] - # tol = 1e-8 - leaves = result.leaves - for i in range(len(leaves)): - cubepath = leaves[i].flatten() - lat = cubepath["latitude"][0] - lon = cubepath["longitude"][0] - lats.append(lat) - lons.append(lon) - - # # each variable in the netcdf file is a cube - # # cubes = iris.load('../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.nc') - # # iris.save(cubes, '../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.grib2') - # nearest_points = find_nearest_latlon( - # "../../Downloads/icon-d2_germany_icosahedral_single-level_2025011000_024_2d_t_2m.grib2", lat, lon) - # eccodes_lat = nearest_points[0][0]["lat"] - # eccodes_lon = nearest_points[0][0]["lon"] - 360 - # eccodes_lats.append(eccodes_lat) - # eccodes_lons.append(eccodes_lon) - # assert eccodes_lat - tol <= lat - # assert lat <= eccodes_lat + tol - # assert eccodes_lon - tol <= lon - # assert lon <= eccodes_lon + tol - - worldmap = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")) - fig, ax = plt.subplots(figsize=(12, 6)) - worldmap.plot(color="darkgrey", ax=ax) - - plt.scatter(lons, lats, s=18, c="red", cmap="YlOrRd") - plt.scatter(eccodes_lons, eccodes_lats, s=6, c="green") - plt.colorbar(label="Temperature") - plt.show() + # lats = [] + # lons = [] + # eccodes_lats = [] + # eccodes_lons = [] + # # tol = 1e-8 + # leaves = result.leaves + # for i in range(len(leaves)): + # cubepath = leaves[i].flatten() + # lat = cubepath["latitude"][0] + # lon = cubepath["longitude"][0] + # lats.append(lat) + # lons.append(lon) + + # # # each variable in the netcdf file is a cube + # # # cubes = iris.load('../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.nc') + # # # iris.save(cubes, '../../Downloads/votemper_ORAS5_1m_197902_grid_T_02.grib2') + # # nearest_points = find_nearest_latlon( + # # "../../Downloads/icon-d2_germany_icosahedral_single-level_2025011000_024_2d_t_2m.grib2", lat, lon) + # # eccodes_lat = nearest_points[0][0]["lat"] + # # eccodes_lon = nearest_points[0][0]["lon"] - 360 + # # eccodes_lats.append(eccodes_lat) + # # eccodes_lons.append(eccodes_lon) + # # assert eccodes_lat - tol <= lat + # # assert lat <= eccodes_lat + tol + # # assert eccodes_lon - tol <= lon + # # assert lon <= eccodes_lon + tol + + # worldmap = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")) + # fig, ax = plt.subplots(figsize=(12, 6)) + # worldmap.plot(color="darkgrey", ax=ax) + + # plt.scatter(lons, lats, s=18, c="red", cmap="YlOrRd") + # plt.scatter(eccodes_lons, eccodes_lats, s=6, c="green") + # plt.colorbar(label="Temperature") + # plt.show()

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ÐaiL=Z4B4ef;q_*>n*tQnMcm^H0%sR><+=+A>1`s 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