dv-flow-mgr 0.0.1.13862597957a1__py3-none-any.whl → 0.0.1.13885203883a1__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/task_def.py CHANGED
@@ -30,6 +30,11 @@ from .task_output import TaskOutput
30
30
  class TaskSpec(object):
31
31
  name : str
32
32
 
33
+ @dc.dataclass
34
+ class NeedSpec(object):
35
+ name : str
36
+ block : bool = False
37
+
33
38
  class TaskDef(BaseModel):
34
39
  """Holds definition information (ie the YAML view) for a task"""
35
40
  name : str
@@ -39,7 +44,7 @@ class TaskDef(BaseModel):
39
44
  pytask : str = dc.Field(default=None)
40
45
  desc : str = dc.Field(default="")
41
46
  doc : str = dc.Field(default="")
42
- needs : List[Union[str,TaskSpec]] = dc.Field(default_factory=list, alias="needs")
47
+ needs : List[Union[str,NeedSpec,TaskSpec]] = dc.Field(default_factory=list, alias="needs")
43
48
  params: Dict[str,Union[str,list,ParamDef]] = dc.Field(default_factory=dict, alias="with")
44
49
  passthrough: bool = dc.Field(default=False)
45
50
  consumes : List[Any] = dc.Field(default_factory=list)
dv_flow/mgr/task_node.py CHANGED
@@ -25,7 +25,7 @@ import dataclasses as dc
25
25
  import pydantic.dataclasses as pdc
26
26
  import logging
27
27
  import toposort
28
- from typing import Any, Callable, ClassVar, Dict, List
28
+ from typing import Any, Callable, ClassVar, Dict, List, Tuple
29
29
  from .task_data import TaskDataInput, TaskDataOutput, TaskDataResult
30
30
  from .task_params_ctor import TaskParamsCtor
31
31
  from .param_ref_eval import ParamRefEval
@@ -46,7 +46,7 @@ class TaskNode(object):
46
46
  changed : bool = False
47
47
  passthrough : bool = False
48
48
  consumes : List[Any] = dc.field(default_factory=list)
49
- needs : List['TaskNode'] = dc.field(default_factory=list)
49
+ needs : List[Tuple['TaskNode',bool]] = dc.field(default_factory=list)
50
50
  rundir : str = dc.field(default=None)
51
51
  output : TaskDataOutput = dc.field(default=None)
52
52
  result : TaskDataResult = dc.field(default=None)
@@ -58,6 +58,10 @@ class TaskNode(object):
58
58
  def __post_init__(self):
59
59
  if self.needs is None:
60
60
  self.needs = []
61
+ else:
62
+ for i,need in enumerate(self.needs):
63
+ if not isinstance(need, tuple):
64
+ self.needs[i] = (need, False)
61
65
 
62
66
  async def do_run(self,
63
67
  runner,
@@ -65,7 +69,7 @@ class TaskNode(object):
65
69
  memento : Any = None) -> 'TaskDataResult':
66
70
  self._log.debug("--> do_run: %s" % self.name)
67
71
  changed = False
68
- for dep in self.needs:
72
+ for dep,_ in self.needs:
69
73
  changed |= dep.changed
70
74
 
71
75
  self.rundir = rundir
@@ -73,22 +77,30 @@ class TaskNode(object):
73
77
  # TODO: Form dep-map from inputs
74
78
 
75
79
  dep_m = {}
76
- for need in self.needs:
80
+ for need,block in self.needs:
77
81
  self._log.debug("dep %s dep_m: %s" % (need.name, str(dep_m)))
78
- for subdep in need.output.dep_m.keys():
79
- if subdep not in dep_m.keys():
80
- dep_m[subdep] = []
81
- dep_m[subdep].extend(need.output.dep_m[subdep])
82
+ if not block:
83
+ for subdep in need.output.dep_m.keys():
84
+ if subdep not in dep_m.keys():
85
+ dep_m[subdep] = []
86
+ for dep in need.output.dep_m[subdep]:
87
+ if dep not in dep_m[subdep]:
88
+ dep_m[subdep].append(dep)
82
89
  self._log.debug("input dep_m: %s %s" % (self.name, str(dep_m)))
83
90
 
84
91
  sorted = toposort.toposort(dep_m)
85
92
 
86
93
  in_params_m = {}
87
- for need in self.needs:
88
- for p in need.output.output:
89
- if p.src not in in_params_m.keys():
90
- in_params_m[p.src] = []
91
- in_params_m[p.src].append(p)
94
+ added_srcs = set()
95
+ for need,block in self.needs:
96
+ if not block:
97
+ for p in need.output.output:
98
+ # Avoid adding parameters from a single task more than once
99
+ if p.src not in added_srcs:
100
+ added_srcs.add(p.src)
101
+ if p.src not in in_params_m.keys():
102
+ in_params_m[p.src] = []
103
+ in_params_m[p.src].append(p)
92
104
 
93
105
  # in_params holds parameter sets ordered by dependency
94
106
  in_params = []
@@ -126,8 +138,6 @@ class TaskNode(object):
126
138
  if elem.find("${{") != -1:
127
139
  new_val = eval.eval(elem)
128
140
  value[i] = new_val
129
- else:
130
- raise Exception("Unhandled param type: %s" % str(value))
131
141
 
132
142
  input = TaskDataInput(
133
143
  name=self.name,
@@ -150,43 +160,28 @@ class TaskNode(object):
150
160
 
151
161
  # Pass-through all dependencies
152
162
  # Add an entry for ourselves
153
- dep_m[self.name] = list(need.name for need in self.needs)
163
+ dep_m[self.name] = list(need.name for need,_ in self.needs)
154
164
 
155
165
  if self.passthrough:
156
166
  self._log.debug("passthrough: %s" % self.name)
157
167
 
158
168
  if self.consumes is None and len(self.consumes):
159
169
  self._log.debug("Propagating all input parameters to output")
160
- for need in self.needs:
161
- output.extend(need.output.output)
170
+ for need,block in self.needs:
171
+ if not block:
172
+ output.extend(need.output.output)
162
173
  else:
163
174
  # Filter out parameter sets that were consumed
164
175
  self._log.debug("Propagating non-consumed input parameters to output")
165
176
  self._log.debug("consumes: %s" % str(self.consumes))
166
- for need in self.needs:
167
- for out in need.output.output:
168
- if not self._matches(out, self.consumes):
169
- self._log.debug("Propagating type %s from %s" % (
170
- getattr(out, "type", "<unknown>"),
171
- getattr(out, "src", "<unknown>")))
172
- output.append(out)
173
-
174
- # consumed = False
175
- # for c in self.consumes:
176
- # match = False
177
- # for k,v in c.items():
178
- # self._log.debug("k,v: %s,%s" % (k,v))
179
- # if hasattr(out, k):
180
- # self._log.debug("has attribute: %s" % str(getattr(out ,k)))
181
- # if getattr(out, k) == v:
182
- # self._log.debug("match")
183
- # match = True
184
- # break
185
- # if match:
186
- # consumed = True
187
- # break
188
-
189
- # if not consumed:
177
+ for need,block in self.needs:
178
+ if not block:
179
+ for out in need.output.output:
180
+ if not self._matches(out, self.consumes):
181
+ self._log.debug("Propagating type %s from %s" % (
182
+ getattr(out, "type", "<unknown>"),
183
+ getattr(out, "src", "<unknown>")))
184
+ output.append(out)
190
185
  else:
191
186
  self._log.debug("non-passthrough: %s (only local outputs propagated)" % self.name)
192
187
  # empty dependency map
@@ -194,8 +194,8 @@ class TaskSetRunner(TaskRunner):
194
194
  self._anon_tid += 1
195
195
 
196
196
  if task not in dep_m.keys():
197
- dep_m[task] = set(task.needs)
198
- for need in task.needs:
197
+ dep_m[task] = set(task[0] for task in task.needs)
198
+ for need,block in task.needs:
199
199
  self._buildDepMap(dep_m, need)
200
200
 
201
201
  @dc.dataclass
@@ -205,7 +205,7 @@ class SingleTaskRunner(TaskRunner):
205
205
  task : 'Task',
206
206
  memento : Any = None) -> 'TaskDataResult':
207
207
  changed = False
208
- for dep in task.needs:
208
+ for dep,_ in task.needs:
209
209
  changed |= dep.changed
210
210
 
211
211
  # TODO: create an evaluator for substituting param values
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.13862597957a1
3
+ Version: 0.0.1.13885203883a1
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
@@ -17,7 +17,7 @@ dv_flow/mgr/pkg_rgy.py,sha256=U5LgBsdCpVJ7tXjlTsn_Qjf9OoEEOjyWsYNsOecS2uQ,5337
17
17
  dv_flow/mgr/task.py,sha256=BmS0wd51l4tpTrsit3-ugCB5VGnwpMJNl0dfJfHS4DQ,5981
18
18
  dv_flow/mgr/task_ctor.py,sha256=YDYb5uW9Js7MnA8GqbYJljNCbeJFKGveZ2v-IJRgIa8,2221
19
19
  dv_flow/mgr/task_data.py,sha256=ysawiUcbQu-ImNSgU5LsfOWlBKdfBt_8juwSacnAqAQ,11437
20
- dv_flow/mgr/task_def.py,sha256=qdBEEHYVvYC4kBKHxcx-0wfHeQtyse3XnLCvbpAIAyg,1992
20
+ dv_flow/mgr/task_def.py,sha256=BJKZZE8yO_kcKaf36HnzTkhYaC0DPIya4IKlKNM4s5I,2080
21
21
  dv_flow/mgr/task_exec_data.py,sha256=-mh9G2-iq6ioB7v7QrHiQAOEwd_hDKhnVf2Mb_IHRtg,1483
22
22
  dv_flow/mgr/task_graph_builder.py,sha256=EYFsMZCDDHMEFWZOVSpPb7KBVE6N6XyL4KFzJVrPSPE,10106
23
23
  dv_flow/mgr/task_graph_runner.py,sha256=LZ5cTXLQlcK348AxTYKqfpsFFmxA3aseGfholvQW39s,2187
@@ -25,10 +25,10 @@ dv_flow/mgr/task_graph_runner_local.py,sha256=quAxmF1go2iVhBDieksg3brAZukIvpvF-8
25
25
  dv_flow/mgr/task_impl_data.py,sha256=jpO7kQ6AjYcOOfpgFIPCEYA1pQbVwFcIY_SY3Q53eGk,1163
26
26
  dv_flow/mgr/task_listener_log.py,sha256=b7caUHERGkN6eT8IinBJTdZpwASUs8xAqDmtEymMKzQ,3529
27
27
  dv_flow/mgr/task_memento.py,sha256=CV3d1J4ADhMpqvYPfWvUI7duSFCbLEzY41y2GZBHIhM,1101
28
- dv_flow/mgr/task_node.py,sha256=Xk-q3gYkFer2Brse_xXNC3SfIC_oBMFBm2NBf_wmlN8,15066
28
+ dv_flow/mgr/task_node.py,sha256=xPCarkVSj9rZ1v12WiHtMOe-nMKHbkaUpP9-edQOXek,14828
29
29
  dv_flow/mgr/task_output.py,sha256=ZwyvwnYj_gHOEFAEOH3m24Xfc4Cn77hb1j7LkX8_3C4,1086
30
30
  dv_flow/mgr/task_params_ctor.py,sha256=BPkbnoCtzhCxc1g8CJ6VimCcm5UAu92PXeDMhQ4lYsQ,1957
31
- dv_flow/mgr/task_runner.py,sha256=t0n-9sJ_DyJ3uQDjeou1gpoSLg29zQ3jAYHfOudb7AI,8762
31
+ dv_flow/mgr/task_runner.py,sha256=TB4feCEItxufUyyBSwNNY3OkQ0yjSO0fUfjga0u7rsg,8790
32
32
  dv_flow/mgr/type.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  dv_flow/mgr/type_def.py,sha256=NDeyplKrPnWwEv4yHkhXEMK9d9j39b5MOeLB-1Mchqo,1095
34
34
  dv_flow/mgr/util.py,sha256=BLp-25Ph9roqo1O3VHI5sKhwxQ0wUU7znFwcSKt0hpA,1442
@@ -40,9 +40,9 @@ dv_flow/mgr/std/fileset.py,sha256=5IxS6T-x0wzA6fdEQcfHZ9kNP8IpH9hfJ3UMhL4A6Iw,39
40
40
  dv_flow/mgr/std/flow.dv,sha256=CcQOvSfT0JgsaNf7dH8gfbG8lPvQQXw9W9gqrT52Pw0,2025
41
41
  dv_flow/mgr/std/message.py,sha256=_Gox9oBzL9ZYG1JfJ-WYPXojVLqGNaKxZ9tpLVT0LO0,1035
42
42
  dv_flow/mgr/std/task_null.py,sha256=dw6LXBXVwth6gLPeduDvlz5znAhcVpDH8r1DticD-0w,1041
43
- dv_flow_mgr-0.0.1.13862597957a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
44
- dv_flow_mgr-0.0.1.13862597957a1.dist-info/METADATA,sha256=fg7IS51Mhq7PUfBEkJHau71mbQfQpv8PjdJBIqPLfqA,13314
45
- dv_flow_mgr-0.0.1.13862597957a1.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
46
- dv_flow_mgr-0.0.1.13862597957a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
47
- dv_flow_mgr-0.0.1.13862597957a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
48
- dv_flow_mgr-0.0.1.13862597957a1.dist-info/RECORD,,
43
+ dv_flow_mgr-0.0.1.13885203883a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
44
+ dv_flow_mgr-0.0.1.13885203883a1.dist-info/METADATA,sha256=lH34dG2edpLv69XsxqBilTInQ_C4sfWeBkvy_3xM-Cw,13314
45
+ dv_flow_mgr-0.0.1.13885203883a1.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
46
+ dv_flow_mgr-0.0.1.13885203883a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
47
+ dv_flow_mgr-0.0.1.13885203883a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
48
+ dv_flow_mgr-0.0.1.13885203883a1.dist-info/RECORD,,