dv-flow-mgr 0.0.1.13862597957a1__py3-none-any.whl → 0.0.1.13867752514a1__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 = []
@@ -150,43 +162,28 @@ class TaskNode(object):
150
162
 
151
163
  # Pass-through all dependencies
152
164
  # Add an entry for ourselves
153
- dep_m[self.name] = list(need.name for need in self.needs)
165
+ dep_m[self.name] = list(need.name for need,_ in self.needs)
154
166
 
155
167
  if self.passthrough:
156
168
  self._log.debug("passthrough: %s" % self.name)
157
169
 
158
170
  if self.consumes is None and len(self.consumes):
159
171
  self._log.debug("Propagating all input parameters to output")
160
- for need in self.needs:
161
- output.extend(need.output.output)
172
+ for need,block in self.needs:
173
+ if not block:
174
+ output.extend(need.output.output)
162
175
  else:
163
176
  # Filter out parameter sets that were consumed
164
177
  self._log.debug("Propagating non-consumed input parameters to output")
165
178
  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:
179
+ for need,block in self.needs:
180
+ if not block:
181
+ for out in need.output.output:
182
+ if not self._matches(out, self.consumes):
183
+ self._log.debug("Propagating type %s from %s" % (
184
+ getattr(out, "type", "<unknown>"),
185
+ getattr(out, "src", "<unknown>")))
186
+ output.append(out)
190
187
  else:
191
188
  self._log.debug("non-passthrough: %s (only local outputs propagated)" % self.name)
192
189
  # 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.13867752514a1
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=OMw2K63HEm5Oh43uW830mEV2vRObC7B4vS44sJ2T_gA,14919
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.13867752514a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
44
+ dv_flow_mgr-0.0.1.13867752514a1.dist-info/METADATA,sha256=Jpb6C6pbqvv6xPfxetNkW3sYHKrjmK8GlKm7DXeuKUo,13314
45
+ dv_flow_mgr-0.0.1.13867752514a1.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
46
+ dv_flow_mgr-0.0.1.13867752514a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
47
+ dv_flow_mgr-0.0.1.13867752514a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
48
+ dv_flow_mgr-0.0.1.13867752514a1.dist-info/RECORD,,