dv-flow-mgr 0.0.1.12922457458a1__py3-none-any.whl → 0.0.1.12932354274a1__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/__main__.py CHANGED
@@ -1,4 +1,24 @@
1
-
1
+ #****************************************************************************
2
+ #* __main__.py
3
+ #*
4
+ #* Copyright 2023 Matthew Ballance and Contributors
5
+ #*
6
+ #* Licensed under the Apache License, Version 2.0 (the "License"); you may
7
+ #* not use this file except in compliance with the License.
8
+ #* You may obtain a copy of the License at:
9
+ #*
10
+ #* http://www.apache.org/licenses/LICENSE-2.0
11
+ #*
12
+ #* Unless required by applicable law or agreed to in writing, software
13
+ #* distributed under the License is distributed on an "AS IS" BASIS,
14
+ #* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ #* See the License for the specific language governing permissions and
16
+ #* limitations under the License.
17
+ #*
18
+ #* Created on:
19
+ #* Author:
20
+ #*
21
+ #****************************************************************************
2
22
  import argparse
3
23
  from .cmds.cmd_run import CmdRun
4
24
 
dv_flow/mgr/package.py CHANGED
@@ -20,22 +20,8 @@
20
20
  #*
21
21
  #****************************************************************************
22
22
  import dataclasses as dc
23
- import json
24
- from pydantic import BaseModel
25
- from typing import Any, Callable, Dict, List, Tuple
26
- from .flow import Flow
27
- from .task import TaskParams, TaskCtor
28
- from .task_def import TaskDef
29
-
30
- class PackageAcc(object):
31
- pkg_spec : 'PackageSpec'
32
- session : 'Session'
33
- pkg : 'Package' = None
34
-
35
- def getPackage(self) -> 'Package':
36
- if self.pkg is None:
37
- self.pkg = self.session.getPackage(self.pkg_spec)
38
- return self.pkg
23
+ from typing import Any, Dict
24
+ from .task import TaskCtor
39
25
 
40
26
  @dc.dataclass
41
27
  class Package(object):
@@ -44,13 +30,7 @@ class Package(object):
44
30
  # Package holds constructors for tasks
45
31
  # - Dict holds the default parameters for the task
46
32
  tasks : Dict[str,TaskCtor] = dc.field(default_factory=dict)
47
- imports : List['PackageAcc'] = dc.field(default_factory=list)
48
33
 
49
- def getPackage(self, name : str) -> 'Package':
50
- for p in self.imports:
51
- if p.name == name:
52
- return p.getPackage()
53
-
54
34
  def getTaskCtor(self, name : str) -> TaskCtor:
55
35
  return self.tasks[name]
56
36
 
@@ -28,7 +28,6 @@ import pydantic
28
28
  import pydantic.dataclasses as dc
29
29
  from pydantic import BaseModel
30
30
  from typing import Any, Dict, List, Callable, Tuple
31
- from .flow import Flow
32
31
  from .fragment_def import FragmentDef
33
32
  from .package import Package
34
33
  from .package_import_spec import PackageImportSpec, PackageSpec
@@ -1,4 +1,24 @@
1
-
1
+ #****************************************************************************
2
+ #* package_import_spec.py
3
+ #*
4
+ #* Copyright 2023 Matthew Ballance and Contributors
5
+ #*
6
+ #* Licensed under the Apache License, Version 2.0 (the "License"); you may
7
+ #* not use this file except in compliance with the License.
8
+ #* You may obtain a copy of the License at:
9
+ #*
10
+ #* http://www.apache.org/licenses/LICENSE-2.0
11
+ #*
12
+ #* Unless required by applicable law or agreed to in writing, software
13
+ #* distributed under the License is distributed on an "AS IS" BASIS,
14
+ #* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ #* See the License for the specific language governing permissions and
16
+ #* limitations under the License.
17
+ #*
18
+ #* Created on:
19
+ #* Author:
20
+ #*
21
+ #****************************************************************************
2
22
  import pydantic.dataclasses as dc
3
23
  import json
4
24
  from typing import Dict, Any
@@ -28,4 +48,4 @@ class PackageSpec(object):
28
48
  @dc.dataclass
29
49
  class PackageImportSpec(PackageSpec):
30
50
  path : str = dc.Field(default=None, alias="from")
31
- alias : str = dc.Field(default=None, alias="as")
51
+ alias : str = dc.Field(default=None, alias="as")
dv_flow/mgr/pkg_rgy.py CHANGED
@@ -1,3 +1,24 @@
1
+ #****************************************************************************
2
+ #* pkg_rgy.py
3
+ #*
4
+ #* Copyright 2023 Matthew Ballance and Contributors
5
+ #*
6
+ #* Licensed under the Apache License, Version 2.0 (the "License"); you may
7
+ #* not use this file except in compliance with the License.
8
+ #* You may obtain a copy of the License at:
9
+ #*
10
+ #* http://www.apache.org/licenses/LICENSE-2.0
11
+ #*
12
+ #* Unless required by applicable law or agreed to in writing, software
13
+ #* distributed under the License is distributed on an "AS IS" BASIS,
14
+ #* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ #* See the License for the specific language governing permissions and
16
+ #* limitations under the License.
17
+ #*
18
+ #* Created on:
19
+ #* Author:
20
+ #*
21
+ #****************************************************************************
1
22
  import os
2
23
  import sys
3
24
  from typing import Dict, Tuple
dv_flow/mgr/task.py CHANGED
@@ -68,12 +68,8 @@ class Task(object):
68
68
  session : 'TaskGraphRunner' = None
69
69
  basedir : str = None
70
70
  memento : TaskMemento = None
71
- depend_refs : List['TaskSpec'] = dc.field(default_factory=list)
72
- depends : List[int] = dc.field(default_factory=list)
73
- running : bool = False
74
- output_set : bool = False
71
+ depends : List['Task'] = dc.field(default_factory=list)
75
72
  output : Any = None
76
- output_ev : Any = asyncio.Event()
77
73
 
78
74
  # Implementation data below
79
75
  basedir : str = dc.field(default=None)
@@ -107,23 +103,13 @@ class Task(object):
107
103
  async def do_run(self) -> TaskData:
108
104
  print("do_run: %s - %d depends" % (self.name, len(self.depends)))
109
105
  if len(self.depends) > 0:
110
- awaitables = [dep.waitOutput() for dep in self.depends]
111
- deps_o = await asyncio.gather(*awaitables)
106
+ deps_o = []
107
+ for d in self.depends:
108
+ dep_o = d.getOutput()
109
+ if dep_o is None:
110
+ raise Exception("Null output for %s" % d.name)
111
+ deps_o.append(dep_o)
112
112
 
113
- # Merge filesets. A fileset with the same
114
- print("deps_o: %s" % str(deps_o))
115
-
116
-
117
- # print("deps_m: %s" % str(deps_m))
118
-
119
- # Merge the output of the dependencies into a single input data
120
- # if len(self.depends) > 1:
121
- # raise Exception("TODO: handle >1 inputs")
122
-
123
- # Now that we have a clean input object, we need
124
- # to build the dep map
125
-
126
- # input = self.depends[0].output.copy()
127
113
  input = TaskData.merge(deps_o)
128
114
  input.src = self.name
129
115
  input.deps[self.name] = list(inp.name for inp in self.depends)
@@ -137,29 +123,17 @@ class Task(object):
137
123
 
138
124
  self.init_rundir()
139
125
 
140
- result = await self.run(input)
141
-
142
- if not self.output_set:
143
- if result is None:
144
- result = TaskData()
126
+ self.output = await self.run(input)
145
127
 
146
- # We perform an auto-merge algorithm if the task
147
- # doesn't take control
148
- # for dep_o in deps_o:
149
- # result.deps.append(dep_o.clone())
150
-
151
- self.setOutput(result)
152
- else:
153
- # The task has taken control of the output
154
- result = self.getOutput()
128
+ if self.output is None:
129
+ raise Exception("No output produced by %s" % self.name)
130
+ result = TaskData()
155
131
 
156
132
  # Write-back the memento, if specified
157
133
  self.save_memento()
158
134
 
159
- self.running = False
160
-
161
135
  # Combine data from the deps to produce a result
162
- return result
136
+ return self.output
163
137
 
164
138
  async def run(self, input : TaskData) -> TaskData:
165
139
  raise NotImplementedError("TaskImpl.run() not implemented")
@@ -173,24 +147,6 @@ class Task(object):
173
147
  with open(os.path.join(self.rundir, "memento.json"), "w") as fp:
174
148
  fp.write(self.memento.model_dump_json(indent=2))
175
149
 
176
- def setOutput(self, output : TaskData):
177
- self.output_set = True
178
- output.src = self.name
179
- self.output = output
180
- self.output_ev.set()
181
-
182
- async def waitOutput(self) -> TaskData:
183
- if not self.output_set:
184
- if self.running:
185
- # Task is already running
186
- print("wait")
187
- await self.output_ev.wait()
188
- else:
189
- self.running = True
190
- print("start task")
191
- await self.do_run()
192
- return self.output
193
-
194
150
  def getOutput(self) -> TaskData:
195
151
  return self.output
196
152
 
@@ -1,3 +1,24 @@
1
+ #****************************************************************************
2
+ #* task_graph_builder.py
3
+ #*
4
+ #* Copyright 2023 Matthew Ballance and Contributors
5
+ #*
6
+ #* Licensed under the Apache License, Version 2.0 (the "License"); you may
7
+ #* not use this file except in compliance with the License.
8
+ #* You may obtain a copy of the License at:
9
+ #*
10
+ #* http://www.apache.org/licenses/LICENSE-2.0
11
+ #*
12
+ #* Unless required by applicable law or agreed to in writing, software
13
+ #* distributed under the License is distributed on an "AS IS" BASIS,
14
+ #* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ #* See the License for the specific language governing permissions and
16
+ #* limitations under the License.
17
+ #*
18
+ #* Created on:
19
+ #* Author:
20
+ #*
21
+ #****************************************************************************
1
22
  import os
2
23
  import dataclasses as dc
3
24
  from .package import Package
@@ -87,13 +108,6 @@ class TaskGraphBuilder(object):
87
108
  rundir=rundir,
88
109
  srcdir=ctor_t.srcdir)
89
110
 
90
- for i,d in enumerate(task.depend_refs):
91
- if d in self._task_m.keys():
92
- task.depends.append(self._task_m[d])
93
- else:
94
- print("mkTaskGraph: %s" % d)
95
- task.depends.append(self._mkTaskGraph(d, parent_rundir))
96
-
97
111
  self._task_m[task.name] = task
98
112
 
99
113
  self._pkg_s.pop()
@@ -1,5 +1,5 @@
1
1
  #****************************************************************************
2
- #* session.py
2
+ #* task_graph_runner.py
3
3
  #*
4
4
  #* Copyright 2023 Matthew Ballance and Contributors
5
5
  #*
dv_flow/mgr/util.py CHANGED
@@ -1,3 +1,24 @@
1
+ #****************************************************************************
2
+ #* util.py
3
+ #*
4
+ #* Copyright 2023 Matthew Ballance and Contributors
5
+ #*
6
+ #* Licensed under the Apache License, Version 2.0 (the "License"); you may
7
+ #* not use this file except in compliance with the License.
8
+ #* You may obtain a copy of the License at:
9
+ #*
10
+ #* http://www.apache.org/licenses/LICENSE-2.0
11
+ #*
12
+ #* Unless required by applicable law or agreed to in writing, software
13
+ #* distributed under the License is distributed on an "AS IS" BASIS,
14
+ #* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ #* See the License for the specific language governing permissions and
16
+ #* limitations under the License.
17
+ #*
18
+ #* Created on:
19
+ #* Author:
20
+ #*
21
+ #****************************************************************************
1
22
  import os
2
23
  import yaml
3
24
  from .package_def import PackageDef
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.12922457458a1
3
+ Version: 0.0.1.12932354274a1
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
@@ -1,21 +1,19 @@
1
1
  dv_flow/mgr/__init__.py,sha256=VtQfTiskn-fBaWU18s8odFPMDJ1Lx2DD4Y4Uy5EJ0Qs,261
2
- dv_flow/mgr/__main__.py,sha256=pHXC_c-XSPUYQsBDxk5y7LtQ5kA5pKGhhzu4ko5jh7k,513
2
+ dv_flow/mgr/__main__.py,sha256=big-RSuqbx7P48_8rzaZKX5YW3B2US1i0mRH_TfoeIs,1340
3
3
  dv_flow/mgr/fileset.py,sha256=FNvC5sU2ArxJ0OO3v8dXTv8zX-bZ5t0a0ljne0fQQ1o,1150
4
- dv_flow/mgr/flow.py,sha256=UdgJOIqBS2wTRpO-sNWCCqO9oQFxDfGPGVD0r42aTrA,1562
5
4
  dv_flow/mgr/fragment_def.py,sha256=p5i6ONtBWlDHTBFsduu3Z36_76Bn8PCIylp_xoZ7jfQ,1552
6
- dv_flow/mgr/package.py,sha256=k6gaDun9mJeGwGsFP5YOYOaFLmKb3KyPZy5wGRgJd_E,1965
7
- dv_flow/mgr/package_def.py,sha256=fdPzhoCqZ-w336ktDVWZ1HKKFk9Zi6iehCcS-iW_EvU,11454
8
- dv_flow/mgr/package_import_spec.py,sha256=bStPa727wAKMcixydVY1Ht6ylzXsSMy2K31HWPXhc9k,921
9
- dv_flow/mgr/parameters.py,sha256=kUjRss5VtMMz5eL3-Z_M6BS-wFs7MhQu3ANXO54UPo0,896
10
- dv_flow/mgr/pkg_rgy.py,sha256=y7HOBZAgKHL4ItnFvjT0lWC_ne81qJi4lJGNLt69au0,2581
11
- dv_flow/mgr/task.py,sha256=gaMlOiV4pKmEBzewTkVle3RN2zfKPkSdYW3oJX0j_Jg,6421
5
+ dv_flow/mgr/package.py,sha256=7G_ZQaTHin_mcwQu1PRsGmqfKAbdu9IC5HeLXtPgBDc,1342
6
+ dv_flow/mgr/package_def.py,sha256=3X0lrbU_SCNhxF9wFTpfQcmD1AbOv4XhnA-5U0IPouk,11431
7
+ dv_flow/mgr/package_import_spec.py,sha256=ah3r15v5Jdub2poc3sgi6Uar1L3oGoYsCPPNiOHV-a4,1760
8
+ dv_flow/mgr/pkg_rgy.py,sha256=ANnG7eyWN-PBgyYlKzq4ThoQNT2YoYm_5xXIK5HzypA,3408
9
+ dv_flow/mgr/task.py,sha256=ewJ7bCFWqwVuzHZZsX2LDZfzXWVFfFlH8yFyn-xxIVg,5043
12
10
  dv_flow/mgr/task_data.py,sha256=-6Dqa3oUI7RJc1Js2SRSnhxNTcASkamXFYMN6UiknZQ,10376
13
11
  dv_flow/mgr/task_def.py,sha256=96hSwqJo0MazJ1VcLhovYRmNCplsNLt47AumtyjSddU,1690
14
- dv_flow/mgr/task_graph_builder.py,sha256=8G9Q-eC0OZmHw0V3F1CxCkXzDZWrYnfVFJ9hQET9RAY,7376
15
- dv_flow/mgr/task_graph_runner.py,sha256=x2e-wpJFhZ4Zkov30PtC8CuKyOK6htA1SKzmrcVBI9M,2154
12
+ dv_flow/mgr/task_graph_builder.py,sha256=74w2A2XabL6xZVzb8bcKtSSdXdw7mzHJ69O7LrhkjMU,7935
13
+ dv_flow/mgr/task_graph_runner.py,sha256=NwNYcOJ952lPMLwIIlYE9CoDdedqvcw2fWHYUsKFXuU,2164
16
14
  dv_flow/mgr/task_graph_runner_local.py,sha256=QDCUyFj_m4hJTUsZD5nCUCnPu3hysdk65-gVA8eJ894,4546
17
15
  dv_flow/mgr/task_memento.py,sha256=C7VTQpBhDEoYuDmE6YTM-6TLMLnqHp6Y0Vat1aTgtCs,1096
18
- dv_flow/mgr/util.py,sha256=WKwMF4vwYdte5wzieSTDpZTmZU0sjQro3Ofi9moCayE,613
16
+ dv_flow/mgr/util.py,sha256=06eVyURF4ga-s8C9Sd3ZSDebwO4QS0XXaB8xADVbWRc,1437
19
17
  dv_flow/mgr/cmds/cmd_run.py,sha256=PqAbPMwqovaaq14tnNrCvP7-De8lMI09X0R7d6RIbwY,2691
20
18
  dv_flow/mgr/share/flow.json,sha256=lNmZex9NXkYbyb2aZseQfUOkV9CMyfH0iLODEI7EPBw,5096
21
19
  dv_flow/mgr/std/fileset.py,sha256=qY4RMqTHZaFZk68Y3oXtDv2_Ezu1r4wYvaRvr0GTyIY,2352
@@ -23,9 +21,9 @@ dv_flow/mgr/std/flow.dv,sha256=pSpzrPPEu_L8DHccGfArxsKYgUfyQidShZc0ShgGtsY,500
23
21
  dv_flow/mgr/std/message.py,sha256=BPTHnEMD4tBufQ9LvsS9Sa_0xjaJATbBpwqosWslvVA,193
24
22
  dv_flow/mgr/std/task_fileset.py,sha256=UzTYONvK0X9rgy3rP9LiX4giBU8SyCCJav0LSNUJ1Qg,3140
25
23
  dv_flow/mgr/std/task_null.py,sha256=UEJ3fIoIMYWVsagiQC7GHD23UES7WoH4wtq94b4tcs4,265
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,,
24
+ dv_flow_mgr-0.0.1.12932354274a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
25
+ dv_flow_mgr-0.0.1.12932354274a1.dist-info/METADATA,sha256=xH_NHN7r8gQWETTOMtWk_qz8bx--4rQMhQgAMPpgcmU,13276
26
+ dv_flow_mgr-0.0.1.12932354274a1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
27
+ dv_flow_mgr-0.0.1.12932354274a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
28
+ dv_flow_mgr-0.0.1.12932354274a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
29
+ dv_flow_mgr-0.0.1.12932354274a1.dist-info/RECORD,,
dv_flow/mgr/flow.py DELETED
@@ -1,59 +0,0 @@
1
- #****************************************************************************
2
- #* flow.py
3
- #*
4
- #* Copyright 2023 Matthew Ballance and Contributors
5
- #*
6
- #* Licensed under the Apache License, Version 2.0 (the "License"); you may
7
- #* not use this file except in compliance with the License.
8
- #* You may obtain a copy of the License at:
9
- #*
10
- #* http://www.apache.org/licenses/LICENSE-2.0
11
- #*
12
- #* Unless required by applicable law or agreed to in writing, software
13
- #* distributed under the License is distributed on an "AS IS" BASIS,
14
- #* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- #* See the License for the specific language governing permissions and
16
- #* limitations under the License.
17
- #*
18
- #* Created on:
19
- #* Author:
20
- #*
21
- #****************************************************************************
22
- from pydantic import BaseModel, Field
23
- from typing import ClassVar
24
- #from .task import Task
25
-
26
- class Flow(BaseModel):
27
- # - Parameters are user-facing
28
- # - Any implementation data must be stored elsewhere, such that it isn't
29
- # checked for equality...
30
- name : str
31
- description : str = Field(None)
32
-
33
-
34
- @classmethod
35
- def mk(cls, *args, **kwargs):
36
- pass
37
-
38
- async def my_method(self):
39
- return Task(a,b,c)(self, input)
40
-
41
- #@extend(target)
42
- #class FlowExt(object):
43
- # pass
44
-
45
-
46
- class Flow2(Flow):
47
- description : str = "abc"
48
-
49
- async def my_method(self):
50
- super().my_method()
51
-
52
- f = Flow2(name="foo")
53
-
54
- #for d in dir(f):
55
- # if not d.startswith("_"):
56
- # print("%s: %s" % (d, str(getattr(f, d))))
57
-
58
-
59
-
dv_flow/mgr/parameters.py DELETED
@@ -1,27 +0,0 @@
1
- #****************************************************************************
2
- #* parameters.py
3
- #*
4
- #* Copyright 2023 Matthew Ballance and Contributors
5
- #*
6
- #* Licensed under the Apache License, Version 2.0 (the "License"); you may
7
- #* not use this file except in compliance with the License.
8
- #* You may obtain a copy of the License at:
9
- #*
10
- #* http://www.apache.org/licenses/LICENSE-2.0
11
- #*
12
- #* Unless required by applicable law or agreed to in writing, software
13
- #* distributed under the License is distributed on an "AS IS" BASIS,
14
- #* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- #* See the License for the specific language governing permissions and
16
- #* limitations under the License.
17
- #*
18
- #* Created on:
19
- #* Author:
20
- #*
21
- #****************************************************************************
22
-
23
- class Parameters(object):
24
-
25
- def __init__(self):
26
- pass
27
-