dv-flow-mgr 0.0.1.12703462647a1__py3-none-any.whl → 0.0.1.12761553329a1__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/fragment_def.py +2 -2
- dv_flow_mgr/session.py +2 -1
- dv_flow_mgr/task.py +21 -1
- dv_flow_mgr/task_data.py +21 -4
- dv_flow_mgr/task_def.py +3 -3
- dv_flow_mgr/tasklib/hdl/sim/vcs_task_sim_image.py +1 -1
- dv_flow_mgr/tasklib/hdl/sim/vcs_task_sim_run.py +1 -1
- dv_flow_mgr/tasklib/hdl/sim/vl_task_sim_image.py +27 -3
- dv_flow_mgr/tasklib/hdl/sim/vlt_task_sim_run.py +1 -1
- dv_flow_mgr/tasklib/std/task_fileset.py +2 -1
- {dv_flow_mgr-0.0.1.12703462647a1.dist-info → dv_flow_mgr-0.0.1.12761553329a1.dist-info}/METADATA +1 -1
- {dv_flow_mgr-0.0.1.12703462647a1.dist-info → dv_flow_mgr-0.0.1.12761553329a1.dist-info}/RECORD +16 -16
- {dv_flow_mgr-0.0.1.12703462647a1.dist-info → dv_flow_mgr-0.0.1.12761553329a1.dist-info}/LICENSE +0 -0
- {dv_flow_mgr-0.0.1.12703462647a1.dist-info → dv_flow_mgr-0.0.1.12761553329a1.dist-info}/WHEEL +0 -0
- {dv_flow_mgr-0.0.1.12703462647a1.dist-info → dv_flow_mgr-0.0.1.12761553329a1.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-0.0.1.12703462647a1.dist-info → dv_flow_mgr-0.0.1.12761553329a1.dist-info}/top_level.txt +0 -0
dv_flow_mgr/fragment_def.py
CHANGED
@@ -22,14 +22,14 @@
|
|
22
22
|
import pydantic.dataclasses as dc
|
23
23
|
import json
|
24
24
|
from pydantic import BaseModel
|
25
|
-
from typing import Any, Dict, List
|
25
|
+
from typing import Any, Dict, List, Union
|
26
26
|
from .package import Package
|
27
27
|
from .package_import_spec import PackageImportSpec
|
28
28
|
from .task_def import TaskDef
|
29
29
|
|
30
30
|
class FragmentDef(BaseModel):
|
31
31
|
tasks : List[TaskDef] = dc.Field(default_factory=list)
|
32
|
-
imports : List[
|
32
|
+
imports : List[Union[str,PackageImportSpec]] = dc.Field(default_factory=list, alias="imports")
|
33
33
|
fragments: List[str] = dc.Field(default_factory=list)
|
34
34
|
|
35
35
|
basedir : str = None
|
dv_flow_mgr/session.py
CHANGED
@@ -196,7 +196,7 @@ class Session(object):
|
|
196
196
|
for file in os.listdir(dir):
|
197
197
|
if os.path.isdir(os.path.join(dir, file)):
|
198
198
|
self._load_fragment_dir(pkg, os.path.join(dir, file), file_s)
|
199
|
-
elif os.path.isfile(os.path.join(dir, file)):
|
199
|
+
elif os.path.isfile(os.path.join(dir, file)) and file == "flow.yaml":
|
200
200
|
self._load_fragment_file(pkg, os.path.join(dir, file), file_s)
|
201
201
|
|
202
202
|
def _load_fragment_file(self, pkg : PackageDef, file : str, file_s : List[str]):
|
@@ -207,6 +207,7 @@ class Session(object):
|
|
207
207
|
|
208
208
|
with open(file, "r") as fp:
|
209
209
|
doc = yaml.load(fp, Loader=yaml.FullLoader)
|
210
|
+
print("doc: %s" % str(doc), flush=True)
|
210
211
|
if "fragment" in doc.keys():
|
211
212
|
# Merge the package definition
|
212
213
|
frag = FragmentDef(**(doc["fragment"]))
|
dv_flow_mgr/task.py
CHANGED
@@ -152,15 +152,35 @@ class Task(object):
|
|
152
152
|
awaitables = [dep.waitOutput() for dep in self.depends]
|
153
153
|
deps_o = await asyncio.gather(*awaitables)
|
154
154
|
|
155
|
+
# Merge filesets. A fileset with the same
|
155
156
|
print("deps_o: %s" % str(deps_o))
|
156
157
|
|
158
|
+
# First, merge the dep maps of all the inputs
|
159
|
+
deps_m = self.depends[0].output.deps.copy()
|
160
|
+
for deps in map(lambda d: d.deps, self.depends[1:]):
|
161
|
+
for k,v in deps.items():
|
162
|
+
if k in deps_m:
|
163
|
+
deps_m[k].add(v)
|
164
|
+
else:
|
165
|
+
deps_m[k] = set(v)
|
166
|
+
|
167
|
+
print("deps_m: %s" % str(deps_m))
|
168
|
+
|
157
169
|
# Merge the output of the dependencies into a single input data
|
158
170
|
# if len(self.depends) > 1:
|
159
171
|
# raise Exception("TODO: handle >1 inputs")
|
160
172
|
|
173
|
+
# Now that we have a clean input object, we need
|
174
|
+
# to build the dep map
|
175
|
+
|
161
176
|
input = self.depends[0].output.copy()
|
162
177
|
else:
|
163
178
|
input = TaskData()
|
179
|
+
|
180
|
+
|
181
|
+
|
182
|
+
# Mark the source of this data as being this task
|
183
|
+
input.src = self.name
|
164
184
|
|
165
185
|
if not os.path.isdir(self.rundir):
|
166
186
|
os.makedirs(self.rundir)
|
@@ -196,7 +216,7 @@ class Task(object):
|
|
196
216
|
|
197
217
|
def setOutput(self, output : TaskData):
|
198
218
|
self.output_set = True
|
199
|
-
output.
|
219
|
+
output.src = self.name
|
200
220
|
self.output = output
|
201
221
|
self.output_ev.set()
|
202
222
|
|
dv_flow_mgr/task_data.py
CHANGED
@@ -19,15 +19,31 @@
|
|
19
19
|
#* Author:
|
20
20
|
#*
|
21
21
|
#****************************************************************************
|
22
|
+
import enum
|
22
23
|
import pydantic.dataclasses as dc
|
23
24
|
from pydantic import BaseModel
|
24
25
|
from typing import Any, Dict, Set, List, Tuple
|
25
26
|
from .fileset import FileSet
|
26
27
|
|
28
|
+
class TaskDataParamOpE(enum.Enum):
|
29
|
+
Set = enum.auto()
|
30
|
+
Append = enum.auto()
|
31
|
+
Prepend = enum.auto()
|
32
|
+
PathAppend = enum.auto()
|
33
|
+
PathPrepend = enum.auto()
|
34
|
+
|
35
|
+
class TaskDataParamOp(BaseModel):
|
36
|
+
op : TaskDataParamOpE
|
37
|
+
value : Any
|
38
|
+
|
39
|
+
class TaskDataParam(BaseModel):
|
40
|
+
value : Any
|
41
|
+
ops : List[TaskDataParamOp] = dc.Field(default_factory=list)
|
42
|
+
|
27
43
|
class TaskData(BaseModel):
|
28
|
-
|
44
|
+
src : str = None
|
29
45
|
params : Dict[str,Any] = dc.Field(default_factory=dict)
|
30
|
-
deps :
|
46
|
+
deps : Dict[str,Set[str]] = dc.Field(default_factory=dict)
|
31
47
|
changed : bool = False
|
32
48
|
|
33
49
|
def hasParam(self, name: str) -> bool:
|
@@ -40,11 +56,12 @@ class TaskData(BaseModel):
|
|
40
56
|
self.params[name] = value
|
41
57
|
|
42
58
|
def addFileSet(self, fs : FileSet):
|
59
|
+
fs.src = self.src
|
43
60
|
if "filesets" not in self.params:
|
44
61
|
self.params["filesets"] = []
|
45
62
|
self.params["filesets"].append(fs)
|
46
63
|
|
47
|
-
def getFileSets(self, type
|
64
|
+
def getFileSets(self, type=None) -> List[FileSet]:
|
48
65
|
ret = []
|
49
66
|
|
50
67
|
if "filesets" in self.params:
|
@@ -56,7 +73,7 @@ class TaskData(BaseModel):
|
|
56
73
|
|
57
74
|
def copy(self) -> 'TaskData':
|
58
75
|
ret = TaskData()
|
59
|
-
ret.
|
76
|
+
ret.src = self.src
|
60
77
|
ret.params = self.params.copy()
|
61
78
|
for d in self.deps:
|
62
79
|
ret.deps.append(d.clone())
|
dv_flow_mgr/task_def.py
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
#****************************************************************************
|
22
22
|
import pydantic.dataclasses as dc
|
23
23
|
from pydantic import BaseModel
|
24
|
-
from typing import Any, Dict, List, Tuple
|
24
|
+
from typing import Any, Dict, List, Union, Tuple
|
25
25
|
from .task import Task
|
26
26
|
|
27
27
|
@dc.dataclass
|
@@ -32,8 +32,8 @@ class TaskSpec(object):
|
|
32
32
|
class TaskDef(BaseModel):
|
33
33
|
"""Holds definition information (ie the YAML view) for a task"""
|
34
34
|
name : str
|
35
|
-
type :
|
36
|
-
depends : List[
|
35
|
+
type : Union[str,TaskSpec] = dc.Field(default_factory=list)
|
36
|
+
depends : List[Union[str,TaskSpec]] = dc.Field(default_factory=list, alias="needs")
|
37
37
|
params: Dict[str,Any] = dc.Field(default_factory=dict, alias="with")
|
38
38
|
|
39
39
|
def copy(self) -> 'TaskDef':
|
@@ -15,7 +15,7 @@ from svdep import FileCollection, TaskCheckUpToDate, TaskBuildFileCollection
|
|
15
15
|
class TaskVcsSimImage(VlTaskSimImage):
|
16
16
|
|
17
17
|
def getRefTime(self):
|
18
|
-
if os.path.
|
18
|
+
if os.path.isfile(os.path.join(self.rundir, 'simv')):
|
19
19
|
return os.path.getmtime(os.path.join(self.rundir, 'simv'))
|
20
20
|
else:
|
21
21
|
raise Exception
|
@@ -3,6 +3,7 @@ import fnmatch
|
|
3
3
|
import dataclasses
|
4
4
|
import shutil
|
5
5
|
import pydantic.dataclasses as dc
|
6
|
+
from toposort import toposort
|
6
7
|
from ....fileset import FileSet
|
7
8
|
from ....package import TaskCtor
|
8
9
|
from ....task import Task, TaskParams, TaskCtorT
|
@@ -31,9 +32,8 @@ class VlTaskSimImage(Task):
|
|
31
32
|
incdirs = []
|
32
33
|
memento = ex_memento
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
files.append(os.path.join(vl_filesets[0].basedir, file))
|
35
|
+
|
36
|
+
self._gatherSvSources(files, incdirs, input)
|
37
37
|
|
38
38
|
if not in_changed:
|
39
39
|
try:
|
@@ -61,6 +61,30 @@ class VlTaskSimImage(Task):
|
|
61
61
|
|
62
62
|
self.setMemento(memento)
|
63
63
|
return output
|
64
|
+
|
65
|
+
def _gatherSvSources(self, files, incdirs, input):
|
66
|
+
# input must represent dependencies for all tasks related to filesets
|
67
|
+
# references must support transitivity
|
68
|
+
|
69
|
+
vl_filesets = input.getFileSets(("verilogSource", "systemVerilogSource"))
|
70
|
+
fs_tasks = [fs.src for fs in vl_filesets]
|
71
|
+
|
72
|
+
# Want dependencies just for the filesets
|
73
|
+
# - key is the task associated with a filelist
|
74
|
+
# - deps is the dep-set of the on the incoming
|
75
|
+
#
|
76
|
+
# -> Send output set of dependencies
|
77
|
+
# - Task -> deps map
|
78
|
+
# "task" : ["dep1", "dep2", ...],
|
79
|
+
# "task2" :
|
80
|
+
# - All tasks are represented in the map
|
81
|
+
# -> Assume projects will often flatten before exporting
|
82
|
+
|
83
|
+
# Sort the deps
|
84
|
+
order = list(toposort(input.deps))
|
85
|
+
|
86
|
+
print("order: %s" % str(order))
|
87
|
+
|
64
88
|
|
65
89
|
|
66
90
|
class VlTaskSimImageParams(TaskParams):
|
@@ -12,8 +12,9 @@ from typing import List, Tuple
|
|
12
12
|
class TaskFileSet(Task):
|
13
13
|
|
14
14
|
async def run(self, input : TaskData) -> TaskData:
|
15
|
-
print("run: %s: base=%s type=%s include=%s" % (
|
15
|
+
print("TaskFileSet run: %s: basedir=%s, base=%s type=%s include=%s" % (
|
16
16
|
self.name,
|
17
|
+
self.basedir,
|
17
18
|
self.params.base, self.params.type, str(self.params.include)
|
18
19
|
))
|
19
20
|
|
{dv_flow_mgr-0.0.1.12703462647a1.dist-info → dv_flow_mgr-0.0.1.12761553329a1.dist-info}/RECORD
RENAMED
@@ -2,15 +2,15 @@ dv_flow_mgr/__init__.py,sha256=GLfYxZONxJNNUplfmlsXrcycJ2VhTc8gvXN6qdlH7kg,97
|
|
2
2
|
dv_flow_mgr/__main__.py,sha256=4xXA4XCqLELlIak6bs-H6rRHp2URucipHPvCiVdR01c,513
|
3
3
|
dv_flow_mgr/fileset.py,sha256=89knoTNsDF85QJwrctLiM6ryqHS1oxW25Gd5jgpX-IQ,1123
|
4
4
|
dv_flow_mgr/flow.py,sha256=UdgJOIqBS2wTRpO-sNWCCqO9oQFxDfGPGVD0r42aTrA,1562
|
5
|
-
dv_flow_mgr/fragment_def.py,sha256=
|
5
|
+
dv_flow_mgr/fragment_def.py,sha256=p5i6ONtBWlDHTBFsduu3Z36_76Bn8PCIylp_xoZ7jfQ,1552
|
6
6
|
dv_flow_mgr/package.py,sha256=jFhXgKDEYSRfs_VRUjKY4C7KScQfmrNLEXQgtWKaBfI,2767
|
7
7
|
dv_flow_mgr/package_def.py,sha256=Js8bZj8bSmJQ6Wk9xAhIBJScNGJOHNbXNhw_zkDVU5w,3834
|
8
8
|
dv_flow_mgr/package_import_spec.py,sha256=bStPa727wAKMcixydVY1Ht6ylzXsSMy2K31HWPXhc9k,921
|
9
9
|
dv_flow_mgr/parameters.py,sha256=kUjRss5VtMMz5eL3-Z_M6BS-wFs7MhQu3ANXO54UPo0,896
|
10
|
-
dv_flow_mgr/session.py,sha256=
|
11
|
-
dv_flow_mgr/task.py,sha256=
|
12
|
-
dv_flow_mgr/task_data.py,sha256=
|
13
|
-
dv_flow_mgr/task_def.py,sha256=
|
10
|
+
dv_flow_mgr/session.py,sha256=sYRyTojsfPFZOGu4mz9yNTX6ESNye0i5szgj5QVE-Pk,10802
|
11
|
+
dv_flow_mgr/task.py,sha256=ZTuSulc6lBLcTByD6gQjmbaJqqL1c1mlVtP84iLrLbE,7973
|
12
|
+
dv_flow_mgr/task_data.py,sha256=32rgwPxSthIjNbzbXK2sZoPo6Jedio_L54Qibu65fYk,2962
|
13
|
+
dv_flow_mgr/task_def.py,sha256=Yjw1Q-bnbi7Ct5X1PriMMNJ6i4TBVFWrO8BTnipz9hg,1532
|
14
14
|
dv_flow_mgr/task_memento.py,sha256=C7VTQpBhDEoYuDmE6YTM-6TLMLnqHp6Y0Vat1aTgtCs,1096
|
15
15
|
dv_flow_mgr/cmds/cmd_run.py,sha256=ii48_jdxCxh4MOJCeKKX66Cui4IvQQy_RrJEIixsph8,733
|
16
16
|
dv_flow_mgr/share/flow.json,sha256=lNmZex9NXkYbyb2aZseQfUOkV9CMyfH0iLODEI7EPBw,5096
|
@@ -20,20 +20,20 @@ dv_flow_mgr/tasklib/hdl/sim/mti_task_sim_run.py,sha256=QkKYOs0OhQ42F5bUbfCsezE4L
|
|
20
20
|
dv_flow_mgr/tasklib/hdl/sim/pkg_hdl_sim.py,sha256=hPk5w7dN3Uq3mLRBNCEtE7jkLavi2MAczJlle_xGoQ8,166
|
21
21
|
dv_flow_mgr/tasklib/hdl/sim/task_sim_image.py,sha256=DOSxzH-0EZQZlm-EwSq1q7_nz_yru6al36Ji1Q6z5F4,375
|
22
22
|
dv_flow_mgr/tasklib/hdl/sim/vcs_pkg.py,sha256=65W8NP54_EdtHo6lsmCejT8diPvizT9e3AjjTXJC_u0,413
|
23
|
-
dv_flow_mgr/tasklib/hdl/sim/vcs_task_sim_image.py,sha256=
|
24
|
-
dv_flow_mgr/tasklib/hdl/sim/vcs_task_sim_run.py,sha256=
|
25
|
-
dv_flow_mgr/tasklib/hdl/sim/vl_task_sim_image.py,sha256=
|
23
|
+
dv_flow_mgr/tasklib/hdl/sim/vcs_task_sim_image.py,sha256=SAZYYCZ_ZO80Vfxx7sGcGeKBz00XsoaAjsUwRnCd7eo,1493
|
24
|
+
dv_flow_mgr/tasklib/hdl/sim/vcs_task_sim_run.py,sha256=LYjf--RZH2Jh4-c_4hZOo2uLO3Tu_waGQRXmlDggmZs,1191
|
25
|
+
dv_flow_mgr/tasklib/hdl/sim/vl_task_sim_image.py,sha256=QJP1gjclUSYfq-B9NIA46C1E1zTfOiqsmGjXtsu4BY8,3017
|
26
26
|
dv_flow_mgr/tasklib/hdl/sim/vlt_pkg.py,sha256=Pu9mWAR93kiTNT8GZJrX-VDjMOfr9P5ddcSPt1BElQQ,413
|
27
27
|
dv_flow_mgr/tasklib/hdl/sim/vlt_task_sim_image.py,sha256=9RDJ3r37C4tA4PIa7tDUYYgRpIh19up-Y9HTOwKxr0I,1564
|
28
|
-
dv_flow_mgr/tasklib/hdl/sim/vlt_task_sim_run.py,sha256=
|
28
|
+
dv_flow_mgr/tasklib/hdl/sim/vlt_task_sim_run.py,sha256=RxPaE1RSRi2QdadrZp2J3lZqTt6EnLjCnk__uPAV6_o,1199
|
29
29
|
dv_flow_mgr/tasklib/std/fileset.py,sha256=u88qjKQpIip_eETk0k6J1AGxk9blKlqAqYinHGKwco8,61
|
30
30
|
dv_flow_mgr/tasklib/std/pkg_std.py,sha256=ERDd515qtetQaldk9opUH19MyNwo8nP4-GLz-ke-5gE,370
|
31
31
|
dv_flow_mgr/tasklib/std/std.dfs,sha256=An2NUvvWaR9xI4U-kRQ4NN6U-GhX6GQmd3mNyRkW4NQ,68
|
32
|
-
dv_flow_mgr/tasklib/std/task_fileset.py,sha256=
|
32
|
+
dv_flow_mgr/tasklib/std/task_fileset.py,sha256=ZBG4e2gsTsRMsr_FhhzIoE3J7YwYQZ9HigpxpGePd74,3145
|
33
33
|
dv_flow_mgr/tasklib/std/task_null.py,sha256=bQH1HN4r-TtdUaJxfnmvoqKZSY4MWO48eK7z_yngdNU,599
|
34
|
-
dv_flow_mgr-0.0.1.
|
35
|
-
dv_flow_mgr-0.0.1.
|
36
|
-
dv_flow_mgr-0.0.1.
|
37
|
-
dv_flow_mgr-0.0.1.
|
38
|
-
dv_flow_mgr-0.0.1.
|
39
|
-
dv_flow_mgr-0.0.1.
|
34
|
+
dv_flow_mgr-0.0.1.12761553329a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
35
|
+
dv_flow_mgr-0.0.1.12761553329a1.dist-info/METADATA,sha256=vQplCReVKB6eEKc6Ys_XM6nEB_T1m7Mw35b8ZV_5FzM,13252
|
36
|
+
dv_flow_mgr-0.0.1.12761553329a1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
37
|
+
dv_flow_mgr-0.0.1.12761553329a1.dist-info/entry_points.txt,sha256=VHxIon5AeHCtK73fYb1veDImAGwv76hrtBiuZePmzhI,51
|
38
|
+
dv_flow_mgr-0.0.1.12761553329a1.dist-info/top_level.txt,sha256=FGuhGIxN1FgD_YBkPcDq05fTxZcwaX9G_O8FFBvrTk4,12
|
39
|
+
dv_flow_mgr-0.0.1.12761553329a1.dist-info/RECORD,,
|
{dv_flow_mgr-0.0.1.12703462647a1.dist-info → dv_flow_mgr-0.0.1.12761553329a1.dist-info}/LICENSE
RENAMED
File without changes
|
{dv_flow_mgr-0.0.1.12703462647a1.dist-info → dv_flow_mgr-0.0.1.12761553329a1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|