From 1dc9177a91a9563b35d066381807502fedb2090b Mon Sep 17 00:00:00 2001 From: Tom Date: Tue, 11 Feb 2025 17:39:48 +0000 Subject: [PATCH] Updates --- background.md | 113 ++++++++++++++++++ .../tree_traverser/CompressedDataCubeTree.py | 6 +- .../python_src/tree_traverser/DataCubeTree.py | 74 ++++++------ .../python_src/tree_traverser/__main__.py | 41 +++++++ .../tests/data/fdb_list_compact.gz | Bin 0 -> 1096 bytes .../tests/data/fdb_list_porcelain.gz | Bin 0 -> 174299 bytes tree_compresser/tests/data/mars_list.gz | Bin 0 -> 23159 bytes 7 files changed, 193 insertions(+), 41 deletions(-) create mode 100644 background.md create mode 100644 tree_compresser/python_src/tree_traverser/__main__.py create mode 100644 tree_compresser/tests/data/fdb_list_compact.gz create mode 100644 tree_compresser/tests/data/fdb_list_porcelain.gz create mode 100644 tree_compresser/tests/data/mars_list.gz diff --git a/background.md b/background.md new file mode 100644 index 0000000..dd1cdab --- /dev/null +++ b/background.md @@ -0,0 +1,113 @@ +# WIP +# Datacubes, Trees and Compressed trees + +This first part is essentially a abridged version of the [datacube spec](https://github.com/ecmwf/datacube-spec), see that document for more detail and the canonical source of truth on the matter. + +Qubed is primarily geared towards dealing with datafiles uniquely labeled by sets of key value pairs. We'll call a set of key value pairs that uniquely labels some data an `identifier`. Here's an example: + +```python +{'class': 'd1', + 'dataset': 'climate-dt', + 'generation': '1', + 'date': '20241102', + 'resolution': 'high', + 'time': '0000', +} +``` + +Unfortunately, we have more than one data file. If we are lucky, the set of identifiers that current exists might form a dense datacube that we could represent like this: + +```python +{'class': ['d1', 'd2'], + 'dataset': 'climate-dt', + 'generation': ['1','2','3'], + 'model': 'icon', + 'date': ['20241102','20241103'], + 'resolution': ['high','low'], + 'time': ['0000', '0600', '1200', '1800'], +} +``` + +with the property that any particular choice for a value for any key will correspond to datafile that exists. + +To save space I will also represent this same thing like this: +``` +- class=d1/d2, dataset=climate-dt, generation=1/2/3, model=icon, date=20241102/20241103, resolution=high/low, time=0000/0600/1200/1800 +``` + +Unfortunately, we are not lucky and our datacubes are not always dense. In this case we might instead represent which data exists using a tree: +``` +root +├── class=od +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=rd + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2 +``` + +But it's clear that the above tree contains a lot of redundant information. Many of the subtrees are identical for example. Indeed in practice a lot of our data turns out to be 'nearly dense' in that it contains many dense datacubes within it. + +There are many valid ways one could compress this tree. If we add the restriction that no identical key=value pairs can be adjacent then here is the compressed tree we might get: + +``` +root +├── class=rd +│ ├── expver=0001, param=1/2/3 +│ └── expver=0002, param=1/2 +└── class=od, expver=0001/0002, param=1/2 +``` + +Without the above restriction we could instead have: + +``` +root +├── class=rd +│ ├── expver=0001, param=3 +│ └── expver=0001/0002, param=1/2 +└── class=od, expver=0001/0002, param=1/2 +``` + +but we do not allow this because it would mean we would have to take multiple branches in order to find data with `expver=0001`. + +What we have now is a tree of dense datacubes which represents a single larger sparse datacube in a more compact manner. For want of a better word we'll call it a Qube. + +## API + +Qubed will provide a core compressed tree data structure called a Qube with: + +Methods to convert to and from: + - [x] A human readable representation like those seen above. + - [x] An HTML version where subtrees can be collapsed. + - [ ] An compact protobuf-based binary format + - [x] Nested python dictionaries or JSON + - [/] The output of [fdb list](https://confluence.ecmwf.int/display/FDB/fdb-list) + - [ ] [mars list][mars list] + - [ ] [constraints.json][constraints] + +[constraints]: (https://object-store.os-api.cci2.ecmwf.int/cci2-prod-catalogue/resources/reanalysis-era5-land/constraints_a0ae5b42d67869674e13fba9fd055640bcffc37c24578be1f465d7d5ab2c7ee5.json +[mars list]: https://git.ecmwf.int/projects/CDS/repos/cads-forms-reanalysis/browse/reanalysis-era5-single-levels/gecko-config/mars.list?at=refs%2Fheads%2Fprod + +Useful algorithms: + - [x] Compression + - [/] Union/Intersection/Difference + +Performant Membership Queries + - Identifier membership + - Datacube query (selection) + +Metadata Storage + + + + + diff --git a/tree_compresser/python_src/tree_traverser/CompressedDataCubeTree.py b/tree_compresser/python_src/tree_traverser/CompressedDataCubeTree.py index 82bc869..c4b4a9e 100644 --- a/tree_compresser/python_src/tree_traverser/CompressedDataCubeTree.py +++ b/tree_compresser/python_src/tree_traverser/CompressedDataCubeTree.py @@ -112,8 +112,10 @@ class CompressedTree: root = cache_tree(tree) return cls(cache = cache, root = cache[root]) - def __str__(self): - return "".join(node_tree_to_string(self.root)) + def __str__(self, depth=None) -> str: + return "".join(node_tree_to_string(self.root, depth = depth)) + + def print(self, depth = None): print(self.__str__(depth = depth)) def html(self, depth = 2, debug = False) -> HTML: return HTML(node_tree_to_html(self.root, depth = depth, debug = debug)) diff --git a/tree_compresser/python_src/tree_traverser/DataCubeTree.py b/tree_compresser/python_src/tree_traverser/DataCubeTree.py index 9e51802..6db97d2 100644 --- a/tree_compresser/python_src/tree_traverser/DataCubeTree.py +++ b/tree_compresser/python_src/tree_traverser/DataCubeTree.py @@ -89,14 +89,17 @@ class Tree: return cls.make("root", Enum(("root",)), []) - def __str__(self): - return "".join(node_tree_to_string(node=self)) + def __str__(self, depth = None) -> str: + return "".join(node_tree_to_string(node=self, depth = depth)) + + def print(self, depth = None): print(self.__str__(depth = depth)) def html(self, depth = 2, collapse = True) -> HTML: return HTML(node_tree_to_html(self, depth = depth, collapse = collapse)) def _repr_html_(self) -> str: return node_tree_to_html(self, depth = 2, collapse = True) + def __getitem__(self, args) -> 'Tree': key, value = args @@ -107,8 +110,6 @@ class Tree: raise KeyError(f"Key {key} not found in children of {self.key}") - def print(self, depth = None): - print("".join(cc for c in self.children for cc in node_tree_to_string(node=c, depth = depth))) def transform(self, func: 'Callable[[Tree], Tree | list[Tree]]') -> 'Tree': """ @@ -206,49 +207,44 @@ class Tree: Finally we return the node with all these new children. """ - if not identifier: - return position + pass + # if not identifier: + # return position - key, values = identifier.pop(0) - # print(f"Inserting {key}={values} into {position.summary()}") + # key, values = identifier.pop(0) + # # print(f"Inserting {key}={values} into {position.summary()}") - # Determine which children have this key - possible_children = {c : [] for c in position.children if c.key == key} - entirely_new_values = [] + # # Only the children with the matching key are relevant. + # source_children = {c : [] for c in position.children if c.key == key} + # new_children = [] - # For each value check it is already in one of the children - for v in values: - for c in possible_children: - if v in c.values: - possible_children[c].append(v) - break - else: # only executed if the loop did not break - # If none of the children have this value, add it to the new child pile - entirely_new_values.append(v) + # values = set(values) + # for c in source_children: + # values_set = set(c.values) + # group_1 = values_set - values + # group_2 = values_set & values + # values = values - values_set # At the end of this loop values will contain only the new values - # d = {p.summary() : v for p, v in possible_children.items()} - # print(f" {d} new_values={entirely_new_values}") + # if group_1: + # group_1_node = Tree.make(c.key, Enum(tuple(group_1)), c.children) + # new_children.append(group_1_node) # Add the unaffected part of this child + + # if group_2: + # new_node = Tree.make(key, Enum(tuple(affected)), []) + # new_node = Tree._insert(new_node, identifier) + # new_children.append(new_node) # Add the affected part of this child - new_children = [] - for c, affected in possible_children.items(): - if not affected: - new_children.append(c) - continue - unaffected = [x for x in c.values if x not in affected] - if unaffected: - unaffected_node = Tree.make(c.key, Enum(tuple(unaffected)), c.children) - new_children.append(unaffected_node) # Add the unaffected part of this child + # unaffected = [x for x in c.values if x not in affected] - if affected: # This check is not technically necessary, but it makes the code more readable - new_node = Tree.make(key, Enum(tuple(affected)), []) - new_node = Tree._insert(new_node, identifier) - new_children.append(new_node) # Add the affected part of this child - # If there are any values not in any of the existing children, add them as a new child - if entirely_new_values: - new_node = Tree.make(key, Enum(tuple(entirely_new_values)), []) - new_children.append(Tree._insert(new_node, identifier)) + # if affected: # This check is not technically necessary, but it makes the code more readable + + + # # If there are any values not in any of the existing children, add them as a new child + # if entirely_new_values: + # new_node = Tree.make(key, Enum(tuple(entirely_new_values)), []) + # new_children.append(Tree._insert(new_node, identifier)) return Tree.make(position.key, position.values, new_children) diff --git a/tree_compresser/python_src/tree_traverser/__main__.py b/tree_compresser/python_src/tree_traverser/__main__.py new file mode 100644 index 0000000..b28bafe --- /dev/null +++ b/tree_compresser/python_src/tree_traverser/__main__.py @@ -0,0 +1,41 @@ +import argparse + +# A simple command line app that reads from standard input and writes to standard output +# Arguments: +# --input_format=fdb/mars +# --output_format=text/html +import sys + + +def main(): + parser = argparse.ArgumentParser(description="Generate a compressed tree from various inputs.") + + parser.add_argument( + "--input_format", + choices=["fdb", "mars"], + default="fdb", + help="Specify the input format (fdb list or mars)." + ) + + parser.add_argument( + "--output_format", + choices=["text", "html"], + default="text", + help="Specify the output format (text or html)." + ) + + args = parser.parse_args() + + # Read from standard input + l = 0 + for line in sys.stdin.readlines(): + + + # Process data (For now, just echoing the input) + output_data = f"[Input Format: {args.input_format}] [Output Format: {args.output_format}]\n{l} lines read from standard input\n" + + # Write to standard output + sys.stdout.write(output_data) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tree_compresser/tests/data/fdb_list_compact.gz b/tree_compresser/tests/data/fdb_list_compact.gz new file mode 100644 index 0000000000000000000000000000000000000000..7337c7d8bc327b03a6465ed55c532a892e9723fc GIT binary patch literal 1096 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 A-T(jq literal 0 HcmV?d00001