/ scripts / core_graph.py
core_graph.py
 1  #!/usr/bin/env python3
 2  
 3  import pathlib
 4  import sys
 5  from argparse import ArgumentParser, FileType
 6  
 7  par = ArgumentParser()
 8  par.add_argument("-p", "--prune", action="store_true", help="ignore disconnected nodes")
 9  par.add_argument("-f", "--format", default="elk", nargs="?")
10  par.add_argument("ofile", type=FileType("w"))
11  
12  arg = par.parse_args()
13  
14  sys.path.insert(0, str(pathlib.Path(__file__).parent.parent))
15  
16  from coreblocks.params.genparams import GenParams  # noqa: E402
17  from transactron.graph import TracingFragment  # noqa: E402
18  from test.test_core import CoreTestElaboratable  # noqa: E402
19  from coreblocks.params.configurations import basic_core_config  # noqa: E402
20  from transactron.core import TransactronContextElaboratable  # noqa: E402
21  from transactron.core.keys import TransactionManagerKey  # noqa: E402
22  from transactron.utils import DependencyManager, DependencyContext  # noqa: E402
23  
24  with DependencyContext(DependencyManager()):
25      gp = GenParams(basic_core_config.replace(debug_signals=False))
26      elaboratable = CoreTestElaboratable(gp)
27      tm = TransactronContextElaboratable(elaboratable)
28      fragment = TracingFragment.get(tm, platform=None).prepare()
29  
30      core = fragment
31      while not hasattr(core, "manager"):
32          core = core._tracing_original  # type: ignore
33  
34      mgr = core.manager.get_dependency(TransactionManagerKey())  # type: ignore
35  
36      with arg.ofile as fp:
37          graph = mgr.visual_graph(fragment)
38          if arg.prune:
39              graph.prune()
40          graph.dump(fp, arg.format)