dv-flow-mgr 0.0.1.13689116055a1__py3-none-any.whl → 0.0.1.13703952342a1__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/package_def.py +4 -0
- dv_flow/mgr/task_def.py +2 -0
- dv_flow/mgr/task_node.py +43 -3
- {dv_flow_mgr-0.0.1.13689116055a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/METADATA +3 -1
- {dv_flow_mgr-0.0.1.13689116055a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/RECORD +9 -9
- {dv_flow_mgr-0.0.1.13689116055a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/LICENSE +0 -0
- {dv_flow_mgr-0.0.1.13689116055a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/WHEEL +0 -0
- {dv_flow_mgr-0.0.1.13689116055a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-0.0.1.13689116055a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/top_level.txt +0 -0
dv_flow/mgr/package_def.py
CHANGED
@@ -135,6 +135,7 @@ class PackageDef(BaseModel):
|
|
135
135
|
base_params : BaseModel = None
|
136
136
|
callable = None
|
137
137
|
passthrough = task.passthrough
|
138
|
+
consumes = task.consumes
|
138
139
|
needs = [] if task.needs is None else task.needs.copy()
|
139
140
|
|
140
141
|
if task.uses is not None:
|
@@ -180,6 +181,7 @@ class PackageDef(BaseModel):
|
|
180
181
|
srcdir=srcdir,
|
181
182
|
paramT=paramT, # TODO: need to determine the parameter type
|
182
183
|
passthrough=passthrough,
|
184
|
+
consumes=consumes,
|
183
185
|
needs=needs, # TODO: need to determine the needs
|
184
186
|
task=callable)
|
185
187
|
elif base_ctor_t is not None:
|
@@ -189,6 +191,7 @@ class PackageDef(BaseModel):
|
|
189
191
|
srcdir=srcdir,
|
190
192
|
paramT=paramT, # TODO: need to determine the parameter type
|
191
193
|
passthrough=passthrough,
|
194
|
+
consumes=consumes,
|
192
195
|
needs=needs,
|
193
196
|
uses=base_ctor_t)
|
194
197
|
else:
|
@@ -198,6 +201,7 @@ class PackageDef(BaseModel):
|
|
198
201
|
srcdir=srcdir,
|
199
202
|
paramT=paramT,
|
200
203
|
passthrough=passthrough,
|
204
|
+
consumes=consumes,
|
201
205
|
needs=needs,
|
202
206
|
task=TaskNull)
|
203
207
|
|
dv_flow/mgr/task_def.py
CHANGED
@@ -42,6 +42,8 @@ class TaskDef(BaseModel):
|
|
42
42
|
needs : List[Union[str,TaskSpec]] = dc.Field(default_factory=list, alias="needs")
|
43
43
|
params: Dict[str,Union[str,ParamDef]] = dc.Field(default_factory=dict, alias="with")
|
44
44
|
passthrough: bool = dc.Field(default=False)
|
45
|
+
consumes : List[Any] = dc.Field(default_factory=list)
|
46
|
+
|
45
47
|
# out: List[TaskOutput] = dc.Field(default_factory=list)
|
46
48
|
|
47
49
|
def copy(self) -> 'TaskDef':
|
dv_flow/mgr/task_node.py
CHANGED
@@ -24,6 +24,7 @@ class TaskNode(object):
|
|
24
24
|
# Runtime fields -- these get populated during execution
|
25
25
|
changed : bool = False
|
26
26
|
passthrough : bool = False
|
27
|
+
consumes : List[Any] = dc.field(default_factory=list)
|
27
28
|
needs : List['TaskNode'] = dc.field(default_factory=list)
|
28
29
|
rundir : str = dc.field(default=None)
|
29
30
|
output : TaskDataOutput = dc.field(default=None)
|
@@ -119,8 +120,31 @@ class TaskNode(object):
|
|
119
120
|
# Add an entry for ourselves
|
120
121
|
dep_m[self.name] = list(need.name for need in self.needs)
|
121
122
|
|
122
|
-
|
123
|
-
|
123
|
+
if self.consumes is None and len(self.consumes):
|
124
|
+
self._log.debug("Propagating all input parameters to output")
|
125
|
+
for need in self.needs:
|
126
|
+
output.extend(need.output.output)
|
127
|
+
else:
|
128
|
+
# Filter out parameter sets that were consumed
|
129
|
+
self._log.debug("Propagating non-consumed input parameters to output")
|
130
|
+
for need in self.needs:
|
131
|
+
for out in need.output.output:
|
132
|
+
consumed = False
|
133
|
+
for c in self.consumes:
|
134
|
+
match = False
|
135
|
+
for k,v in c.items():
|
136
|
+
if hasattr(out, k) and getattr(out, k) == v:
|
137
|
+
match = True
|
138
|
+
break
|
139
|
+
if match:
|
140
|
+
consumed = True
|
141
|
+
break
|
142
|
+
|
143
|
+
if not consumed:
|
144
|
+
self._log.debug("Propagating type %s from %s" % (
|
145
|
+
getattr(out, "type", "<unknown>"),
|
146
|
+
getattr(out, "src", "<unknown>")))
|
147
|
+
output.append(out)
|
124
148
|
else:
|
125
149
|
# empty dependency map
|
126
150
|
dep_m = {
|
@@ -156,6 +180,7 @@ class TaskNodeCtor(object):
|
|
156
180
|
srcdir : str
|
157
181
|
paramT : Any
|
158
182
|
passthrough : bool
|
183
|
+
consumes : List[Any]
|
159
184
|
|
160
185
|
def __call__(self,
|
161
186
|
name=None,
|
@@ -163,6 +188,7 @@ class TaskNodeCtor(object):
|
|
163
188
|
params=None,
|
164
189
|
needs=None,
|
165
190
|
passthrough=None,
|
191
|
+
consumes=None,
|
166
192
|
**kwargs):
|
167
193
|
"""Convenience method for direct creation of tasks"""
|
168
194
|
if params is None:
|
@@ -177,6 +203,16 @@ class TaskNodeCtor(object):
|
|
177
203
|
node.passthrough = passthrough
|
178
204
|
else:
|
179
205
|
node.passthrough = self.passthrough
|
206
|
+
if consumes is not None:
|
207
|
+
if node.consumes is None:
|
208
|
+
node.consumes = consumes
|
209
|
+
else:
|
210
|
+
node.consumes.extend(consumes)
|
211
|
+
else:
|
212
|
+
if node.consumes is None:
|
213
|
+
node.consumes = self.consumes
|
214
|
+
else:
|
215
|
+
node.consumes.extend(consumes)
|
180
216
|
|
181
217
|
return node
|
182
218
|
|
@@ -240,6 +276,7 @@ class TaskNodeCtorProxy(TaskNodeCtorDefBase):
|
|
240
276
|
srcdir = self.srcdir
|
241
277
|
node = self.uses.mkTaskNode(params=params, srcdir=srcdir, name=name, needs=needs)
|
242
278
|
node.passthrough = self.passthrough
|
279
|
+
node.consumes = self.consumes
|
243
280
|
return node
|
244
281
|
|
245
282
|
@dc.dataclass
|
@@ -252,6 +289,7 @@ class TaskNodeCtorTask(TaskNodeCtorDefBase):
|
|
252
289
|
|
253
290
|
node = TaskNode(name, srcdir, params, self.task, needs=needs)
|
254
291
|
node.passthrough = self.passthrough
|
292
|
+
node.consumes = self.consumes
|
255
293
|
node.task = self.task
|
256
294
|
|
257
295
|
return node
|
@@ -265,6 +303,7 @@ class TaskNodeCtorWrapper(TaskNodeCtor):
|
|
265
303
|
def mkTaskNode(self, params, srcdir=None, name=None, needs=None) -> TaskNode:
|
266
304
|
node = TaskNode(name, srcdir, params, self.T, needs=needs)
|
267
305
|
node.passthrough = self.passthrough
|
306
|
+
node.consumes = self.consumes
|
268
307
|
return node
|
269
308
|
|
270
309
|
def mkTaskParams(self, params : Dict = None) -> Any:
|
@@ -294,7 +333,7 @@ class TaskNodeCtorWrapper(TaskNodeCtor):
|
|
294
333
|
setattr(obj, key, value)
|
295
334
|
return obj
|
296
335
|
|
297
|
-
def task(paramT,passthrough=False):
|
336
|
+
def task(paramT,passthrough=False,consumes=None):
|
298
337
|
"""Decorator to wrap a task method as a TaskNodeCtor"""
|
299
338
|
def wrapper(T):
|
300
339
|
task_mname = T.__module__
|
@@ -304,6 +343,7 @@ def task(paramT,passthrough=False):
|
|
304
343
|
srcdir=os.path.dirname(os.path.abspath(task_module.__file__)),
|
305
344
|
paramT=paramT,
|
306
345
|
passthrough=passthrough,
|
346
|
+
consumes=consumes,
|
307
347
|
T=T)
|
308
348
|
return ctor
|
309
349
|
return wrapper
|
{dv_flow_mgr-0.0.1.13689116055a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: dv-flow-mgr
|
3
|
-
Version: 0.0.1.
|
3
|
+
Version: 0.0.1.13703952342a1
|
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
|
@@ -206,7 +206,9 @@ License: Apache License
|
|
206
206
|
limitations under the License.
|
207
207
|
|
208
208
|
License-File: LICENSE
|
209
|
+
Requires-Dist: jq
|
209
210
|
Requires-Dist: pydantic
|
210
211
|
Requires-Dist: pyyaml
|
212
|
+
Requires-Dist: rich
|
211
213
|
Requires-Dist: toposort
|
212
214
|
Requires-Dist: svdep
|
{dv_flow_mgr-0.0.1.13689116055a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/RECORD
RENAMED
@@ -7,7 +7,7 @@ dv_flow/mgr/fileset.py,sha256=ewyjKLzuOecZg0vtabN_UkbzNEnk1sXgrH8uDyeKB60,1184
|
|
7
7
|
dv_flow/mgr/fragment_def.py,sha256=cyzp1XeWtNOaagScmeS-BPsoXj9j2LTBbKq5ZUioz8I,1641
|
8
8
|
dv_flow/mgr/out,sha256=d8GGBi3J43fhdLBlnsUbzBfRe0TD0QTP3nOTz54l2bI,200
|
9
9
|
dv_flow/mgr/package.py,sha256=878twhPD-E1pFlDNUtuyeFEgJ_Y89b560og4St-Iwrs,1679
|
10
|
-
dv_flow/mgr/package_def.py,sha256=
|
10
|
+
dv_flow/mgr/package_def.py,sha256=q8lT8MlDF7nDYTBqtPVQSXdGeN06kceZ3qBH7WhP0Bs,14917
|
11
11
|
dv_flow/mgr/package_import_spec.py,sha256=ah3r15v5Jdub2poc3sgi6Uar1L3oGoYsCPPNiOHV-a4,1760
|
12
12
|
dv_flow/mgr/param.py,sha256=3BY-ucig6JRw73FhjyJQL-vpd57qhAzixgZ8I5FoUpw,553
|
13
13
|
dv_flow/mgr/param_def.py,sha256=gLua-EQiY8V2CFX-2svLRIlrs8PEeGh4-EPtn4a2Mng,712
|
@@ -17,7 +17,7 @@ dv_flow/mgr/pkg_rgy.py,sha256=2R_EaeBDJn5qUq9DzSnLc37wUP36MWSv-p0LgUjJRAg,4471
|
|
17
17
|
dv_flow/mgr/task.py,sha256=kLQSvnVwj9ROIDtxq8lLu-4mJizTxOqvUeogmgN6QAA,5976
|
18
18
|
dv_flow/mgr/task_ctor.py,sha256=hlfl-UVvyjzLFN6D0Oel9eBs0xUQPqCX7gQ0uEHoL7o,1382
|
19
19
|
dv_flow/mgr/task_data.py,sha256=F0X-e0IHTh06Z0F67TWIUPKuJYf6JPzZyMPrDzOJvK0,11409
|
20
|
-
dv_flow/mgr/task_def.py,sha256=
|
20
|
+
dv_flow/mgr/task_def.py,sha256=t5_oDTngtEPRdipQnuJ2ofJrpva1kTecHl4w4mI4GXE,1982
|
21
21
|
dv_flow/mgr/task_exec_data.py,sha256=aT__kmVmNxqnS_GbTRS1vrYgKiv8cH-HUSmRb6YYKsI,640
|
22
22
|
dv_flow/mgr/task_graph_builder.py,sha256=fEqJalmDDDzayJbuyDWAcmumDGK3XgnZmcScoBY8HGg,7887
|
23
23
|
dv_flow/mgr/task_graph_runner.py,sha256=jUGI49QvxUCfQoKQDDk2psbeapIcCg72qNOW1JipHzM,2182
|
@@ -25,7 +25,7 @@ dv_flow/mgr/task_graph_runner_local.py,sha256=OrydPwtQ8E7hYWvSXx0h7lI3nfUNFyklUL
|
|
25
25
|
dv_flow/mgr/task_impl_data.py,sha256=bFPijoKrh9x7fZN2DsvRJp0UHo-gGM0VjtDQISyfhFk,321
|
26
26
|
dv_flow/mgr/task_listener_log.py,sha256=u7hm8Q8ZVCIY25mNQEI3DIgSMJ_zJ5nbvqukGMXyido,934
|
27
27
|
dv_flow/mgr/task_memento.py,sha256=C7VTQpBhDEoYuDmE6YTM-6TLMLnqHp6Y0Vat1aTgtCs,1096
|
28
|
-
dv_flow/mgr/task_node.py,sha256=
|
28
|
+
dv_flow/mgr/task_node.py,sha256=leuQC3IPyZQsJKQwKBTQgvstXxH7Fk10eDINoaK7718,12212
|
29
29
|
dv_flow/mgr/task_output.py,sha256=dkJhhNRFGFQSkVsw_bGirK0_0ghTxBYq1LjRMZCVWnA,245
|
30
30
|
dv_flow/mgr/task_params_ctor.py,sha256=aXgB8o9xFPjaEjGW_xYkEC0N0apzGzGUPDj7g2ZLvus,1112
|
31
31
|
dv_flow/mgr/task_runner.py,sha256=Ky10BWKy_NhvJp2nsbB0pyS8n1K0pKatBEmTdD1ZKOc,7071
|
@@ -39,9 +39,9 @@ dv_flow/mgr/std/fileset.py,sha256=abHgTxz25FD1ep5QXlCZKt4gCyfplJsjx6LyfQ11f_Q,26
|
|
39
39
|
dv_flow/mgr/std/flow.dv,sha256=jlFOh3xVECOzHws7x6YvJ9eCIGHM5gsPeEnheiGOukY,1553
|
40
40
|
dv_flow/mgr/std/message.py,sha256=T8Ye44784rD6CT2qIAP5SD7sKPdAlGMFimc4IaPCxxE,200
|
41
41
|
dv_flow/mgr/std/task_null.py,sha256=UKwUnqwFPBY8BO44ZAPcgehQB59kHZFa1qyZc1TwUqE,196
|
42
|
-
dv_flow_mgr-0.0.1.
|
43
|
-
dv_flow_mgr-0.0.1.
|
44
|
-
dv_flow_mgr-0.0.1.
|
45
|
-
dv_flow_mgr-0.0.1.
|
46
|
-
dv_flow_mgr-0.0.1.
|
47
|
-
dv_flow_mgr-0.0.1.
|
42
|
+
dv_flow_mgr-0.0.1.13703952342a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
43
|
+
dv_flow_mgr-0.0.1.13703952342a1.dist-info/METADATA,sha256=N1CO707jpDo9FEXJ2Xujl7IGNo4Bt8LRW1NrpJnK47k,13314
|
44
|
+
dv_flow_mgr-0.0.1.13703952342a1.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
45
|
+
dv_flow_mgr-0.0.1.13703952342a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
|
46
|
+
dv_flow_mgr-0.0.1.13703952342a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
|
47
|
+
dv_flow_mgr-0.0.1.13703952342a1.dist-info/RECORD,,
|
{dv_flow_mgr-0.0.1.13689116055a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/LICENSE
RENAMED
File without changes
|
{dv_flow_mgr-0.0.1.13689116055a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|