This commit is contained in:
EO User 2024-10-28 13:38:50 +00:00
parent 17e7113a8c
commit 5765da7ecc
22 changed files with 2814 additions and 174 deletions

6
.gitignore vendored
View File

@ -1,2 +1,6 @@
__pycache__
.DS_Store
.DS_Store
config.yaml
.venv
*.json
raw_list

130
backend/destinE_schema Normal file
View File

@ -0,0 +1,130 @@
# * 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,10 +1,21 @@
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 os
os.environ["FDB5_CONFIG_FILE"] = "/home/eouser/destine_remoteFDB_config.yaml"
import pyfdb
fdb = pyfdb.FDB()
app = FastAPI()
app.add_middleware(
@ -16,17 +27,30 @@ app.add_middleware(
)
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)
@app.get("/")
async def redirect_to_app(request: Request):
return templates.TemplateResponse("index.html", {"request": request, "config": config})
language_yaml = "./language.yaml"
import yaml
with open(language_yaml, "r") as f:
with open(config["mars_language"], "r") as f:
mars_language = yaml.safe_load(f)["_field"]
###### Load FDB Schema
schema = FDBSchemaFile("./standard_fdb_schema")
# schema = FDBSchemaFile("./test_schema")
schema = FDBSchemaFile(config["fdb_schema"])
def request_to_dict(request: Request) -> Dict[str, Any]:
# Convert query parameters to dictionary format
@ -37,42 +61,6 @@ def request_to_dict(request: Request) -> Dict[str, Any]:
request_dict[key] = value.split(",")
return request_dict
@app.get("/simple")
async def get_tree(request: Request):
request_dict = request_to_dict(request)
print(request_dict)
target = next((k for k,v in request_dict.items() if v == "????"), None)
if not target:
return {"error": "No target found in request, there must be one key with value '????'"}
current_query_params = "&".join(f"{k}={v}" for k, v in request_dict.items() if k != target)
if len(current_query_params) > 1:
current_query_params += "&"
stac_collection = {
"type": "Collection",
"stac_version": "1.0.0",
"id": target,
"title" : target.capitalize(),
"key_type": mars_language.get(target, {}).get("type", ""),
"description": mars_language.get(target, {}).get("description", ""),
"values": mars_language.get(target, {}).get("values", ""),
"links": [
{
"title": str(value[-1] if isinstance(value, list) else value),
"href": f"/tree?{current_query_params}{target}={value[0] if isinstance(value, list) else value}",
"rel": "child",
"type": "application/json",
}
for value in mars_language.get(target, {}).get("values", [])
]
}
return stac_collection
@app.get("/tree")
async def get_tree(request: Request):
# Convert query parameters to dictionary format
@ -97,24 +85,53 @@ async def get_tree(request: Request):
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 = f"/simple?{'&'.join(first_path)}{'&' if first_path else ''}{key_name}=????"
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,
"optional": optional_str,
# "optional_by_path": optional,
"href": href,
"generalized_datacube:href_template": href_template,
"rel": "child",
"type": "application/json",
"paths": set(tuple(f"{m.key}={m.value}" for m in p) for p in paths),
# "description": mars_language.get(key_name, {}).get("description", ""),
# "values": mars_language.get(key_name, {}).get("values", "")
"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",
@ -124,7 +141,19 @@ async def get_tree(request: 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

@ -65,26 +65,24 @@ function goToNextUrl() {
const key_type = item.dataset.keyType;
let values = [];
if (key === "date") {
const datePicker = item.querySelector("input[type='date']");
//format date as YYYYMMDD
const datePicker = item.querySelector("input[type='date']");
if (datePicker) {
values.push(datePicker.value.replace(/-/g, ""));
} else if (key === "time") {
const timePicker = item.querySelector("input[type='time']");
//format time as HHMM
console.log("replace", timePicker.value.replace(":", ""));
}
const timePicker = item.querySelector("input[type='time']");
if (timePicker) {
values.push(timePicker.value.replace(":", ""));
} else if (key_type === "enum") {
values.push(
...Array.from(
item.querySelectorAll("input[type='checkbox']:checked")
).map((checkbox) => checkbox.value)
);
} else {
const any = item.querySelector("input[type='text']");
if (any.value !== "") {
values.push(any.value);
}
}
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
@ -127,53 +125,27 @@ async function createCatalogItem(link, itemsContainer) {
itemsContainer.appendChild(itemDiv);
try {
// Fetch details for each item/collection asynchronously
let base_url = new URL(window.location.href);
base_url.pathname = "/tree";
let url = new URL(link.href, base_url);
console.log("Fetching item details:", url);
const response = await fetch(url);
const itemData = await response.json();
// Update the item div with real content
itemDiv.classList.remove("loading");
itemDiv.innerHTML = ""; // Clear "Loading..." text
const dimension = link["generalized_datacube:dimension"];
// add data-key attribute to the itemDiv
itemDiv.dataset.key = itemData.id;
itemDiv.dataset.keyType = itemData.key_type;
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>
`;
const title = document.createElement("h3");
title.className = "item-title";
title.textContent = itemData.title || "No title available";
itemDiv.appendChild(title);
const key_type = document.createElement("p");
key_type.className = "item-type";
key_type.textContent = `Key Type: ${itemData.key_type || "Unknown"}`;
itemDiv.appendChild(key_type);
const optional = document.createElement("p");
optional.className = "item-type";
optional.textContent = `Optional: ${link.optional || "Unknown"}`;
itemDiv.appendChild(optional);
// const id = document.createElement("p");
// id.className = "item-id";
// id.textContent = `ID: ${itemData.id || link.href.split("/").pop()}`;
// itemDiv.appendChild(id);
const description = document.createElement("p");
description.className = "item-description";
const descText = itemData.description
? itemData.description.slice(0, 100)
: "No description available";
description.textContent = `${descText}...`;
itemDiv.appendChild(description);
if (itemData.key_type === "date" || itemData.key_type === "time") {
if (dimension.type === "date" || dimension.type === "time") {
// Render a date picker for the "date" key
const picker = `<input type="${itemData.id}" name="${itemData.id}">`;
const picker = `<input type="${link.title}" name="${link.title}">`;
//convert picker to HTML node
const pickerNode = document
.createRange()
@ -182,25 +154,49 @@ async function createCatalogItem(link, itemsContainer) {
}
// Otherwise create a scrollable list with checkboxes for values if available
else if (
itemData.key_type === "enum" &&
itemData.values &&
itemData.values.length > 0
// dimension.type === "enum" &&
dimension.values &&
dimension.values.length > 0
) {
const listContainer = renderCheckboxList(itemData);
const listContainer = renderCheckboxList(link);
itemDiv.appendChild(listContainer);
} else {
const any = `<input type="text" name="${itemData.id}">`;
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);
// In case of an error, display an error message
itemDiv.innerHTML = "<p>Error loading item details</p>";
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");
@ -217,39 +213,57 @@ function renderCatalogItems(links) {
});
}
// Fetch and display item details
async function loadItemDetails(url) {
try {
const resolved_url = new URL(url, API_BASE_URL);
const response = await fetch(resolved_url);
const item = await response.json();
// Show details in the 'details' panel
const itemDetails = document.getElementById("item-details");
itemDetails.textContent = JSON.stringify(item, null, 2);
} catch (error) {
console.error("Error loading item details:", error);
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 show_resp_in_sidebar(catalog) {
const itemDetails = document.getElementById("item-details");
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(stacUrl) {
async function fetchCatalog(request, stacUrl) {
try {
const response = await fetch(stacUrl);
const catalog = await response.json();
// Always load the most recently clicked item on the right-hand side
show_resp_in_sidebar(catalog);
// 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);
}
@ -258,10 +272,11 @@ async function fetchCatalog(stacUrl) {
// 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(stacUrl);
fetchCatalog(request, stacUrl);
} else {
console.error("No STAC URL provided in the query string.");
}
@ -280,36 +295,3 @@ function initializeViewer() {
// Call initializeViewer on page load
initializeViewer();
function renderCheckboxList(itemData) {
const listContainer = document.createElement("div");
listContainer.className = "item-list-container";
const listLabel = document.createElement("label");
listLabel.textContent = "Select values:";
listLabel.className = "list-label";
const scrollableList = document.createElement("div");
scrollableList.className = "scrollable-list";
const checkboxesHtml = itemData.values
.map((valueArray) => {
const value = Array.isArray(valueArray) ? valueArray[0] : valueArray;
const labelText = Array.isArray(valueArray)
? valueArray.join(" - ")
: valueArray;
return `
<div class="checkbox-container">
<input type="checkbox" class="item-checkbox" value="${value}">
<label class="checkbox-label">${labelText}</label>
</div>
`;
})
.join("");
scrollableList.innerHTML = checkboxesHtml;
listContainer.appendChild(listLabel);
listContainer.appendChild(scrollableList);
return listContainer;
}

View File

@ -4,7 +4,11 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>STAC Viewer</title>
<link rel="stylesheet" href="styles.css" />
<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>
</head>
<body>
<div id="viewer">
@ -23,11 +27,18 @@
</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 id="item-details"></pre>
<pre><code id="raw-stac" class="language-json"></code></pre>
</div>
</div>
<script src="app.js"></script>
<script src="/app/app.js"></script>
</body>
</html>

View File

@ -85,7 +85,7 @@ canvas {
border-color: #003399; /* Keep the original ECMWF blue for the border */
}
#item-details {
#raw-stac {
white-space: pre-wrap;
background-color: #f9f9f9;
padding: 10px;
@ -147,7 +147,20 @@ button:hover {
.list-label {
font-weight: bold;
margin-bottom: 5px;
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;
}

123
cache/cache.py vendored Normal file
View File

@ -0,0 +1,123 @@
#! 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 compress_tree import print_schema_tree, compress_tree
request = {
"class": "d1",
# "dataset": "climate-dt",
"dataset" : "extremes-dt",
"date" : "-14/-1",
# "time": "0000"
# "activity": 'cmip6',
# "expver": "0001",
"stream": "oper",
# "date": "-1",
# "time": "0000",
# "type": "fc",
# "levtype": "sfc",
"step": "0",
# "param": ""
}
request = {
"class": "d1",
# "dataset": "climate-dt",
# "date" : "19920422",
# "time": "0000"
# "activity": 'cmip6',
# "expver": "0001",
# "stream": "oper",
# "date": "-1",
# "time": "0000",
# "type": "fc",
# "levtype": "sfc",
# "step": "0",
# "param": "129"
}
t0 = time.time()
fdb = pyfdb.FDB()
# spans = defaultdict(Counter)
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)
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]
# print(request)
# print(m)
# sys.exit()
total += 1
# for k, v in request.items():
# # spans[k][v] += 1
# spans[k].add(v)
if total % 1000 == 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: {total}")
print(f"Runtime: {(time.time() - t0):.0f} s")
# print_tree(tree, max_depth = 7)
print_schema_tree(compressed_tree)
os.system("clear")
print(f"Total: {total}")
print(f"Runtime: {(time.time() - t0) / 60:.0f} mins")
print_tree(tree, max_depth = 4)
with open("cache.json", "w") as f:
json.dump(tree, f)

1
cache/climate-dt-cache.json vendored Normal file

File diff suppressed because one or more lines are too long

87
cache/compress_tree.py vendored Normal file
View File

@ -0,0 +1,87 @@
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 print_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)
for k, v in sorted(name_cache.items()):
# print(f"{k} : {','.join(sorted(v.split(","), key = int))}")
print(f"{v} : {k}")
print()
print(schema_tree)

479
cache/demo.cast vendored Normal file
View File

@ -0,0 +1,479 @@
{"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

@ -111,9 +111,10 @@ fdb_schema = pe.compile(
KeySpec <- key:String (flag:Flag)? (type:Type)? (values:Values)? ([ ]* comment:Comment)?
Flag <- ~("?" / "-" / "*")
Type <- ":" [ ]* String
Values <- "=" String ("/" String)*
Values <- "=" Value ("/" Value)*
# Low level stuff
Value <- ~([-a-zA-Z0-9_]+)
String <- ~([a-zA-Z0-9_]+)
EOF <- !.
empty <- ""
@ -161,6 +162,9 @@ class Key:
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"}
@ -178,7 +182,7 @@ class Key:
def as_json(self):
return dict(
key=self.key,
value=self.as_string(),
value=self.str_value(),
reason=self.reason,
)

41
cache/raw_to_tree.py vendored Normal file
View File

@ -0,0 +1,41 @@
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)

12
cache/tree_to_compressed.py vendored Normal file
View File

@ -0,0 +1,12 @@
from compress_tree import print_schema_tree, compress_tree
import json
print("Loading tree json...")
with open("cache.json", "r") as f:
tree = json.load(f)
print("Compresssing...")
compressed_tree = compress_tree(tree, max_level = None)
print("Outputting")
print_schema_tree(compressed_tree)

1
fdb_schema/__init__.py Normal file
View File

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

View File

@ -0,0 +1,375 @@
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())

83
fdb_schema/fdb_types.py Normal file
View File

@ -0,0 +1,83 @@
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]
}

7
run.sh
View File

@ -1,2 +1,7 @@
cd backend
fastapi dev main.py
# ../.venv/bin/fastapi dev main.py
../.venv/bin/uvicorn main:app --reload \
--reload-include="*.html" \
--reload-include="*.css" \
--reload-include="*.js" \
--reload-include="*.yaml"

7
run_prod.sh Executable file
View File

@ -0,0 +1,7 @@
cd backend
# sudo ../.venv/bin/fastapi dev main.py --port 80
sudo ../.venv/bin/uvicorn main:app --port 80 --host 0.0.0.0 --reload\
--reload-include="*.html" \
--reload-include="*.css" \
--reload-include="*.js" \
--reload-include="*.yaml"