3 # This script extracts the VPlan digraphs from the vectoriser debug messages
4 # and saves them in individual dot files (one for each plan). Optionally, and
5 # providing 'dot' is installed, it can also render the dot into a PNG file.
7 from __future__
import print_function
15 parser
= argparse
.ArgumentParser()
16 parser
.add_argument("--png", action
="store_true")
17 args
= parser
.parse_args()
19 dot
= shutil
.which("dot")
20 if args
.png
and not dot
:
21 raise RuntimeError("Can't export to PNG without 'dot' in the system")
23 pattern
= re
.compile(r
"(digraph VPlan {.*?\n})", re
.DOTALL
)
24 matches
= re
.findall(pattern
, sys
.stdin
.read())
27 m
= re
.search("graph \[.+(VF=.+,UF.+)", vplan
)
29 raise ValueError("Can't get the right VPlan name")
30 name
= re
.sub("[^a-zA-Z0-9]", "", m
.group(1))
33 filename
= "VPlan" + name
+ ".png"
34 print("Exporting " + name
+ " to PNG via dot: " + filename
)
36 [dot
, "-Tpng", "-o", filename
],
38 stdin
=subprocess
.PIPE
,
39 stdout
=subprocess
.PIPE
,
40 stderr
=subprocess
.PIPE
,
42 out
, err
= p
.communicate(input=vplan
)
44 raise RuntimeError("Error running dot: " + err
)
47 filename
= "VPlan" + name
+ ".dot"
48 print("Exporting " + name
+ " to DOT: " + filename
)
49 with
open(filename
, "w") as out
: