dv-flow-mgr 0.0.2.14150065664a1__py3-none-any.whl → 0.0.2.14180123344a1__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
@@ -55,6 +55,9 @@ def get_parser():
55
55
  run_parser.add_argument("-j",
56
56
  help="Specifies degree of parallelism. Uses all cores by default",
57
57
  type=int, default=-1)
58
+ run_parser.add_argument("-c", "--clean",
59
+ action="store_true",
60
+ help="Cleans the rundir before running")
58
61
  run_parser.set_defaults(func=CmdRun())
59
62
 
60
63
  show_parser = subparsers.add_parser('show',
@@ -77,6 +77,12 @@ class CmdRun(object):
77
77
  # TODO: allow user to specify run root -- maybe relative to some fixed directory?
78
78
  rundir = os.path.join(pkg._basedir, "rundir")
79
79
 
80
+ if args.clean:
81
+ print("Note: Cleaning rundir %s" % rundir)
82
+ if os.path.exists(rundir):
83
+ os.rmdir(rundir)
84
+ os.makedirs(rundir)
85
+
80
86
  builder = TaskGraphBuilder(root_pkg=pkg, rundir=rundir)
81
87
  runner = TaskSetRunner(rundir)
82
88
 
@@ -0,0 +1,10 @@
1
+ import dataclasses as dc
2
+ from typing import List, Callable
3
+
4
+ @dc.dataclass
5
+ class ListenerList(object):
6
+ listeners : List[Callable] = dc.field(default_factory=list)
7
+
8
+ def __call__(self, *args, **kwargs):
9
+ for l in self.listeners:
10
+ l(*args, **kwargs)
@@ -64,6 +64,7 @@ class PackageDef(BaseModel):
64
64
  params : List[ParamDef] = dc.Field(
65
65
  default_factory=list, alias="with",
66
66
  description="List of package parameters to set")
67
+ srcinfo : Any = dc.Field(default=None)
67
68
 
68
69
  _fragment_l : List['FragmentDef'] = []
69
70
  _subpkg_m : Dict[str,'PackageDef'] = {}
@@ -410,13 +411,23 @@ class PackageDef(BaseModel):
410
411
 
411
412
  @classmethod
412
413
  def _loadPkgDef(cls, root, exp_pkg_name, file_s):
414
+ from yaml.loader import SafeLoader
415
+
416
+ class SafeLineLoader(SafeLoader):
417
+ def construct_mapping(self, node, deep=False):
418
+ # print("construct")
419
+ mapping = super(SafeLineLoader, self).construct_mapping(node, deep=deep)
420
+ # Add 1 so line numbering starts at 1
421
+ # mapping['_srcinfo'] = node.start_mark.line + 1
422
+ return mapping
423
+
413
424
  if root in file_s:
414
425
  raise Exception("Recursive file processing @ %s: %s" % (root, ",".join(file_s)))
415
426
  file_s.append(root)
416
427
  ret = None
417
428
  with open(root, "r") as fp:
418
429
  PackageDef._log.debug("open %s" % root)
419
- doc = yaml.load(fp, Loader=yaml.FullLoader)
430
+ doc = yaml.load(fp, Loader=SafeLineLoader)
420
431
  if "package" not in doc.keys():
421
432
  raise Exception("Missing 'package' key in %s" % root)
422
433
  try:
dv_flow/mgr/task_def.py CHANGED
@@ -19,6 +19,7 @@
19
19
  #* Author:
20
20
  #*
21
21
  #****************************************************************************
22
+ import pydantic
22
23
  import pydantic.dataclasses as dc
23
24
  import enum
24
25
  from pydantic import BaseModel
@@ -48,13 +49,31 @@ class PassthroughE(enum.Enum):
48
49
  All = "all"
49
50
  Unused = "unused"
50
51
 
51
-
52
52
  class StrategyDef(BaseModel):
53
53
  chain: Union[bool, None] = dc.Field(default=None)
54
54
  matrix : Union[Dict[str,List[Any]],None] = dc.Field(
55
55
  default=None,
56
56
  description="Matrix of parameter values to explore")
57
57
 
58
+ class TaskExecDef(BaseModel):
59
+ pytask : Union[str, None] = dc.Field(
60
+ default=None,
61
+ description="Python method to execute to implement this task")
62
+ pydep : Union[str, None] = dc.Field(
63
+ default=None,
64
+ description="Python method to check up-to-date status for this task")
65
+
66
+ class TasksBuilder(BaseModel):
67
+ # TODO: control how much data this task is provided?
68
+ pydef : Union[str, None] = dc.Field(
69
+ default=None,
70
+ description="Python method to build the subgraph")
71
+
72
+ class Tasks(BaseModel):
73
+ tasks: Union[List['TaskDef'], TasksBuilder] = dc.Field(
74
+ default_factory=list,
75
+ description="Sub-tasks")
76
+
58
77
  class TaskDef(BaseModel):
59
78
  """Holds definition information (ie the YAML view) for a task"""
60
79
  name : str = dc.Field(
@@ -72,7 +91,7 @@ class TaskDef(BaseModel):
72
91
  description="Python method to execute to implement this task")
73
92
  strategy : StrategyDef = dc.Field(
74
93
  default=None)
75
- tasks: List['TaskDef'] = dc.Field(
94
+ tasks: Union[List['TaskDef'], TasksBuilder] = dc.Field(
76
95
  default_factory=list,
77
96
  description="Sub-tasks")
78
97
  desc : str = dc.Field(
@@ -100,9 +119,12 @@ class TaskDef(BaseModel):
100
119
  consumes : Union[ConsumesE, List[Any], None] = dc.Field(
101
120
  default=None,
102
121
  description="Specifies matching patterns for parameter sets that this task consumes")
103
-
104
- # out: List[TaskOutput] = dc.Field(default_factory=list)
105
-
122
+
123
+ def __init__(self, **data):
124
+ # print("--> task_def %s" % str(data))
125
+ super().__init__(**data)
126
+ # print("<-- task_def %s" % str(data))
127
+
106
128
  def copy(self) -> 'TaskDef':
107
129
  ret = TaskDef(
108
130
  name=self.name,
@@ -22,6 +22,7 @@
22
22
  import os
23
23
  import dataclasses as dc
24
24
  import logging
25
+ from typing import Callable
25
26
  from .package import Package
26
27
  from .package_def import PackageDef, PackageSpec
27
28
  from .pkg_rgy import PkgRgy
@@ -48,6 +49,7 @@ class TaskGraphBuilder(object):
48
49
  root_pkg : PackageDef
49
50
  rundir : str
50
51
  pkg_rgy : PkgRgy = None
52
+ marker_l : Callable = lambda *args, **kwargs: None
51
53
  _pkg_s : List[Package] = dc.field(default_factory=list)
52
54
  _pkg_m : Dict[PackageSpec,Package] = dc.field(default_factory=dict)
53
55
  _pkg_spec_s : List[PackageDef] = dc.field(default_factory=list)
@@ -330,6 +332,7 @@ class TaskGraphBuilder(object):
330
332
  self._pkg_spec_s.pop()
331
333
  self._pkg_m[spec] = pkg
332
334
  else:
335
+ self.error("Failed to find package %s" % spec.name)
333
336
  raise Exception("Failed to find definition of package %s" % spec.name)
334
337
 
335
338
  self._logger.debug("<-- getPackage: %s" % str(pkg))
@@ -73,13 +73,23 @@ class TaskNodeCtorCompound(TaskNodeCtor):
73
73
  # Need to get the parent name
74
74
  needs = []
75
75
  for n in t.needs:
76
- need_name = "%s.%s" % (builder.package().name, n)
77
- task = builder.findTask(n)
78
- if task is None:
76
+ # 'n' is the dependency as specified by the user
77
+ # Need to perform a search
78
+ # - Look locally inside the compound task (pkg.compound.name)
79
+ # - Look for the fully-qualified task name
80
+ # - Look for the task name in the package
81
+
82
+ names = []
83
+ for pref in (builder.get_name_prefix((), "", builder.package().name)):
84
+ need_name = n if pref == "" else ("%s.%s" % (pref, n))
85
+ names.append(need_name)
79
86
  task = builder.findTask(need_name)
80
87
 
88
+ if task is not None:
89
+ break
90
+
81
91
  if task is None:
82
- raise Exception("Failed to find task %s (%s)" % (n, need_name))
92
+ raise Exception("Failed to find task %s (searched %s)" % (n, str(names)))
83
93
  self._log.debug("Add %s as dependency of %s" % (
84
94
  task.name, t.name
85
95
  ))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.2.14150065664a1
3
+ Version: 0.0.2.14180123344a1
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,13 +1,14 @@
1
1
  dv_flow/mgr/__init__.py,sha256=hzwGMkN3t6RkfZSCHi_6mvEkCzEOd91EZBv9F2ZCa-8,1193
2
- dv_flow/mgr/__main__.py,sha256=ExLZCOjDZtxqPk_SSF5SZKkbYUjMmVca4sT2OeePv10,3437
2
+ dv_flow/mgr/__main__.py,sha256=4_MJIH-FxIFXrk5pvic9bBereeZxQsrxnESA4SZ5q9U,3600
3
3
  dv_flow/mgr/eval_jq.py,sha256=bRsHtaN51qIOiZK1VJV52W0-vj5VH0nQ7XIFebZi5kI,1129
4
4
  dv_flow/mgr/expr_eval.py,sha256=N_8hRIgzJK9JVqhRt8F9rc4S7AAdKHMMltafqk6KhJs,3113
5
5
  dv_flow/mgr/expr_parser.py,sha256=P6u2FdSXeZbdamC3zpEnYKLcK2RULQJfSoev2Ol75fE,6543
6
6
  dv_flow/mgr/fileset.py,sha256=4izm4-qldWLiZxWDUa5Em0iFizzS-S-O0YU6zvtbUUs,1264
7
7
  dv_flow/mgr/fragment_def.py,sha256=AHx3ITbiNbGCzlDk5FM8Iimm0GJnWXDDRAoRC1b41jM,1647
8
+ dv_flow/mgr/listener_list.py,sha256=BfqvEO2AyJvyc4ClU-hPgDPqWSlqvSdG-yaFEHvUrMc,272
8
9
  dv_flow/mgr/out,sha256=d8GGBi3J43fhdLBlnsUbzBfRe0TD0QTP3nOTz54l2bI,200
9
10
  dv_flow/mgr/package.py,sha256=9FhOu1hKYKzlD88zehwrI6KAcs1E7TbXDnq4v54dqDQ,1701
10
- dv_flow/mgr/package_def.py,sha256=iilJPa1zJoF5OkjdtBVro_fFImEbiJqPijFkYltut-o,20881
11
+ dv_flow/mgr/package_def.py,sha256=18y29oi_vQc4Jzl7v7iHjRo22eUQbndPxa1bucrZX8E,21343
11
12
  dv_flow/mgr/package_import_spec.py,sha256=aZMpnS9a5NFY76_pYXEuO3-Mkc_xFzy73fdrUe_54Dc,1760
12
13
  dv_flow/mgr/param.py,sha256=kkxMRGf6mPjSZJsjgLKH2vJL62Sn0ZESvjBLkEYOp20,1386
13
14
  dv_flow/mgr/param_def.py,sha256=mkAw3DanIxcVWRYeh9lUAfUMkpqDFly_Ku_iobr4ix8,1745
@@ -15,14 +16,14 @@ dv_flow/mgr/param_ref_eval.py,sha256=5yH37oIX6f2qmk7GfRgNT5qZx0jm3CJFgB9lLDZZ1yQ
15
16
  dv_flow/mgr/parsetab.py,sha256=I-p3nC60t9jiNtPhKyl_sE92SiP96zJLnNdydcLy33g,3780
16
17
  dv_flow/mgr/pkg_rgy.py,sha256=d1nIjRm3ymMNJT-yiMDxCS6bFisTPvLMqh5VrfsHVKM,5404
17
18
  dv_flow/mgr/task_data.py,sha256=lN7Iq8YTitEMGG4rZqYQi6Ri2HuPgBQ5oGQbW-63T8c,12436
18
- dv_flow/mgr/task_def.py,sha256=Yf9bkWqSETeFUSbddbpvl2Cu3pyssvhdz0X2jxabniA,3751
19
- dv_flow/mgr/task_graph_builder.py,sha256=Z14ySv1SFanFovR8HePwKglyFSzc6JsS8Z4RLmggM6c,15316
19
+ dv_flow/mgr/task_def.py,sha256=ClCPFLlpT70Nxcr4xxBJBtdRxwFHq5YUtEDNVCiqFtE,4559
20
+ dv_flow/mgr/task_graph_builder.py,sha256=ST8EseeO8JZUTUSU44txxaUVKlXEiTOPbvB_UVrlraU,15463
20
21
  dv_flow/mgr/task_graph_dot_writer.py,sha256=GxqiYwQJbFgUQdnPCS9vpIYmYFbSXwnXCSbGmjbxC3M,2418
21
22
  dv_flow/mgr/task_listener_log.py,sha256=hrJEjSRXXoovDTcD1Cmhi3Spzw7uEJ-WP6tv6JUaa6s,4060
22
23
  dv_flow/mgr/task_node.py,sha256=JXq2QimCZKxfhhkdhM-HKk4JbxpIlpW65xUJ0hVlQc0,4981
23
24
  dv_flow/mgr/task_node_compound.py,sha256=mNu4nf9hVqu2698ue5fpE3FeAOkvJH0Ke2W9V0G3-As,2975
24
25
  dv_flow/mgr/task_node_ctor.py,sha256=COFGvm5PR2B92H3uW1yhDIUCmppo9U4IfOcv_Jrsreo,3952
25
- dv_flow/mgr/task_node_ctor_compound.py,sha256=n2Ad1jtX147cb99HTlLrx_21XUn109bJ18zDXr0pn2Q,4259
26
+ dv_flow/mgr/task_node_ctor_compound.py,sha256=HI-KDmBoRlvwPQpl3WSZit8jqhJ7Zbv8NRvh45Kp6PA,4736
26
27
  dv_flow/mgr/task_node_ctor_compound_proxy.py,sha256=D8x54nD8Pd-2-_mr1syhqVeSFfIVf100ldi3bdzmSfI,2073
27
28
  dv_flow/mgr/task_node_ctor_def_base.py,sha256=_8QQHKDkONio_ve0Z409yxC0AMO8ocNBPDjRiNED1FI,1503
28
29
  dv_flow/mgr/task_node_ctor_proxy.py,sha256=ViOFJ64JM4-CGFZNl89BghFuKSQ66kZVqSj4v2PA6VA,1906
@@ -36,7 +37,7 @@ dv_flow/mgr/task_runner.py,sha256=-919VntXAe2XSuFW2dFpgvUre-NkILBnDBbAKBZYn5w,95
36
37
  dv_flow/mgr/type.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
38
  dv_flow/mgr/type_def.py,sha256=NDeyplKrPnWwEv4yHkhXEMK9d9j39b5MOeLB-1Mchqo,1095
38
39
  dv_flow/mgr/cmds/cmd_graph.py,sha256=Ykw__EdwamDBZZKxQZVbtMtFl7koq5dJMShTBXSM2pk,2672
39
- dv_flow/mgr/cmds/cmd_run.py,sha256=f0zt2OxGZC50aaDR7wGDH8YBk3rMQoBl8YeRHWcJUD0,3211
40
+ dv_flow/mgr/cmds/cmd_run.py,sha256=ADFBetIVk_CwMQXO3oSNdtUgrxx8FyQj9LYQ2cA8nuo,3394
40
41
  dv_flow/mgr/cmds/cmd_show.py,sha256=CZlgwB3Hcu-6HS-diqnWjCcPPpO-kjIIXU3DgWXvsf4,3773
41
42
  dv_flow/mgr/share/flow.json,sha256=lNmZex9NXkYbyb2aZseQfUOkV9CMyfH0iLODEI7EPBw,5096
42
43
  dv_flow/mgr/std/create_file.py,sha256=TAUhpXlTmUDUYw4Dw0cI9FPuYI84yCVkoadnWZxi_8U,2888
@@ -50,9 +51,9 @@ dv_flow/mgr/util/__main__.py,sha256=F0LXpCDpYTPalSo0dc1h_qZkip5v1AZYYh-vcYbh5s0,
50
51
  dv_flow/mgr/util/util.py,sha256=yg9oTPRiO87mkCSOQpOtlG9vyKPQzY3qp4OJkEMbWyY,1443
51
52
  dv_flow/mgr/util/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
53
  dv_flow/mgr/util/cmds/cmd_schema.py,sha256=lrEI-Jwb8j4I4yYOn9hq7_7NYbK8leVxLesrHyEWm-E,1879
53
- dv_flow_mgr-0.0.2.14150065664a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
54
- dv_flow_mgr-0.0.2.14150065664a1.dist-info/METADATA,sha256=9jJBGIp_ylYV8SgeRvZh0P1EcYH4cQHSLaHEF2Mr_QA,13336
55
- dv_flow_mgr-0.0.2.14150065664a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
56
- dv_flow_mgr-0.0.2.14150065664a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
57
- dv_flow_mgr-0.0.2.14150065664a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
58
- dv_flow_mgr-0.0.2.14150065664a1.dist-info/RECORD,,
54
+ dv_flow_mgr-0.0.2.14180123344a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
55
+ dv_flow_mgr-0.0.2.14180123344a1.dist-info/METADATA,sha256=uCchOggxk9U54veU7UCjQOyn65EEfR22ABTcYJd8P-4,13336
56
+ dv_flow_mgr-0.0.2.14180123344a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
57
+ dv_flow_mgr-0.0.2.14180123344a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
58
+ dv_flow_mgr-0.0.2.14180123344a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
59
+ dv_flow_mgr-0.0.2.14180123344a1.dist-info/RECORD,,