ceci 2.7__tar.gz → 2.7.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ceci-2.7 → ceci-2.7.2}/PKG-INFO +1 -1
- {ceci-2.7 → ceci-2.7.2}/ceci/_version.py +3 -3
- {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/pipeline.py +6 -3
- {ceci-2.7 → ceci-2.7.2}/ceci/sites/__init__.py +11 -1
- {ceci-2.7 → ceci-2.7.2}/ceci/sites/nersc.py +2 -2
- {ceci-2.7 → ceci-2.7.2}/ceci.egg-info/PKG-INFO +1 -1
- {ceci-2.7 → ceci-2.7.2}/ceci.egg-info/SOURCES.txt +1 -0
- {ceci-2.7 → ceci-2.7.2}/ceci.egg-info/scm_file_list.json +1 -0
- ceci-2.7.2/ceci.egg-info/scm_version.json +8 -0
- {ceci-2.7 → ceci-2.7.2}/docs/config.rst +1 -1
- ceci-2.7.2/tests/test_classname.py +29 -0
- ceci-2.7.2/tests/test_site.py +135 -0
- ceci-2.7/ceci.egg-info/scm_version.json +0 -8
- ceci-2.7/tests/test_site.py +0 -73
- {ceci-2.7 → ceci-2.7.2}/.coveragerc +0 -0
- {ceci-2.7 → ceci-2.7.2}/.github/workflows/ci.yml +0 -0
- {ceci-2.7 → ceci-2.7.2}/.github/workflows/publish.yml +0 -0
- {ceci-2.7 → ceci-2.7.2}/.gitignore +0 -0
- {ceci-2.7 → ceci-2.7.2}/.pylintrc +0 -0
- {ceci-2.7 → ceci-2.7.2}/.readthedocs.yml +0 -0
- {ceci-2.7 → ceci-2.7.2}/LICENSE +0 -0
- {ceci-2.7 → ceci-2.7.2}/README.md +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/__init__.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/__main__.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/config.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/errors.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/file_types.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/main.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/minirunner.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/monitor.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/__init__.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/dry_run.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/flow_chart.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/graph.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/mini.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/parsl.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/sec.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/templates.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/sites/ccin2p3.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/sites/local.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/sites/site.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/stage.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/tools/__init__.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/tools/ancestors.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/update_pipelines_for_ceci_2.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci/utils.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci.egg-info/dependency_links.txt +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci.egg-info/entry_points.txt +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci.egg-info/requires.txt +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci.egg-info/top_level.txt +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci.png +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci_example/__init__.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci_example/__main__.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci_example/example_stages.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci_example/types.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/ceci_example_namespace/example_stages.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/do_cover.sh +0 -0
- {ceci-2.7 → ceci-2.7.2}/docs/Makefile +0 -0
- {ceci-2.7 → ceci-2.7.2}/docs/conf.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/docs/config2.rst +0 -0
- {ceci-2.7 → ceci-2.7.2}/docs/index.rst +0 -0
- {ceci-2.7 → ceci-2.7.2}/docs/installation.rst +0 -0
- {ceci-2.7 → ceci-2.7.2}/docs/launchers.rst +0 -0
- {ceci-2.7 → ceci-2.7.2}/docs/logo.png +0 -0
- {ceci-2.7 → ceci-2.7.2}/docs/overview.rst +0 -0
- {ceci-2.7 → ceci-2.7.2}/docs/requirements.txt +0 -0
- {ceci-2.7 → ceci-2.7.2}/docs/sites.rst +0 -0
- {ceci-2.7 → ceci-2.7.2}/docs/stages.rst +0 -0
- {ceci-2.7 → ceci-2.7.2}/docs/tutorial.rst +0 -0
- {ceci-2.7 → ceci-2.7.2}/nb/ceci_interactive_example.ipynb +0 -0
- {ceci-2.7 → ceci-2.7.2}/pyproject.toml +0 -0
- {ceci-2.7 → ceci-2.7.2}/setup.cfg +0 -0
- {ceci-2.7 → ceci-2.7.2}/setup.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/__init__.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/config.yml +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/config_nm.yml +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/create_registry_entries.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/inputs/dm.txt +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/inputs/fiducial_cosmology.txt +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/north.yml +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/template.yml +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test.hdf5 +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test.yml +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_cmd.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_dask.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_dataregistry.yml +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_executables.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_flow_chart.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_graph.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_helpers.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_interactive.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_io.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_main.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_minirunner.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_monitor.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_namespace.yml +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_pipeline.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_pipeline_graph.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_python_paths.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_snapshot.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_stage.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_update_script.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/test_utils.py +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/update_test_files/config.yml +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/update_test_files/pipeline1.yml +0 -0
- {ceci-2.7 → ceci-2.7.2}/tests/update_test_files/pipeline2.yml +0 -0
{ceci-2.7 → ceci-2.7.2}/PKG-INFO
RENAMED
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '2.7'
|
|
22
|
-
__version_tuple__ = version_tuple = (2, 7)
|
|
21
|
+
__version__ = version = '2.7.2'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 7, 2)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g719607c5f'
|
|
@@ -46,7 +46,7 @@ def prepare_for_pipeline(pipe_config):
|
|
|
46
46
|
|
|
47
47
|
# Get information (maybe the default) on the launcher we may be using
|
|
48
48
|
launcher_config = pipe_config.setdefault("launcher", {"name": "mini"})
|
|
49
|
-
site_config = pipe_config.get("site", {"name": "
|
|
49
|
+
site_config = pipe_config.get("site", {"name": "auto"})
|
|
50
50
|
|
|
51
51
|
# Pass the paths along to the site
|
|
52
52
|
site_config["python_paths"] = paths
|
|
@@ -495,8 +495,8 @@ class Pipeline:
|
|
|
495
495
|
|
|
496
496
|
modules = pipe_config["modules"].split()
|
|
497
497
|
launcher_config = pipe_config.setdefault("launcher", {"name": "mini"})
|
|
498
|
-
site_config = dict(name="
|
|
499
|
-
site_config.update(**pipe_config.get("site"))
|
|
498
|
+
site_config = dict(name="auto")
|
|
499
|
+
site_config.update(**(pipe_config.get("site") or {}))
|
|
500
500
|
# Pass the paths along to the site
|
|
501
501
|
site_config["python_paths"] = paths
|
|
502
502
|
load(launcher_config, [site_config])
|
|
@@ -652,6 +652,9 @@ class Pipeline:
|
|
|
652
652
|
# Find the inputs for this stage and set up the arguments
|
|
653
653
|
# to the stage init method
|
|
654
654
|
args = stage_config.copy()
|
|
655
|
+
# Make sure the instance name is the pipeline name, which
|
|
656
|
+
# may differ from the class name if 'classname' was given
|
|
657
|
+
args.setdefault("name", stage_name)
|
|
655
658
|
for tag in stage_class.input_tags():
|
|
656
659
|
aliased_tag = stage_aliases.get(tag, tag)
|
|
657
660
|
args[aliased_tag] = self.graph.nodes[aliased_tag]["path"]
|
|
@@ -43,6 +43,13 @@ def get_default_site():
|
|
|
43
43
|
reset_default_site()
|
|
44
44
|
|
|
45
45
|
|
|
46
|
+
def detect_site_name():
|
|
47
|
+
"""Choose "nersc-interactive" if NERSC_HOST is set, otherwise "local"."""
|
|
48
|
+
if "NERSC_HOST" in os.environ:
|
|
49
|
+
return "nersc-interactive"
|
|
50
|
+
return "local"
|
|
51
|
+
|
|
52
|
+
|
|
46
53
|
def load(launcher_config, site_configs):
|
|
47
54
|
"""Configure a launcher and the sites it will execute on.
|
|
48
55
|
|
|
@@ -70,7 +77,10 @@ def load(launcher_config, site_configs):
|
|
|
70
77
|
|
|
71
78
|
# Create an object for each site.
|
|
72
79
|
for site_config in site_configs:
|
|
73
|
-
site_name = site_config
|
|
80
|
+
site_name = site_config.get("name", "auto")
|
|
81
|
+
if site_name == "auto":
|
|
82
|
+
site_name = detect_site_name()
|
|
83
|
+
site_config["name"] = site_name
|
|
74
84
|
# Also tell the sites whether this is a dry-run.
|
|
75
85
|
# for example, the nersc site checks you're not
|
|
76
86
|
# trying to run srun on a login node, but we skip
|
|
@@ -108,7 +108,7 @@ class NerscSite(Site):
|
|
|
108
108
|
slurm_cpus_on_node = int(os.environ.get("SLURM_CPUS_ON_NODE", 32))
|
|
109
109
|
|
|
110
110
|
# collect list.
|
|
111
|
-
nodes = [Node(name,
|
|
111
|
+
nodes = [Node(name, slurm_cpus_on_node) for name in node_names]
|
|
112
112
|
else:
|
|
113
113
|
# running on login node
|
|
114
114
|
# use at most 4 procs to avoid annoying people
|
|
@@ -147,7 +147,7 @@ class NerscBatchSite(NerscSite):
|
|
|
147
147
|
max_blocks=max_slurm_jobs, # one slurm job to start with
|
|
148
148
|
scheduler_options=f"#SBATCH --constraint={cpu_type}\n"
|
|
149
149
|
f"#SBATCH --account={account}\n"
|
|
150
|
-
f"#SBATCH --
|
|
150
|
+
f"#SBATCH --time={walltime}\n",
|
|
151
151
|
nodes_per_block=1,
|
|
152
152
|
init_blocks=1,
|
|
153
153
|
worker_init=f"source {setup_script}",
|
|
@@ -114,7 +114,7 @@ Site
|
|
|
114
114
|
|
|
115
115
|
The ``site`` parameter should be a dictionary that configures the machine on which you are running the pipeline.
|
|
116
116
|
|
|
117
|
-
The ``name`` item in the dictionary sets which site is used. These options are currently allowed: ``local``, ``nersc-batch``, and ``nersc-interactive``.
|
|
117
|
+
The ``name`` item in the dictionary sets which site is used. These options are currently allowed: ``auto``, ``local``, ``nersc-batch``, and ``nersc-interactive``. The default, ``auto``, selects ``nersc-interactive`` if the ``NERSC_HOST`` environment variable is set, and ``local`` otherwise.
|
|
118
118
|
|
|
119
119
|
See the :ref:`sites` page for information on these sites, and the other options they take.
|
|
120
120
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import ceci_example # noqa: F401 (registers the example stages)
|
|
2
|
+
import yaml
|
|
3
|
+
from ceci import DryRunPipeline
|
|
4
|
+
from ceci.pipeline.templates import read_and_apply_template
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def test_stage_name_differs_from_classname():
|
|
8
|
+
"""A stage whose pipeline name differs from its class name should
|
|
9
|
+
be set up with the pipeline name as its instance name."""
|
|
10
|
+
config = yaml.safe_load(read_and_apply_template("tests/test.yml"))
|
|
11
|
+
stages = []
|
|
12
|
+
for stage in config["stages"]:
|
|
13
|
+
if stage["name"] == "WLGCSelector":
|
|
14
|
+
stage = {**stage, "name": "MySelector", "classname": "WLGCSelector"}
|
|
15
|
+
stages.append(stage)
|
|
16
|
+
|
|
17
|
+
pipeline = DryRunPipeline(stages, {"interval": 0.5, "name": "mini"})
|
|
18
|
+
run_config = {
|
|
19
|
+
"log_dir": config["log_dir"],
|
|
20
|
+
"output_dir": config["output_dir"],
|
|
21
|
+
"resume": False,
|
|
22
|
+
}
|
|
23
|
+
pipeline.initialize(config["inputs"], run_config, config["config"])
|
|
24
|
+
|
|
25
|
+
assert "MySelector" in pipeline.stage_names
|
|
26
|
+
assert "WLGCSelector" not in pipeline.stage_names
|
|
27
|
+
instance_names = [s.instance_name for s in pipeline.stages]
|
|
28
|
+
assert instance_names == pipeline.stage_names
|
|
29
|
+
assert pipeline.run() == 0
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
from ceci.sites import load, get_default_site
|
|
2
|
+
from ceci.pipeline import StageExecutionConfig
|
|
3
|
+
import pytest
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
def test_nersc_error():
|
|
7
|
+
# check that errors when trying to run multi-process
|
|
8
|
+
# jobs on nersc login nodes are handled correctly.
|
|
9
|
+
# should fail unless dry-run is set.
|
|
10
|
+
|
|
11
|
+
launcher_config = {
|
|
12
|
+
"name": "mini",
|
|
13
|
+
"interval": 1.0,
|
|
14
|
+
}
|
|
15
|
+
site_config = {
|
|
16
|
+
"name": "nersc-interactive",
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
stage_config = {
|
|
20
|
+
"name": "Test",
|
|
21
|
+
"nprocess": 2,
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
load(launcher_config, [site_config])
|
|
25
|
+
site = get_default_site()
|
|
26
|
+
sec = StageExecutionConfig(stage_config)
|
|
27
|
+
|
|
28
|
+
# should fail if we don't set dry-run
|
|
29
|
+
with pytest.raises(ValueError):
|
|
30
|
+
site.command("xxx", sec)
|
|
31
|
+
|
|
32
|
+
# should work if we do set dry-run
|
|
33
|
+
launcher_config["dry_run"] = True
|
|
34
|
+
load(launcher_config, [site_config])
|
|
35
|
+
site = get_default_site()
|
|
36
|
+
site.command("xxx", sec)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def test_in2p3():
|
|
40
|
+
os.environ["NSLOTS"] = "8"
|
|
41
|
+
|
|
42
|
+
launcher_config = {
|
|
43
|
+
"name": "mini",
|
|
44
|
+
"interval": 1.0,
|
|
45
|
+
}
|
|
46
|
+
site_config = {
|
|
47
|
+
"name": "cc-parallel",
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
stage_config = {
|
|
51
|
+
"name": "Test",
|
|
52
|
+
"nprocess": 2,
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
load(launcher_config, [site_config])
|
|
56
|
+
site = get_default_site()
|
|
57
|
+
sec = StageExecutionConfig(stage_config)
|
|
58
|
+
|
|
59
|
+
# should work if we do set dry-run
|
|
60
|
+
launcher_config["dry_run"] = True
|
|
61
|
+
load(launcher_config, [site_config])
|
|
62
|
+
site = get_default_site()
|
|
63
|
+
cmd = site.command("xxx", sec)
|
|
64
|
+
assert "singularity" not in cmd
|
|
65
|
+
|
|
66
|
+
stage_config["image"] = "imaginary_file.sif"
|
|
67
|
+
sec = StageExecutionConfig(stage_config)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
load(launcher_config, [site_config])
|
|
71
|
+
site = get_default_site()
|
|
72
|
+
cmd = site.command("xxx", sec)
|
|
73
|
+
assert "singularity run" in cmd
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def test_nersc_parse_int_set():
|
|
77
|
+
from ceci.sites.nersc import parse_int_set
|
|
78
|
+
|
|
79
|
+
assert parse_int_set("1,3-5,9") == {1, 3, 4, 5, 9}
|
|
80
|
+
with pytest.raises(ValueError):
|
|
81
|
+
parse_int_set("1,abc")
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def test_nersc_mini_login_node(monkeypatch):
|
|
85
|
+
from ceci.sites.nersc import NerscSite
|
|
86
|
+
|
|
87
|
+
monkeypatch.delenv("SLURM_JOB_ID", raising=False)
|
|
88
|
+
site = NerscSite({})
|
|
89
|
+
site.configure_for_mini()
|
|
90
|
+
(node,) = site.info["nodes"]
|
|
91
|
+
assert node.cores == 4
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def test_nersc_mini_slurm_job(monkeypatch):
|
|
95
|
+
# Simulate being inside a SLURM job, so this can run anywhere (e.g. CI)
|
|
96
|
+
from ceci.sites.nersc import NerscSite
|
|
97
|
+
|
|
98
|
+
monkeypatch.setenv("SLURM_JOB_ID", "12345")
|
|
99
|
+
monkeypatch.setenv("SLURM_JOB_NODELIST", "nid[1234-1235,1240]")
|
|
100
|
+
monkeypatch.setenv("SLURM_CPUS_ON_NODE", "64")
|
|
101
|
+
site = NerscSite({})
|
|
102
|
+
site.configure_for_mini()
|
|
103
|
+
nodes = site.info["nodes"]
|
|
104
|
+
assert len(nodes) == 3
|
|
105
|
+
assert all(node.cores == 64 for node in nodes)
|
|
106
|
+
|
|
107
|
+
# single node, no brackets, and the default core count
|
|
108
|
+
monkeypatch.setenv("SLURM_JOB_NODELIST", "nid001234")
|
|
109
|
+
monkeypatch.delenv("SLURM_CPUS_ON_NODE")
|
|
110
|
+
site = NerscSite({})
|
|
111
|
+
site.configure_for_mini()
|
|
112
|
+
(node,) = site.info["nodes"]
|
|
113
|
+
assert node.id == "nid001234"
|
|
114
|
+
assert node.cores == 32
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def test_nersc_command(monkeypatch):
|
|
118
|
+
from ceci.sites.nersc import NerscSite
|
|
119
|
+
|
|
120
|
+
monkeypatch.setenv("SLURM_JOB_ID", "12345")
|
|
121
|
+
site = NerscSite({"python_paths": ["/a", "/b"]})
|
|
122
|
+
|
|
123
|
+
sec = StageExecutionConfig({"name": "Test", "nprocess": 4, "threads_per_process": 2})
|
|
124
|
+
cmd = site.command("xxx", sec)
|
|
125
|
+
assert "srun -u -n 4 --cpus-per-task=2" in cmd
|
|
126
|
+
assert "OMP_NUM_THREADS=2" in cmd
|
|
127
|
+
assert "PYTHONPATH=/a:/b:$PYTHONPATH" in cmd
|
|
128
|
+
assert "shifter" not in cmd
|
|
129
|
+
assert "--mpi" in cmd
|
|
130
|
+
|
|
131
|
+
sec = StageExecutionConfig({"name": "Test", "nprocess": 1, "image": "img:latest"})
|
|
132
|
+
cmd = site.command("xxx", sec)
|
|
133
|
+
assert "shifter" in cmd
|
|
134
|
+
assert "--image img:latest" in cmd
|
|
135
|
+
assert "--mpi" not in cmd
|
ceci-2.7/tests/test_site.py
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
from ceci.sites import load, get_default_site
|
|
2
|
-
from ceci.pipeline import StageExecutionConfig
|
|
3
|
-
import pytest
|
|
4
|
-
import os
|
|
5
|
-
|
|
6
|
-
def test_nersc_error():
|
|
7
|
-
# check that errors when trying to run multi-process
|
|
8
|
-
# jobs on nersc login nodes are handled correctly.
|
|
9
|
-
# should fail unless dry-run is set.
|
|
10
|
-
|
|
11
|
-
launcher_config = {
|
|
12
|
-
"name": "mini",
|
|
13
|
-
"interval": 1.0,
|
|
14
|
-
}
|
|
15
|
-
site_config = {
|
|
16
|
-
"name": "nersc-interactive",
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
stage_config = {
|
|
20
|
-
"name": "Test",
|
|
21
|
-
"nprocess": 2,
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
load(launcher_config, [site_config])
|
|
25
|
-
site = get_default_site()
|
|
26
|
-
sec = StageExecutionConfig(stage_config)
|
|
27
|
-
|
|
28
|
-
# should fail if we don't set dry-run
|
|
29
|
-
with pytest.raises(ValueError):
|
|
30
|
-
site.command("xxx", sec)
|
|
31
|
-
|
|
32
|
-
# should work if we do set dry-run
|
|
33
|
-
launcher_config["dry_run"] = True
|
|
34
|
-
load(launcher_config, [site_config])
|
|
35
|
-
site = get_default_site()
|
|
36
|
-
site.command("xxx", sec)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
def test_in2p3():
|
|
40
|
-
os.environ["NSLOTS"] = "8"
|
|
41
|
-
|
|
42
|
-
launcher_config = {
|
|
43
|
-
"name": "mini",
|
|
44
|
-
"interval": 1.0,
|
|
45
|
-
}
|
|
46
|
-
site_config = {
|
|
47
|
-
"name": "cc-parallel",
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
stage_config = {
|
|
51
|
-
"name": "Test",
|
|
52
|
-
"nprocess": 2,
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
load(launcher_config, [site_config])
|
|
56
|
-
site = get_default_site()
|
|
57
|
-
sec = StageExecutionConfig(stage_config)
|
|
58
|
-
|
|
59
|
-
# should work if we do set dry-run
|
|
60
|
-
launcher_config["dry_run"] = True
|
|
61
|
-
load(launcher_config, [site_config])
|
|
62
|
-
site = get_default_site()
|
|
63
|
-
cmd = site.command("xxx", sec)
|
|
64
|
-
assert "singularity" not in cmd
|
|
65
|
-
|
|
66
|
-
stage_config["image"] = "imaginary_file.sif"
|
|
67
|
-
sec = StageExecutionConfig(stage_config)
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
load(launcher_config, [site_config])
|
|
71
|
-
site = get_default_site()
|
|
72
|
-
cmd = site.command("xxx", sec)
|
|
73
|
-
assert "singularity run" in cmd
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ceci-2.7 → ceci-2.7.2}/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ceci-2.7 → ceci-2.7.2}/ceci.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ceci-2.7 → ceci-2.7.2}/setup.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|