Mercurial > repos > shellac > sam_consensus_v3
comparison env/lib/python3.9/site-packages/cwltool/mpi.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4f3585e2f14b |
---|---|
1 """Experimental support for MPI.""" | |
2 import inspect | |
3 import os | |
4 import re | |
5 from typing import List, Mapping, MutableMapping, Optional, Type, TypeVar, Union | |
6 | |
7 from ruamel import yaml | |
8 | |
9 MpiConfigT = TypeVar("MpiConfigT", bound="MpiConfig") | |
10 | |
11 MPIRequirementName = "http://commonwl.org/cwltool#MPIRequirement" | |
12 | |
13 | |
14 class MpiConfig: | |
15 def __init__( | |
16 self, | |
17 runner: str = "mpirun", | |
18 nproc_flag: str = "-n", | |
19 default_nproc: Union[int, str] = 1, | |
20 extra_flags: Optional[List[str]] = None, | |
21 env_pass: Optional[List[str]] = None, | |
22 env_pass_regex: Optional[List[str]] = None, | |
23 env_set: Optional[Mapping[str, str]] = None, | |
24 ) -> None: | |
25 """ | |
26 Initialize from the argument mapping. | |
27 | |
28 Defaults are: | |
29 runner: "mpirun" | |
30 nproc_flag: "-n" | |
31 default_nproc: 1 | |
32 extra_flags: [] | |
33 env_pass: [] | |
34 env_pass_regex: [] | |
35 env_set: {} | |
36 | |
37 Any unknown keys will result in an exception. | |
38 """ | |
39 self.runner = runner | |
40 self.nproc_flag = nproc_flag | |
41 self.default_nproc = int(default_nproc) | |
42 self.extra_flags = extra_flags or [] | |
43 self.env_pass = env_pass or [] | |
44 self.env_pass_regex = env_pass_regex or [] | |
45 self.env_set = env_set or {} | |
46 | |
47 @classmethod | |
48 def load(cls: Type[MpiConfigT], config_file_name: str) -> MpiConfigT: | |
49 """Create the MpiConfig object from the contents of a YAML file. | |
50 | |
51 The file must contain exactly one object, whose attributes must | |
52 be in the list allowed in the class initialiser (all are | |
53 optional). | |
54 """ | |
55 with open(config_file_name) as cf: | |
56 data = yaml.main.round_trip_load(cf) | |
57 try: | |
58 return cls(**data) | |
59 except TypeError as e: | |
60 unknown = set(data.keys()) - set(inspect.signature(cls).parameters) | |
61 raise ValueError(f"Unknown key(s) in MPI configuration: {unknown}") | |
62 | |
63 def pass_through_env_vars(self, env: MutableMapping[str, str]) -> None: | |
64 """Take the configured list of environment variables and pass them to the executed process.""" | |
65 for var in self.env_pass: | |
66 if var in os.environ: | |
67 env[var] = os.environ[var] | |
68 | |
69 for var_re in self.env_pass_regex: | |
70 r = re.compile(var_re) | |
71 for k in os.environ: | |
72 if r.match(k): | |
73 env[k] = os.environ[k] | |
74 | |
75 def set_env_vars(self, env: MutableMapping[str, str]) -> None: | |
76 """Set some variables to the value configured.""" | |
77 env.update(self.env_set) |