dv-flow-mgr 0.0.1.14110240305a1__py3-none-any.whl → 0.0.1.14116344455a1__py3-none-any.whl

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.
dv_flow/mgr/__init__.py CHANGED
@@ -22,6 +22,7 @@
22
22
  from .package_def import *
23
23
  from .pkg_rgy import PkgRgy
24
24
  from .task_data import *
25
+ from .task_def import *
25
26
  from .task_graph_builder import TaskGraphBuilder
26
27
  from .task_runner import TaskRunner
27
28
  from .task_node_ctor_wrapper import task
@@ -33,7 +33,7 @@ from .fragment_def import FragmentDef
33
33
  from .package import Package
34
34
  from .package_import_spec import PackageImportSpec, PackageSpec
35
35
  from .param_def import ParamDef
36
- from .task_def import TaskDef
36
+ from .task_def import TaskDef, PassthroughE, ConsumesE
37
37
  from .task_node_ctor import TaskNodeCtor
38
38
  from .task_node_ctor_proxy import TaskNodeCtorProxy
39
39
  from .task_node_ctor_task import TaskNodeCtorTask
@@ -183,7 +183,7 @@ class PackageDef(BaseModel):
183
183
  base_params : BaseModel = None
184
184
  callable = None
185
185
  passthrough = task.passthrough
186
- consumes = [] if task.consumes is None else task.consumes.copy()
186
+ consumes = task.consumes.copy() if isinstance(task.consumes, list) else task.consumes
187
187
  needs = [] if task.needs is None else task.needs.copy()
188
188
  fullname = self.name + "." + task.name
189
189
 
@@ -192,15 +192,21 @@ class PackageDef(BaseModel):
192
192
  base_ctor_t = self.getTaskCtor(session, task.uses, tasks_m)
193
193
  base_params = base_ctor_t.mkTaskParams()
194
194
 
195
- # Once we have passthrough, we can't turn it off
196
- passthrough |= base_ctor_t.passthrough
197
- consumes.extend(base_ctor_t.consumes)
195
+ if passthrough is None:
196
+ passthrough = base_ctor_t.passthrough
197
+ if consumes is None:
198
+ consumes = base_ctor_t.consumes
198
199
 
199
200
  if base_ctor_t is None:
200
201
  self._log.error("Failed to load task ctor %s" % task.uses)
201
202
  else:
202
203
  self._log.debug("No 'uses' specified")
203
204
 
205
+ if passthrough is None:
206
+ passthrough = PassthroughE.No
207
+ if consumes is None:
208
+ consumes = ConsumesE.All
209
+
204
210
  # Determine the implementation constructor first
205
211
  if task.pytask is not None:
206
212
  # Built-in impl
dv_flow/mgr/std/flow.dv CHANGED
@@ -37,7 +37,8 @@ package:
37
37
  doc: |
38
38
  Creates a fileset from a list of files or glob patterns
39
39
  pytask: dv_flow.mgr.std.fileset.FileSet
40
- passthrough: true
40
+ passthrough: all
41
+ consumes: none
41
42
  with:
42
43
  base:
43
44
  doc: |
@@ -61,7 +62,8 @@ package:
61
62
  value: ""
62
63
  - name: CreateFile
63
64
  pytask: dv_flow.mgr.std.create_file.CreateFile
64
- passthrough: true
65
+ passthrough: all
66
+ consumes: none
65
67
  doc: |
66
68
  Creates one or more files in the run directory from
67
69
  literal content in the .dv file. Outputs a fileset
dv_flow/mgr/task_def.py CHANGED
@@ -39,8 +39,12 @@ class RundirE(enum.Enum):
39
39
  Unique = "unique"
40
40
  Inherit = "inherit"
41
41
 
42
+ class ConsumesE(enum.Enum):
43
+ No = "none"
44
+ All = "all"
45
+
42
46
  class PassthroughE(enum.Enum):
43
- No = "no"
47
+ No = "none"
44
48
  All = "all"
45
49
  Unused = "unused"
46
50
 
@@ -89,11 +93,11 @@ class TaskDef(BaseModel):
89
93
  rundir : RundirE = dc.Field(
90
94
  default=RundirE.Unique,
91
95
  description="Specifies handling of this tasks's run directory")
92
- passthrough: Union[bool, PassthroughE] = dc.Field(
93
- default=PassthroughE.No,
96
+ passthrough: Union[PassthroughE, List[Any], None] = dc.Field(
97
+ default=None,
94
98
  description="Specifies whether this task should pass its inputs to its output")
95
- consumes : List[Any] = dc.Field(
96
- default_factory=list,
99
+ consumes : Union[ConsumesE, List[Any], None] = dc.Field(
100
+ default=None,
97
101
  description="Specifies matching patterns for parameter sets that this task consumes")
98
102
 
99
103
  # out: List[TaskOutput] = dc.Field(default_factory=list)
dv_flow/mgr/task_node.py CHANGED
@@ -86,7 +86,7 @@ class TaskNode(object):
86
86
  for k,v in c.items():
87
87
  self._log.debug("k,v: %s,%s - hasattr=%s" % (k,v, hasattr(params, k)))
88
88
  if hasattr(params, k):
89
- self._log.debug("getattr=%s v=%s" % (getattr(params, k), v))
89
+ self._log.debug("getattr=\"%s\" v=\"%s\"" % (getattr(params, k), v))
90
90
  if getattr(params, k) == v:
91
91
  match = True
92
92
  else:
@@ -7,6 +7,7 @@ import logging
7
7
  import toposort
8
8
  from typing import Any, Callable, ClassVar, Dict, List, Tuple
9
9
  from .task_data import TaskDataInput, TaskDataOutput, TaskDataResult
10
+ from .task_def import ConsumesE, PassthroughE
10
11
  from .task_node import TaskNode
11
12
  from .task_params_ctor import TaskParamsCtor
12
13
  from .param_ref_eval import ParamRefEval
@@ -83,10 +84,12 @@ class TaskNodeLeaf(TaskNode):
83
84
 
84
85
  # Default inputs is the list of parameter sets that match 'consumes'
85
86
  inputs = []
86
- if self.consumes is not None and len(self.consumes):
87
+ if isinstance(self.consumes, list) and len(self.consumes):
87
88
  for in_p in in_params:
88
89
  if self._matches(in_p, self.consumes):
89
90
  inputs.append(in_p)
91
+ elif self.consumes == ConsumesE.All:
92
+ inputs = in_params.copy()
90
93
 
91
94
  for name,field in self.params.model_fields.items():
92
95
  value = getattr(self.params, name)
@@ -125,10 +128,17 @@ class TaskNodeLeaf(TaskNode):
125
128
  # Add an entry for ourselves
126
129
  dep_m[self.name] = list(need.name for need,_ in self.needs)
127
130
 
128
- if self.passthrough:
131
+ if isinstance(self.passthrough, list):
132
+ self._log.warning("List-based passthrough not yet supported")
133
+ elif self.passthrough == PassthroughE.All:
134
+ self._log.debug("Propagating all input parameters to output")
135
+ for need,block in self.needs:
136
+ if not block:
137
+ output.extend(need.output.output)
138
+ elif self.passthrough == PassthroughE.Unused:
129
139
  self._log.debug("passthrough: %s" % self.name)
130
140
 
131
- if self.consumes is None or len(self.consumes) == 0:
141
+ if self.consumes == ConsumesE.No or (isinstance(self.consumes, list) and len(self.consumes) == 0):
132
142
  self._log.debug("Propagating all input parameters to output")
133
143
  for need,block in self.needs:
134
144
  if not block:
@@ -164,6 +174,11 @@ class TaskNodeLeaf(TaskNode):
164
174
  # TODO:
165
175
  self._log.debug("<-- do_run: %s" % self.name)
166
176
 
177
+ if self.result is None:
178
+ raise Exception("Task %s did not produce a result" % self.name)
179
+
180
+ if self.output is None:
181
+ raise Exception("Task %s did not produce a result" % self.name)
167
182
  return self.result
168
183
 
169
184
  def __hash__(self):
@@ -183,10 +183,18 @@ class TaskSetRunner(TaskRunner):
183
183
  with open(os.path.join(self.rundir, "cache", "mementos.json"), "w") as f:
184
184
  json.dump(dst_memento, f)
185
185
 
186
- if isinstance(task, list):
187
- return list(t.output for t in task)
186
+ if self.status == 0:
187
+ if isinstance(task, list):
188
+ for t in task:
189
+ if t.output is None:
190
+ raise Exception("Task %s did not produce output" % t.name)
191
+ return list(t.output for t in task)
192
+ else:
193
+ if task.output is None:
194
+ raise Exception("Task %s did not produce output" % task.name)
195
+ return task.output
188
196
  else:
189
- return task.output
197
+ return None
190
198
 
191
199
  def buildDepMap(self, task : Union[TaskNode, List[TaskNode]]) -> Dict[TaskNode, Set[TaskNode]]:
192
200
  tasks = task if isinstance(task, list) else [task]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.14110240305a1
3
+ Version: 0.0.1.14116344455a1
4
4
  Summary: DV Flow Manager is a build system for silicon design
5
5
  Author-email: Matthew Ballance <matt.ballance@gmail.com>
6
6
  License: Apache License
@@ -1,4 +1,4 @@
1
- dv_flow/mgr/__init__.py,sha256=EL7krYGBmN53z3HKvdrIiyHTD4TRx94LegCgx8whUAo,1130
1
+ dv_flow/mgr/__init__.py,sha256=Zv-hbAhsxnQ49zy6_tKlwqgu5q12Yr7dCySyJMDtOO0,1154
2
2
  dv_flow/mgr/__main__.py,sha256=ExLZCOjDZtxqPk_SSF5SZKkbYUjMmVca4sT2OeePv10,3437
3
3
  dv_flow/mgr/eval_jq.py,sha256=bRsHtaN51qIOiZK1VJV52W0-vj5VH0nQ7XIFebZi5kI,1129
4
4
  dv_flow/mgr/expr_eval.py,sha256=N_8hRIgzJK9JVqhRt8F9rc4S7AAdKHMMltafqk6KhJs,3113
@@ -7,7 +7,7 @@ dv_flow/mgr/fileset.py,sha256=4izm4-qldWLiZxWDUa5Em0iFizzS-S-O0YU6zvtbUUs,1264
7
7
  dv_flow/mgr/fragment_def.py,sha256=AHx3ITbiNbGCzlDk5FM8Iimm0GJnWXDDRAoRC1b41jM,1647
8
8
  dv_flow/mgr/out,sha256=d8GGBi3J43fhdLBlnsUbzBfRe0TD0QTP3nOTz54l2bI,200
9
9
  dv_flow/mgr/package.py,sha256=9FhOu1hKYKzlD88zehwrI6KAcs1E7TbXDnq4v54dqDQ,1701
10
- dv_flow/mgr/package_def.py,sha256=L6KzBLSgArDgKPdjRAkkkq1c771BwV0NU-fMZRMMwws,20581
10
+ dv_flow/mgr/package_def.py,sha256=WdVVpWVe4Pip5mR717iz2UWoZPkIfKrH8KzPIK-t73Y,20777
11
11
  dv_flow/mgr/package_import_spec.py,sha256=aZMpnS9a5NFY76_pYXEuO3-Mkc_xFzy73fdrUe_54Dc,1760
12
12
  dv_flow/mgr/param.py,sha256=kkxMRGf6mPjSZJsjgLKH2vJL62Sn0ZESvjBLkEYOp20,1386
13
13
  dv_flow/mgr/param_def.py,sha256=mkAw3DanIxcVWRYeh9lUAfUMkpqDFly_Ku_iobr4ix8,1745
@@ -15,11 +15,11 @@ dv_flow/mgr/param_ref_eval.py,sha256=5yH37oIX6f2qmk7GfRgNT5qZx0jm3CJFgB9lLDZZ1yQ
15
15
  dv_flow/mgr/parsetab.py,sha256=I-p3nC60t9jiNtPhKyl_sE92SiP96zJLnNdydcLy33g,3780
16
16
  dv_flow/mgr/pkg_rgy.py,sha256=d1nIjRm3ymMNJT-yiMDxCS6bFisTPvLMqh5VrfsHVKM,5404
17
17
  dv_flow/mgr/task_data.py,sha256=lN7Iq8YTitEMGG4rZqYQi6Ri2HuPgBQ5oGQbW-63T8c,12436
18
- dv_flow/mgr/task_def.py,sha256=H_8PUHbve7qBB_6ZEjI3kzIxOlXOor_rZ5yl1ZT-GUQ,3590
18
+ dv_flow/mgr/task_def.py,sha256=9_VJfY8hfZI7x9LFqDxALurg6oWMQQw6rdsppcjTweM,3669
19
19
  dv_flow/mgr/task_graph_builder.py,sha256=3jDlC6UinOHNZO1scO4g6bdDdLZKJEjtexxV9RXy0_4,14371
20
20
  dv_flow/mgr/task_graph_dot_writer.py,sha256=GxqiYwQJbFgUQdnPCS9vpIYmYFbSXwnXCSbGmjbxC3M,2418
21
21
  dv_flow/mgr/task_listener_log.py,sha256=hrJEjSRXXoovDTcD1Cmhi3Spzw7uEJ-WP6tv6JUaa6s,4060
22
- dv_flow/mgr/task_node.py,sha256=ftAB3-j7ZeWV8Y8R1OwaqL8h2Xdc5tC77jLaL2Q390k,3532
22
+ dv_flow/mgr/task_node.py,sha256=xkcdFZyEIIO6Natk-v4-5eyLZGI5kV0516kfjgqzQ34,3540
23
23
  dv_flow/mgr/task_node_compound.py,sha256=y8_jzsfT9Vnm-tCWc_-hFHFoSat95zBXFibySu38YRA,1696
24
24
  dv_flow/mgr/task_node_ctor.py,sha256=COFGvm5PR2B92H3uW1yhDIUCmppo9U4IfOcv_Jrsreo,3952
25
25
  dv_flow/mgr/task_node_ctor_compound.py,sha256=inJeqOtlkVa7QRCzktqvVkkZ0vZALHFadIGlRZyDTD8,4006
@@ -28,10 +28,10 @@ dv_flow/mgr/task_node_ctor_def_base.py,sha256=C2EeKgjeHB9xdC7nkLMBOcektwDoLhdP-4
28
28
  dv_flow/mgr/task_node_ctor_proxy.py,sha256=e1pfLBnJHAgQvkyNcB8sKw5DJdAPRphQz1-DT9Oheho,2017
29
29
  dv_flow/mgr/task_node_ctor_task.py,sha256=9HT39F3KcEpnOBd0SbUqE6FaeSY5fFp_tN1bzGNfFKk,2237
30
30
  dv_flow/mgr/task_node_ctor_wrapper.py,sha256=fRwO2RRJbt7IB1Ziwobmg0-nU5vFYsXoNV4IXfsS7mw,3435
31
- dv_flow/mgr/task_node_leaf.py,sha256=52qv1hwp5FLG9PuPvYVPLlTdzi1TcG4OTqMZC54iIwc,6481
31
+ dv_flow/mgr/task_node_leaf.py,sha256=YofovCK8ozKOXyAAnoRq9fKcNh2kGGWxsQXh6l9K8t0,7276
32
32
  dv_flow/mgr/task_output.py,sha256=ZwyvwnYj_gHOEFAEOH3m24Xfc4Cn77hb1j7LkX8_3C4,1086
33
33
  dv_flow/mgr/task_params_ctor.py,sha256=BPkbnoCtzhCxc1g8CJ6VimCcm5UAu92PXeDMhQ4lYsQ,1957
34
- dv_flow/mgr/task_runner.py,sha256=6Tq-ADmCjWzDmUktHs0yHsmJovUXAxcbZdOuJovdR2M,9117
34
+ dv_flow/mgr/task_runner.py,sha256=Ho-u4xhiTVrOhSgjtcv-6pA0euwI3JFNNAHRdmSVBaA,9477
35
35
  dv_flow/mgr/type.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  dv_flow/mgr/type_def.py,sha256=NDeyplKrPnWwEv4yHkhXEMK9d9j39b5MOeLB-1Mchqo,1095
37
37
  dv_flow/mgr/cmds/cmd_graph.py,sha256=Ykw__EdwamDBZZKxQZVbtMtFl7koq5dJMShTBXSM2pk,2672
@@ -41,7 +41,7 @@ dv_flow/mgr/share/flow.json,sha256=lNmZex9NXkYbyb2aZseQfUOkV9CMyfH0iLODEI7EPBw,5
41
41
  dv_flow/mgr/std/create_file.py,sha256=wmn5N_mObx_wr2LPdKOVbNmdM71hhs3UXOv6Ap9l3Ts,2726
42
42
  dv_flow/mgr/std/exec.py,sha256=UChqa_tAjvdB1NjqTsvlPgFomP8hMsX2rAOPyUonNpk,3896
43
43
  dv_flow/mgr/std/fileset.py,sha256=5IxS6T-x0wzA6fdEQcfHZ9kNP8IpH9hfJ3UMhL4A6Iw,3911
44
- dv_flow/mgr/std/flow.dv,sha256=rl0VZt_H-TyIJq0iERai07aDDZHI86mNozs4gUxidDA,3759
44
+ dv_flow/mgr/std/flow.dv,sha256=t8m-urWYhKEAOFhG4wlrMqGHwiWDyO8H-b6-5vNQkBk,3795
45
45
  dv_flow/mgr/std/message.py,sha256=0JHLErg8whqMLAasG1fumZ2O7R7WNWeNQ9ibJaLDpVY,1029
46
46
  dv_flow/mgr/std/task_null.py,sha256=dw6LXBXVwth6gLPeduDvlz5znAhcVpDH8r1DticD-0w,1041
47
47
  dv_flow/mgr/util/__init__.py,sha256=6uuA6z5cKS2hcjJw6YyEM2M79g6OpXb6tZF_Gku-AGU,22
@@ -49,9 +49,9 @@ dv_flow/mgr/util/__main__.py,sha256=F0LXpCDpYTPalSo0dc1h_qZkip5v1AZYYh-vcYbh5s0,
49
49
  dv_flow/mgr/util/util.py,sha256=yg9oTPRiO87mkCSOQpOtlG9vyKPQzY3qp4OJkEMbWyY,1443
50
50
  dv_flow/mgr/util/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
51
  dv_flow/mgr/util/cmds/cmd_schema.py,sha256=lrEI-Jwb8j4I4yYOn9hq7_7NYbK8leVxLesrHyEWm-E,1879
52
- dv_flow_mgr-0.0.1.14110240305a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
53
- dv_flow_mgr-0.0.1.14110240305a1.dist-info/METADATA,sha256=giD0HNKpfr3oaDAgHqo6nT2uUNm5_0H3DHiTMzv3itA,13336
54
- dv_flow_mgr-0.0.1.14110240305a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
55
- dv_flow_mgr-0.0.1.14110240305a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
56
- dv_flow_mgr-0.0.1.14110240305a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
57
- dv_flow_mgr-0.0.1.14110240305a1.dist-info/RECORD,,
52
+ dv_flow_mgr-0.0.1.14116344455a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
53
+ dv_flow_mgr-0.0.1.14116344455a1.dist-info/METADATA,sha256=eCspmsiQjw9KIDGVt0zXfKIQufdktI71Mn-LkQcL6Vc,13336
54
+ dv_flow_mgr-0.0.1.14116344455a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
55
+ dv_flow_mgr-0.0.1.14116344455a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
56
+ dv_flow_mgr-0.0.1.14116344455a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
57
+ dv_flow_mgr-0.0.1.14116344455a1.dist-info/RECORD,,