Remove old stuff

This commit is contained in:
Tom Hodson 2024-11-21 13:53:05 +00:00
parent 76ec160d6a
commit 2f077bd522
32 changed files with 0 additions and 6142 deletions

View File

@ -1,7 +0,0 @@
# stac-catalog
```
# Make and activate a python environment
pip install -r requirements.txt
./run.sh
```

View File

@ -1,130 +0,0 @@
# * Format of the rules is:
# [a1, a2, a3 ...[b1, b2, b3... [c1, c2, c3...]]]
# - The first level (a) defines which attributes are used to name the top level directory
# - The second level (b) defines which attributes are used to name the data files
# - The third level (c) defines which attributes are used as index keys
# * Rules can be grouped
# [a1, a2, a3 ...
# [b1, b2, b3... [c1, c2, c3...]]
# [B1, B2, B3... [C1, C2, C3...]]
# ]
# * A list of values can be given for an attribute
# [ ..., stream=enfo/efov, ... ]
# This will be used when matching rules.
# * Attributes can be typed
# Globally, at the begining of this file:
# refdate: Date;
# or in the context of a rule:
# [type=cl, ... [date:ClimateMonth, ...]]
# Typing attributes is done when the user's requests or the GRIB values need to be modified before directories, files and indexes are created. For example, ClimateMonth will transform 2010-04-01 to 'may' internally.
# * Attributes can be optional
# [ step, levelist?, param ]
# They will be replaced internally by an empty value. It is also posiible to provide a default subtitution value: e.g. [domain?g] will consider the domain to be 'g' if missing.
# * Attributes can be removed:
# [grid-]
# This is useful to remove attributes present in the GRIB that should not be ignored
# * Rules are matched:
# - If the attributes are present in the GRIB/Request, or marked optional or ignored
# - If a list of possible value is provided, one of them must match, for example
# [ class, expver, stream=enfo/efov, date, time, domain ]
# will match either stream=enfo or stream=efov, all other attributes will be matched if they exist in the GRIB or user's request
# * On archive:
# - Attributes are extracted from the GRIB (namespace 'mars'), possibly modified by the attribute type
# - Only the first rule is used, so order is important
# - All GRIB attributes must be used by the rules, otherwise an error is raised
# * On retrieve:
# - Attributes are extracted from the user's request, possibly modified by the attribute type (e.g. for handling of U/V)
# - All the matching rules are considered
# - Only attributes listed in the rules are used to extract values from the user's request
# Default types
param: Param;
step: Step;
date: Date;
hdate: Date;
refdate: Date;
latitude: Double;
longitude: Double;
levelist: Double;
grid: Grid;
expver: Expver;
time: Time;
fcmonth: Integer;
number: Integer;
frequency: Integer;
direction: Integer;
channel: Integer;
instrument: Integer;
ident: Integer;
diagnostic: Integer;
iteration: Integer;
system: Integer;
method: Integer;
########################################################
# These are the rules for the Climate DT
# clte/wave
[ class=d1, dataset=climate-dt, activity, experiment, generation, model, realization, expver, stream=clte/wave, date
[ resolution, type, levtype
[ time, levelist?, param, frequency?, direction? ]]
]
# clmn
[ class=d1, dataset=climate-dt, activity, experiment, generation, model, realization, expver, stream=clmn, year
[ month, resolution, type, levtype
[ levelist?, param ]]
]
########################################################
# These are the rules for the Extremes DT
# oper/wave/lwda/lwwv
[ class=d1, dataset=extremes-dt, expver, stream=oper/wave/lwda/lwwv, date, time
[ resolution?, type, levtype
[ step, levelist?, param, frequency?, direction? ]]
]
########################################################
# These are the rules for the On-Demand Extremes DT
# oper/wave
[ class=d1, dataset=on-demand-extremes-dt, expver, stream=oper/wave, date, time
[ type, levtype
[ step, levelist?, param, frequency?, direction? ]]
]
########################################################
########################################################
#
# These are the rules for rd
# oper/wave/lwda/lwwv
[ class=rd, expver, stream=oper/wave/lwda/lwwv/dcda/enfo, date, time, domain?
[ type, levtype
[ number?, step, levelist?, param, frequency?, direction? ]]
]
[ class=rd, expver, stream=mnth, domain?
[ type, levtype
[ date , time, step?, levelist?, param ]]
]

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +0,0 @@
FROM python:3.12-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["fastapi", "run", "main.py"]

View File

@ -1 +0,0 @@
from .fdb_schema_parser import FDBSchema, FDBSchemaFile, KeySpec, Key

View File

@ -1,375 +0,0 @@
import dataclasses
import json
from dataclasses import dataclass, field
from typing import Any
import pe
from pe.actions import Pack
from pe.operators import Class, Star
from .fdb_types import FDB_type_to_implementation, FDBType
@dataclass(frozen=True)
class KeySpec:
"""
Represents the specification of a single key in an FDB schema file. For example in
```
[ class, expver, stream=lwda, date, time, domain?
[ type=ofb/mfb/oai
[ obsgroup, reportype ]]]
```
class, expver, type=ofdb/mfb/oai etc are the KeySpecs
These can have additional information such as: flags like `domain?`, allowed values like `type=ofb/mfb/oai`
or specify type information with `date: ClimateMonthly`
"""
key: str
type: FDBType = field(default_factory=FDBType)
flag: str | None = None
values: tuple = field(default_factory=tuple)
comment: str = ""
def __repr__(self):
repr = self.key
if self.flag:
repr += self.flag
# if self.type:
# repr += f":{self.type}"
if self.values:
repr += "=" + "/".join(self.values)
return repr
def matches(self, key, value):
# Sanity check!
if self.key != key:
return False
# Some keys have a set of allowed values type=ofb/mfb/oai
if self.values:
if value not in self.values:
return False
# Check the formatting of values like Time or Date
if self.type and not self.type.validate(value):
return False
return True
def is_optional(self):
if self.flag is None:
return False
return "?" in self.flag
def is_allable(self):
if self.flag is None:
return False
return "*" in self.flag
@dataclass(frozen=True)
class Comment:
"Represents a comment node in the schema"
value: str
@dataclass(frozen=True)
class FDBSchemaTypeDef:
"Mapping between FDB schema key names and FDB Schema Types, i.e expver is of type Expver"
key: str
type: str
# This is the schema grammar written in PEG format
fdb_schema = pe.compile(
r"""
FDB < Line+ EOF
Line < Schema / Comment / TypeDef / empty
# Comments
Comment <- "#" ~non_eol*
non_eol <- [\x09\x20-\x7F] / non_ascii
non_ascii <- [\x80-\uD7FF\uE000-\U0010FFFF]
# Default Type Definitions
TypeDef < String ":" String ";"
# Schemas are the main attraction
# They're a tree of KeySpecs.
Schema < "[" KeySpecs (","? Schema)* "]"
# KeySpecs can be just a name i.e expver
# Can also have a type expver:int
# Or a flag expver?
# Or values expver=xxx
KeySpecs < KeySpec_ws ("," KeySpec_ws)*
KeySpec_ws < KeySpec
KeySpec <- key:String (flag:Flag)? (type:Type)? (values:Values)? ([ ]* comment:Comment)?
Flag <- ~("?" / "-" / "*")
Type <- ":" [ ]* String
Values <- "=" Value ("/" Value)*
# Low level stuff
Value <- ~([-a-zA-Z0-9_]+)
String <- ~([a-zA-Z0-9_]+)
EOF <- !.
empty <- ""
""",
actions={
"Schema": Pack(tuple),
"KeySpec": KeySpec,
"Values": Pack(tuple),
"Comment": Comment,
"TypeDef": FDBSchemaTypeDef,
},
ignore=Star(Class("\t\f\r\n ")),
# flags=pe.DEBUG,
)
def post_process(entries):
"Take the raw output from the PEG parser and split it into type definitions and schema entries."
typedefs = {}
schemas = []
for entry in entries:
match entry:
case c if isinstance(c, Comment):
pass
case t if isinstance(t, FDBSchemaTypeDef):
typedefs[t.key] = t.type
case s if isinstance(s, tuple):
schemas.append(s)
case _:
raise ValueError
return typedefs, tuple(schemas)
def determine_types(types, node):
"Recursively walk a schema tree and insert the type information."
if isinstance(node, tuple):
return [determine_types(types, n) for n in node]
return dataclasses.replace(node, type=types.get(node.key, FDBType()))
@dataclass
class Key:
key: str
value: Any
key_spec: KeySpec
reason: str
def str_value(self):
return self.key_spec.type.format(self.value)
def __bool__(self):
return self.reason in {"Matches", "Skipped", "Select All"}
def emoji(self):
return {"Matches": "", "Skipped": "⏭️", "Select All": ""}.get(
self.reason, ""
)
def info(self):
return f"{self.emoji()} {self.key:<12}= {str(self.value):<12} ({self.key_spec}) {self.reason if not self else ''}"
def __repr__(self):
return f"{self.key}={self.key_spec.type.format(self.value)}"
def as_json(self):
return dict(
key=self.key,
value=self.str_value(),
reason=self.reason,
)
class FDBSchema:
"""
Represents a parsed FDB Schema file.
Has methods to validate and convert request dictionaries to a mars request form with validation and type information.
"""
def __init__(self, string, defaults: dict[str, str] = {}):
"""
1. Use a PEG parser on a schema string,
2. Separate the output into schemas and typedefs
3. Insert any concrete implementations of types from fdb_types.py defaulting to generic string type
4. Walk the schema tree and annotate it with type information.
"""
m = fdb_schema.match(string)
g = list(m.groups())
self._str_types, schemas = post_process(g)
self.types = {
key: FDB_type_to_implementation[type]
for key, type in self._str_types.items()
}
self.schemas = determine_types(self.types, schemas)
self.defaults = defaults
def __repr__(self):
return json.dumps(
dict(schemas=self.schemas, defaults=self.defaults), indent=4, default=repr
)
@classmethod
def consume_key(
cls, key_spec: KeySpec, request: dict[str, Any]
) -> Key:
key = key_spec.key
try:
value = request[key]
except KeyError:
if key_spec.is_optional():
return Key(key_spec.key, "", key_spec, "Skipped")
if key_spec.is_allable():
return Key(key_spec.key, "", key_spec, "Select All")
else:
return Key(
key_spec.key, "", key_spec, "Key Missing"
)
if key_spec.matches(key, value):
return Key(
key_spec.key,
key_spec.type.parse(value),
key_spec,
"Matches",
)
else:
return Key(
key_spec.key, value, key_spec, "Incorrect Value"
)
@classmethod
def _DFS_match(
cls, tree: list, request: dict[str, Any]
) -> tuple[bool | list, list[Key]]:
"""Do a DFS on the schema tree, returning the deepest matching path
At each stage return whether we matched on this path, and the path itself.
When traversing the tree there are three cases to consider:
1. base case []
2. one schema [k, k, k, [k, k, k]]
3. list of schemas [[k,k,k], [k,k,k], [k,k,k]]
"""
# Case 1: Base Case
if not tree:
return True, []
# Case 2: [k, k, k, [k, k, k]]
if isinstance(tree[0], KeySpec):
node, *tree = tree
# Check if this node is in the request
match_result = cls.consume_key(node, request)
# If if isn't then terminate this path here
if not match_result:
return False, [match_result,] # fmt: skip
# Otherwise continue walking the tree and return the best result
matched, path = cls._DFS_match(tree, request)
# Don't put the key in the path if it's optional and we're skipping it.
if match_result.reason != "Skipped":
path = [match_result,] + path # fmt: skip
return matched, path
# Case 3: [[k, k, k], [k, k, k]]
branches = []
for branch in tree:
matched, branch_path = cls._DFS_match(branch, request)
# If this branch matches, terminate the DFS and use this.
if matched:
return branch, branch_path
else:
branches.append(branch_path)
# If no branch matches, return the one with the deepest match
return False, max(branches, key=len)
@classmethod
def _DFS_match_all(
cls, tree: list, request: dict[str, Any]
) -> list[list[Key]]:
"""Do a DFS on the schema tree, returning all matching paths or partial matches.
At each stage return all matching paths and the deepest partial matches.
When traversing the tree there are three cases to consider:
1. base case []
2. one schema [k, k, k, [k, k, k]]
3. list of schemas [[k,k,k], [k,k,k], [k,k,k]]
"""
# Case 1: Base Case
if not tree:
return [[]]
# Case 2: [k, k, k, [k, k, k]]
if isinstance(tree[0], KeySpec):
node, *tree = tree
# Check if this node is in the request
request_values = request.get(node.key, None)
if request_values is None:
# If the key is not in the request, return a partial match with Key Missing
return [[Key(node.key, "", node, "Key Missing")]]
# If the request value is a list, try to match each value
if isinstance(request_values, list):
all_matches = []
for value in request_values:
match_result = cls.consume_key(node, {node.key: value})
if match_result:
sub_matches = cls._DFS_match_all(tree, request)
for match in sub_matches:
if match_result.reason != "Skipped":
match.insert(0, match_result)
all_matches.append(match)
return all_matches if all_matches else [[Key(node.key, "", node, "No Match Found")]]
else:
# Handle a single value
match_result = cls.consume_key(node, request)
# If it isn't then return a partial match with Key Missing
if not match_result:
return [[Key(node.key, "", node, "Key Missing")]]
# Continue walking the tree and get all matches
all_matches = cls._DFS_match_all(tree, request)
# Prepend the current match to all further matches
for match in all_matches:
if match_result.reason != "Skipped":
match.insert(0, match_result)
return all_matches
# Case 3: [[k, k, k], [k, k, k]]
all_branch_matches = []
for branch in tree:
branch_matches = cls._DFS_match_all(branch, request)
all_branch_matches.extend(branch_matches)
# Return all of the deepest partial matches or complete matches
return all_branch_matches
def match_all(self, request: dict[str, Any]):
request = request | self.defaults
return self._DFS_match_all(self.schemas, request)
def match(self, request: dict[str, Any]):
request = request | self.defaults
return self._DFS_match(self.schemas, request)
class FDBSchemaFile(FDBSchema):
def __init__(self, path: str):
with open(path, "r") as f:
return super().__init__(f.read())

View File

@ -1,83 +0,0 @@
from dataclasses import dataclass
from typing import Any
import re
from collections import defaultdict
from datetime import datetime, date, time
@dataclass(repr=False)
class FDBType:
"""
Holds information about how to format and validate a given FDB Schema type like Time or Expver
This base type represents a string and does no validation or formatting. It's the default type.
"""
name: str = "String"
def __repr__(self) -> str:
return self.name
def validate(self, s: Any) -> bool:
try:
self.parse(s)
return True
except (ValueError, AssertionError):
return False
def format(self, s: Any) -> str:
return str(s).lower()
def parse(self, s: str) -> Any:
return s
@dataclass(repr=False)
class Expver_FDBType(FDBType):
name: str = "Expver"
def parse(self, s: str) -> str:
assert bool(re.match(".{4}", s))
return s
@dataclass(repr=False)
class Time_FDBType(FDBType):
name: str = "Time"
time_format = "%H%M"
def format(self, t: time) -> str:
return t.strftime(self.time_format)
def parse(self, s: datetime | str | int) -> time:
if isinstance(s, str):
assert len(s) == 4
return datetime.strptime(s, self.time_format).time()
if isinstance(s, datetime):
return s.time()
return self.parse(f"{s:04}")
@dataclass(repr=False)
class Date_FDBType(FDBType):
name: str = "Date"
date_format: str = "%Y%m%d"
def format(self, d: Any) -> str:
if isinstance(d, date):
return d.strftime(self.date_format)
if isinstance(d, int):
return f"{d:08}"
else:
return d
def parse(self, s: datetime | str | int) -> date:
if isinstance(s, str):
return datetime.strptime(s, self.date_format).date()
elif isinstance(s, datetime):
return s.date()
return self.parse(f"{s:08}")
FDB_type_to_implementation = defaultdict(lambda: FDBType()) | {
cls.name: cls() for cls in [Expver_FDBType, Time_FDBType, Date_FDBType]
}

File diff suppressed because it is too large Load Diff

View File

@ -1,162 +0,0 @@
from collections import defaultdict
from typing import Any, Dict
import yaml
import os
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from fdb_schema import FDBSchemaFile
from fastapi.responses import RedirectResponse
from fastapi.templating import Jinja2Templates
import json
import yaml
import os
os.environ["FDB5_CONFIG_FILE"] = "/home/eouser/destine_remoteFDB_config.yaml"
import pyfdb
fdb = pyfdb.FDB()
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.mount("/app", StaticFiles(directory="./webapp"), name="static")
templates = Jinja2Templates(directory="./webapp")
config = {
"message": "",
"fdb_schema": "standard_fdb_schema",
"mars_language": "language.yaml"
}
if os.path.exists("../config.yaml"):
with open("../config.yaml", "r") as f:
config = config | yaml.safe_load(f)
print("Loading compressed_cache.json")
with open("../cache/compressed_cache.json", "r") as f:
list_cache = json.load(f)
@app.get("/")
async def redirect_to_app(request: Request):
return templates.TemplateResponse("index.html", {"request": request, "config": config})
with open(config["mars_language"], "r") as f:
mars_language = yaml.safe_load(f)["_field"]
###### Load FDB Schema
schema = FDBSchemaFile(config["fdb_schema"])
def request_to_dict(request: Request) -> Dict[str, Any]:
# Convert query parameters to dictionary format
request_dict = dict(request.query_params)
for key, value in request_dict.items():
# Convert comma-separated values into lists
if "," in value:
request_dict[key] = value.split(",")
return request_dict
@app.get("/tree")
async def get_tree(request: Request):
# Convert query parameters to dictionary format
request_dict = request_to_dict(request)
# Run the schema matching logic
matches = schema.match_all(request_dict)
# Only take the longest matches
max_len = max(len(m) for m in matches)
matches = [m for m in matches if len(m) == max_len]
# Take the ends of all partial matches, ignore those that are full matches
# Full matches are indicated by the last key having boolean value True
key_frontier = defaultdict(list)
for match in matches:
if not match[-1]:
key_frontier[match[-1].key].append([m for m in match[:-1]])
def make_link(key_name, paths):
"""Take a MARS Key and information about which paths matched up to this point and use it to make a STAC Link"""
first_path = [str(p) for p in paths[0]]
href_template = f"/tree?{'&'.join(first_path)}{'&' if first_path else ''}{key_name}={{}}"
optional = [p[-1].key_spec.is_optional() for p in paths if len(p) > 0]
optional_str = "Yes" if all(optional) and len(optional) > 0 else ("Sometimes" if any(optional) else "No")
values_from_mars_language = mars_language.get(key_name, {}).get("values", [])
values = [v[0] if isinstance(v, list) else v for v in values_from_mars_language]
if all(isinstance(v, list) for v in values_from_mars_language):
value_descriptions = [v[-1] if len(v) > 1 else "" for v in values_from_mars_language]
else:
value_descriptions = [""] * len(values)
return {
"title": key_name,
"generalized_datacube:href_template": href_template,
"rel": "child",
"type": "application/json",
"generalized_datacube:dimension" : {
"type" : mars_language.get(key_name, {}).get("type", ""),
"description": mars_language.get(key_name, {}).get("description", ""),
"values" : values,
"value_descriptions" : value_descriptions,
"optional" : any(optional),
"multiple": True,
}
# "paths": set(tuple(f"{m.key}={m.value}" for m in p) for p in paths),
}
def value_descriptions(key, values):
return {
v[0] : v[-1] for v in mars_language.get(key, {}).get("values", [])
if len(v) > 1 and v[0] in values
}
descriptions = {
key : {
"key" : key,
"values" : values,
"description" : mars_language.get(key, {}).get("description", ""),
"value_descriptions" : value_descriptions(key,values),
}
for key, values in request_dict.items()
}
# Format the response as a STAC collection
stac_collection = {
"type": "Collection",
"stac_version": "1.0.0",
"id": "partial-matches",
"description": "STAC collection representing potential children of this request",
"links": [
make_link(key_name, paths)
for key_name, paths in key_frontier.items()
],
"debug": {
"request": request_dict,
"descriptions": descriptions,
"matches" : matches,
# "paths" : [
# {
# "path" : {o.key : o.str_value() for o in path},
# "list" : [i["keys"] for i in fdb.list({o.key : o.str_value() for o in path}, keys=True)],
# "key" : key,
# } for key, paths in key_frontier.items() for path in paths
# ]
}
}
return stac_collection

View File

@ -1,2 +0,0 @@
fastapi[standard]
pe

View File

@ -1,590 +0,0 @@
# * Format of the rules is:
# [a1, a2, a3 ...[b1, b2, b3... [c1, c2, c3...]]]
# - The first level (a) defines which attributes are used to name the top level directory
# - The second level (b) defines which attributes are used to name the data files
# - The third level (c) defines which attributes are used as index keys
# * Rules can be grouped
# [a1, a2, a3 ...
# [b1, b2, b3... [c1, c2, c3...]]
# [B1, B2, B3... [C1, C2, C3...]]
# ]
# * A list of values can be given for an attribute
# [ ..., stream=enfo/efov, ... ]
# This will be used when matching rules.
# * Attributes can be typed
# Globally, at the begining of this file:
# refdate: Date;
# or in the context of a rule:
# [type=cl, ... [date:ClimateMonth, ...]]
# Typing attributes is done when the user's requests or the GRIB values need to be modified before directories, files and indexes are created. For example, ClimateMonth will transform 2010-04-01 to 'may' internally.
# * Attributes can be optional
# [ step, levelist?, param ]
# They will be replaced internally by an empty value. It is also posiible to provide a default subtitution value: e.g. [domain?g] will consider the domain to be 'g' if missing.
# * Attributes can be removed:
# [grid-]
# This is useful to remove attributes present in the GRIB that should not be ignored
# * Rules are matched:
# - If the attributes are present in the GRIB/Request, or marked optional or ignored
# - If a list of possible value is provided, one of them must match, for example
# [ class, expver, stream=enfo/efov, date, time, domain ]
# will match either stream=enfo or stream=efov, all other attributes will be matched if they exist in the GRIB or user's request
# * On archive:
# - Attributes are extracted from the GRIB (namespace 'mars'), possibly modified by the attribute type
# - Only the first rule is used, so order is important
# - All GRIB attributes must be used by the rules, otherwise an error is raised
# * On retrieve:
# - Attributes are extracted from the user's request, possibly modified by the attribute type (e.g. for handling of U/V)
# - All the matching rules are considered
# - Only attributes listed in the rules are used to extract values from the user's request
# Default types
param: Param;
step: Step;
date: Date;
hdate: Date;
refdate: Date;
latitude: Double;
longitude: Double;
levelist: Double;
grid: Grid;
expver: Expver;
time: Time;
fcmonth: Integer;
number: Integer;
frequency: Integer;
direction: Integer;
channel: Integer;
instrument: Integer;
ident: Integer;
diagnostic: Integer;
iteration: Integer;
system: Integer;
method: Integer;
# ???????
# reference: Integer;
# fcperiod: Integer;
# opttime: Integer;
# leadtime: Integer;
# quantile: ??????
# range: ??????
# band: Integer;
########################################################
# These rules must be first, otherwise fields of These
# classes will be index with the default rule for oper
[ class=ti/s2, expver, stream, date, time, model
[ origin, type, levtype, hdate?
[ step, number?, levelist?, param ]]
]
[ class=ms, expver, stream, date, time, country=de
[ domain, type, levtype, dbase, rki, rty, ty
[ step, levelist?, param ]]
]
[ class=ms, expver, stream, date, time, country=it
[ domain, type, levtype, model, bcmodel, icmodel:First3
[ step, levelist?, param ]
]
]
[ class=el, expver, stream, date, time, domain
[ origin, type, levtype
[ step, levelist?, param ]]
]
########################################################
# The are the rules matching most of the fields
# oper/dcda
[ class, expver, stream=oper/dcda/scda, date, time, domain?
[ type=im/sim
[ step?, ident, instrument, channel ]]
[ type=ssd
[ step, param, ident, instrument, channel ]]
[ type=4i, levtype
[ step, iteration, levelist, param ]]
[ type=me, levtype
[ step, number, levelist?, param ]]
[ type=ef, levtype
[ step, levelist?, param, channel? ]]
[ type=ofb/mfb
[ obsgroup, reportype ]]
[ type, levtype
[ step, levelist?, param ]]
]
# dcwv/scwv/wave
[ class, expver, stream=dcwv/scwv/wave, date, time, domain
[ type, levtype
[ step, param, frequency?, direction? ]]]
# enfo
[ class, expver, stream=enfo/efov, date, time, domain
[ type, levtype=dp, product?, section?
[ step, number?, levelist?, latitude?, longitude?, range?, param ]]
[ type=tu, levtype, reference
[ step, number, levelist?, param ]]
[ type, levtype
[ step, quantile?, number?, levelist?, param ]]
]
# waef/weov
[ class, expver, stream=waef/weov, date, time, domain
[ type, levtype
[ step, number?, param, frequency?, direction? ]]
]
########################################################
# enda
[ class, expver, stream=enda, date, time, domain
[ type=ef/em/es/ses, levtype
[ step, number?, levelist?, param, channel? ]]
[ type=ssd
[ step, number, param, ident, instrument, channel ]]
[ type, levtype
[ step, number?, levelist?, param ]]
]
# ewda
[ class, expver, stream=ewda, date, time, domain
[ type, levtype
[ step, number?, param, frequency?, direction? ]]
]
########################################################
# elda
[ class, expver, stream=elda, date, time, domain?
[ type=ofb/mfb
[ obsgroup, reportype ]]
[ type, levtype, anoffset
[ step, number?, levelist?, iteration?, param, channel? ]]
]
# ewda
[ class, expver, stream=ewla, date, time, domain
[ type, levtype, anoffset
[ step, number?, param, frequency?, direction? ]]
]
########################################################
# elda
[ class, expver, stream=lwda, date, time, domain?
[ type=ssd, anoffset
[ step, param, ident, instrument, channel ]]
[type=me, levtype, anoffset
[ number, step, levelist?, param]]
[ type=4i, levtype, anoffset
[ step, iteration, levelist, param ]]
[ type=ofb/mfb
[ obsgroup, reportype ]]
[ type, levtype, anoffset
[ step, levelist?, param]]
]
# ewda
[ class, expver, stream=lwwv, date, time, domain
[ type, levtype, anoffset
[ step, param, frequency?, direction? ]]
]
########################################################
# amap
[ class, expver, stream=amap, date, time, domain
[ type, levtype, origin
[ step, levelist?, param ]]]
# maed
[ class, expver, stream=maed, date, time, domain
[ type, levtype, origin
[ step, levelist?, param ]]]
# mawv
[ class, expver, stream=mawv, date, time, domain
[ type, levtype, origin
[ step, param, frequency?, direction? ]]]
# cher
[ class, expver, stream=cher, date, time, domain
[ type, levtype
[ step, levelist, param ]]]
# efhc
[ class, expver, stream=efhc, refdate, time, domain
[ type, levtype, date
[ step, number?, levelist?, param ]]]
# efho
[ class, expver, stream=efho, date, time, domain
[ type, levtype, hdate
[ step, number?, levelist?, param ]]]
# efhs
[ class, expver, stream=efhs, date, time, domain
[ type, levtype
[ step, quantile?, number?, levelist?, param ]]]
# wehs
[ class, expver, stream=wehs, date, time, domain
[ type, levtype
[ step, quantile?, number?, levelist?, param ]]]
# kwbc
[ class, expver, stream=kwbc, date, time, domain
[ type, levtype
[ step, number?, levelist?, param ]]]
# ehmm
[ class, expver, stream=ehmm, date, time, domain
[ type, levtype, hdate
[ fcmonth, levelist?, param ]]]
# ammc/cwao/edzw/egrr/lfpw/rjtd/toga
[ class, expver, stream=ammc/cwao/edzw/egrr/lfpw/rjtd/toga/fgge, date, time, domain
[ type, levtype
[ step, levelist?, param ]]]
########################################################################
# enfh
[ class, expver, stream=enfh, date, time, domain
[ type, levtype=dp, hdate, product?, section?
[ step, number?, levelist?, latitude?, longitude?, range?, param ]]
[ type, levtype, hdate
[ step, number?, levelist?, param ]]
]
# enwh
[ class, expver, stream=enwh, date, time, domain
[ type, levtype, hdate
[ step, number?, param, frequency?, direction? ]]
]
########################################################################
# sens
[ class, expver, stream=sens, date, time, domain
[ type, levtype
[ step, diagnostic, iteration, levelist?, param ]]]
########################################################################
# esmm
[ class, expver, stream=esmm, date, time, domain
[ type, levtype
[ fcmonth, levelist?, param ]]]
# ewhc
[ class, expver, stream=ewhc, refdate, time, domain
[ type, levtype, date
[ step, number?, param, frequency?, direction? ]]]
########################################################################
# ewho
[ class, expver, stream=ewho, date, time, domain
[ type, levtype, hdate
[ step, number?, param, frequency?, direction? ]]]
# mfam
[ class, expver, stream=mfam, date, time, domain
[ type=pb/pd, levtype, origin, system?, method
[ fcperiod, quantile, levelist?, param ]]
[ type, levtype, origin, system?, method
[ fcperiod, number?, levelist?, param ]]
]
# mfhm
[ class, expver, stream=mfhm, refdate, time, domain
[ type, levtype, origin, system?, method, date?
[ fcperiod, number?, levelist?, param ]]]
# mfhw
[ class, expver, stream=mfhw, refdate, time, domain
[ type, levtype, origin, system?, method, date
[ step, number?, param ]]]
# mfwm
[ class, expver, stream=mfwm, date, time, domain
[ type, levtype, origin, system?, method
[ fcperiod, number, param ]]]
# mhwm
[ class, expver, stream=mhwm, refdate, time, domain
[ type, levtype, origin, system?, method, date
[ fcperiod, number, param ]]]
# mmsf
[ class, expver, stream=mmsf, date, time, domain
[ type, levtype=dp, origin, product, section, system?, method
[ step, number, levelist?, latitude?, longitude?, range?, param ]]
[ type, levtype, origin, system?, method
[ step, number, levelist?, param ]]
]
# mnfc
[ class, expver, stream=mnfc, date, time, domain
[ type, levtype=dp, origin, product, section, system?, method
[ step, number?, levelist?, latitude?, longitude?, range?, param ]]
[ type, levtype, origin, system?, method
[ step, number?, levelist?, param ]]
]
# mnfh
[ class, expver, stream=mnfh, refdate, time, domain
[ type, levtype=dp, origin, product, section, system?, method, date
[ step, number?, levelist?, latitude?, longitude?, range?, param ]]
[ type, levtype, origin, system?, method, date?
[ step, number?, levelist?, param ]]
]
# mnfm
[ class, expver, stream=mnfm, date, time, domain
[ type, levtype, origin, system?, method
[ fcperiod, number?, levelist?, param ]]]
# mnfw
[ class, expver, stream=mnfw, date, time, domain
[ type, levtype, origin, system?, method
[ step, number?, param ]]]
# ea/mnth
[ class=ea, expver, stream=mnth, date, domain
[ type, levtype
[ time, step?, levelist?, param ]]]
# mnth
[ class, expver, stream=mnth, domain
[ type=cl, levtype
[ date: ClimateMonthly, time, levelist?, param ]]
[ type, levtype
[ date , time, step?, levelist?, param ]]]
# mofc
[ class, expver, stream=mofc, date, time, domain
[ type, levtype=dp, product, section, system?, method
[ step, number?, levelist?, latitude?, longitude?, range?, param ]]
[ type, levtype, system?, method
[ step, number?, levelist?, param ]]
]
# mofm
[ class, expver, stream=mofm, date, time, domain
[ type, levtype, system?, method
[ fcperiod, number, levelist?, param ]]]
# mmsa/msmm
[ class, expver, stream=mmsa, date, time, domain
[ type, levtype, origin, system?, method
[ fcmonth, number?, levelist?, param ]]]
[ class, expver, stream=msmm, date, time, domain
[ type, levtype, origin, system?, method
[ fcmonth, number?, levelist?, param ]]]
# ocea
[ class, expver, stream=ocea, date, time, domain
[ type, levtype, product, section, system?, method
[ step, number, levelist?, latitude?, longitude?, range?, param ]]
]
#=# seas
[ class, expver, stream=seas, date, time, domain
[ type, levtype=dp, product, section, system?, method
[ step, number, levelist?, latitude?, longitude?, range?, param ]]
[ type, levtype, system?, method
[ step, number, levelist?, param ]]
]
# sfmm/smma
[ class, expver, stream=sfmm/smma, date, time, domain
[ type, levtype, system?, method
[ fcmonth, number?, levelist?, param ]]]
# supd
[ class=od, expver, stream=supd, date, time, domain
[ type, levtype, origin?, grid
[ step, levelist?, param ]]]
# For era
[ class, expver, stream=supd, date, time, domain
[ type, levtype, grid- # The minus sign is here to consume 'grid', but don't index it
[ step, levelist?, param ]]]
# swmm
[ class, expver, stream=swmm, date, time, domain
[ type, levtype, system?, method
[ fcmonth, number, param ]]]
# wamf
[ class, expver, stream=wamf, date, time, domain
[ type, levtype, system?, method
[ step, number?, param ]]]
# ea/wamo
[ class=ea, expver, stream=wamo, date, domain
[ type, levtype
[ time, step?, param ]]]
# wamo
[ class, expver, stream=wamo, domain
[ type=cl, levtype
[ date: ClimateMonthly, time, param ]]
[ type, levtype
[ date, time, step?, param ]]]
# wamd
[ class, expver, stream=wamd, date, domain
[ type, levtype
[ param ]]]
# wasf
[ class, expver, stream=wasf, date, time, domain
[ type, levtype, system?, method
[ step, number, param ]]]
# wmfm
[ class, expver, stream=wmfm, date, time, domain
[ type, levtype, system?, method
[ fcperiod, number, param ]]]
# moda
[ class, expver, stream=moda, date, domain
[ type, levtype
[ levelist?, param ]]]
# msdc/mdfa/msda
[ class, expver, stream=msdc/mdfa/msda, domain
[ type, levtype
[ date, time?, step?, levelist?, param ]]]
# seap
[ class, expver, stream=seap, date, time, domain
[ type=sv/svar, levtype, origin, method?
[ step, leadtime, opttime, number, levelist?, param ]]
[ type=ef, levtype, origin
[ step, levelist?, param, channel? ]]
[ type, levtype, origin
[ step, levelist?, param ]]
]
[ class, expver, stream=mmaf, date, time, domain
[ type, levtype, origin, system?, method
[ step, number, levelist?, param ]]
]
[ class, expver, stream=mmam, date, time, domain
[ type, levtype, origin, system?, method
[ fcmonth, number, levelist?, param ]]
]
[ class, expver, stream=dacl, domain
[ type=pb, levtype
[ date: ClimateDaily, time, step, quantile, levelist?, param ]]
[ type, levtype
[ date: ClimateDaily, time, step, levelist?, param ]]
]
[ class, expver, stream=dacw, domain
[ type=pb, levtype
[ date: ClimateDaily, time, step, quantile, param ]]
[ type, levtype
[ date: ClimateDaily, time, step, param ]]
]
[ class, expver, stream=edmm/ewmm, date, time, domain
[ type=ssd
[ step, number, param, ident, instrument, channel ]]
[ type, levtype
[ step, number, levelist?, param ]]
]
[ class, expver, stream=edmo/ewmo, date, domain
[ type, levtype
[ number, levelist?, param ]]
]
# stream gfas
[ class=mc/rd, expver, stream=gfas, date, time, domain
[ type=ga, levtype
[ step, param ]]
[ type=gsd
[ param, ident, instrument ]]
]
# class is e2
[ class, expver, stream=espd, date, time, domain
[ type, levtype, origin, grid
[ step, number, levelist?, param ]]]
[ class=cs, expver, stream, date:Default, time, domain
[ type, levtype
[ step, levelist?, param ]]]

View File

@ -1,11 +0,0 @@
[ class=od, stream, date, time
[ domain, type, levtype, dbase, rki, rty, ty
[ step, levelist?, param ]]
]
[ class=ensemble, number, stream, date, time,
[ domain, type, levtype, dbase, rki, rty, ty
[ step, levelist?, param ]]
]
[ class, foo]

View File

@ -1,156 +0,0 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 5,
"id": "2f01a012-002a-465c-9b09-681bdb3fc26d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"class\n",
"type\n",
"stream\n",
"expver\n",
"dataset\n",
"model\n",
"repres\n",
"obsgroup\n",
"reportype\n",
"levtype\n",
"levelist\n",
"param\n",
"date\n",
"year\n",
"month\n",
"hdate\n",
"offsetdate\n",
"fcmonth\n",
"fcperiod\n",
"time\n",
"offsettime\n",
"step\n",
"anoffset\n",
"reference\n",
"number\n",
"quantile\n",
"domain\n",
"frequency\n",
"direction\n",
"diagnostic\n",
"iteration\n",
"channel\n",
"ident\n",
"instrument\n",
"method\n",
"origin\n",
"system\n",
"activity\n",
"experiment\n",
"generation\n",
"realization\n",
"resolution\n"
]
}
],
"source": [
"language_yaml = \"./language.yaml\"\n",
"import yaml\n",
"\n",
"with open(language_yaml, \"r\") as f:\n",
" mars_language = yaml.safe_load(f)[\"_field\"]\n",
"\n",
"for k in mars_language.keys(): print(k)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "be9074a8-a56f-4fd0-a466-de8904faaa1c",
"metadata": {},
"outputs": [],
"source": [
"%load_ext autoreload\n",
"%autoreload 2"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "9dd26fe4-5da5-48a5-9e43-83ac1085f7e6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"([Key(key='class', value='od', key_spec=class=od, reason='Matches'),\n",
" Key(key='stream', value=5, key_spec=stream, reason='Matches'),\n",
" Key(key='date', value='', key_spec=date, reason='Key Missing')],\n",
" [Key(key='class', value='ensemble', key_spec=class=ensemble, reason='Matches'),\n",
" Key(key='number', value='2', key_spec=number, reason='Matches'),\n",
" Key(key='stream', value=5, key_spec=stream, reason='Matches'),\n",
" Key(key='date', value='', key_spec=date, reason='Key Missing')])"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from fdb_schema import FDBSchemaFile\n",
"schema = FDBSchemaFile(\"./test_schema\")\n",
"\n",
"r = {\n",
" \"class\" : [\"ensemble\", \"od\"],\n",
" \"number\" : \"2\",\n",
" \"stream\" : 5,\n",
"}\n",
"\n",
"a, b = schema.match_all(r)\n",
"a, b"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f46268e3-e197-47b9-bb6e-94f06e0bf648",
"metadata": {},
"outputs": [],
"source": [
"([],\n",
" [[Key(key='class', value='od', key_spec=class=od, reason='Matches'),\n",
" Key(key='stream', value=5, key_spec=stream, reason='Matches'),\n",
" Key(key='date', value='', key_spec=date, reason='Key Missing')],\n",
" \n",
" [Key(key='class', value='ensemble', key_spec=class=ensemble, reason='Matches'),\n",
" Key(key='number', value='2', key_spec=number, reason='Matches'),\n",
" Key(key='stream', value=5, key_spec=stream, reason='Matches'),\n",
" Key(key='date', value='', key_spec=date, reason='Key Missing')]])"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:micromamba-ionbeam]",
"language": "python",
"name": "conda-env-micromamba-ionbeam-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.0"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View File

@ -1,297 +0,0 @@
// app.js
// const API_BASE_URL = "http://127.0.0.1:8000/tree";
// Take the query string and stick it on the API URL
function getSTACUrlFromQuery() {
const params = new URLSearchParams(window.location.search);
// get current window url and remove path part
let api_url = new URL(window.location.href);
api_url.pathname = "/tree";
for (const [key, value] of params.entries()) {
api_url.searchParams.set(key, value);
}
console.log(api_url.toString());
return api_url.toString();
}
function get_request_from_url() {
// Extract the query params in order and split any with a , delimiter
// request is an ordered array of [key, [value1, value2, value3, ...]]
const url = new URL(window.location.href);
const params = new URLSearchParams(url.search);
const request = [];
for (const [key, value] of params.entries()) {
request.push([key, value.split(",")]);
}
return request;
}
function make_url_from_request(request) {
const url = new URL(window.location.href);
url.search = ""; // Clear existing params
const params = new URLSearchParams();
for (const [key, values] of request) {
params.set(key, values.join(","));
}
url.search = params.toString();
return url.toString().replace(/%2C/g, ",");
}
function goToPreviousUrl() {
let request = get_request_from_url();
request.pop();
console.log("Request:", request);
const url = make_url_from_request(request);
console.log("URL:", url);
window.location.href = make_url_from_request(request);
}
// Function to generate a new STAC URL based on current selection
function goToNextUrl() {
const request = get_request_from_url();
// Get the currently selected key = value,value2,value3 pairs
const items = Array.from(document.querySelectorAll("div#items > div"));
let any_new_keys = false;
const new_keys = items.map((item) => {
const key = item.dataset.key;
const key_type = item.dataset.keyType;
let values = [];
const datePicker = item.querySelector("input[type='date']");
if (datePicker) {
values.push(datePicker.value.replace(/-/g, ""));
}
const timePicker = item.querySelector("input[type='time']");
if (timePicker) {
values.push(timePicker.value.replace(":", ""));
}
const enum_checkboxes = item.querySelectorAll("input[type='checkbox']:checked");
if (enum_checkboxes.length > 0) {
values.push(...Array.from(enum_checkboxes).map((checkbox) => checkbox.value));
}
const any = item.querySelector("input[type='text']");
if (any && any.value !== "") {
values.push(any.value);
}
// Keep track of whether any new keys are selected
if (values.length > 0) {
any_new_keys = true;
}
return { key, values };
});
// if not new keys are selected, do nothing
if (!any_new_keys) {
return;
}
// Update the request with the new keys
for (const { key, values } of new_keys) {
// Find the index of the existing key in the request array
const existingIndex = request.findIndex(
([existingKey, existingValues]) => existingKey === key
);
if (existingIndex !== -1) {
// If the key already exists, append the values
request[existingIndex][1] = [...request[existingIndex][1], ...values];
} else {
// If the key doesn't exist, add a new entry
request.push([key, values]);
}
}
const url = make_url_from_request(request);
window.location.href = url;
}
async function createCatalogItem(link, itemsContainer) {
const itemDiv = document.createElement("div");
itemDiv.className = "item loading";
itemDiv.textContent = "Loading...";
itemsContainer.appendChild(itemDiv);
try {
// Update the item div with real content
itemDiv.classList.remove("loading");
const dimension = link["generalized_datacube:dimension"];
// add data-key attribute to the itemDiv
itemDiv.dataset.key = link.title;
itemDiv.dataset.keyType = dimension.type;
itemDiv.innerHTML = `
<h3 class="item-title">${link.title || "No title available"}</h3>
<p class="item-type">Key Type: ${itemDiv.dataset.keyType || "Unknown"}</p>
<p class="item-type">Optional: ${dimension.optional ? "Yes" : "No"}</p>
<p class="item-description">${dimension.description ? dimension.description.slice(0, 100) : "No description available"}...</p>
`;
if (dimension.type === "date" || dimension.type === "time") {
// Render a date picker for the "date" key
const picker = `<input type="${link.title}" name="${link.title}">`;
//convert picker to HTML node
const pickerNode = document
.createRange()
.createContextualFragment(picker);
itemDiv.appendChild(pickerNode);
}
// Otherwise create a scrollable list with checkboxes for values if available
else if (
// dimension.type === "enum" &&
dimension.values &&
dimension.values.length > 0
) {
const listContainer = renderCheckboxList(link);
itemDiv.appendChild(listContainer);
} else {
const any = `<input type="text" name="${link.title}">`;
const anyNode = document.createRange().createContextualFragment(any);
itemDiv.appendChild(anyNode);
}
} catch (error) {
console.error("Error loading item data:", error);
itemDiv.innerHTML = `<p>Error loading item details: ${error}</p>`;
}
}
function renderCheckboxList(link) {
const dimension = link["generalized_datacube:dimension"];
const value_descriptions = dimension.value_descriptions;
const listContainerHTML = `
<div class="item-list-container">
<label class="list-label">Select one or more values:</label>
<div class="scrollable-list">
${dimension.values
.map((value, index) => {
const labelText = value_descriptions[index] ? `${value} - ${value_descriptions[index]}` : value;
return `
<div class="checkbox-container">
<input type="checkbox" class="item-checkbox" value="${value}" ${dimension.values.length === 1? 'checked' : ''}>
<label class="checkbox-label">${labelText}</label>
</div>
`;
})
.join("")}
</div>
</div>
`;
return document.createRange().createContextualFragment(listContainerHTML).firstElementChild;
}
// Render catalog items in the sidebar
function renderCatalogItems(links) {
const itemsContainer = document.getElementById("items");
itemsContainer.innerHTML = ""; // Clear previous items
console.log("Number of Links:", links);
const children = links.filter(
(link) => link.rel === "child" || link.rel === "items"
);
console.log("Number of Children:", children.length);
children.forEach((link) => {
createCatalogItem(link, itemsContainer);
});
}
function renderRequestBreakdown(request, descriptions) {
const container = document.getElementById("request-breakdown");
const format_value = (key, value) => {
return `<span class="value" title="${descriptions[key]['value_descriptions'][value]}">"${value}"</span>`;
};
const format_values = (key, values) => {
if (values.length === 1) {
return format_value(key, values[0]);
}
return `[${values.map((v) =>
format_value(key, v)
).join(", ")}]`;
};
let html = `{\n` +
request
.map(
([key, values]) =>
` <span class="key" title="${descriptions[key]['description']}">"${key}"</span>: ${format_values(key, values)},`
)
.join("\n") +
`\n}`;
container.innerHTML = html;
}
function renderRawSTACResponse(catalog) {
const itemDetails = document.getElementById("raw-stac");
itemDetails.textContent = JSON.stringify(catalog, null, 2);
}
// Fetch STAC catalog and display items
async function fetchCatalog(request, stacUrl) {
try {
const response = await fetch(stacUrl);
const catalog = await response.json();
// Render the request breakdown in the sidebar
renderRequestBreakdown(request, catalog.debug.descriptions);
// Show the raw STAC in the sidebar
renderRawSTACResponse(catalog);
// Render the items from the catalog
if (catalog.links) {
console.log("Fetched STAC catalog:", stacUrl, catalog.links);
renderCatalogItems(catalog.links);
}
// Highlight the request and raw STAC
hljs.highlightElement(document.getElementById("raw-stac"));
} catch (error) {
console.error("Error fetching STAC catalog:", error);
}
}
// Initialize the viewer by fetching the STAC catalog
function initializeViewer() {
const stacUrl = getSTACUrlFromQuery();
const request = get_request_from_url();
if (stacUrl) {
console.log("Fetching STAC catalog from query string URL:", stacUrl);
fetchCatalog(request, stacUrl);
} else {
console.error("No STAC URL provided in the query string.");
}
// Add event listener for the "Generate STAC URL" button
const generateUrlBtn = document.getElementById("next-btn");
generateUrlBtn.addEventListener("click", goToNextUrl);
const previousUrlBtn = document.getElementById("previous-btn");
previousUrlBtn.addEventListener("click", goToPreviousUrl);
// Add event listener for the "Raw STAC" button
const stacAnchor = document.getElementById("stac-anchor");
stacAnchor.href = getSTACUrlFromQuery();
}
// Call initializeViewer on page load
initializeViewer();

View File

@ -1,46 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ECMWF DestinE STAC Viewer</title>
<link rel="stylesheet" href="/app/styles.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/json.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/python.min.js"></script>
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>📚</text></svg>">
</head>
<body>
<div id="viewer">
<div id="catalog-list">
<h2>STAC Items</h2>
<p>Select one or more items and then click next iteratively build up a full request.</p>
<div class="sidebar-header">
<button id="previous-btn">Previous</button>
<a id="stac-anchor"><button id="stac-btn">Raw STAC</button></a>
<button id="next-btn">Next</button>
</div>
<div id="items">
<!-- Items from the STAC catalog will be rendered here -->
</div>
</div>
<div id="details">
{{ config.get('message', '')}}
<h2>Request</h2>
Hover over a key or value for more info.
<pre><code id="request-breakdown" class="language-json">
{
}
</code></pre>
<h2>Raw STAC</h2>
<pre><code id="raw-stac" class="language-json"></code></pre>
</div>
</div>
<script src="/app/app.js"></script>
</body>
</html>

View File

@ -1,2 +0,0 @@
# https://github.com/cytb/simple-autoreload-server
autoreload-server . 8123

View File

@ -1,166 +0,0 @@
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
}
#viewer {
display: flex;
flex-direction: row;
height: 100vh;
}
#catalog-list {
width: 30%;
padding: 10px;
overflow-y: scroll;
background-color: #f4f4f4;
border-right: 1px solid #ddd;
}
#catalog-list h2 {
margin-top: 0;
}
#details {
width: 70%;
padding: 10px;
}
.sidebar-header {
display: flex;
justify-content: space-between; /* Center buttons horizontally */
margin-bottom: 10px; /* Space below header */
height: 3em;
}
.sidebar-header button {
width: 10em;
}
canvas {
width: 100%;
height: 300px;
border: 1px solid #ccc;
margin-top: 20px;
}
/* Updated CSS for the item elements in the catalog list */
.item {
background-color: white;
border: 1px solid #ddd;
padding: 10px;
margin-bottom: 10px;
border-radius: 5px;
transition: background-color 0.2s ease;
}
.item-title {
font-size: 18px;
margin: 0;
color: #333;
}
.item-type {
font-size: 14px;
margin: 5px 0;
color: #666;
}
.item-id, .item-key-type {
font-size: 12px;
color: #999;
}
.item-description {
font-size: 13px;
margin: 5px 0;
color: #444;
font-style: italic;
}
#items {
padding: 10px;
}
.item.selected {
background-color: #d4e9ff; /* Lighter blue for selection */
border-color: #003399; /* Keep the original ECMWF blue for the border */
}
#raw-stac {
white-space: pre-wrap;
background-color: #f9f9f9;
padding: 10px;
border: 1px solid #ccc;
}
/* Button styles */
button {
height: 3em;
padding: 10px 20px; /* Padding around button text */
margin: 0 5px; /* Margin between buttons */
background-color: #003399; /* ECMWF blue */
color: white; /* White text color */
border: none; /* Remove default button border */
cursor: pointer; /* Pointer cursor on hover */
border-radius: 5px; /* Rounded corners */
transition: background-color 0.3s ease; /* Smooth background color transition */
}
button:hover {
background-color: #001f66; /* Darker shade of ECMWF blue on hover */
}
.item-list-container {
margin-top: 20px;
margin-bottom: 20px;
}
.scrollable-list {
max-height: 200px;
overflow-y: auto;
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
background-color: #fff;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
.checkbox-container {
display: flex;
align-items: center;
margin-bottom: 10px;
}
.item-checkbox {
margin-right: 10px;
cursor: pointer;
}
.checkbox-label {
font-size: 16px;
color: #333;
}
.checkbox-container:hover .checkbox-label {
color: #003399;
}
.list-label {
font-weight: bold;
margin-bottom: 0.5em;
display: block;
color: #003399;
}
span.key, span.value {
color: #ba2121;;
}
span.key {
font-weight: bold;
}
span.key:hover, span.value:hover {
color: #ff2a2a;
cursor: pointer;
}

9
cache/README.md vendored
View File

@ -1,9 +0,0 @@
This code builds the tree cache from fdb.list
A tried a fill run of the entire database using `list_entire_fdb.py`, it died after 14 hours and 89 million unique objects, perhaps because it ran out of memory.
The raw `cache.json` can be compressed using "tree_to_compressed.py" which folds identical subtrees and replaces the keys with "key=val1,val2,val3" strings.
For a 38MB cache.json, the compressed version is 40KB.
For 122MB it's 44KB.

View File

@ -1 +0,0 @@
{"class=d1": {"dataset=climate-dt": {"activity=cmip6": {"experiment=hist": {"generation=1": {"model=icon": {"realization=1": {"expver=0001": {"stream=clte": {"date=19910410": {"resolution=high": {"type=fc": {"levtype=sfc": {"time=0000": {"param=130": {}}}}}}}}}}}}}}}}

File diff suppressed because one or more lines are too long

View File

@ -1,81 +0,0 @@
from frozendict import frozendict, deepfreeze
from collections import defaultdict
def cache_key(cache, tree):
h = hash(frozendict(tree))
if h not in cache:
cache[h] = tree
return h
def cache_tree(cache, tree) -> dict:
if not isinstance(tree, dict):
if hash(tree) not in cache:
cache[hash(tree)] = tree
return hash(tree)
if not tree:
return cache_key(cache, tree)
return cache_key(cache, {k : cache_tree(cache, v) for k, v in tree.items() if k != "_count"})
def expand_tree_but_collapsed(cache, tree, level = 0, max_level = None):
if max_level == level: return tree
if not isinstance(tree, dict): return tree
# collapse by leaf
leaves = defaultdict(list)
for k, v in tree.items():
leaves[v].append(k)
new_tree = {}
for value, key_group in leaves.items():
k = key_group[0].split("=")[0]
key = k + "=" + ",".join(k.split("=")[1] for k in key_group)
new_tree[key] = value
return {k : expand_tree_but_collapsed(cache, cache[v],
level=level+1,
max_level=max_level) for k, v in new_tree.items()}
def compress_tree(tree, max_level = 5):
cache = {}
cache_tree(cache, tree)
top_level = {k : cache_tree(cache, v) for k, v in tree.items() if k != "_count"}
return expand_tree_but_collapsed(cache, top_level, max_level = max_level)
def pretty_schema_tree(tree):
name_cache = {}
names = set()
def pick_name(k):
if k in name_cache: return name_cache[k]
name, values = k.split("=")
for i in range(100):
new_name = f"{name}_{i}"
if new_name not in names:
name_cache[k] = new_name
names.add(new_name)
return new_name
def tree_as_schema(tree, level = 0):
indent = " "
if not isinstance(tree, dict):
return "\n" + indent*level + f"[ {tree}, "
out = "[" if level == 0 else ""
for k, v in tree.items():
if len(k) > 30:
k = pick_name(k)
if len(tree) == 1:
out += k + ", " + tree_as_schema(v, level = level + 1)
else:
out += "\n" + indent*level + f"[ {k}, " + tree_as_schema(v, level = level + 1)
# out += "]\n"
return out
schema_tree = tree_as_schema(tree)
groups = "\n".join(f"{v} : {k}" for k, v in sorted(name_cache.items()))
return groups + "\n" + schema_tree

File diff suppressed because one or more lines are too long

479
cache/demo.cast vendored
View File

@ -1,479 +0,0 @@
{"version": 2, "width": 139, "height": 51, "timestamp": 1729520622, "env": {"SHELL": "/bin/bash", "TERM": "xterm-256color"}}
[0.013507, "o", "\u001b[?2004h\u001b]0;eouser@stac-test: ~/catalogs/backend\u0007\u001b[01;32meouser@stac-test\u001b[00m:\u001b[01;34m~/catalogs/backend\u001b[00m$ "]
[0.860592, "o", "python test_remotefdb.py "]
[1.206129, "o", "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bsource catalogs/.venv/bin/activate"]
[2.388112, "o", "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\u001b[9Ppython test_remotefdb.py "]
[4.666292, "o", "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bsource catalogs/.venv/bin/activate"]
[5.720147, "o", "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\u001b[9Ppython test_remotefdb.py "]
[5.898183, "o", "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\u001b[K"]
[7.606682, "o", "p"]
[7.71761, "o", "y"]
[7.879492, "o", "t"]
[8.002022, "o", "h"]
[8.043895, "o", "o"]
[8.098641, "o", "n"]
[8.226663, "o", " "]
[8.482915, "o", "c"]
[8.505358, "o", "a"]
[8.807878, "o", "che.py "]
[9.554525, "o", "\r\n\u001b[?2004l\r"]
[23.001191, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.001593, "o", "Total: 200\r\nRuntime: 13 s\r\n└──\r\n"]
[23.001818, "o", " └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.024055, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.024549, "o", "Total: 400\r\nRuntime: 13 s\r\n└──\r\n └──class=d1\r\n"]
[23.024611, "o", " └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n"]
[23.024934, "o", " └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.04771, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.04831, "o", "Total: 600\r\nRuntime: 13 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n"]
[23.048381, "o", " └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.071379, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.071805, "o", "Total: 800\r\nRuntime: 13 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n"]
[23.072001, "o", " └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.095691, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.096166, "o", "Total: 1000\r\nRuntime: 13 s\r\n└──\r\n"]
[23.096233, "o", " └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n"]
[23.096286, "o", " └──date=19920422\r\n └──resolution=high\r\n"]
[23.120415, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.120912, "o", "Total: 1200\r\nRuntime: 13 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n"]
[23.121285, "o", " └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.146966, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.147559, "o", "Total: 1400\r\nRuntime: 13 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n"]
[23.147612, "o", " └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.173693, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.174089, "o", "Total: 1600\r\nRuntime: 13 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n"]
[23.174185, "o", " └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.200989, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.201511, "o", "Total: 1800\r\nRuntime: 13 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n"]
[23.20188, "o", " └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.2307, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.231334, "o", "Total: 2000\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n"]
[23.231656, "o", " └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.259717, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.260358, "o", "Total: 2200\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n"]
[23.260696, "o", " └──resolution=high\r\n"]
[23.288767, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.289319, "o", "Total: 2400\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n"]
[23.289401, "o", " └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.318851, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.319393, "o", "Total: 2600\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n"]
[23.319446, "o", " └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.357623, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.358127, "o", "Total: 2800\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.388334, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.388761, "o", "Total: 3000\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n"]
[23.388887, "o", " └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n"]
[23.38899, "o", " └──resolution=high\r\n"]
[23.419326, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.419771, "o", "Total: 3200\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.451479, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.45205, "o", "Total: 3400\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.483464, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.483965, "o", "Total: 3600\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n"]
[23.484021, "o", " └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.516508, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.517036, "o", "Total: 3800\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.550592, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.551137, "o", "Total: 4000\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n"]
[23.551205, "o", " └──generation=1\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.587142, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.587678, "o", "Total: 4200\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[23.58785, "o", " │ └──resolution=standard\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.623094, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.623625, "o", "Total: 4400\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n"]
[23.623761, "o", " │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.658789, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.659331, "o", "Total: 4600\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[23.659457, "o", " │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.694361, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.694899, "o", "Total: 4800\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n"]
[23.694938, "o", " └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.73034, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.730795, "o", "Total: 5000\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n"]
[23.730954, "o", " │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.766944, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.767366, "o", "Total: 5200\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n"]
[23.767415, "o", " └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n"]
[23.767751, "o", " └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.803901, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.804356, "o", "Total: 5400\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n"]
[23.804517, "o", " │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.842617, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.842905, "o", "Total: 5600\r\nRuntime: 14 s\r\n└──\r\n"]
[23.843086, "o", " └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.881481, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.881743, "o", "Total: 5800\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n"]
[23.88182, "o", " │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.921022, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.921331, "o", "Total: 6000\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n"]
[23.921468, "o", " └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[23.961238, "o", "\u001b[H\u001b[2J\u001b[3J"]
[23.961708, "o", "Total: 6200\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n"]
[23.961791, "o", " │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.002408, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.002895, "o", "Total: 6400\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n"]
[24.002978, "o", " └──resolution=high\r\n"]
[24.043759, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.044236, "o", "Total: 6600\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[24.044311, "o", " │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.086123, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.086601, "o", "Total: 6800\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n"]
[24.086696, "o", " │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.128918, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.129432, "o", "Total: 7000\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.173033, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.173467, "o", "Total: 7200\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n"]
[24.17357, "o", " │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.216584, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.217004, "o", "Total: 7400\r\nRuntime: 14 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n"]
[24.217113, "o", " │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.261263, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.261743, "o", "Total: 7600\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n"]
[24.261779, "o", " └──date=19920422\r\n └──resolution=high\r\n"]
[24.306332, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.306779, "o", "Total: 7800\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n"]
[24.306818, "o", " │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.351451, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.351911, "o", "Total: 8000\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422"]
[24.351951, "o", "\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.399317, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.399807, "o", "Total: 8200\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n"]
[24.399905, "o", " │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.447825, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.448315, "o", "Total: 8400\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n"]
[24.448354, "o", " └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.496187, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.496619, "o", "Total: 8600\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n"]
[24.496702, "o", " │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.545074, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.545545, "o", "Total: 8800\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[24.545582, "o", " │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.595303, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.595747, "o", "Total: 9000\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n"]
[24.595837, "o", " └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.64594, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.646459, "o", "Total: 9200\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[24.646531, "o", " │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.697922, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.698416, "o", "Total: 9400\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n"]
[24.698498, "o", " │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.749128, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.749621, "o", "Total: 9600\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[24.749658, "o", " │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.802131, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.80256, "o", "Total: 9800\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo"]
[24.802639, "o", "\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.865052, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.865354, "o", "Total: 10000\r\n"]
[24.86554, "o", "Runtime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.91872, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.919172, "o", "Total: 10200\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n"]
[24.919254, "o", " │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[24.972327, "o", "\u001b[H\u001b[2J\u001b[3J"]
[24.972657, "o", "Total: 10400\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n"]
[24.972694, "o", " │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.024978, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.025401, "o", "Total: 10600\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n"]
[25.025442, "o", " │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.078272, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.078772, "o", "Total: 10800\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n"]
[25.078858, "o", " └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.132303, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.13271, "o", "Total: 11000\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n"]
[25.132904, "o", " │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.186435, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.186935, "o", "Total: 11200\r\nRuntime: 15 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[25.186973, "o", " │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.241462, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.241923, "o", "Total: 11400\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[25.241989, "o", " │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.297149, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.297605, "o", "Total: 11600\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n"]
[25.297781, "o", " ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.355901, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.356392, "o", "Total: 11800\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n"]
[25.356491, "o", " └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.412731, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.413217, "o", "Total: 12000\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n"]
[25.413409, "o", " └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.470779, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.471218, "o", "Total: 12200\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n"]
[25.471262, "o", " └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.528497, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.528946, "o", "Total: 12400\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n"]
[25.528983, "o", " └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.58768, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.588168, "o", "Total: 12600\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n"]
[25.588232, "o", " │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.646322, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.646838, "o", "Total: 12800\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n"]
[25.646876, "o", " └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.705794, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.706287, "o", "Total: 13000\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n"]
[25.706453, "o", " │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.76671, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.767182, "o", "Total: 13200\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n"]
[25.767352, "o", " └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.828388, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.828951, "o", "Total: 13400\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[25.828994, "o", " │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.890025, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.890438, "o", "Total: 13600\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n"]
[25.890554, "o", " ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[25.951877, "o", "\u001b[H\u001b[2J\u001b[3J"]
[25.952384, "o", "Total: 13800\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n"]
[25.952556, "o", " │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[26.015263, "o", "\u001b[H\u001b[2J\u001b[3J"]
[26.015827, "o", "Total: 14000\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[26.079166, "o", "\u001b[H\u001b[2J\u001b[3J"]
[26.079693, "o", "Total: 14200\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[26.143245, "o", "\u001b[H\u001b[2J\u001b[3J"]
[26.143743, "o", "Total: 14400\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[26.20821, "o", "\u001b[H\u001b[2J\u001b[3J"]
[26.208801, "o", "Total: 14600\r\nRuntime: 16 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n"]
[26.20894, "o", " │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[26.274143, "o", "\u001b[H\u001b[2J\u001b[3J"]
[26.274687, "o", "Total: 14800\r\nRuntime: 17 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[26.34619, "o", "\u001b[H\u001b[2J\u001b[3J"]
[26.346549, "o", "Total: 15000\r\nRuntime: 17 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[26.346689, "o", " │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[26.412054, "o", "\u001b[H\u001b[2J\u001b[3J"]
[26.412602, "o", "Total: 15200\r\nRuntime: 17 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n"]
[26.412681, "o", " └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[26.4795, "o", "\u001b[H\u001b[2J\u001b[3J"]
[26.480173, "o", "Total: 15400\r\nRuntime: 17 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[26.547527, "o", "\u001b[H\u001b[2J\u001b[3J"]
[26.548221, "o", "Total: 15600\r\nRuntime: 17 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n"]
[26.548442, "o", " │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[26.616117, "o", "\u001b[H\u001b[2J\u001b[3J"]
[26.616775, "o", "Total: 15800\r\nRuntime: 17 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n"]
[26.617001, "o", " └──date=19920422\r\n └──resolution=high\r\n"]
[26.684421, "o", "\u001b[H\u001b[2J\u001b[3J"]
[26.685074, "o", "Total: 16000\r\nRuntime: 17 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n"]
[26.685301, "o", " └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[26.753891, "o", "\u001b[H\u001b[2J\u001b[3J"]
[26.754547, "o", "Total: 16200\r\nRuntime: 17 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n"]
[26.754812, "o", " └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[26.823974, "o", "\u001b[H\u001b[2J\u001b[3J"]
[26.82464, "o", "Total: 16400\r\nRuntime: 17 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[26.897401, "o", "\u001b[H\u001b[2J\u001b[3J"]
[26.898115, "o", "Total: 16600\r\nRuntime: 17 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n"]
[26.898345, "o", " │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[26.968419, "o", "\u001b[H\u001b[2J\u001b[3J"]
[26.969061, "o", "Total: 16800\r\nRuntime: 17 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[27.039554, "o", "\u001b[H\u001b[2J\u001b[3J"]
[27.040173, "o", "Total: 17000\r\nRuntime: 17 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n"]
[27.040394, "o", " └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[27.111089, "o", "\u001b[H\u001b[2J\u001b[3J"]
[27.111728, "o", "Total: 17200\r\nRuntime: 17 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n"]
[27.111952, "o", " └──date=19920422\r\n └──resolution=high\r\n"]
[27.183352, "o", "\u001b[H\u001b[2J\u001b[3J"]
[27.183884, "o", "Total: 17400\r\nRuntime: 17 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n"]
[27.183967, "o", " │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[27.255989, "o", "\u001b[H\u001b[2J\u001b[3J"]
[27.256662, "o", "Total: 17600\r\nRuntime: 18 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n"]
[27.256886, "o", " └──resolution=high\r\n"]
[27.329402, "o", "\u001b[H\u001b[2J\u001b[3J"]
[27.330001, "o", "Total: 17800\r\nRuntime: 18 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[27.406358, "o", "\u001b[H\u001b[2J\u001b[3J"]
[27.406844, "o", "Total: 18000\r\nRuntime: 18 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[27.489238, "o", "\u001b[H\u001b[2J\u001b[3J"]
[27.489653, "o", "Total: 18200\r\nRuntime: 18 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[27.564484, "o", "\u001b[H\u001b[2J\u001b[3J"]
[27.564967, "o", "Total: 18400\r\nRuntime: 18 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[27.565044, "o", " │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[27.639824, "o", "\u001b[H\u001b[2J\u001b[3J"]
[27.640367, "o", "Total: 18600\r\nRuntime: 18 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n"]
[27.64059, "o", " └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[27.716224, "o", "\u001b[H\u001b[2J\u001b[3J"]
[27.716698, "o", "Total: 18800\r\nRuntime: 18 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[27.716914, "o", " │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[27.792047, "o", "\u001b[H\u001b[2J\u001b[3J"]
[27.792521, "o", "Total: 19000\r\nRuntime: 18 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n"]
[27.792729, "o", " │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[27.869003, "o", "\u001b[H\u001b[2J\u001b[3J"]
[27.869477, "o", "Total: 19200\r\nRuntime: 18 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n"]
[27.869694, "o", " └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[27.955881, "o", "\u001b[H\u001b[2J\u001b[3J"]
[27.956271, "o", "Total: 19400\r\nRuntime: 18 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[28.033745, "o", "\u001b[H\u001b[2J\u001b[3J"]
[28.034299, "o", "Total: 19600\r\nRuntime: 18 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[28.112317, "o", "\u001b[H\u001b[2J\u001b[3J"]
[28.11285, "o", "Total: 19800\r\nRuntime: 18 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n"]
[28.112936, "o", " │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[28.19266, "o", "\u001b[H\u001b[2J\u001b[3J"]
[28.193071, "o", "Total: 20000\r\nRuntime: 18 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n"]
[28.193203, "o", " │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[28.273245, "o", "\u001b[H\u001b[2J\u001b[3J"]
[28.273857, "o", "Total: 20200\r\nRuntime: 19 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n"]
[28.273992, "o", " │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[28.354753, "o", "\u001b[H\u001b[2J\u001b[3J"]
[28.355375, "o", "Total: 20400\r\nRuntime: 19 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n"]
[28.355505, "o", " │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[28.444117, "o", "\u001b[H\u001b[2J\u001b[3J"]
[28.44456, "o", "Total: 20600\r\nRuntime: 19 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n"]
[28.444688, "o", " ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[28.526831, "o", "\u001b[H\u001b[2J\u001b[3J"]
[28.52736, "o", "Total: 20800\r\nRuntime: 19 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n"]
[28.527497, "o", " └──resolution=high\r\n"]
[28.61032, "o", "\u001b[H\u001b[2J\u001b[3J"]
[28.610861, "o", "Total: 21000\r\nRuntime: 19 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n"]
[28.611001, "o", " └──date=19920422\r\n └──resolution=high\r\n"]
[28.694276, "o", "\u001b[H\u001b[2J\u001b[3J"]
[28.69481, "o", "Total: 21200\r\nRuntime: 19 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[28.694949, "o", " │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[28.778291, "o", "\u001b[H\u001b[2J\u001b[3J"]
[28.778808, "o", "Total: 21400\r\nRuntime: 19 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[28.778947, "o", " │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[28.863282, "o", "\u001b[H\u001b[2J\u001b[3J"]
[28.863763, "o", "Total: 21600\r\nRuntime: 19 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n"]
[28.86391, "o", " │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[28.958933, "o", "\u001b[H\u001b[2J\u001b[3J"]
[28.959422, "o", "Total: 21800\r\nRuntime: 19 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n"]
[28.959567, "o", " │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[29.043729, "o", "\u001b[H\u001b[2J\u001b[3J"]
[29.044273, "o", "Total: 22000\r\nRuntime: 19 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[29.044447, "o", " │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[29.129213, "o", "\u001b[H\u001b[2J\u001b[3J"]
[29.129714, "o", "Total: 22200\r\nRuntime: 19 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[29.129812, "o", " │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[29.216052, "o", "\u001b[H\u001b[2J\u001b[3J"]
[29.216541, "o", "Total: 22400\r\nRuntime: 19 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n"]
[29.216682, "o", " │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[29.303481, "o", "\u001b[H\u001b[2J\u001b[3J"]
[29.303965, "o", "Total: 22600\r\nRuntime: 20 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n"]
[29.304106, "o", " │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[29.392171, "o", "\u001b[H\u001b[2J\u001b[3J"]
[29.392601, "o", "Total: 22800\r\nRuntime: 20 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[29.481784, "o", "\u001b[H\u001b[2J\u001b[3J"]
[29.482275, "o", "Total: 23000\r\nRuntime: 20 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[29.482436, "o", " │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[29.570783, "o", "\u001b[H\u001b[2J\u001b[3J"]
[29.571214, "o", "Total: 23200\r\nRuntime: 20 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n"]
[29.571388, "o", " │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[29.660404, "o", "\u001b[H\u001b[2J\u001b[3J"]
[29.660968, "o", "Total: 23400\r\nRuntime: 20 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[29.661127, "o", " │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[29.75088, "o", "\u001b[H\u001b[2J\u001b[3J"]
[29.751383, "o", "Total: 23600\r\nRuntime: 20 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[29.751523, "o", " │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[29.840945, "o", "\u001b[H\u001b[2J\u001b[3J"]
[29.841479, "o", "Total: 23800\r\nRuntime: 20 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[29.841651, "o", " │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[29.939532, "o", "\u001b[H\u001b[2J\u001b[3J"]
[29.939978, "o", "Total: 24000\r\nRuntime: 20 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[30.031567, "o", "\u001b[H\u001b[2J\u001b[3J"]
[30.032026, "o", "Total: 24200\r\nRuntime: 20 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[30.032186, "o", " │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[30.124271, "o", "\u001b[H\u001b[2J\u001b[3J"]
[30.12472, "o", "Total: 24400\r\nRuntime: 20 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[30.124878, "o", " │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[30.216403, "o", "\u001b[H\u001b[2J\u001b[3J"]
[30.216868, "o", "Total: 24600\r\nRuntime: 20 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n"]
[30.217012, "o", " │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[30.310204, "o", "\u001b[H\u001b[2J\u001b[3J"]
[30.310798, "o", "Total: 24800\r\nRuntime: 21 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[30.310966, "o", " │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[30.406164, "o", "\u001b[H\u001b[2J\u001b[3J"]
[30.406689, "o", "Total: 25000\r\nRuntime: 21 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[30.406834, "o", " │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[30.517033, "o", "\u001b[H\u001b[2J\u001b[3J"]
[30.517415, "o", "Total: 25200\r\nRuntime: 21 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n"]
[30.51753, "o", " │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[30.611921, "o", "\u001b[H\u001b[2J\u001b[3J"]
[30.612402, "o", "Total: 25400\r\nRuntime: 21 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n"]
[30.612505, "o", " └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[30.713763, "o", "\u001b[H\u001b[2J\u001b[3J"]
[30.714288, "o", "Total: 25600\r\nRuntime: 21 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n"]
[30.714409, "o", " │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[30.811203, "o", "\u001b[H\u001b[2J\u001b[3J"]
[30.81176, "o", "Total: 25800\r\nRuntime: 21 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n"]
[30.811859, "o", " │ └──resolution=high\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[30.909483, "o", "\u001b[H\u001b[2J\u001b[3J"]
[30.910962, "o", "Total: 26000\r\nRuntime: 21 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n"]
[30.911082, "o", " │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[31.009725, "o", "\u001b[H\u001b[2J\u001b[3J"]
[31.010174, "o", "Total: 26200\r\nRuntime: 21 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n"]
[31.010311, "o", " │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[31.108865, "o", "\u001b[H\u001b[2J\u001b[3J"]
[31.109352, "o", "Total: 26400\r\nRuntime: 21 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n"]
[31.109503, "o", " │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[31.208702, "o", "\u001b[H\u001b[2J\u001b[3J"]
[31.20937, "o", "Total: 26600\r\nRuntime: 21 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n"]
[31.209472, "o", " │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[31.309207, "o", "\u001b[H\u001b[2J\u001b[3J"]
[31.309729, "o", "Total: 26800\r\nRuntime: 22 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n"]
[31.30984, "o", " │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[31.411826, "o", "\u001b[H\u001b[2J\u001b[3J"]
[31.415924, "o", "Total: 27000\r\nRuntime: 22 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n"]
[31.416088, "o", " │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[31.517116, "o", "\u001b[H\u001b[2J\u001b[3J"]
[31.517615, "o", "Total: 27200\r\nRuntime: 22 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n"]
[31.517732, "o", " │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[31.619249, "o", "\u001b[H\u001b[2J\u001b[3J"]
[31.61975, "o", "Total: 27400\r\nRuntime: 22 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n"]
[31.619867, "o", " │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[31.722157, "o", "\u001b[H\u001b[2J\u001b[3J"]
[31.722738, "o", "Total: 27600\r\nRuntime: 22 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n"]
[31.722879, "o", " │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[31.826059, "o", "\u001b[H\u001b[2J\u001b[3J"]
[31.82672, "o", "Total: 27800\r\nRuntime: 22 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[31.949521, "o", "\u001b[H\u001b[2J\u001b[3J"]
[31.950074, "o", "Total: 28000\r\nRuntime: 22 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n"]
[31.950228, "o", " │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[32.054064, "o", "\u001b[H\u001b[2J\u001b[3J"]
[32.054546, "o", "Total: 28200\r\nRuntime: 22 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n"]
[32.054699, "o", " │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[32.159264, "o", "\u001b[H\u001b[2J\u001b[3J"]
[32.159791, "o", "Total: 28400\r\nRuntime: 22 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n"]
[32.159934, "o", " │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[32.267038, "o", "\u001b[H\u001b[2J\u001b[3J"]
[32.267597, "o", "Total: 28600\r\nRuntime: 23 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n"]
[32.267725, "o", " │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[32.372321, "o", "\u001b[H\u001b[2J\u001b[3J"]
[32.372811, "o", "Total: 28800\r\nRuntime: 23 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n"]
[32.372924, "o", " │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[32.488625, "o", "\u001b[H\u001b[2J\u001b[3J"]
[32.489008, "o", "Total: 29000\r\nRuntime: 23 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n"]
[32.489172, "o", " │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[32.596762, "o", "\u001b[H\u001b[2J\u001b[3J"]
[32.597214, "o", "Total: 29200\r\nRuntime: 23 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n"]
[32.597329, "o", " │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[32.704136, "o", "\u001b[H\u001b[2J\u001b[3J"]
[32.704728, "o", "Total: 29400\r\nRuntime: 23 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n"]
[32.704889, "o", " │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[32.812243, "o", "\u001b[H\u001b[2J\u001b[3J"]
[32.812737, "o", "Total: 29600\r\nRuntime: 23 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n"]
[32.812946, "o", " │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[32.925347, "o", "\u001b[H\u001b[2J\u001b[3J"]
[32.925873, "o", "Total: 29800\r\nRuntime: 23 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n"]
[32.925978, "o", " │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[33.035227, "o", "\u001b[H\u001b[2J\u001b[3J"]
[33.035712, "o", "Total: 30000\r\nRuntime: 23 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n"]
[33.035851, "o", " │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[33.149101, "o", "\u001b[H\u001b[2J\u001b[3J"]
[33.14984, "o", "Total: 30200\r\nRuntime: 23 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n"]
[33.149965, "o", " │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[33.265082, "o", "\u001b[H\u001b[2J\u001b[3J"]
[33.265767, "o", "Total: 30400\r\nRuntime: 24 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n"]
[33.265862, "o", " │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[33.376619, "o", "\u001b[H\u001b[2J\u001b[3J"]
[33.377289, "o", "Total: 30600\r\nRuntime: 24 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n"]
[33.377371, "o", " └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[33.507592, "o", "\u001b[H\u001b[2J\u001b[3J"]
[33.508104, "o", "Total: 30800\r\nRuntime: 24 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n"]
[33.508207, "o", " └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[33.621187, "o", "\u001b[H\u001b[2J\u001b[3J"]
[33.621716, "o", "Total: 31000\r\nRuntime: 24 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n"]
[33.621859, "o", " │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[33.734764, "o", "\u001b[H\u001b[2J\u001b[3J"]
[33.735202, "o", "Total: 31200\r\nRuntime: 24 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n"]
[33.735364, "o", " │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[33.847903, "o", "\u001b[H\u001b[2J\u001b[3J"]
[33.848397, "o", "Total: 31400\r\nRuntime: 24 s\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n"]
[33.848534, "o", " │ │ └──resolution=high\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ │ └──resolution=standard\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n │ └──resolution=standard,high\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n └──resolution=high\r\n"]
[33.951751, "o", "\u001b[H\u001b[2J\u001b[3J"]
[33.952159, "o", "Total: 31475\r\nRuntime: 0 mins\r\n└──\r\n └──class=d1\r\n └──dataset=climate-dt\r\n ├──activity=highresmip\r\n │ └──experiment=cont\r\n │ └──generation=1\r\n │ └──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=0001\r\n │ │ └──stream=clte\r\n"]
[33.952288, "o", " │ │ └──date=19920422\r\n │ └──expver=a16z\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n └──activity=cmip6\r\n └──experiment=hist\r\n └──generation=1\r\n ├──model=ifs-nemo\r\n │ └──realization=1\r\n │ ├──expver=a18j\r\n │ │ └──stream=clte\r\n │ │ └──date=19920422\r\n │ └──expver=0001\r\n │ └──stream=clte\r\n │ └──date=19920422\r\n └──model=icon\r\n └──realization=1\r\n └──expver=0001\r\n └──stream=clte\r\n └──date=19920422\r\n"]
[34.079052, "o", "\u001b[?2004h\u001b]0;eouser@stac-test: ~/catalogs/backend\u0007\u001b[01;32meouser@stac-test\u001b[00m:\u001b[01;34m~/catalogs/backend\u001b[00m$ "]
[37.231121, "o", "\u001b[?2004l\r\r\nexit\r\n"]

View File

@ -1 +0,0 @@
from .fdb_schema_parser import FDBSchema, FDBSchemaFile, KeySpec, Key

View File

@ -1,375 +0,0 @@
import dataclasses
import json
from dataclasses import dataclass, field
from typing import Any
import pe
from pe.actions import Pack
from pe.operators import Class, Star
from .fdb_types import FDB_type_to_implementation, FDBType
@dataclass(frozen=True)
class KeySpec:
"""
Represents the specification of a single key in an FDB schema file. For example in
```
[ class, expver, stream=lwda, date, time, domain?
[ type=ofb/mfb/oai
[ obsgroup, reportype ]]]
```
class, expver, type=ofdb/mfb/oai etc are the KeySpecs
These can have additional information such as: flags like `domain?`, allowed values like `type=ofb/mfb/oai`
or specify type information with `date: ClimateMonthly`
"""
key: str
type: FDBType = field(default_factory=FDBType)
flag: str | None = None
values: tuple = field(default_factory=tuple)
comment: str = ""
def __repr__(self):
repr = self.key
if self.flag:
repr += self.flag
# if self.type:
# repr += f":{self.type}"
if self.values:
repr += "=" + "/".join(self.values)
return repr
def matches(self, key, value):
# Sanity check!
if self.key != key:
return False
# Some keys have a set of allowed values type=ofb/mfb/oai
if self.values:
if value not in self.values:
return False
# Check the formatting of values like Time or Date
if self.type and not self.type.validate(value):
return False
return True
def is_optional(self):
if self.flag is None:
return False
return "?" in self.flag
def is_allable(self):
if self.flag is None:
return False
return "*" in self.flag
@dataclass(frozen=True)
class Comment:
"Represents a comment node in the schema"
value: str
@dataclass(frozen=True)
class FDBSchemaTypeDef:
"Mapping between FDB schema key names and FDB Schema Types, i.e expver is of type Expver"
key: str
type: str
# This is the schema grammar written in PEG format
fdb_schema = pe.compile(
r"""
FDB < Line+ EOF
Line < Schema / Comment / TypeDef / empty
# Comments
Comment <- "#" ~non_eol*
non_eol <- [\x09\x20-\x7F] / non_ascii
non_ascii <- [\x80-\uD7FF\uE000-\U0010FFFF]
# Default Type Definitions
TypeDef < String ":" String ";"
# Schemas are the main attraction
# They're a tree of KeySpecs.
Schema < "[" KeySpecs (","? Schema)* "]"
# KeySpecs can be just a name i.e expver
# Can also have a type expver:int
# Or a flag expver?
# Or values expver=xxx
KeySpecs < KeySpec_ws ("," KeySpec_ws)*
KeySpec_ws < KeySpec
KeySpec <- key:String (flag:Flag)? (type:Type)? (values:Values)? ([ ]* comment:Comment)?
Flag <- ~("?" / "-" / "*")
Type <- ":" [ ]* String
Values <- "=" Value ("/" Value)*
# Low level stuff
Value <- ~([-a-zA-Z0-9_]+)
String <- ~([a-zA-Z0-9_]+)
EOF <- !.
empty <- ""
""",
actions={
"Schema": Pack(tuple),
"KeySpec": KeySpec,
"Values": Pack(tuple),
"Comment": Comment,
"TypeDef": FDBSchemaTypeDef,
},
ignore=Star(Class("\t\f\r\n ")),
# flags=pe.DEBUG,
)
def post_process(entries):
"Take the raw output from the PEG parser and split it into type definitions and schema entries."
typedefs = {}
schemas = []
for entry in entries:
match entry:
case c if isinstance(c, Comment):
pass
case t if isinstance(t, FDBSchemaTypeDef):
typedefs[t.key] = t.type
case s if isinstance(s, tuple):
schemas.append(s)
case _:
raise ValueError
return typedefs, tuple(schemas)
def determine_types(types, node):
"Recursively walk a schema tree and insert the type information."
if isinstance(node, tuple):
return [determine_types(types, n) for n in node]
return dataclasses.replace(node, type=types.get(node.key, FDBType()))
@dataclass
class Key:
key: str
value: Any
key_spec: KeySpec
reason: str
def str_value(self):
return self.key_spec.type.format(self.value)
def __bool__(self):
return self.reason in {"Matches", "Skipped", "Select All"}
def emoji(self):
return {"Matches": "", "Skipped": "⏭️", "Select All": ""}.get(
self.reason, ""
)
def info(self):
return f"{self.emoji()} {self.key:<12}= {str(self.value):<12} ({self.key_spec}) {self.reason if not self else ''}"
def __repr__(self):
return f"{self.key}={self.key_spec.type.format(self.value)}"
def as_json(self):
return dict(
key=self.key,
value=self.str_value(),
reason=self.reason,
)
class FDBSchema:
"""
Represents a parsed FDB Schema file.
Has methods to validate and convert request dictionaries to a mars request form with validation and type information.
"""
def __init__(self, string, defaults: dict[str, str] = {}):
"""
1. Use a PEG parser on a schema string,
2. Separate the output into schemas and typedefs
3. Insert any concrete implementations of types from fdb_types.py defaulting to generic string type
4. Walk the schema tree and annotate it with type information.
"""
m = fdb_schema.match(string)
g = list(m.groups())
self._str_types, schemas = post_process(g)
self.types = {
key: FDB_type_to_implementation[type]
for key, type in self._str_types.items()
}
self.schemas = determine_types(self.types, schemas)
self.defaults = defaults
def __repr__(self):
return json.dumps(
dict(schemas=self.schemas, defaults=self.defaults), indent=4, default=repr
)
@classmethod
def consume_key(
cls, key_spec: KeySpec, request: dict[str, Any]
) -> Key:
key = key_spec.key
try:
value = request[key]
except KeyError:
if key_spec.is_optional():
return Key(key_spec.key, "", key_spec, "Skipped")
if key_spec.is_allable():
return Key(key_spec.key, "", key_spec, "Select All")
else:
return Key(
key_spec.key, "", key_spec, "Key Missing"
)
if key_spec.matches(key, value):
return Key(
key_spec.key,
key_spec.type.parse(value),
key_spec,
"Matches",
)
else:
return Key(
key_spec.key, value, key_spec, "Incorrect Value"
)
@classmethod
def _DFS_match(
cls, tree: list, request: dict[str, Any]
) -> tuple[bool | list, list[Key]]:
"""Do a DFS on the schema tree, returning the deepest matching path
At each stage return whether we matched on this path, and the path itself.
When traversing the tree there are three cases to consider:
1. base case []
2. one schema [k, k, k, [k, k, k]]
3. list of schemas [[k,k,k], [k,k,k], [k,k,k]]
"""
# Case 1: Base Case
if not tree:
return True, []
# Case 2: [k, k, k, [k, k, k]]
if isinstance(tree[0], KeySpec):
node, *tree = tree
# Check if this node is in the request
match_result = cls.consume_key(node, request)
# If if isn't then terminate this path here
if not match_result:
return False, [match_result,] # fmt: skip
# Otherwise continue walking the tree and return the best result
matched, path = cls._DFS_match(tree, request)
# Don't put the key in the path if it's optional and we're skipping it.
if match_result.reason != "Skipped":
path = [match_result,] + path # fmt: skip
return matched, path
# Case 3: [[k, k, k], [k, k, k]]
branches = []
for branch in tree:
matched, branch_path = cls._DFS_match(branch, request)
# If this branch matches, terminate the DFS and use this.
if matched:
return branch, branch_path
else:
branches.append(branch_path)
# If no branch matches, return the one with the deepest match
return False, max(branches, key=len)
@classmethod
def _DFS_match_all(
cls, tree: list, request: dict[str, Any]
) -> list[list[Key]]:
"""Do a DFS on the schema tree, returning all matching paths or partial matches.
At each stage return all matching paths and the deepest partial matches.
When traversing the tree there are three cases to consider:
1. base case []
2. one schema [k, k, k, [k, k, k]]
3. list of schemas [[k,k,k], [k,k,k], [k,k,k]]
"""
# Case 1: Base Case
if not tree:
return [[]]
# Case 2: [k, k, k, [k, k, k]]
if isinstance(tree[0], KeySpec):
node, *tree = tree
# Check if this node is in the request
request_values = request.get(node.key, None)
if request_values is None:
# If the key is not in the request, return a partial match with Key Missing
return [[Key(node.key, "", node, "Key Missing")]]
# If the request value is a list, try to match each value
if isinstance(request_values, list):
all_matches = []
for value in request_values:
match_result = cls.consume_key(node, {node.key: value})
if match_result:
sub_matches = cls._DFS_match_all(tree, request)
for match in sub_matches:
if match_result.reason != "Skipped":
match.insert(0, match_result)
all_matches.append(match)
return all_matches if all_matches else [[Key(node.key, "", node, "No Match Found")]]
else:
# Handle a single value
match_result = cls.consume_key(node, request)
# If it isn't then return a partial match with Key Missing
if not match_result:
return [[Key(node.key, "", node, "Key Missing")]]
# Continue walking the tree and get all matches
all_matches = cls._DFS_match_all(tree, request)
# Prepend the current match to all further matches
for match in all_matches:
if match_result.reason != "Skipped":
match.insert(0, match_result)
return all_matches
# Case 3: [[k, k, k], [k, k, k]]
all_branch_matches = []
for branch in tree:
branch_matches = cls._DFS_match_all(branch, request)
all_branch_matches.extend(branch_matches)
# Return all of the deepest partial matches or complete matches
return all_branch_matches
def match_all(self, request: dict[str, Any]):
request = request | self.defaults
return self._DFS_match_all(self.schemas, request)
def match(self, request: dict[str, Any]):
request = request | self.defaults
return self._DFS_match(self.schemas, request)
class FDBSchemaFile(FDBSchema):
def __init__(self, path: str):
with open(path, "r") as f:
return super().__init__(f.read())

View File

@ -1,83 +0,0 @@
from dataclasses import dataclass
from typing import Any
import re
from collections import defaultdict
from datetime import datetime, date, time
@dataclass(repr=False)
class FDBType:
"""
Holds information about how to format and validate a given FDB Schema type like Time or Expver
This base type represents a string and does no validation or formatting. It's the default type.
"""
name: str = "String"
def __repr__(self) -> str:
return self.name
def validate(self, s: Any) -> bool:
try:
self.parse(s)
return True
except (ValueError, AssertionError):
return False
def format(self, s: Any) -> str:
return str(s).lower()
def parse(self, s: str) -> Any:
return s
@dataclass(repr=False)
class Expver_FDBType(FDBType):
name: str = "Expver"
def parse(self, s: str) -> str:
assert bool(re.match(".{4}", s))
return s
@dataclass(repr=False)
class Time_FDBType(FDBType):
name: str = "Time"
time_format = "%H%M"
def format(self, t: time) -> str:
return t.strftime(self.time_format)
def parse(self, s: datetime | str | int) -> time:
if isinstance(s, str):
assert len(s) == 4
return datetime.strptime(s, self.time_format).time()
if isinstance(s, datetime):
return s.time()
return self.parse(f"{s:04}")
@dataclass(repr=False)
class Date_FDBType(FDBType):
name: str = "Date"
date_format: str = "%Y%m%d"
def format(self, d: Any) -> str:
if isinstance(d, date):
return d.strftime(self.date_format)
if isinstance(d, int):
return f"{d:08}"
else:
return d
def parse(self, s: datetime | str | int) -> date:
if isinstance(s, str):
return datetime.strptime(s, self.date_format).date()
elif isinstance(s, datetime):
return s.date()
return self.parse(f"{s:08}")
FDB_type_to_implementation = defaultdict(lambda: FDBType()) | {
cls.name: cls() for cls in [Expver_FDBType, Time_FDBType, Date_FDBType]
}

View File

@ -1,77 +0,0 @@
#! catalogs/.venv/bin/python
import time
from collections import defaultdict
import os
from fdb_schema import FDBSchemaFile
os.environ["FDB5_CONFIG_FILE"] = "/home/eouser/prod_remoteFDB.yaml"
import json
schema = FDBSchemaFile("/home/eouser/catalogs/backend/destinE_schema")
import pyfdb
from collections import Counter
import os, sys
from pathlib import Path
from datetime import datetime
from compress_tree import print_schema_tree, compress_tree
request = {
"class": "d1",
}
t0 = time.time()
fdb = pyfdb.FDB()
spans = defaultdict(set)
tree = {}
total = 0
for item in fdb.list(request, keys = True):
request = item["keys"]
_, m = schema.match(request)
loc = tree
for kv in m:
k = f'{kv.key}={kv.str_value()}'
# loc["_count"] = loc.get("_count", 0) + 1
if k not in loc: loc[k] = {}
loc = loc[k]
total += 1
if total % 10_000 == 0:
os.system("clear")
print(f"Total: {total/1e3:.0f} thousand")
print(f"Runtime: {(time.time() - t0):.0f} s")
print()
print(f"Last request:")
for k, v in request.items():
print(f"{k} : {v}")
# sys.exit()
if total % 1000_000 == 0:
print("Dumping cache to cache.json")
with open("cache.json", "w") as f:
json.dump(tree, f)
os.system("clear")
print(f"Total: {total}")
print(f"Runtime: {(time.time() - t0) / 60:.0f} mins")
cache = Path("cache.json")
if cache.exists():
backup = Path(f"backups/cache.json.backup.{datetime.now().strftime('%d.%m.%Y')}")
print(f"Moving cache to {backup}")
cache.rename(backup)
print("Dumping cache to cache.json")
with open("cache.json", "w") as f:
json.dump(tree, f)
print("Done")
sys.exit()

View File

@ -1,305 +0,0 @@
date_0 : date=19910410,19920514,19920519,19920527,19920617,19920625,19920626,19920629,19920720,19920724
date_1 : date=19910614,19920430,19920517
date_2 : date=19910703,19920525,19920601,19920605
date_3 : date=19910723,19920619,19920702,19920713,19920715
date_4 : date=19920423,19920529,19920618,19920704
date_5 : date=19920424,19920511,19920603,19920620,19920726
date_6 : date=19920425,19920428,19920507,19920607,19920611,19920701,19920712,19920721,19920725
date_7 : date=19920426,19920502,19920503,19920510,19920628,19920716,19920718
date_8 : date=19920427,19920508,19920516,19920622,19920708,19920801
date_9 : date=19920429,19920614,19920703,19920710,19920727
date_10 : date=19920501,19920512,19920522,19920524
date_11 : date=19920504,19920623,19920709,19920711
date_12 : date=19920505,19920515,19920531,19920610,19920612,19920615
date_13 : date=19920506,19920717,19920722
date_14 : date=19920509,19920608,19920627
date_15 : date=19920513,19920520,19920613
date_16 : date=19920518,19920602,19920719
date_17 : date=20200102,20200103,20200104,20200105,20200106,20200107,20200108,20200109,20200110,20200111,20200112,20200113,20200114,20200115,20200116,20200117,20200118,20200119,20200120,20200121,20200122,20200123,20200124,20200125,20200126,20200127,20200128,20200129,20200130,20200131,20200201,20200202,20200203,20200204,20200205,20200206,20200207,20200208,20200209,20200210,20200211,20200212,20200213,20200214,20200215,20200216,20200217,20200218,20200219,20200220,20200221,20200222,20200223,20200224,20200225,20200226,20200227,20200228,20200229,20200301,20200302,20200303,20200304,20200305,20200306,20200307,20200308,20200309,20200310,20200311,20200312,20200313,20200314,20200315,20200316,20200317,20200318,20200319,20200320,20200321,20200322,20200323,20200324,20200325,20200326,20200327,20200328,20200329,20200330,20200331,20200401,20200402,20200403,20200404,20200405,20200406,20200407,20200408,20200409,20200410,20200411,20200412,20200413,20200414,20200415,20200416,20200417,20200418,20200419,20200420,20200421,20200422,20200423,20200424,20200425,20200426,20200427,20200428,20200429,20200430,20200501,20200502,20200503,20200504,20200505,20200506,20200507,20200508,20200509,20200510,20200511,20200512,20200513,20200514,20200515,20200516,20200517,20200518,20200519,20200520,20200521,20200522,20200523,20200524,20200525,20200526,20200527,20200528,20200529,20200530,20200531,20200601,20200602,20200603,20200604,20200605,20200606,20200607,20200608,20200609,20200610,20200611,20200612,20200613,20200614,20200615,20200616,20200617,20200618,20200619,20200620,20200621,20200622,20200623,20200624,20200625,20200626,20200627,20200628,20200629,20200630,20200701,20200702,20200703,20200704,20200705,20200706,20200707,20200708,20200709,20200710,20200711,20200712,20200713,20200714,20200715,20200716,20200717,20200718,20200719,20200720,20200721,20200722,20200723,20200724,20200725,20200726,20200727,20200728,20200729,20200730,20200731,20200801,20200802,20200803,20200804,20200805,20200806,20200807,20200808,20200809,20200810,20200811,20200812,20200813,20200814,20200815,20200816,20200817,20200818,20200819,20200820,20200821,20200822,20200823,20200824,20200825,20200826,20200827,20200828,20200829,20200830,20200831,20200901,20200902,20200903,20200904,20200905,20200906,20200907,20200908,20200909,20200910,20200911,20200912,20200913,20200914,20200915,20200916,20200917,20200918,20200919,20200920,20200921,20200922,20200923,20200924,20200925,20200926,20200927,20200928,20200929,20200930,20201001,20201002,20201003,20201004,20201005,20201006,20201007,20201008,20201009,20201010,20201011,20201012,20201013,20201014,20201015,20201016,20201017,20201018,20201019,20201020,20201021,20201022,20201023,20201024,20201025,20201026,20201027,20201028,20201029,20201030,20201031,20201101,20201102,20201103,20201104,20201105,20201106,20201107,20201108,20201109,20201110,20201111,20201112,20201113,20201114,20201115,20201116,20201117,20201118,20201119,20201120,20201121,20201122,20201123,20201124,20201125,20201126,20201127,20201128,20201129,20201130,20201201,20201202,20201203,20201204,20201205,20201206,20201207,20201208,20201209,20201210,20201211,20201212,20201213,20201214,20201215,20201216,20201217,20201218,20201219,20201220,20201221,20201222,20201223,20201224,20201225,20201226,20201227,20201228,20201229,20201230,20201231,20210101,20210102,20210103,20210104,20210105,20210106,20210107,20210108,20210109,20210110,20210111,20210112,20210113,20210114,20210115,20210116,20210117,20210118,20210119,20210120,20210121,20210122,20210123,20210124,20210125,20210126,20210127,20210128,20210129,20210130,20210131,20210201,20210202,20210203,20210204,20210205,20210206,20210207,20210208,20210209,20210210,20210211,20210212,20210213,20210214,20210215,20210216,20210217,20210218,20210219,20210220,20210221,20210222,20210223,20210224,20210225,20210226,20210227,20210228,20210301,20210302,20210303,20210304,20210305,20210306,20210307,20210308,20210309,20210310,20210311,20210312,20210313,20210314,20210315,20210316,20210317,20210318,20210319,20210320,20210321,20210322,20210323,20210324,20210325,20210326,20210327,20210328,20210329,20210330,20210331,20210401,20210402,20210403,20210404,20210405,20210406,20210407,20210408,20210409,20210410,20210411,20210412,20210413,20210414,20210415,20210416,20210417,20210418,20210419,20210420,20210421,20210422,20210423,20210424,20210425,20210426,20210427,20210428,20210429,20210430,20210501,20210502,20210503,20210504,20210505,20210506,20210507,20210508,20210509,20210510,20210511,20210512,20210513,20210514,20210515,20210516,20210517,20210518,20210519,20210520,20210521,20210522,20210523,20210524,20210525,20210526,20210527,20210528,20210529,20210530,20210531,20210601,20210602,20210603,20210604,20210605,20210606,20210607,20210608,20210609,20210610,20210611,20210612,20210613,20210614,20210615,20210616,20210617,20210618,20210619
levelist_1 : levelist=10,11,12,13,14,15,16,17,18,19,1,20,21,22,23,24,25,26,27,28,29,2,30,31,32,33,34,35,36,37,38,39,3,40,41,42,43,44,45,46,47,48,49,4,50,51,52,53,54,55,56,57,58,59,5,60,61,62,63,64,65,66,67,68,69,6,70,71,72,7,8,9
levelist_2 : levelist=10,11,12,13,14,15,16,17,18,19,1,20,21,22,23,24,25,26,27,28,29,2,30,31,32,33,34,35,36,37,38,39,3,40,41,42,43,44,45,46,47,48,49,4,50,51,52,53,54,55,56,57,58,59,5,60,61,62,63,64,65,66,67,68,69,6,70,71,72,73,7,8,9
levelist_6 : levelist=10,11,12,13,14,15,16,17,18,19,1,20,21,22,23,24,25,26,27,28,29,2,30,31,32,33,34,35,36,37,38,39,3,40,41,42,43,44,45,46,47,48,49,4,50,51,52,53,54,55,56,57,58,59,5,60,61,62,63,64,65,66,67,68,69,6,70,71,72,73,74,75,7,8,9
levelist_3 : levelist=100,10,1,20,30,50,5,70
levelist_4 : levelist=100,10,150,1,20,30,50,5,70
levelist_5 : levelist=100,10,150,1,200,20,250,300,30,50,5,70
levelist_0 : levelist=1000,100,10,150,1,200,20,250,300,30,400,500,50,5,600,700,70,850,925
param_2 : param=0,263500,263501,263505,263506
param_1 : param=129,130,131,132,133,135,157,246
param_9 : param=129,130,131,132,133,135,157,246,60
param_11 : param=129,172,134,137,141,144,146,147,148,151,159,164,165,166,167,168,169,175,176,177,178,179,180,181,182,186,187,188,212,228,235,260048,78,79,8,9
param_0 : param=130,134,137,146,147,151,165,166,167,168,169,175,176,177,178,179,228164,235,260048,260654,260655,78,79
param_12 : param=134,137,141,144,146,147,148,151,159,164,165,166,167,168,169,175,176,177,178,179,180,181,182,186,187
param_8 : param=134,137,141,144,146,147,148,151,159,164,165,166,167,168,169,175,176,177,178,179,180,181,182,186,187,188,212,228,235,260048,78,79,8,9
param_10 : param=263000,263001,263003,263004,263008,263009,263021,263022,263100,263101,263121,263122,263124
param_7 : param=263000,263001,263003,263004,263008,263009,263100,263101,263121,263122,263124
param_3 : param=263000,263001,263003,263004,263009,263114,263124
param_4 : param=263500,263501,263505,263506
param_6 : param=263500,263501,263505,263506,263507
param_5 : param=263500,263501,263505,263506,263507,0
time_1 : time=0000,0100,0200,0300,0400,0500,0600,0700,0800,0900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900
time_6 : time=0000,0100,0200,0300,0400,0500,0600,0700,0800,0900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100
time_2 : time=0000,0100,0200,0300,0400,0500,0600,0700,0800,0900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200
time_0 : time=0000,0100,0200,0300,0400,0500,0600,0700,0800,0900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300
time_4 : time=0100,0200,0300,0400,0500,0600,0700,0800,0900,1000,1100
time_3 : time=0100,0200,0300,0400,0500,0600,0700,0800,0900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300
time_5 : time=1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300
[class=d1, dataset=climate-dt,
[ activity=cmip6, experiment=hist, generation=1,
[ model=icon, realization=1,
[ expver=0001, stream=clte,
[ date_0, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o3d, time=0000,
[ levelist_1, param_2,
[ levelist=73, param=0,
[ levtype=o2d, time=0000, param_3,
[ date_1, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=o2d, time=0000, param_3,
[ date_2, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=o3d, time=0000, levelist_1, param_4,
[ levtype=o2d, time=0000, param_3,
[ date_3, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o3d, time=0000,
[ levelist_1, param_2,
[ levelist=73, param=0,
[ date=19920420,19920616, resolution=high, type=fc,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o3d, time=0000, levelist_2, param=0,
[ levtype=o2d, time=0000, param_3,
[ date=19920421, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=pl, time_0, levelist_0, param_1,
[ date=19920422, resolution=high, type=fc,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o3d, time=0000, levelist_2, param=0,
[ date_4, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o2d, time=0000, param_3,
[ date_5, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=o3d, time=0000,
[ levelist_1, param_2,
[ levelist=73, param=0,
[ date_6, resolution=high, type=fc,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o3d, time=0000,
[ levelist_1, param_2,
[ levelist=73, param=0,
[ levtype=o2d, time=0000, param_3,
[ date_7, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=o3d, time=0000,
[ levelist_1, param_2,
[ levelist=73, param=0,
[ levtype=o2d, time=0000, param_3,
[ date_8, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o3d, time=0000, levelist_1, param_4,
[ levtype=o2d, time=0000, param_3,
[ date_9, resolution=high, type=fc,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o3d, time=0000, levelist_1, param_4,
[ levtype=o2d, time=0000, param_3,
[ date_10, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=o3d, time=0000, levelist_1, param_4,
[ date_11, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o3d, time=0000, levelist_2, param=0,
[ date_12, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o3d, time=0000, levelist_2, param=0,
[ levtype=o2d, time=0000, param_3,
[ date_13, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o3d, time=0000, levelist_1, param_4,
[ date_14, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=o3d, time=0000, levelist_2, param=0,
[ date_15, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=o3d, time=0000, levelist_2, param=0,
[ levtype=o2d, time=0000, param_3,
[ date_16, resolution=high, type=fc,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o2d, time=0000, param_3,
[ date=19920521,19920523, resolution=high, type=fc,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o3d, time=0000, levelist_1, param_4,
[ date=19920526,19920706, resolution=high, type=fc,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o3d, time=0000,
[ levelist_1, param_2,
[ levelist=73, param=0,
[ date=19920528, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=o3d, time=0000,
[ levelist_1, param_2,
[ levelist=73, param=0,
[ levtype=o2d, time=0000, param_3,
[ levtype=pl,
[ time=0000, levelist_0, param_1,
[ time=0100,
[ levelist_3, param_1,
[ levelist=150, param=129,130,131,132,133,135,
[ date=19920530,19920609, resolution=high, type=fc, levtype=o3d, time=0000, levelist_2, param=0,
[ date=19920604,19920723, resolution=high, type=fc, levtype=pl, time_0, levelist_0, param_1,
[ date=19920606, resolution=high, type=fc, levtype=o2d, time=0000, param_3,
[ date=19920621, resolution=high, type=fc,
[ levtype=o3d, time=0000,
[ levelist_1, param_2,
[ levelist=73, param=0,
[ levtype=pl,
[ time_1, levelist_0, param_1,
[ time=2000,
[ levelist_4, param_1,
[ levelist=200, param=129,130,131,132,133,135,
[ levtype=o2d, time=0000, param_3,
[ date=19920624,19920707, resolution=high, type=fc,
[ levtype=o3d, time=0000, levelist_1, param_4,
[ levtype=o2d, time=0000, param_3,
[ date=19920630, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=pl,
[ time_2, levelist_0, param_1,
[ time=2300, levelist=1, param=129,130,131,
[ levtype=o3d, time=0000, levelist_2, param=0,
[ date=19920705, resolution=high, type=fc,
[ levtype=o3d, time=0000,
[ levelist_1, param_2,
[ levelist=73, param=0,
[ levtype=o2d, time=0000, param_3,
[ date=19920714, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=pl,
[ time_2, levelist_0, param_1,
[ time=2300,
[ levelist_5, param_1,
[ levelist=400, param=129,130,131,132,
[ levtype=o3d, time=0000,
[ levelist_1, param_2,
[ levelist=73, param=0,
[ levtype=o2d, time=0000, param_3,
[ date=19920728,19920731, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o3d, time=0000,
[ levelist_1, param_5,
[ levelist=73, param=263507,0,
[ levtype=o2d, time=0000, param_3,
[ date=19920729,19920730, resolution=high, type=fc,
[ levtype=sfc, time_0, param_0,
[ levtype=pl, time_0, levelist_0, param_1,
[ levtype=o3d, time=0000,
[ levelist_1, param_6,
[ levelist=73, param=263507,
[ levtype=o2d, time=0000, param_3,
[ expver=t002, stream=clte, date=19900101, resolution=standard, type=fc, levtype=o2d, time=0000, param_7,
[ model=ifs-nemo, realization=1,
[ expver=0001, stream=clte, date=19900101, resolution=standard,high, type=fc,
[ levtype=sol, time_0, levelist=1,2,3,4,5, param=228141,
[ levtype=sfc, time_0, param_8,
[ levtype=pl, time_0, levelist_0, param_9,
[ levtype=o3d, time=0000, levelist_6, param_6,
[ levtype=o2d, time=0000, param_10,
[ levtype=hl, time_0, levelist=100, param=228246,228247,
[ expver=a0tn, stream=clte,
[ date=20200101,
[ resolution=standard, type=fc,
[ levtype=sol, time_0, levelist=1,2,3,4,5, param=228141,
[ levtype=sfc, time_0, param_8,
[ levtype=pl, time_0, levelist_0, param_9,
[ levtype=o3d, time=0000, levelist_6, param_6,
[ levtype=o2d, time=0000, param_10,
[ levtype=hl, time_0, levelist=100, param=228246,228247,
[ resolution=high, type=fc,
[ levtype=o3d, time=0000, levelist_6, param_6,
[ levtype=o2d, time=0000, param_10,
[ date=20200102, resolution=standard, type=fc, levtype=hl, time_0, levelist=100, param=228246,228247,
[ expver=t001, stream=clte,
[ date=19900101,
[ resolution=standard, type=fc,
[ levtype=o2d, time=0000, param=263000,263001,
[ levtype=hl, time_0, levelist=100, param=228246,228247,
[ levtype=sol, time_0, levelist=1,2,3,4,5, param=228141,
[ levtype=sfc, time_0, param_8,
[ levtype=pl, time_0, levelist_0, param_9,
[ levtype=o3d, time=0000, levelist_6, param_6,
[ resolution=high, type=fc,
[ levtype=o3d, time=0000, levelist_6, param_6,
[ levtype=o2d, time=0000, param_10,
[ date=19900102,
[ resolution=standard, type=fc,
[ levtype=hl, time_0, levelist=100, param=228246,228247,
[ levtype=sol, time_0, levelist=1,2,3,4,5, param=228141,
[ levtype=sfc, time_0, param_8,
[ levtype=pl, time_0, levelist_0, param_9,
[ levtype=o3d, time=0000, levelist_6, param_6,
[ resolution=high, type=fc, levtype=o3d, time=0000, levelist_6, param_6,
[ date=19900103,19900104, resolution=standard, type=fc, levtype=hl, time_0, levelist=100, param=228246,228247,
[ expver=t002, stream=clte, date=19900101, resolution=standard,high, type=fc, levtype=o2d, time=0000, param_7,
[ expver=t003, stream=clte, date=19900101, resolution=standard, type=fc, levtype=o2d, time=0000, param_7,
[ activity=scenariomip, experiment=ssp3-7.0, generation=1,
[ model=icon, realization=1, expver=t004, stream=clte, date=20200101, resolution=high, type=fc, levtype=sfc, time_2, param=228004,167,
[ model=ifs-nemo, realization=1, expver=0001, stream=clte,
[ date=20200101,
[ resolution=standard, type=fc,
[ levtype=sfc,
[ time=0000, param_11,
[ time_3, param_8,
[ levtype=sol, time_0, levelist=1,2,3,4,5, param=228141,
[ levtype=pl, time_0, levelist_0, param_9,
[ levtype=o3d, time=0000, levelist_6, param_6,
[ levtype=o2d, time=0000, param_10,
[ levtype=hl, time_0, levelist=100, param=228246,228247,
[ resolution=high, type=fc,
[ levtype=sfc,
[ time=0000,
[ param_11,
[ levelist=150,5, param=60,
[ levelist=500,70, param=135,
[ time_4,
[ param_8,
[ levelist=150,5, param=60,
[ levelist=500,70, param=135,
[ time_5,
[ param_8,
[ levelist=10, param=157,
[ levelist=150,5, param=60,
[ levelist=500,70, param=135,
[ levtype=sol,
[ time_6, levelist=1,2,3,4,5, param=228141,
[ time=2200,2300,
[ levelist=1,2,3,4,5, param=228141,
[ param=181,
[ levtype=pl, time_0, levelist_0, param_9,
[ levtype=o3d, time=0000, levelist_6, param_6,
[ levtype=o2d, time=0000, param_10,
[ levtype=hl, time_0, levelist=100, param=228246,228247,
[ date_17, resolution=standard,high, type=fc,
[ levtype=sfc,
[ time=0000, param_11,
[ time_3, param_8,
[ levtype=sol, time_0, levelist=1,2,3,4,5, param=228141,
[ levtype=pl, time_0, levelist_0, param_9,
[ levtype=o3d, time=0000, levelist_6, param_6,
[ levtype=o2d, time=0000, param_10,
[ levtype=hl, time_0, levelist=100, param=228246,228247,
[ date=20210620,
[ resolution=standard, type=fc,
[ levtype=pl, time_0, levelist_0, param_9,
[ levtype=sfc,
[ time=0000, param_11,
[ time=0100,0200,0300,0400,0500, param_8,
[ time=0600, param_12,
[ resolution=high, type=fc, levtype=sfc, time=0000, param=129,172,

41
cache/raw_to_tree.py vendored
View File

@ -1,41 +0,0 @@
import time
from collections import defaultdict
import os
from fdb_schema import FDBSchemaFile
import json
from compress_tree import print_schema_tree, compress_tree
schema = FDBSchemaFile("/home/eouser/catalogs/backend/destinE_schema")
tree = {}
i = 0
t0 = time.time()
with open("raw_list", "r") as f:
for line in f.readlines():
i += 1
# if i > 100: break
if not line.startswith("{"): continue
line = line.strip().replace("{", "").replace("}", ",")
# d = dict((k.split("=") for k in line.split(",") if k))
# _, m = schema.match(d)
loc = tree
for k in line.split(","):
if k:
if k not in loc: loc[k] = {}
loc = loc[k]
if i % 10_000 == 0:
# compressed_tree = compress_tree(tree, max_level = None)
# with open("cache.json", "w") as f:
# json.dump(tree, f)
os.system("clear")
print(f"Total: {i}")
print(f"Runtime: {(time.time() - t0):.0f} s")
# print_tree(tree, max_depth = 7)
# print_schema_tree(compressed_tree)
with open("cache.json", "w") as f:
json.dump(tree, f)
print(tree)

View File

@ -1,25 +0,0 @@
from compress_tree import pretty_schema_tree, compress_tree
import json
from pathlib import Path
print("Loading tree json...")
cache = Path("cache.json")
print(f"cache.json size is {cache.stat().st_size/1e6:.0f} MB")
with open(cache, "r") as f:
tree = json.load(f)
print("Compresssing...")
compressed_tree = compress_tree(tree, max_level = None)
print("Saving compressed_tree.json")
compressed_cache = Path("compressed_cache.json")
with open(compressed_cache, "w") as f:
json.dump(compressed_tree, f)
print(f"compressed_cache.json size is {compressed_cache.stat().st_size/1e3:.0f} KB")
print("Pretty printing")
pretty = pretty_schema_tree(compressed_tree)
# print(pretty)
with open("pretty_compressed_cache.txt", "w") as f:
f.write(pretty)

99
cache/update_cache.py vendored
View File

@ -1,99 +0,0 @@
#! catalogs/.venv/bin/python
import time
from collections import defaultdict
import os
from fdb_schema import FDBSchemaFile
os.environ["FDB5_CONFIG_FILE"] = "/home/eouser/prod_remoteFDB.yaml"
import json
schema = FDBSchemaFile("/home/eouser/catalogs/backend/destinE_schema")
import pyfdb
from collections import Counter
import os, sys
from pathlib import Path
from datetime import datetime
from compress_tree import print_schema_tree, compress_tree
request = {
"class": "d1",
"date" : "-14/-1",
}
t0 = time.time()
print("Loading cache.json")
with open("cache.json", "r") as f:
tree = json.load(f)
print(f"That tooks {(time.time() - t0)/60:.0f} mins")
fdb = pyfdb.FDB()
spans = defaultdict(set)
def print_tree(t : dict, last=True, header='', name='', depth = 0, max_depth = 9):
elbow = "└──"
pipe = ""
tee = "├──"
blank = " "
print(header + (elbow if last else tee) + name)
# if depth == max_depth: return
if t:
subtrees = set()
leaves = defaultdict(list)
for k, v in t.items():
if k == "_count": continue
if depth < max_depth and isinstance(v, dict) and v:
subtrees.add(k)
else:
a, b = k.split("=")
leaves[a].append(b)
leaves = {n:m for n,m in leaves.items() if n != "_count"}
for i, (name, vals) in enumerate(leaves.items()):
last = 1 == (len(leaves)-1)
print(header + blank + (tee if last else elbow) + f"{name}={','.join([str(v) for v in vals])}")
for i, name in enumerate(subtrees):
print_tree(t[name], header=header + (blank if last else pipe), last= i == len(subtrees) - 1, name= name, depth = depth + 1, max_depth = max_depth)
total = 0
for item in fdb.list(request, keys = True):
request = item["keys"]
_, m = schema.match(request)
loc = tree
for kv in m:
k = f'{kv.key}={kv.str_value()}'
if k not in loc: loc[k] = {}
loc = loc[k]
total += 1
if total % 100 == 0:
os.system("clear")
print(f"Total: {total}")
print(f"Runtime: {(time.time() - t0):.0f} s")
os.system("clear")
print(f"Total: {total}")
print(f"Runtime: {(time.time() - t0) / 60:.0f} mins")
print_tree(tree, max_depth = 4)
print("Dumping tree to new_cache.json")
with open("new_cache.json", "w") as f:
json.dump(tree, f)
print(f"Moving cache to backups/cache.json.backup.{datetime.now().strftime('%d.%m.%Y')}")
Path("cache.json").rename(f"backups/cache.json.backup.{datetime.now().strftime('%d.%m.%Y')}")
print(f"Renaming new_cache.json to cache.json")
Path("new_cache.json").rename("cache.json")
print(f"Done in {(time.time() - t0)/60:.0f} min")

42
cache/view_cache.py vendored
View File

@ -1,42 +0,0 @@
import json
from compress_tree import print_schema_tree, compress_tree
with open("./cache.json", "r") as f:
list_cache = json.load(f)
request = {
"class" : "d1",
"dataset" : "climate-dt",
"activity": "cmip6",
"experiment" : "hist",
"generation" : "1",
"model" : "icon",
"realization" : "1",
"expver" : "0001",
"stream" : "clte",
"date" : "19910410",
}
loc = list_cache
while True:
done = True
for k, v in request.items():
if f"{k}={v}" in loc:
print(f"{k}={v}")
loc = loc[f"{k}={v}"]
done = False
break
if done:
break
for k in loc.keys():
k, v = k.split("=")
print(f'"{k}" : "{v}",')
# compressed_tree = compress_tree(loc, max_level = 3)
# print_schema_tree(compressed_tree)