Skip to content
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

Fix ZXLive not loading graphs as Multigraphs with auto simplify disabled #360

Merged
merged 4 commits into from
Oct 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions zxlive/custom_rule.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,8 @@ def from_json(cls, json_str: Union[str,Dict[str,Any]]) -> "CustomRule":
rhs_graph = GraphT.from_json(d['rhs_graph'])
# Mypy issue: https://github.com/python/mypy/issues/11673
assert (isinstance(lhs_graph, GraphT) and isinstance(rhs_graph, GraphT)) # type: ignore
lhs_graph.set_auto_simplify(False)
rhs_graph.set_auto_simplify(False)
return cls(lhs_graph, rhs_graph, d['name'], d['description'])

def to_rewrite_data(self) -> "RewriteData":
Expand Down
31 changes: 24 additions & 7 deletions zxlive/dialogs.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,25 +139,42 @@ def import_diagram_from_file(file_path: str, selected_filter: str = FileFormat.A
elif selected_format == FileFormat.ZXRule:
return ImportRuleOutput(selected_format, file_path, CustomRule.from_json(data))
elif selected_format in (FileFormat.QGraph, FileFormat.Json):
return ImportGraphOutput(selected_format, file_path, GraphT.from_json(data)) # type: ignore # This is something that needs to be better annotated in PyZX
g = GraphT.from_json(data)
if TYPE_CHECKING: assert isinstance(g, GraphT)
g.set_auto_simplify(False)
return ImportGraphOutput(selected_format, file_path, g) # type: ignore # This is something that needs to be better annotated in PyZX
elif selected_format == FileFormat.QASM:
return ImportGraphOutput(selected_format, file_path, Circuit.from_qasm(data).to_graph()) # type: ignore
g = Circuit.from_qasm(data).to_graph(zh=True,backend='multigraph')
if TYPE_CHECKING: assert isinstance(g, GraphT)
g.set_auto_simplify(False)
return ImportGraphOutput(selected_format, file_path, ) # type: ignore
elif selected_format == FileFormat.TikZ:
try:
return ImportGraphOutput(selected_format, file_path, GraphT.from_tikz(data)) # type: ignore
g = GraphT.from_tikz(data)
if TYPE_CHECKING: assert isinstance(g, GraphT)
g.set_auto_simplify(False)
return ImportGraphOutput(selected_format, file_path, g) # type: ignore
except ValueError:
raise ValueError("Probable reason: attempted to import a proof from TikZ, which is not supported.")
else:
assert selected_format == FileFormat.All
try:
circ = Circuit.load(file_path)
return ImportGraphOutput(FileFormat.QASM, file_path, circ.to_graph()) # type: ignore
g = Circuit.load(file_path).to_graph(zh=True,backend='multigraph')
if TYPE_CHECKING: assert isinstance(g, GraphT)
g.set_auto_simplify(False)
return ImportGraphOutput(FileFormat.QASM, file_path, g) # type: ignore
except TypeError:
try:
return ImportGraphOutput(FileFormat.QGraph, file_path, GraphT.from_json(data)) # type: ignore
g = GraphT.from_json(data)
if TYPE_CHECKING: assert isinstance(g, GraphT)
g.set_auto_simplify(False)
return ImportGraphOutput(FileFormat.QGraph, file_path, g) # type: ignore
except Exception:
try:
return ImportGraphOutput(FileFormat.TikZ, file_path, GraphT.from_tikz(data)) # type: ignore
g = GraphT.from_tikz(data)
if TYPE_CHECKING: assert isinstance(g, GraphT)
g.set_auto_simplify(False)
return ImportGraphOutput(FileFormat.TikZ, file_path, g) # type: ignore
except:
show_error_msg(f"Failed to import {selected_format.name} file",
f"Couldn't determine filetype: {file_path}.", parent=parent)
Expand Down
1 change: 1 addition & 0 deletions zxlive/editor_base_panel.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ def add_vert(self, x: float, y: float, edges: list[EItem]) -> None:

def add_edge(self, u: VT, v: VT, verts: list[VItem]) -> None:
"""Add an edge between vertices u and v. `verts` is a list of VItems that collide with the edge.
If self.snap_vertex_edge is true, then we try to connect `u` through all the `vertices` in `verts`, and then to `v`.
"""
cmd: BaseCommand
graph = self.graph_view.graph_scene.g
Expand Down
4 changes: 3 additions & 1 deletion zxlive/proof.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ def from_json(json_str: Union[str,Dict[str,Any]]) -> "Rewrite":
grouped_rewrites = d.get("grouped_rewrites")
graph = GraphT.from_json(d["graph"])
assert isinstance(graph, GraphT)
graph.set_auto_simplify(False)

return Rewrite(
display_name=d.get("display_name", d["rule"]), # Old proofs may not have display names
Expand Down Expand Up @@ -213,7 +214,8 @@ def from_json(json_str: Union[str,Dict[str,Any]]) -> "ProofModel":
d = json_str
initial_graph = GraphT.from_json(d["initial_graph"])
# Mypy issue: https://github.com/python/mypy/issues/11673
assert isinstance(initial_graph, GraphT) # type: ignore
if TYPE_CHECKING: assert isinstance(initial_graph, GraphT)
initial_graph.set_auto_simplify(False)
model = ProofModel(initial_graph)
for step in d["proof_steps"]:
rewrite = Rewrite.from_json(step)
Expand Down
Loading