Skip to content

Commit

Permalink
Merge branch 'format-yapf-facebook' into format-black--yapf-facebook
Browse files Browse the repository at this point in the history
  • Loading branch information
peternowee committed May 29, 2021
2 parents 32d50de + 6988d1e commit aaf48c0
Show file tree
Hide file tree
Showing 4 changed files with 146 additions and 312 deletions.
130 changes: 45 additions & 85 deletions dot_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,32 +12,16 @@
import sys

from pyparsing import (
nestedExpr,
Literal,
CaselessLiteral,
Word,
OneOrMore,
Forward,
Group,
Optional,
Combine,
restOfLine,
cStyleComment,
nums,
alphanums,
printables,
ParseException,
ParseResults,
CharsNotIn,
QuotedString,
nestedExpr, Literal, CaselessLiteral, Word, OneOrMore, Forward, Group,
Optional, Combine, restOfLine, cStyleComment, nums, alphanums, printables,
ParseException, ParseResults, CharsNotIn, QuotedString
)

import pydot

__author__ = ['Michael Krause', 'Ero Carrera']
__license__ = 'MIT'


PY3 = sys.version_info >= (3, 0, 0)
if PY3:
str_type = str
Expand Down Expand Up @@ -72,9 +56,7 @@ def __init__(self, default_type, attrs):

def __repr__(self):
return "%s(%s, %r)" % (
self.__class__.__name__,
self.default_type,
self.attrs,
self.__class__.__name__, self.default_type, self.attrs
)


Expand All @@ -88,9 +70,8 @@ def push_top_graph_stmt(str, loc, toks):
for element in toks:

if (
isinstance(element, (ParseResults, tuple, list))
and len(element) == 1
and isinstance(element[0], str_type)
isinstance(element, (ParseResults, tuple, list)) and
len(element) == 1 and isinstance(element[0], str_type)
):

element = element[0]
Expand Down Expand Up @@ -126,9 +107,7 @@ def push_top_graph_stmt(str, loc, toks):
add_elements(g, element)

else:
raise ValueError(
'Unknown element statement: {s}'.format(s=element)
)
raise ValueError('Unknown element statement: {s}'.format(s=element))

for g in top_graphs:
update_parent_graph_hierarchy(g)
Expand All @@ -143,7 +122,7 @@ def update_parent_graph_hierarchy(g, parent_graph=None, level=0):
if parent_graph is None:
parent_graph = g

for key_name in ('edges',):
for key_name in ('edges', ):

if isinstance(g, pydot.frozendict):
item_dict = g
Expand All @@ -156,8 +135,8 @@ def update_parent_graph_hierarchy(g, parent_graph=None, level=0):
for key, objs in item_dict[key_name].items():
for obj in objs:
if (
'parent_graph' in obj
and obj['parent_graph'].get_parent_graph() == g
'parent_graph' in obj and
obj['parent_graph'].get_parent_graph() == g
):
if obj['parent_graph'] is g:
pass
Expand All @@ -168,7 +147,7 @@ def update_parent_graph_hierarchy(g, parent_graph=None, level=0):
for idx, vertex in enumerate(obj['points']):
if isinstance(
vertex,
(pydot.Graph, pydot.Subgraph, pydot.Cluster),
(pydot.Graph, pydot.Subgraph, pydot.Cluster)
):
vertex.set_parent_graph(parent_graph)
if isinstance(vertex, pydot.frozendict):
Expand Down Expand Up @@ -251,9 +230,7 @@ def add_elements(
g.obj_dict['attributes'].update(element.attrs)

else:
raise ValueError(
'Unknown element statement: {s}'.format(s=element)
)
raise ValueError('Unknown element statement: {s}'.format(s=element))


def push_graph_stmt(str, loc, toks):
Expand Down Expand Up @@ -334,12 +311,9 @@ def push_edge_stmt(str, loc, toks):

if isinstance(toks[2][0], ParseResults):

n_next_list = [
[
n.get_name(),
]
for n in toks[2][0]
]
n_next_list = [[
n.get_name(),
] for n in toks[2][0]]
for n_next in [n for n in n_next_list]:
n_next_port = do_node_ports(n_next)
e.append(pydot.Edge(n_prev, n_next[0] + n_next_port, **attrs))
Expand All @@ -366,8 +340,9 @@ def push_edge_stmt(str, loc, toks):

for n_next in [n for n in tuple(toks)[2::2]]:

if isinstance(n_next, P_AttrList) or not isinstance(
n_next[0], str_type
if (
isinstance(n_next, P_AttrList) or
not isinstance(n_next[0], str_type)
):
continue

Expand Down Expand Up @@ -448,35 +423,32 @@ def parse_html(s, loc, toks):

opener = '<'
closer = '>'
html_text = (
nestedExpr(opener, closer, (CharsNotIn(opener + closer)))
.setParseAction(parse_html)
.leaveWhitespace()
)
html_text = nestedExpr(opener, closer,
(CharsNotIn(opener + closer)
)).setParseAction(parse_html).leaveWhitespace()

ID = (
identifier | html_text | double_quoted_string | alphastring_
).setName("ID")
ID = (identifier | html_text | double_quoted_string |
alphastring_).setName("ID")

float_number = Combine(
Optional(minus) + OneOrMore(Word(nums + "."))
).setName("float_number")
float_number = Combine(Optional(minus) +
OneOrMore(Word(nums +
"."))).setName("float_number")

righthand_id = (float_number | ID).setName("righthand_id")

port_angle = (at + ID).setName("port_angle")

port_location = (
OneOrMore(Group(colon + ID))
| Group(colon + lparen + ID + comma + ID + rparen)
OneOrMore(Group(colon + ID)) |
Group(colon + lparen + ID + comma + ID + rparen)
).setName("port_location")

port = (
Group(port_location + Optional(port_angle))
| Group(port_angle + Optional(port_location))
Group(port_location + Optional(port_angle)) |
Group(port_angle + Optional(port_location))
).setName("port")

node_id = ID + Optional(port)
node_id = (ID + Optional(port))
a_list = OneOrMore(
ID + Optional(equals + righthand_id) + Optional(comma.suppress())
).setName("a_list")
Expand All @@ -485,54 +457,42 @@ def parse_html(s, loc, toks):
lbrack.suppress() + Optional(a_list) + rbrack.suppress()
).setName("attr_list")

attr_stmt = (Group(graph_ | node_ | edge_) + attr_list).setName(
"attr_stmt"
)
attr_stmt = (Group(graph_ | node_ | edge_) +
attr_list).setName("attr_stmt")

edgeop = (Literal("--") | Literal("->")).setName("edgeop")

stmt_list = Forward()
graph_stmt = Group(
lbrace.suppress()
+ Optional(stmt_list)
+ rbrace.suppress()
+ Optional(semi.suppress())
lbrace.suppress() + Optional(stmt_list) + rbrace.suppress() +
Optional(semi.suppress())
).setName("graph_stmt")

edge_point = Forward()

edgeRHS = OneOrMore(edgeop + edge_point)
edge_stmt = edge_point + edgeRHS + Optional(attr_list)

subgraph = Group(subgraph_ + Optional(ID) + graph_stmt).setName(
"subgraph"
)
subgraph = Group(subgraph_ + Optional(ID) +
graph_stmt).setName("subgraph")

edge_point << Group(subgraph | graph_stmt | node_id).setName(
'edge_point'
)
edge_point << Group(subgraph | graph_stmt |
node_id).setName('edge_point')

node_stmt = (
node_id + Optional(attr_list) + Optional(semi.suppress())
).setName("node_stmt")
node_stmt = (node_id + Optional(attr_list) +
Optional(semi.suppress())).setName("node_stmt")

assignment = (ID + equals + righthand_id).setName("assignment")
stmt = (
assignment
| edge_stmt
| attr_stmt
| subgraph
| graph_stmt
| node_stmt
assignment | edge_stmt | attr_stmt | subgraph | graph_stmt |
node_stmt
).setName("stmt")
stmt_list << OneOrMore(stmt + Optional(semi.suppress()))

graphparser = OneOrMore(
(
Optional(strict_)
+ Group((graph_ | digraph_))
+ Optional(ID)
+ graph_stmt
Optional(strict_) + Group((graph_ | digraph_)) + Optional(ID) +
graph_stmt
).setResultsName("graph")
)

Expand Down

0 comments on commit aaf48c0

Please sign in to comment.