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.
Files changed (106) hide show
  1. {ceci-2.7 → ceci-2.7.2}/PKG-INFO +1 -1
  2. {ceci-2.7 → ceci-2.7.2}/ceci/_version.py +3 -3
  3. {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/pipeline.py +6 -3
  4. {ceci-2.7 → ceci-2.7.2}/ceci/sites/__init__.py +11 -1
  5. {ceci-2.7 → ceci-2.7.2}/ceci/sites/nersc.py +2 -2
  6. {ceci-2.7 → ceci-2.7.2}/ceci.egg-info/PKG-INFO +1 -1
  7. {ceci-2.7 → ceci-2.7.2}/ceci.egg-info/SOURCES.txt +1 -0
  8. {ceci-2.7 → ceci-2.7.2}/ceci.egg-info/scm_file_list.json +1 -0
  9. ceci-2.7.2/ceci.egg-info/scm_version.json +8 -0
  10. {ceci-2.7 → ceci-2.7.2}/docs/config.rst +1 -1
  11. ceci-2.7.2/tests/test_classname.py +29 -0
  12. ceci-2.7.2/tests/test_site.py +135 -0
  13. ceci-2.7/ceci.egg-info/scm_version.json +0 -8
  14. ceci-2.7/tests/test_site.py +0 -73
  15. {ceci-2.7 → ceci-2.7.2}/.coveragerc +0 -0
  16. {ceci-2.7 → ceci-2.7.2}/.github/workflows/ci.yml +0 -0
  17. {ceci-2.7 → ceci-2.7.2}/.github/workflows/publish.yml +0 -0
  18. {ceci-2.7 → ceci-2.7.2}/.gitignore +0 -0
  19. {ceci-2.7 → ceci-2.7.2}/.pylintrc +0 -0
  20. {ceci-2.7 → ceci-2.7.2}/.readthedocs.yml +0 -0
  21. {ceci-2.7 → ceci-2.7.2}/LICENSE +0 -0
  22. {ceci-2.7 → ceci-2.7.2}/README.md +0 -0
  23. {ceci-2.7 → ceci-2.7.2}/ceci/__init__.py +0 -0
  24. {ceci-2.7 → ceci-2.7.2}/ceci/__main__.py +0 -0
  25. {ceci-2.7 → ceci-2.7.2}/ceci/config.py +0 -0
  26. {ceci-2.7 → ceci-2.7.2}/ceci/errors.py +0 -0
  27. {ceci-2.7 → ceci-2.7.2}/ceci/file_types.py +0 -0
  28. {ceci-2.7 → ceci-2.7.2}/ceci/main.py +0 -0
  29. {ceci-2.7 → ceci-2.7.2}/ceci/minirunner.py +0 -0
  30. {ceci-2.7 → ceci-2.7.2}/ceci/monitor.py +0 -0
  31. {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/__init__.py +0 -0
  32. {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/dry_run.py +0 -0
  33. {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/flow_chart.py +0 -0
  34. {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/graph.py +0 -0
  35. {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/mini.py +0 -0
  36. {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/parsl.py +0 -0
  37. {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/sec.py +0 -0
  38. {ceci-2.7 → ceci-2.7.2}/ceci/pipeline/templates.py +0 -0
  39. {ceci-2.7 → ceci-2.7.2}/ceci/sites/ccin2p3.py +0 -0
  40. {ceci-2.7 → ceci-2.7.2}/ceci/sites/local.py +0 -0
  41. {ceci-2.7 → ceci-2.7.2}/ceci/sites/site.py +0 -0
  42. {ceci-2.7 → ceci-2.7.2}/ceci/stage.py +0 -0
  43. {ceci-2.7 → ceci-2.7.2}/ceci/tools/__init__.py +0 -0
  44. {ceci-2.7 → ceci-2.7.2}/ceci/tools/ancestors.py +0 -0
  45. {ceci-2.7 → ceci-2.7.2}/ceci/update_pipelines_for_ceci_2.py +0 -0
  46. {ceci-2.7 → ceci-2.7.2}/ceci/utils.py +0 -0
  47. {ceci-2.7 → ceci-2.7.2}/ceci.egg-info/dependency_links.txt +0 -0
  48. {ceci-2.7 → ceci-2.7.2}/ceci.egg-info/entry_points.txt +0 -0
  49. {ceci-2.7 → ceci-2.7.2}/ceci.egg-info/requires.txt +0 -0
  50. {ceci-2.7 → ceci-2.7.2}/ceci.egg-info/top_level.txt +0 -0
  51. {ceci-2.7 → ceci-2.7.2}/ceci.png +0 -0
  52. {ceci-2.7 → ceci-2.7.2}/ceci_example/__init__.py +0 -0
  53. {ceci-2.7 → ceci-2.7.2}/ceci_example/__main__.py +0 -0
  54. {ceci-2.7 → ceci-2.7.2}/ceci_example/example_stages.py +0 -0
  55. {ceci-2.7 → ceci-2.7.2}/ceci_example/types.py +0 -0
  56. {ceci-2.7 → ceci-2.7.2}/ceci_example_namespace/example_stages.py +0 -0
  57. {ceci-2.7 → ceci-2.7.2}/do_cover.sh +0 -0
  58. {ceci-2.7 → ceci-2.7.2}/docs/Makefile +0 -0
  59. {ceci-2.7 → ceci-2.7.2}/docs/conf.py +0 -0
  60. {ceci-2.7 → ceci-2.7.2}/docs/config2.rst +0 -0
  61. {ceci-2.7 → ceci-2.7.2}/docs/index.rst +0 -0
  62. {ceci-2.7 → ceci-2.7.2}/docs/installation.rst +0 -0
  63. {ceci-2.7 → ceci-2.7.2}/docs/launchers.rst +0 -0
  64. {ceci-2.7 → ceci-2.7.2}/docs/logo.png +0 -0
  65. {ceci-2.7 → ceci-2.7.2}/docs/overview.rst +0 -0
  66. {ceci-2.7 → ceci-2.7.2}/docs/requirements.txt +0 -0
  67. {ceci-2.7 → ceci-2.7.2}/docs/sites.rst +0 -0
  68. {ceci-2.7 → ceci-2.7.2}/docs/stages.rst +0 -0
  69. {ceci-2.7 → ceci-2.7.2}/docs/tutorial.rst +0 -0
  70. {ceci-2.7 → ceci-2.7.2}/nb/ceci_interactive_example.ipynb +0 -0
  71. {ceci-2.7 → ceci-2.7.2}/pyproject.toml +0 -0
  72. {ceci-2.7 → ceci-2.7.2}/setup.cfg +0 -0
  73. {ceci-2.7 → ceci-2.7.2}/setup.py +0 -0
  74. {ceci-2.7 → ceci-2.7.2}/tests/__init__.py +0 -0
  75. {ceci-2.7 → ceci-2.7.2}/tests/config.yml +0 -0
  76. {ceci-2.7 → ceci-2.7.2}/tests/config_nm.yml +0 -0
  77. {ceci-2.7 → ceci-2.7.2}/tests/create_registry_entries.py +0 -0
  78. {ceci-2.7 → ceci-2.7.2}/tests/inputs/dm.txt +0 -0
  79. {ceci-2.7 → ceci-2.7.2}/tests/inputs/fiducial_cosmology.txt +0 -0
  80. {ceci-2.7 → ceci-2.7.2}/tests/north.yml +0 -0
  81. {ceci-2.7 → ceci-2.7.2}/tests/template.yml +0 -0
  82. {ceci-2.7 → ceci-2.7.2}/tests/test.hdf5 +0 -0
  83. {ceci-2.7 → ceci-2.7.2}/tests/test.yml +0 -0
  84. {ceci-2.7 → ceci-2.7.2}/tests/test_cmd.py +0 -0
  85. {ceci-2.7 → ceci-2.7.2}/tests/test_dask.py +0 -0
  86. {ceci-2.7 → ceci-2.7.2}/tests/test_dataregistry.yml +0 -0
  87. {ceci-2.7 → ceci-2.7.2}/tests/test_executables.py +0 -0
  88. {ceci-2.7 → ceci-2.7.2}/tests/test_flow_chart.py +0 -0
  89. {ceci-2.7 → ceci-2.7.2}/tests/test_graph.py +0 -0
  90. {ceci-2.7 → ceci-2.7.2}/tests/test_helpers.py +0 -0
  91. {ceci-2.7 → ceci-2.7.2}/tests/test_interactive.py +0 -0
  92. {ceci-2.7 → ceci-2.7.2}/tests/test_io.py +0 -0
  93. {ceci-2.7 → ceci-2.7.2}/tests/test_main.py +0 -0
  94. {ceci-2.7 → ceci-2.7.2}/tests/test_minirunner.py +0 -0
  95. {ceci-2.7 → ceci-2.7.2}/tests/test_monitor.py +0 -0
  96. {ceci-2.7 → ceci-2.7.2}/tests/test_namespace.yml +0 -0
  97. {ceci-2.7 → ceci-2.7.2}/tests/test_pipeline.py +0 -0
  98. {ceci-2.7 → ceci-2.7.2}/tests/test_pipeline_graph.py +0 -0
  99. {ceci-2.7 → ceci-2.7.2}/tests/test_python_paths.py +0 -0
  100. {ceci-2.7 → ceci-2.7.2}/tests/test_snapshot.py +0 -0
  101. {ceci-2.7 → ceci-2.7.2}/tests/test_stage.py +0 -0
  102. {ceci-2.7 → ceci-2.7.2}/tests/test_update_script.py +0 -0
  103. {ceci-2.7 → ceci-2.7.2}/tests/test_utils.py +0 -0
  104. {ceci-2.7 → ceci-2.7.2}/tests/update_test_files/config.yml +0 -0
  105. {ceci-2.7 → ceci-2.7.2}/tests/update_test_files/pipeline1.yml +0 -0
  106. {ceci-2.7 → ceci-2.7.2}/tests/update_test_files/pipeline2.yml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ceci
3
- Version: 2.7
3
+ Version: 2.7.2
4
4
  Summary: Lightweight pipeline engine for LSST DESC
5
5
  Author: Joe Zuntz
6
6
  License: BSD 3-Clause License
@@ -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 = 'g6fabd7fa4'
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": "local"})
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="local")
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["name"]
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, cpus_per_node) for name in node_names]
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 --walltime={walltime}\n",
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}",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ceci
3
- Version: 2.7
3
+ Version: 2.7.2
4
4
  Summary: Lightweight pipeline engine for LSST DESC
5
5
  Author: Joe Zuntz
6
6
  License: BSD 3-Clause License
@@ -73,6 +73,7 @@ tests/north.yml
73
73
  tests/template.yml
74
74
  tests/test.hdf5
75
75
  tests/test.yml
76
+ tests/test_classname.py
76
77
  tests/test_cmd.py
77
78
  tests/test_dask.py
78
79
  tests/test_dataregistry.yml
@@ -68,6 +68,7 @@
68
68
  "tests/template.yml",
69
69
  "tests/test.hdf5",
70
70
  "tests/test.yml",
71
+ "tests/test_classname.py",
71
72
  "tests/test_cmd.py",
72
73
  "tests/test_dask.py",
73
74
  "tests/test_dataregistry.yml",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "2.7.2",
3
+ "distance": 0,
4
+ "node": "g719607c5fd9b6423c9657a84e4b91bbeaa9f767c",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-28"
8
+ }
@@ -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
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "2.7",
3
- "distance": 0,
4
- "node": "g6fabd7fa413a35870896f0eca83d29c3bf24638d",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-10-26"
8
- }
@@ -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
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
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
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