-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support invisible nodes and fix arrows #1
base: base-sha/0c0cf618533f05e19a2ea0ba81b4e8842864ea00
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,7 @@ | ||
BACK = "back" | ||
BOTH: str = "both" | ||
FORWARD: str = "forward" | ||
NONE = "none" | ||
|
||
DIAMOND = "diamond" | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,10 @@ | ||
from graphviz2drawio.models import DotAttr | ||
|
||
from ..models.Rect import Rect | ||
from . import MxConst | ||
from .Curve import Curve | ||
from .GraphObj import GraphObj | ||
from .Styles import Styles | ||
from .Text import Text | ||
|
||
|
||
|
@@ -11,8 +14,10 @@ class Edge(GraphObj): | |
def __init__( | ||
self, | ||
sid: str, | ||
*, | ||
fr: str, | ||
to: str, | ||
is_directed: bool, | ||
curve: Curve | None, | ||
labels: list[Text], | ||
) -> None: | ||
|
@@ -21,10 +26,77 @@ def __init__( | |
self.to = to | ||
self.curve = curve | ||
self.line_style = None | ||
self.dir = None | ||
self.dir = DotAttr.FORWARD if is_directed else DotAttr.NONE | ||
self.arrowtail = None | ||
self.arrowhead = None | ||
self.labels = labels | ||
|
||
def get_edge_style( | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. issue (complexity): Consider simplifying the code by reducing methods and parameters. The new code introduces additional complexity that could be simplified. Here are some points to consider:
Consider simplifying the code by removing unnecessary parameters, reducing nested conditionals, and consolidating style formatting logic. This will make the code easier to read, understand, and maintain. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this comment correct? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this comment helpful? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is the comment type correct? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is the comment area correct? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What type of LLM test could this comment become?
|
||
self, | ||
source_geo: Rect | None, | ||
target_geo: Rect | None, | ||
) -> str: | ||
dashed = 1 if self.line_style == DotAttr.DASHED else 0 | ||
|
||
end_arrow, end_fill = self._get_arrow_shape_and_fill( | ||
arrow=self.arrowhead, | ||
active_dirs={DotAttr.FORWARD, DotAttr.BOTH}, | ||
) | ||
start_arrow, start_fill = self._get_arrow_shape_and_fill( | ||
self.arrowtail, | ||
active_dirs={DotAttr.BACK, DotAttr.BOTH}, | ||
) | ||
|
||
if self.curve is not None: | ||
style = Styles.EDGE.format( | ||
dashed=dashed, | ||
end_arrow=end_arrow, | ||
end_fill=end_fill, | ||
start_arrow=start_arrow, | ||
start_fill=start_fill, | ||
) + (MxConst.CURVED if self.curve.is_bezier else MxConst.SHARP) | ||
|
||
if source_geo is not None: | ||
exit_x, exit_y = source_geo.relative_location_along_perimeter( | ||
self.curve.start, | ||
) | ||
style += f"exitX={exit_x:.4f};exitY={exit_y:.4f};" | ||
if target_geo is not None: | ||
entry_x, entry_y = target_geo.relative_location_along_perimeter( | ||
self.curve.end, | ||
) | ||
style += f"entryX={entry_x:.4f};entryY={entry_y:.4f};" | ||
|
||
return style | ||
|
||
return Styles.EDGE.format( | ||
end_arrow=end_arrow, | ||
dashed=dashed, | ||
end_fill=end_fill, | ||
start_arrow=start_arrow, | ||
start_fill=start_fill, | ||
) | ||
|
||
def _get_arrow_shape_and_fill( | ||
self, | ||
arrow: str | None, | ||
active_dirs: set[str], | ||
) -> tuple[str, int]: | ||
shape = MxConst.BLOCK if self.dir in active_dirs else MxConst.NONE | ||
fill = 1 if self.dir in active_dirs else 0 | ||
|
||
if arrow is not None: | ||
if arrow == "none": | ||
shape = MxConst.NONE | ||
fill = 0 | ||
else: | ||
if arrow[0] == DotAttr.NO_FILL: | ||
fill = 0 | ||
if arrow[1:] == DotAttr.DIAMOND: | ||
shape = MxConst.DIAMOND | ||
|
||
return shape, fill | ||
|
||
def curve_start_end(self): | ||
if self.dir == DotAttr.BACK: | ||
return self.curve.end, self.curve.start | ||
|
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -1,10 +1,18 @@ | ||||||
_whitelist_attrs = ["dir"] | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. suggestion: Consider renaming The term 'whitelist' can be replaced with 'allowed' to use more inclusive language. Consider renaming
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this comment correct? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this comment helpful? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is the comment type correct? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is the comment area correct? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What type of LLM test could this comment become?
|
||||||
|
||||||
|
||||||
class GraphObj: | ||||||
|
||||||
def __init__(self, sid, gid) -> None: | ||||||
self.sid = sid | ||||||
self.gid = gid | ||||||
|
||||||
def enrich_from_graph(self, attrs) -> None: | ||||||
for k, v in attrs: | ||||||
if k in self.__dict__ and self.__dict__[k] is not None: | ||||||
if ( | ||||||
k not in _whitelist_attrs | ||||||
and k in self.__dict__ | ||||||
and self.__dict__[k] is not None | ||||||
): | ||||||
continue | ||||||
self.__setattr__(k, v) |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -2,7 +2,6 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from xml.etree.ElementTree import Element, SubElement, indent, tostring | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from graphviz2drawio.models import DotAttr | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from graphviz2drawio.models.Rect import Rect | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from graphviz2drawio.mx import MxConst | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from graphviz2drawio.mx.Curve import Curve | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from graphviz2drawio.mx.Edge import Edge | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -27,18 +26,26 @@ def __init__(self, nodes: OrderedDict[str, Node], edges: list[Edge]) -> None: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def add_edge(self, edge: Edge) -> None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
source, target = self.get_edge_source_target(edge) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
style = self.get_edge_style(edge, source.rect, target.rect) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
style = edge.get_edge_style( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
source_geo=source.rect if source is not None else None, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
target_geo=target.rect if target is not None else None, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attrib = { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"id": edge.sid, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"style": style, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"parent": "1", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"edge": "1", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if source is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attrib["source"] = source.sid | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if target is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attrib["target"] = target.sid | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
edge_element = SubElement( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
self.root, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MxConst.CELL, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attrib={ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"id": edge.sid, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"style": style, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"parent": "1", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"edge": "1", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"source": source.sid, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"target": target.sid, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attrib=attrib, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if len(edge.labels) > 0: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -58,52 +65,10 @@ def add_edge(self, edge: Edge) -> None: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
self.add_mx_geo_with_points(edge_element, edge.curve) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def get_edge_source_target(self, edge: Edge) -> tuple[Node, Node]: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def get_edge_source_target(self, edge: Edge) -> tuple[Node | None, Node | None]: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if edge.dir == DotAttr.BACK: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return self.nodes[edge.to], self.nodes[edge.fr] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return self.nodes[edge.fr], self.nodes[edge.to] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
@staticmethod | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def get_edge_style( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
edge: Edge, # pytype: disable=invalid-annotation | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
source_geo: Rect | None, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
target_geo: Rect | None, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) -> str: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
end_arrow = MxConst.BLOCK | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
end_fill = 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dashed = 1 if edge.line_style == DotAttr.DASHED else 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if edge.arrowtail is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tail = edge.arrowtail | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if edge.arrowtail[0] == DotAttr.NO_FILL: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
end_fill = 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tail = edge.arrowtail[1:] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if tail == DotAttr.DIAMOND: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
end_arrow = MxConst.DIAMOND | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if edge.curve is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
style = Styles.EDGE.format( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
end_arrow=end_arrow, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dashed=dashed, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
end_fill=end_fill, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) + (MxConst.CURVED if edge.curve.is_bezier else MxConst.SHARP) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if source_geo is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
exit_x, exit_y = source_geo.relative_location_along_perimeter( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
edge.curve.start, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
style += f"exitX={exit_x};exitY={exit_y};" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if target_geo is not None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
entry_x, entry_y = target_geo.relative_location_along_perimeter( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
edge.curve.end, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
style += f"entryX={entry_x};entryY={entry_y};" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return style | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return Styles.EDGE.format( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
end_arrow=end_arrow, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dashed=dashed, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
end_fill=end_fill, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return self.nodes.get(edge.to), self.nodes.get(edge.fr) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+68
to
+70
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. suggestion: Consider using Optional for type hinting. Using
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this comment correct? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this comment helpful? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is the comment type correct? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is the comment area correct? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What type of LLM test could this comment become?
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return self.nodes.get(edge.fr), self.nodes.get(edge.to) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def add_node(self, node: Node) -> None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fill = node.fill if node.fill is not None else MxConst.NONE | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,10 +6,12 @@ | |
# Make this subclass StrEnum when dropping Py 3.10 support | ||
class Styles(Enum): | ||
NODE = "verticalAlign=top;align=left;overflow=fill;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeColor={stroke};strokeWidth=1;fillColor={fill};" | ||
EDGE = "html=1;endArrow={end_arrow};dashed={dashed};endFill={end_fill};" | ||
EDGE = "html=1;endArrow={end_arrow};dashed={dashed};endFill={end_fill};startArrow={start_arrow};startFill={start_fill};" | ||
EDGE_LABEL = ( | ||
"edgeLabel;html=1;align=center;verticalAlign=bottom;resizable=0;points=[];" | ||
) | ||
EDGE_INVIS = "rounded=1;html=1;exitX={exit_x:.3g};exitY={exit_y:.3g};jettySize=auto;curved={curved};endArrow={end_arrow};dashed={dashed};endFill={end_fill};" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. issue (complexity): Consider refactoring to reuse the existing The new code introduces a new style from enum import Enum
from . import Shape
class Styles(Enum):
NODE = "verticalAlign=top;align=left;overflow=fill;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeColor={stroke};strokeWidth=1;fillColor={fill};"
EDGE = "html=1;endArrow={end_arrow};dashed={dashed};endFill={end_fill};startArrow={start_arrow};startFill={start_fill};"
EDGE_LABEL = "edgeLabel;html=1;align=center;verticalAlign=bottom;resizable=0;points=[];"
TEXT = "margin:0px;text-align:{align};{margin};font-size:{size}px;font-family:{family};color:{color};"
ELLIPSE = "ellipse;" + NODE
CIRCLE = "ellipse;aspect=fixed;" + NODE
HEXAGON = "shape=hexagon;perimeter=hexagonPerimeter2;" + NODE
EGG = "shape=mxgraph.flowchart.display;direction=south;" + NODE
TRIANGLE = "triangle;direction=north;" + NODE
LINE = "line;strokeWidth=2;verticalAlign=bottom;labelPosition=center;verticalLabelPosition=top;align=center;" + NODE
@staticmethod
def edge_invis(exit_x, exit_y, curved, end_arrow, dashed, end_fill):
return f"rounded=1;html=1;exitX={exit_x:.3g};exitY={exit_y:.3g};jettySize=auto;curved={curved};" + Styles.EDGE.format(
end_arrow=end_arrow, dashed=dashed, end_fill=end_fill, start_arrow="", start_fill=""
) This approach keeps the code DRY (Don't Repeat Yourself) and makes it more modular and maintainable. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this comment correct? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this comment helpful? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is the comment type correct? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is the comment area correct? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What type of LLM test could this comment become?
|
||
|
||
TEXT = "margin:0px;text-align:{align};{margin};font-size:{size}px;font-family:{family};color:{color};" | ||
|
||
ELLIPSE = "ellipse;" + NODE | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
digraph G { | ||
graph [rankdir = LR, splines=ortho]; | ||
|
||
node[shape=record]; | ||
|
||
emmc [label="eMMC" color="blue"] | ||
boot_host [label="" style=invis width=0 height=2] | ||
spinor [label="SPI NOR" color="green"] | ||
soc [label="SoC" height=4] | ||
nand [label="Raw NAND" color="yellow"] | ||
dev_eth [label="" style=invis width=0 height=2] | ||
eeprom [label="I2C EEPROM" color="red"] | ||
|
||
emmc -> soc [arrowhead=none] | ||
boot_host -> soc [xlabel="Boot Source"] | ||
boot_host -> soc [xlabel="USB" dir=both] | ||
spinor -> soc [arrowhead=none] | ||
soc -> nand [arrowhead=none] | ||
soc -> dev_eth [xlabel="USB-OTG" dir=both] | ||
soc -> dev_eth [xlabel="Ethernet" dir=both] | ||
soc -> eeprom [arrowhead=none] | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
issue (complexity): Consider keeping the
_approx
method and adding type annotations for clarity.The new code is more complex and loses some of the original functionality. Specifically:
_approx
method, which provided a way to approximate the ratio to a center value within a delta, has been removed. This might lead to less precise results inx_ratio
andy_ratio
methods._approx
method, making it easier to understand and maintain. The new code inlines the ratio calculation, which can make it harder to modify or extend in the future.To address these issues, consider keeping the
_approx
method and adding type annotations for clarity:This approach maintains the original functionality and readability while adding type annotations for clarity.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this comment correct?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this comment helpful?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the comment type correct?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the comment area correct?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What type of LLM test could this comment become?