dv-flow-mgr 0.0.1.12911707440a1__py3-none-any.whl → 0.0.1.12922457458a1__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
@@ -3,4 +3,7 @@ from .package_def import *
3
3
  from .task_graph_runner import *
4
4
  from .task import *
5
5
  from .task_data import *
6
+ from .task_graph_runner import TaskGraphRunner
7
+ from .task_graph_runner_local import TaskGraphRunnerLocal
8
+ from .task_graph_builder import TaskGraphBuilder
6
9
 
@@ -215,7 +215,7 @@ class PackageDef(BaseModel):
215
215
  if len(task.params) > 0:
216
216
  ctor_t.params = task.params
217
217
  if len(task.depends) > 0:
218
- ctor_t.depends.extends(task.depends)
218
+ ctor_t.depends.extend(task.depends)
219
219
 
220
220
  return ctor_t
221
221
 
@@ -70,6 +70,13 @@ class TaskGraphBuilder(object):
70
70
 
71
71
  depends = []
72
72
 
73
+ for dep in ctor_t.depends:
74
+ if not dep in self._task_m.keys():
75
+ task = self._mkTaskGraph(dep, rundir)
76
+ self._task_m[dep] = task
77
+ pass
78
+ depends.append(self._task_m[dep])
79
+
73
80
  # The returned task should have all param references resolved
74
81
  print("task_ctor=%s" % str(ctor_t.task_ctor), flush=True)
75
82
  task = ctor_t.task_ctor(
@@ -99,7 +106,6 @@ class TaskGraphBuilder(object):
99
106
  print("getPackage: %s len: %d" % (spec.name, len(self._pkg_spec_s)))
100
107
  if len(self._pkg_spec_s) > 0:
101
108
  pkg_spec = self._pkg_spec_s[-1]
102
- print("pkg_spec: %s ; root_pkg: %s" % (pkg_spec.name, self.root_pkg.name))
103
109
  if self.root_pkg.name == pkg_spec.name:
104
110
  pkg_def = self.root_pkg
105
111
  else:
@@ -1,5 +1,5 @@
1
1
  #****************************************************************************
2
- #* session.py
2
+ #* task_graph_runner_local.py
3
3
  #*
4
4
  #* Copyright 2023 Matthew Ballance and Contributors
5
5
  #*
@@ -23,7 +23,8 @@ import asyncio
23
23
  import os
24
24
  import yaml
25
25
  import dataclasses as dc
26
- from typing import Any, Callable, ClassVar, Dict, List, Union
26
+ from toposort import toposort
27
+ from typing import Any, Callable, ClassVar, Coroutine, Dict, List, Tuple, Union
27
28
  from .fragment_def import FragmentDef
28
29
  from .package import Package
29
30
  from .pkg_rgy import PkgRgy
@@ -37,7 +38,8 @@ class TaskGraphRunnerLocal(TaskGraphRunner):
37
38
  """Session manages execution of a task graph"""
38
39
 
39
40
  rundir : str
40
- nproc : int = -1
41
+ nproc : int = 4
42
+ done_task_m : Dict = dc.field(default_factory=dict)
41
43
  _workers : List = dc.field(default_factory=list)
42
44
 
43
45
  _inst : ClassVar['TaskGraphRunner'] = None
@@ -58,11 +60,66 @@ class TaskGraphRunnerLocal(TaskGraphRunner):
58
60
 
59
61
  async def run(self, task : Union[Task,List[Task]]) -> List['TaskData']:
60
62
  if isinstance(task, Task):
63
+ unwrap = True
61
64
  task = [task]
62
-
63
- run_o = list(t.do_run() for t in task)
65
+ else:
66
+ unwrap = False
67
+
68
+ dep_m = {}
69
+ task_m = {}
70
+
71
+ for t in task:
72
+ self._mkDeps(dep_m, task_m, t)
73
+
74
+ print("dep_m: %s" % str(dep_m))
75
+
76
+ order = list(toposort(dep_m))
77
+
78
+ active_task_l : List[Tuple[Task,Coroutine]]= []
79
+ # Now, iterate over the concurrent sets
80
+ for active_s in order:
64
81
 
65
- return await asyncio.gather(*run_o)
82
+ # Check to see if all tasks are complete
83
+ done = True
84
+ for t in active_s:
85
+ while len(active_task_l) >= self.nproc and t not in self.done_task_m.keys():
86
+ # Wait for at least one job to complete
87
+ done, pending = await asyncio.wait(at[1] for at in active_task_l)
88
+ for d in done:
89
+ for i in range(len(active_task_l)):
90
+ if active_task_l[i][1] == d:
91
+ tt = active_task_l[i][0]
92
+ self.done_task_m[tt.name] = tt
93
+ active_task_l.pop(i)
94
+ break
95
+ if t not in self.done_task_m.keys():
96
+ task = task_m[t]
97
+ coro = asyncio.Task(task.do_run())
98
+ active_task_l.append((task, coro))
99
+
100
+ # Now, wait for tasks to complete
101
+ if len(active_task_l):
102
+ coros = list(at[1] for at in active_task_l)
103
+ res = await asyncio.gather(*coros)
104
+
105
+ # print("order: %s" % str(order))
106
+ #
107
+ # run_o = list(t.do_run() for t in task)
108
+
109
+ # ret = await asyncio.gather(*run_o)
110
+ ret = None
111
+
112
+ if unwrap:
113
+ return task.output
114
+ else:
115
+ return list(t.output for t in task)
116
+
117
+ def _mkDeps(self, dep_m, task_m, task):
118
+ if task.name not in dep_m.keys():
119
+ task_m[task.name] = task
120
+ dep_m[task.name] = set(t.name for t in task.depends)
121
+ for d in task.depends:
122
+ self._mkDeps(dep_m, task_m, d)
66
123
 
67
124
  async def runTask(self, task : Task) -> 'TaskData':
68
125
  return await task.do_run()
@@ -74,6 +131,7 @@ class TaskGraphRunnerLocal(TaskGraphRunner):
74
131
  @dc.dataclass
75
132
  class LocalRunnerWorker(object):
76
133
  runner : TaskGraphRunnerLocal
77
- pass
134
+ task_s : List = dc.field(default_factory=list)
135
+
78
136
 
79
137
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.12911707440a1
3
+ Version: 0.0.1.12922457458a1
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,6 +206,7 @@ License: Apache License
206
206
  limitations under the License.
207
207
 
208
208
  License-File: LICENSE
209
+ Requires-Dist: pydantic
209
210
  Requires-Dist: pyyaml
210
211
  Requires-Dist: toposort
211
212
  Requires-Dist: svdep
@@ -1,19 +1,19 @@
1
- dv_flow/mgr/__init__.py,sha256=Ms7IJnAbW08GwaanCI64ad_QWZd_XPGfua0WhYr57Jg,107
1
+ dv_flow/mgr/__init__.py,sha256=VtQfTiskn-fBaWU18s8odFPMDJ1Lx2DD4Y4Uy5EJ0Qs,261
2
2
  dv_flow/mgr/__main__.py,sha256=pHXC_c-XSPUYQsBDxk5y7LtQ5kA5pKGhhzu4ko5jh7k,513
3
3
  dv_flow/mgr/fileset.py,sha256=FNvC5sU2ArxJ0OO3v8dXTv8zX-bZ5t0a0ljne0fQQ1o,1150
4
4
  dv_flow/mgr/flow.py,sha256=UdgJOIqBS2wTRpO-sNWCCqO9oQFxDfGPGVD0r42aTrA,1562
5
5
  dv_flow/mgr/fragment_def.py,sha256=p5i6ONtBWlDHTBFsduu3Z36_76Bn8PCIylp_xoZ7jfQ,1552
6
6
  dv_flow/mgr/package.py,sha256=k6gaDun9mJeGwGsFP5YOYOaFLmKb3KyPZy5wGRgJd_E,1965
7
- dv_flow/mgr/package_def.py,sha256=hT8wr4ghH61rjK6VEovqTKVUuO_EwrCB5JQuFR-whiU,11455
7
+ dv_flow/mgr/package_def.py,sha256=fdPzhoCqZ-w336ktDVWZ1HKKFk9Zi6iehCcS-iW_EvU,11454
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
10
  dv_flow/mgr/pkg_rgy.py,sha256=y7HOBZAgKHL4ItnFvjT0lWC_ne81qJi4lJGNLt69au0,2581
11
11
  dv_flow/mgr/task.py,sha256=gaMlOiV4pKmEBzewTkVle3RN2zfKPkSdYW3oJX0j_Jg,6421
12
12
  dv_flow/mgr/task_data.py,sha256=-6Dqa3oUI7RJc1Js2SRSnhxNTcASkamXFYMN6UiknZQ,10376
13
13
  dv_flow/mgr/task_def.py,sha256=96hSwqJo0MazJ1VcLhovYRmNCplsNLt47AumtyjSddU,1690
14
- dv_flow/mgr/task_graph_builder.py,sha256=qx-59f14-oJJi2qx_zYTaP3PvvxxQCNyYqQ6jDjx_OM,7218
14
+ dv_flow/mgr/task_graph_builder.py,sha256=8G9Q-eC0OZmHw0V3F1CxCkXzDZWrYnfVFJ9hQET9RAY,7376
15
15
  dv_flow/mgr/task_graph_runner.py,sha256=x2e-wpJFhZ4Zkov30PtC8CuKyOK6htA1SKzmrcVBI9M,2154
16
- dv_flow/mgr/task_graph_runner_local.py,sha256=-69HoOGkEPHL897RJGB7gItjqXDL_8eam267af4G77E,2420
16
+ dv_flow/mgr/task_graph_runner_local.py,sha256=QDCUyFj_m4hJTUsZD5nCUCnPu3hysdk65-gVA8eJ894,4546
17
17
  dv_flow/mgr/task_memento.py,sha256=C7VTQpBhDEoYuDmE6YTM-6TLMLnqHp6Y0Vat1aTgtCs,1096
18
18
  dv_flow/mgr/util.py,sha256=WKwMF4vwYdte5wzieSTDpZTmZU0sjQro3Ofi9moCayE,613
19
19
  dv_flow/mgr/cmds/cmd_run.py,sha256=PqAbPMwqovaaq14tnNrCvP7-De8lMI09X0R7d6RIbwY,2691
@@ -23,9 +23,9 @@ dv_flow/mgr/std/flow.dv,sha256=pSpzrPPEu_L8DHccGfArxsKYgUfyQidShZc0ShgGtsY,500
23
23
  dv_flow/mgr/std/message.py,sha256=BPTHnEMD4tBufQ9LvsS9Sa_0xjaJATbBpwqosWslvVA,193
24
24
  dv_flow/mgr/std/task_fileset.py,sha256=UzTYONvK0X9rgy3rP9LiX4giBU8SyCCJav0LSNUJ1Qg,3140
25
25
  dv_flow/mgr/std/task_null.py,sha256=UEJ3fIoIMYWVsagiQC7GHD23UES7WoH4wtq94b4tcs4,265
26
- dv_flow_mgr-0.0.1.12911707440a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
27
- dv_flow_mgr-0.0.1.12911707440a1.dist-info/METADATA,sha256=tjOZgtwJrZwNzN011TtAKggCWYSik3b60ZXkBNB3MbI,13252
28
- dv_flow_mgr-0.0.1.12911707440a1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
29
- dv_flow_mgr-0.0.1.12911707440a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
30
- dv_flow_mgr-0.0.1.12911707440a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
31
- dv_flow_mgr-0.0.1.12911707440a1.dist-info/RECORD,,
26
+ dv_flow_mgr-0.0.1.12922457458a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
27
+ dv_flow_mgr-0.0.1.12922457458a1.dist-info/METADATA,sha256=Rsa9WygYLLdeeSpss1f5HJ4ZGwGjrlobtza7ZjNnXIs,13276
28
+ dv_flow_mgr-0.0.1.12922457458a1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
29
+ dv_flow_mgr-0.0.1.12922457458a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
30
+ dv_flow_mgr-0.0.1.12922457458a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
31
+ dv_flow_mgr-0.0.1.12922457458a1.dist-info/RECORD,,