Skip to content

Commit 14ce485

Browse files
authored
Merge pull request #60 from cseptesting/59-git-repository-accessor-failing-to-manage-path-structure
59 git repository accessor failing to manage path structure
2 parents 8292817 + af48392 commit 14ce485

23 files changed

+860
-495
lines changed

floatcsep/experiment.py

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import os
66
import shutil
77
from os.path import join, abspath, relpath, dirname, isfile, split, exists
8+
from pathlib import Path
89
from typing import Union, List, Dict, Sequence
910

1011
import numpy
@@ -113,12 +114,10 @@ def __init__(
113114
# Or filter region?
114115
# Instantiate
115116

116-
workdir = abspath(kwargs.get("path", os.getcwd()))
117+
workdir = Path(kwargs.get("path", os.getcwd())).resolve()
117118
if kwargs.get("timestamp", False):
118-
rundir = os.path.join(
119-
rundir, f"run_{datetime.datetime.utcnow().date().isoformat()}"
120-
)
121-
os.makedirs(os.path.join(workdir, rundir), exist_ok=True)
119+
rundir = Path(rundir, f"run_{datetime.datetime.utcnow().date().isoformat()}")
120+
os.makedirs(Path(workdir, rundir), exist_ok=True)
122121

123122
self.name = name if name else "floatingExp"
124123
self.registry = ExperimentRegistry.factory(workdir=workdir, run_dir=rundir)
@@ -359,7 +358,6 @@ def set_input_cat(self, tstring: str, model: Model) -> None:
359358
model (:class:`~floatcsep.model.Model`): Model to give the input
360359
catalog
361360
"""
362-
363361
self.catalog_repo.set_input_cat(tstring, model)
364362

365363
def set_tasks(self) -> None:
@@ -581,11 +579,14 @@ def make_repr(self) -> None:
581579
if not exists(target_cat):
582580
shutil.copy2(self.registry.abs(self.catalog_repo.cat_path), target_cat)
583581

584-
relative_path = os.path.relpath(
585-
self.registry.workdir, os.path.join(self.registry.workdir, self.registry.run_dir)
582+
# relative_path = self.registry.rel(self.registry.run_dir)
583+
# print(self.registry.workdir.__class__, self.registry.run_dir.__class__)
584+
relative_path = Path(
585+
os.path.relpath(self.registry.workdir.as_posix(), self.registry.run_dir.as_posix())
586586
)
587587
self.registry.workdir = relative_path
588-
self.to_yml(repr_config, extended=True)
588+
589+
self.to_yml(repr_config.as_posix(), extended=True)
589590

590591
def as_dict(self, extra: Sequence = (), extended=False) -> dict:
591592
"""
@@ -603,8 +604,8 @@ def as_dict(self, extra: Sequence = (), extended=False) -> dict:
603604
dict_walk = {
604605
"name": self.name,
605606
"config_file": self.config_file,
606-
"path": self.registry.workdir,
607-
"run_dir": self.registry.run_dir,
607+
"path": self.registry.workdir.as_posix(),
608+
"run_dir": self.registry.rel(self.registry.run_dir).as_posix(),
608609
"time_config": {
609610
i: j
610611
for i, j in self.time_config.items()
@@ -615,12 +616,11 @@ def as_dict(self, extra: Sequence = (), extended=False) -> dict:
615616
for i, j in self.region_config.items()
616617
if (i not in ("magnitudes", "depths") or extended)
617618
},
618-
"catalog": self.catalog_repo.cat_path,
619+
"catalog": self.registry.rel(self.catalog_repo.cat_path).as_posix(),
619620
"models": [i.as_dict() for i in self.models],
620621
"tests": [i.as_dict() for i in self.tests],
621622
}
622623
dict_walk.update(extra)
623-
624624
return parse_nested_dicts(dict_walk)
625625

626626
def to_yml(self, filename: str, **kwargs) -> None:
@@ -816,7 +816,9 @@ def get_filecomp(self):
816816
results[test.name] = dict.fromkeys(models_orig)
817817
for model in models_orig:
818818
orig_path = self.original.registry.get_result_key(win_orig[-1], test, model)
819-
repr_path = self.reproduced.registry.get_result_key(win_orig[-1], test, model)
819+
repr_path = self.reproduced.registry.get_result_key(
820+
win_orig[-1], test, model
821+
)
820822
results[test.name][model] = {
821823
"hash": (self.get_hash(orig_path) == self.get_hash(repr_path)),
822824
"byte2byte": filecmp.cmp(orig_path, repr_path),

floatcsep/infrastructure/engine.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,9 @@ def add(self, task: Task):
147147
self.tasks[task] = []
148148
self.ntasks += 1
149149

150-
def add_dependency(self, task, dep_inst: Union[object, str] = None, dep_meth: str = None,
151-
dkw: Any = None):
150+
def add_dependency(
151+
self, task, dep_inst: Union[object, str] = None, dep_meth: str = None, dkw: Any = None
152+
):
152153
"""
153154
Adds a dependency to a task already within the graph.
154155

floatcsep/infrastructure/environments.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ def create_environment(self, force: bool = False) -> None:
429429
rm=True,
430430
decode=True,
431431
buildargs=build_args,
432-
nocache=False # todo: create model arg for --no-cache
432+
nocache=False, # todo: create model arg for --no-cache
433433
)
434434

435435
# Stream each chunk
@@ -459,15 +459,15 @@ def env_exists(self) -> bool:
459459
except ImageNotFound:
460460
return False
461461

462-
def run_command(self, command=None) -> None:
462+
def run_command(self, command=None) -> None:
463463
"""
464464
Runs the model’s Docker container with input/ and forecasts/ mounted.
465465
Streams logs and checks for non-zero exit codes.
466466
"""
467467
model_root = os.path.abspath(self.model_directory)
468468
mounts = {
469-
os.path.join(model_root, "input"): {'bind': '/app/input', 'mode': 'rw'},
470-
os.path.join(model_root, "forecasts"): {'bind': '/app/forecasts', 'mode': 'rw'},
469+
os.path.join(model_root, "input"): {"bind": "/app/input", "mode": "rw"},
470+
os.path.join(model_root, "forecasts"): {"bind": "/app/forecasts", "mode": "rw"},
471471
}
472472

473473
uid, gid = os.getuid(), os.getgid()

floatcsep/infrastructure/logger.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,6 @@ def set_console_log_level(log_level):
6262
handler.setLevel(log_level)
6363

6464

65-
66-
6765
def log_models_tree(log, experiment_registry, time_windows):
6866
"""
6967
Logs the forecasts for all models managed by this ExperimentFileRegistry.
@@ -112,7 +110,9 @@ def log_results_tree(log, experiment_registry):
112110

113111
for model_name, result_path in models.items():
114112
total_results += 1
115-
result_full_path = experiment_registry.get_result_key(timewindow, test_name, model_name)
113+
result_full_path = experiment_registry.get_result_key(
114+
timewindow, test_name, model_name
115+
)
116116
if os.path.exists(result_full_path):
117117
results_exist_count += 1
118118
else:
@@ -130,4 +130,4 @@ def log_results_tree(log, experiment_registry):
130130
log.debug(f"Total Results: {total_results}")
131131
log.debug(f"Results that Exist: {results_exist_count}")
132132
log.debug(f"Results that Do Not Exist: {results_not_exist_count}")
133-
log.debug("===================")
133+
log.debug("===================")

0 commit comments

Comments
 (0)