dv-flow-mgr 0.0.1.13798275241a1__tar.gz → 0.0.1.13824531439a1__tar.gz

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.
Files changed (102) hide show
  1. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/PKG-INFO +1 -1
  2. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/pyproject.toml +1 -1
  3. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/__init__.py +0 -2
  4. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/package_def.py +21 -2
  5. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/task_data.py +1 -0
  6. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/task_node.py +44 -16
  7. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/task_runner.py +1 -0
  8. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow_mgr.egg-info/PKG-INFO +1 -1
  9. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/system/test_pkg_discovery.py +3 -0
  10. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/test_data_merge.py +6 -0
  11. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/test_expr_eval.py +1 -1
  12. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/test_fileset.py +1 -1
  13. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/test_imports.py +1 -1
  14. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/test_pyclass.py +3 -3
  15. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/test_pytask_smoke.py +18 -15
  16. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/test_smoke.py +4 -4
  17. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/test_stdlib.py +2 -2
  18. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/.github/workflows/ci.yml +0 -0
  19. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/.gitignore +0 -0
  20. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/.vscode/settings.json +0 -0
  21. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/LICENSE +0 -0
  22. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/README.md +0 -0
  23. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/docs/KeyArchitecture.md +0 -0
  24. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/docs/Makefile +0 -0
  25. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/docs/Notes.md +0 -0
  26. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/docs/Roadmap.md +0 -0
  27. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/docs/RundirLayout.md +0 -0
  28. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/docs/Stages.md +0 -0
  29. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/docs/Steps.md +0 -0
  30. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/docs/Tasks.md +0 -0
  31. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/docs/TypesAndDefs.md +0 -0
  32. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/docs/Usecases.md +0 -0
  33. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/docs/conf.py +0 -0
  34. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/docs/index.rst +0 -0
  35. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/docs/intro.rst +0 -0
  36. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/docs/quickstart.rst +0 -0
  37. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/docs/reference.rst +0 -0
  38. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/fwperiph_dma.pss +0 -0
  39. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/ivpm.yaml +0 -0
  40. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/setup.cfg +0 -0
  41. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/__main__.py +0 -0
  42. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/cmds/cmd_run.py +0 -0
  43. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/eval_jq.py +0 -0
  44. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/expr_eval.py +0 -0
  45. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/expr_parser.py +0 -0
  46. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/fileset.py +0 -0
  47. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/fragment_def.py +0 -0
  48. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/out +0 -0
  49. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/package.py +0 -0
  50. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/package_import_spec.py +0 -0
  51. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/param.py +0 -0
  52. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/param_def.py +0 -0
  53. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/param_ref_eval.py +0 -0
  54. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/parsetab.py +0 -0
  55. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/pkg_rgy.py +0 -0
  56. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/share/flow.json +0 -0
  57. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/std/exec.py +0 -0
  58. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/std/fileset.py +0 -0
  59. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/std/flow.dv +0 -0
  60. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/std/message.py +0 -0
  61. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/std/task_null.py +0 -0
  62. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/task.py +0 -0
  63. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/task_ctor.py +0 -0
  64. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/task_def.py +0 -0
  65. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/task_exec_data.py +0 -0
  66. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/task_graph_builder.py +0 -0
  67. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/task_graph_runner.py +0 -0
  68. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/task_graph_runner_local.py +0 -0
  69. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/task_impl_data.py +0 -0
  70. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/task_listener_log.py +0 -0
  71. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/task_memento.py +0 -0
  72. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/task_output.py +0 -0
  73. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/task_params_ctor.py +0 -0
  74. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/type.py +0 -0
  75. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/type_def.py +0 -0
  76. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow/mgr/util.py +0 -0
  77. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow_mgr.egg-info/SOURCES.txt +0 -0
  78. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow_mgr.egg-info/dependency_links.txt +0 -0
  79. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow_mgr.egg-info/entry_points.txt +0 -0
  80. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow_mgr.egg-info/requires.txt +0 -0
  81. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/src/dv_flow_mgr.egg-info/top_level.txt +0 -0
  82. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/examples/example1/example1.flow +0 -0
  83. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/system/test_depends.py +0 -0
  84. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/system/test_stdlib.py +0 -0
  85. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/__init__.py +0 -0
  86. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/data/fileset/test1/files1/file1_1.sv +0 -0
  87. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/data/fileset/test1/files1/file1_2.sv +0 -0
  88. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/data/fileset/test1/files2/file2_1.sv +0 -0
  89. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/data/fileset/test1/files2/file2_2.sv +0 -0
  90. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/data/fileset/test1/flow.dv +0 -0
  91. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/data/fileset/test1 copy/files1/file1_1.sv +0 -0
  92. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/data/fileset/test1 copy/files1/file1_2.sv +0 -0
  93. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/data/fileset/test1 copy/files2/file2_1.sv +0 -0
  94. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/data/fileset/test1 copy/files2/file2_2.sv +0 -0
  95. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/data/fileset/test1 copy/test1.dfs +0 -0
  96. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/data/proj1/proj1.dfs +0 -0
  97. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/data/proj2/proj2.dfs +0 -0
  98. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/data/proj3/proj3.dfs +0 -0
  99. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/test_expr_parser.py +0 -0
  100. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/test_markers.py +0 -0
  101. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/test_parse.py +0 -0
  102. {dv_flow_mgr-0.0.1.13798275241a1 → dv_flow_mgr-0.0.1.13824531439a1}/tests/unit/test_smoke copy.sav +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.13798275241a1
3
+ Version: 0.0.1.13824531439a1
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
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "dv-flow-mgr"
8
- version = "0.0.1.13798275241a1"
8
+ version = "0.0.1.13824531439a1"
9
9
  dependencies = [
10
10
  'jq',
11
11
  'pydantic',
@@ -4,8 +4,6 @@ from .pkg_rgy import PkgRgy
4
4
  from .task_graph_runner import *
5
5
  from .task import *
6
6
  from .task_data import *
7
- from .task_graph_runner import TaskGraphRunner
8
- from .task_graph_runner_local import TaskGraphRunnerLocal
9
7
  from .task_graph_builder import TaskGraphBuilder
10
8
  from .task_node import task
11
9
  from .task_runner import TaskSetRunner
@@ -347,8 +347,27 @@ class PackageDef(BaseModel):
347
347
  if not os.path.isabs(imp_path):
348
348
  cls._log.debug("basedir: %s ; imp_path: %s" % (pkg.basedir, imp_path))
349
349
  imp_path = os.path.join(pkg.basedir, imp_path)
350
- if os.path.isdir(imp_path) and os.path.isfile(os.path.join(imp_path, "flow.dv")):
351
- imp_path = os.path.join(imp_path, "flow.dv")
350
+
351
+ # Search down the tree looking for a flow.dv file
352
+ if os.path.isdir(imp_path):
353
+ path = imp_path
354
+
355
+ while path is not None and os.path.isdir(path) and not os.path.isfile(os.path.join(path, "flow.dv")):
356
+ # Look one directory down
357
+ next_dir = None
358
+ for dir in os.listdir(path):
359
+ if os.path.isdir(os.path.join(path, dir)):
360
+ if next_dir is None:
361
+ next_dir = dir
362
+ else:
363
+ path = None
364
+ break
365
+ if path is not None:
366
+ path = next_dir
367
+
368
+ if path is not None and os.path.isfile(os.path.join(path, "flow.dv")):
369
+ imp_path = os.path.join(path, "flow.dv")
370
+
352
371
  if not os.path.isfile(imp_path):
353
372
  raise Exception("Import file %s not found" % imp_path)
354
373
 
@@ -48,6 +48,7 @@ class TaskDataInput(BaseModel):
48
48
  srcdir : str
49
49
  rundir : str
50
50
  params : Any
51
+ inputs : List[Any]
51
52
  memento : Any
52
53
 
53
54
  class TaskDataResult(BaseModel):
@@ -86,6 +86,13 @@ class TaskNode(object):
86
86
  self._log.debug("in_params[2]: %s" % ",".join(p.src for p in in_params))
87
87
  eval.setVar("in", in_params)
88
88
 
89
+ # Default inputs is the list of parameter sets that match 'consumes'
90
+ inputs = []
91
+ if self.consumes is not None and len(self.consumes):
92
+ for in_p in in_params:
93
+ if self._matches(in_p, self.consumes):
94
+ inputs.append(in_p)
95
+
89
96
  for name,field in self.params.model_fields.items():
90
97
  value = getattr(self.params, name)
91
98
  if type(value) == str:
@@ -107,6 +114,7 @@ class TaskNode(object):
107
114
  srcdir=self.srcdir,
108
115
  rundir=rundir,
109
116
  params=self.params,
117
+ inputs=inputs,
110
118
  memento=memento)
111
119
 
112
120
  self._log.debug("--> Call task method %s" % str(self.task))
@@ -134,26 +142,28 @@ class TaskNode(object):
134
142
  self._log.debug("consumes: %s" % str(self.consumes))
135
143
  for need in self.needs:
136
144
  for out in need.output.output:
137
- consumed = False
138
- for c in self.consumes:
139
- match = False
140
- for k,v in c.items():
141
- self._log.debug("k,v: %s,%s" % (k,v))
142
- if hasattr(out, k):
143
- self._log.debug("has attribute: %s" % str(getattr(out ,k)))
144
- if getattr(out, k) == v:
145
- self._log.debug("match")
146
- match = True
147
- break
148
- if match:
149
- consumed = True
150
- break
151
-
152
- if not consumed:
145
+ if not self._matches(out, self.consumes):
153
146
  self._log.debug("Propagating type %s from %s" % (
154
147
  getattr(out, "type", "<unknown>"),
155
148
  getattr(out, "src", "<unknown>")))
156
149
  output.append(out)
150
+
151
+ # consumed = False
152
+ # for c in self.consumes:
153
+ # match = False
154
+ # for k,v in c.items():
155
+ # self._log.debug("k,v: %s,%s" % (k,v))
156
+ # if hasattr(out, k):
157
+ # self._log.debug("has attribute: %s" % str(getattr(out ,k)))
158
+ # if getattr(out, k) == v:
159
+ # self._log.debug("match")
160
+ # match = True
161
+ # break
162
+ # if match:
163
+ # consumed = True
164
+ # break
165
+
166
+ # if not consumed:
157
167
  else:
158
168
  self._log.debug("non-passthrough: %s (only local outputs propagated)" % self.name)
159
169
  # empty dependency map
@@ -342,6 +352,24 @@ class TaskNodeCtorWrapper(TaskNodeCtor):
342
352
  else:
343
353
  setattr(obj, key, value)
344
354
  return obj
355
+
356
+ def _matches(self, params, consumes):
357
+ """Determines if a parameter set matches a set of consumed parameters"""
358
+ consumed = False
359
+ for c in consumes:
360
+ # All matching attribute keys must have same value
361
+ match = False
362
+ for k,v in c.items():
363
+ if hasattr(params, k):
364
+ if getattr(params, k) != v:
365
+ match = True
366
+ else:
367
+ match = False
368
+ break
369
+ if match:
370
+ consumed = True
371
+ break
372
+ return consumed
345
373
 
346
374
  def task(paramT,passthrough=False,consumes=None):
347
375
  """Decorator to wrap a task method as a TaskNodeCtor"""
@@ -195,6 +195,7 @@ class SingleTaskRunner(TaskRunner):
195
195
  srcdir=task.srcdir,
196
196
  rundir=self.rundir,
197
197
  params=task.params,
198
+ inputs=[],
198
199
  memento=memento)
199
200
 
200
201
  # TODO: notify of task start
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.13798275241a1
3
+ Version: 0.0.1.13824531439a1
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
@@ -5,6 +5,7 @@ import sys
5
5
  from dv_flow.mgr import PkgRgy
6
6
 
7
7
 
8
+ @pytest.mark.skip
8
9
  def test_import_specific(tmpdir):
9
10
  flow_dv = """
10
11
  package:
@@ -56,6 +57,7 @@ package:
56
57
  assert output.find("Hello There") != -1
57
58
 
58
59
 
60
+ @pytest.mark.skip
59
61
  def test_import_alias(tmpdir):
60
62
  flow_dv = """
61
63
  package:
@@ -126,6 +128,7 @@ package:
126
128
 
127
129
  assert output.find("Hello There (p2.foo)") != -1
128
130
 
131
+ @pytest.mark.skip
129
132
  def test_interface_impl(tmpdir):
130
133
 
131
134
  libdir = os.path.join(tmpdir, "lib")
@@ -9,6 +9,7 @@ from dv_flow.mgr import TaskData, FileSet, TaskData, TaskDataParamKindE
9
9
  from pydantic import BaseModel
10
10
  from shutil import copytree
11
11
 
12
+ @pytest.mark.skip
12
13
  def test_empty_in():
13
14
 
14
15
  in1 = TaskData()
@@ -18,6 +19,7 @@ def test_empty_in():
18
19
 
19
20
  assert len(out.params) == 0
20
21
 
22
+ @pytest.mark.skip
21
23
  def test_empty_combine_nonoverlap_in():
22
24
 
23
25
  in1 = TaskData()
@@ -33,6 +35,7 @@ def test_empty_combine_nonoverlap_in():
33
35
  assert "v2" in out.params.keys()
34
36
  assert out.getParamVal("v2") == "2"
35
37
 
38
+ @pytest.mark.skip
36
39
  def test_empty_combine_nonoverlap_in():
37
40
 
38
41
  in1 = TaskData()
@@ -48,6 +51,7 @@ def test_empty_combine_nonoverlap_in():
48
51
  assert "v2" in out.params.keys()
49
52
  assert out.getParamVal("v2") == "2"
50
53
 
54
+ @pytest.mark.skip
51
55
  def test_conflict_1():
52
56
 
53
57
  in1 = TaskData()
@@ -58,6 +62,7 @@ def test_conflict_1():
58
62
  with pytest.raises(Exception):
59
63
  out = TaskData.merge([in1, in2])
60
64
 
65
+ @pytest.mark.skip
61
66
  def test_fileset_merge_1():
62
67
  in1 = TaskData(src="in1")
63
68
  in1.addFileSet(FileSet(
@@ -75,6 +80,7 @@ def test_fileset_merge_1():
75
80
 
76
81
  assert len(out.filesets) == 2
77
82
 
83
+ @pytest.mark.skip
78
84
  def test_fileset_merge_common_dep_1():
79
85
  in1 = TaskData(src="in1")
80
86
  in1.addFileSet(FileSet(
@@ -19,7 +19,7 @@ def test_smoke():
19
19
  expr = parser.parse(content)
20
20
  result = eval.eval(expr)
21
21
 
22
- assert result == 10
22
+ assert result == '10'
23
23
 
24
24
 
25
25
 
@@ -76,7 +76,7 @@ def test_fileset_input_1(tmpdir):
76
76
  fs = FileSet(**(fs_l[0]))
77
77
 
78
78
  return TaskDataResult(
79
- output=[input.params.files]
79
+ output=[fs]
80
80
  )
81
81
 
82
82
  pkg_def = PackageDef.load(os.path.join(tmpdir, "test1", "flow.dv"))
@@ -8,7 +8,7 @@ import pytest
8
8
  from typing import Any, List, Union
9
9
  import yaml
10
10
  from dv_flow.mgr import PackageDef, TaskGraphBuilder, TaskSetRunner, task, TaskDataResult
11
- from dv_flow.mgr import TaskGraphBuilder, TaskGraphRunnerLocal, PackageDef
11
+ from dv_flow.mgr import TaskGraphBuilder, PackageDef
12
12
  from dv_flow.mgr.task_runner import TaskSetRunner
13
13
  from dv_flow.mgr.task_listener_log import TaskListenerLog
14
14
  from dv_flow.mgr.fileset import FileSet
@@ -2,7 +2,7 @@
2
2
  import os
3
3
  import asyncio
4
4
  import pytest
5
- from dv_flow.mgr import TaskGraphBuilder, TaskGraphRunnerLocal, PackageDef
5
+ from dv_flow.mgr import TaskGraphBuilder, PackageDef
6
6
  from dv_flow.mgr.task_runner import TaskSetRunner
7
7
  from dv_flow.mgr.task_listener_log import TaskListenerLog
8
8
  #from dv_flow_mgr.tasklib.builtin_pkg import TaskPyClass, TaskPyClassParams
@@ -283,11 +283,11 @@ package:
283
283
  - name: Sleep10
284
284
  uses: std.Exec
285
285
  with:
286
- command: sleep 10
286
+ command: sleep 2
287
287
  - name: Sleep5
288
288
  uses: std.Exec
289
289
  with:
290
- command: sleep 5
290
+ command: sleep 1
291
291
  - name: Sleep
292
292
  needs: [Sleep10, Sleep5]
293
293
 
@@ -6,7 +6,7 @@ import pydantic.dataclasses as pdc
6
6
  from pydantic import BaseModel
7
7
  from dv_flow.mgr.param import Param, ParamT
8
8
  from dv_flow.mgr.task import Task
9
- from dv_flow.mgr.task_data import TaskDataResult, TaskMarker, TaskParameterSet
9
+ from dv_flow.mgr.task_data import TaskDataResult, TaskMarker, TaskParameterSet, TaskDataItem
10
10
  from dv_flow.mgr.task_node import task as t_decorator
11
11
  from dv_flow.mgr.task_node import task
12
12
  from dv_flow.mgr.task_runner import SingleTaskRunner, TaskSetRunner
@@ -27,7 +27,7 @@ def test_smoke_1(tmpdir):
27
27
  print("Hello from run")
28
28
  return TaskDataResult()
29
29
 
30
- task1 = MyTask(srcdir="srcdir", p1="p1")
30
+ task1 = MyTask(name="task1", srcdir="srcdir", p1="p1")
31
31
  runner = SingleTaskRunner("rundir")
32
32
 
33
33
  result = asyncio.run(runner.run(task1))
@@ -100,7 +100,7 @@ def test_smoke_4(tmpdir):
100
100
  class Params(BaseModel):
101
101
  p1 : str = None
102
102
 
103
- class TaskData(TaskParameterSet):
103
+ class TaskData(TaskDataItem):
104
104
  val : int = -1
105
105
 
106
106
  called = []
@@ -110,7 +110,7 @@ def test_smoke_4(tmpdir):
110
110
  nonlocal called
111
111
  called.append(("MyTask1", input.params.p1))
112
112
  return TaskDataResult(
113
- output=[TaskData(val=1)]
113
+ output=[TaskData(type="foo", src=input.name, id="bar", val=1)]
114
114
  )
115
115
 
116
116
  @task(Params)
@@ -118,7 +118,7 @@ def test_smoke_4(tmpdir):
118
118
  nonlocal called
119
119
  called.append(("MyTask2", input.params.p1))
120
120
  return TaskDataResult(
121
- output=[TaskData(val=2)]
121
+ output=[TaskData(type="foo", src=input.name, id="bar", val=2)]
122
122
  )
123
123
 
124
124
  @task(Params)
@@ -138,14 +138,14 @@ def test_smoke_4(tmpdir):
138
138
 
139
139
  assert len(called) == 3
140
140
  assert called[-1][0] == "MyTask3"
141
- assert called[-1][1] == "[1, 2]"
141
+ assert called[-1][1] == "[1, 2]" or called[-1][1] == "[2, 1]"
142
142
 
143
143
  def test_smoke_5(tmpdir):
144
144
 
145
145
  class Params(BaseModel):
146
146
  p1 : ParamT[List[str]] = pdc.Field(default_factory=list)
147
147
 
148
- class TaskData(TaskParameterSet):
148
+ class TaskData(TaskDataItem):
149
149
  files : ParamT[List[str]] = pdc.Field(default_factory=list)
150
150
 
151
151
  called = []
@@ -155,7 +155,7 @@ def test_smoke_5(tmpdir):
155
155
  nonlocal called
156
156
  called.append(("MyTask1", input.params.p1))
157
157
  return TaskDataResult(
158
- output=[TaskData(files=["f1", "f2", "f3"])]
158
+ output=[TaskData(src=input.name, type="foo", id="bar", files=["f1", "f2", "f3"])]
159
159
  )
160
160
 
161
161
  @task(Params)
@@ -163,7 +163,7 @@ def test_smoke_5(tmpdir):
163
163
  nonlocal called
164
164
  called.append(("MyTask2", input.params.p1))
165
165
  return TaskDataResult(
166
- output=[TaskData(files=["f4", "f5", "f6"])]
166
+ output=[TaskData(src=input.name, type="foo", id="bar", files=["f4", "f5", "f6"])]
167
167
  )
168
168
 
169
169
  @task(Params)
@@ -184,14 +184,15 @@ def test_smoke_5(tmpdir):
184
184
 
185
185
  assert len(called) == 3
186
186
  assert called[-1][0] == "MyTask3"
187
- assert called[-1][1] == '["f1", "f2", "f3", "f4", "f5", "f6"]'
187
+ for it in ["f1", "f2", "f3", "f4", "f5", "f6"]:
188
+ assert it in called[-1][1]
188
189
 
189
190
  def test_smoke_6(tmpdir):
190
191
 
191
192
  class Params(BaseModel):
192
193
  p1 : ParamT[List[str]] = pdc.Field(default=["1","2"])
193
194
 
194
- class TaskData(TaskParameterSet):
195
+ class TaskData(TaskDataItem):
195
196
  files : ParamT[List[str]] = pdc.Field(default_factory=list)
196
197
 
197
198
  called = []
@@ -201,7 +202,7 @@ def test_smoke_6(tmpdir):
201
202
  nonlocal called
202
203
  called.append(("MyTask1", input.params.p1))
203
204
  return TaskDataResult(
204
- output=[TaskData(files=["f1", "f2", "f3"])]
205
+ output=[TaskData(src=input.name, type="foo", id="bar", files=["f1", "f2", "f3"])]
205
206
  )
206
207
 
207
208
  @task(Params)
@@ -209,7 +210,7 @@ def test_smoke_6(tmpdir):
209
210
  nonlocal called
210
211
  called.append(("MyTask2", input.params.p1))
211
212
  return TaskDataResult(
212
- output=[TaskData(files=["f4", "f5", "f6"])]
213
+ output=[TaskData(src=input.name, type="foo", id="bar", files=["f4", "f5", "f6"])]
213
214
  )
214
215
 
215
216
  @task(Params)
@@ -230,6 +231,8 @@ def test_smoke_6(tmpdir):
230
231
 
231
232
  assert len(called) == 3
232
233
  assert called[1][0] == "MyTask2"
233
- assert called[1][1] == ["1", "2", "4"]
234
+ for it in ["1", "2", "4"]:
235
+ assert it in called[1][1]
234
236
  assert called[-1][0] == "MyTask3"
235
- assert called[-1][1] == '["f1", "f2", "f3", "f4", "f5", "f6"]'
237
+ for it in ["f1", "f2", "f3", "f4", "f5", "f6"]:
238
+ assert it in called[-1][1]
@@ -18,10 +18,10 @@ package:
18
18
  tasks:
19
19
  - name: entry
20
20
  with:
21
- - name: p1
22
- type: int
23
- - name: p2
24
- type: int
21
+ p1:
22
+ type: int
23
+ p2:
24
+ type: int
25
25
  """
26
26
 
27
27
  pkg_def = PackageDef.loads(flowdv)
@@ -1,7 +1,7 @@
1
1
  import os
2
2
  import asyncio
3
3
  import pytest
4
- from dv_flow.mgr import TaskGraphBuilder, TaskGraphRunnerLocal, PackageDef
4
+ from dv_flow.mgr import TaskGraphBuilder, TaskSetRunner, PackageDef
5
5
  from dv_flow.mgr.util import loadProjPkgDef
6
6
 
7
7
  def test_message(tmpdir, capsys):
@@ -25,7 +25,7 @@ package:
25
25
  builder = TaskGraphBuilder(
26
26
  root_pkg=pkg_def,
27
27
  rundir=rundir)
28
- runner = TaskGraphRunnerLocal(rundir=rundir)
28
+ runner = TaskSetRunner(rundir=rundir)
29
29
 
30
30
  task = builder.mkTaskGraph("pkg1.foo")
31
31