Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 22 additions & 17 deletions lib/benchpark/cmd/info.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import argparse
import os
import subprocess
import textwrap
Expand Down Expand Up @@ -138,20 +139,26 @@ def _info_ramble_name(experiment_class):
)
)

experiment_spec = benchpark.spec.ExperimentSpec(args.name)
experiment_spec_str = " ".join(args.name)
experiment_spec = benchpark.spec.ExperimentSpec(experiment_spec_str)
conc = experiment_spec.concretize()
experiment_class = conc.experiment
try:
experiment = conc.experiment
except Exception as e:
msg = (
f"'{experiment_spec_str}' must be a valid experiment spec;"
" some experiments require specifying additional variants"
" (e.g. experiments not inheriting MpiOnlyExperiment must"
" set +rocm or +cuda)."
)
raise ValueError(msg) from e

if args.spack:
subprocess.run(
[
"spack",
"info",
(
experiment_class.spack_name
if experiment_class.spack_name
else experiment_class.name
),
(experiment.spack_name if experiment.spack_name else experiment.name),
]
)
return
Expand All @@ -160,20 +167,16 @@ def _info_ramble_name(experiment_class):
[
"ramble",
"info",
(
experiment_class.ramble_name
if experiment_class.ramble_name
else experiment_class.name
),
(experiment.ramble_name if experiment.ramble_name else experiment.name),
]
)
return
else:
actions = {
"maintainers": (info_maintainers, [experiment_class]),
"ramble_name": (_info_ramble_name, [experiment_class]),
"spack_name": (_info_spack_name, [experiment_class]),
"variants": (info_variants, [experiment_class]),
"maintainers": (info_maintainers, [experiment]),
"ramble_name": (_info_ramble_name, [experiment]),
"spack_name": (_info_spack_name, [experiment]),
"variants": (info_variants, [experiment]),
}

# Call functions for enabled options, or all if no flag is set
Expand Down Expand Up @@ -218,7 +221,9 @@ def setup_parser(root_parser):
experiment_parser.add_argument(
"--maintainers", action="store_true", help="Maintainers"
)
experiment_parser.add_argument("name", help="Experiment name")
experiment_parser.add_argument(
"name", nargs=argparse.REMAINDER, help="Experiment name"
)


def command(args):
Expand Down
21 changes: 13 additions & 8 deletions lib/benchpark/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -323,14 +323,19 @@ def _concretize(self):
name, values = variants_to_check.pop()
checked.add((name, values))

conditions = [
w
for w, v_by_n in self.object_class.variants.items()
for n, v in v_by_n.items()
if n == name and v.validate_values_bool(values)
]

if not conditions:
conditions = []
possible_variants = set()
for when, v_by_n in self.object_class.variants.items():
possible_variants.update(v_by_n.keys())
for n, v in v_by_n.items():
if n == name:
if not v.validate_values_bool(values):
raise Exception(
f"'{values}' is not valid for variant '{name}' on {self.name}"
)
conditions.append(when)

if name not in possible_variants:
raise Exception(f"{name} is not a valid variant of {self.name}")

# This variant is already valid on self
Expand Down
Loading