diff --git a/CHANGELOG.md b/CHANGELOG.md index a0f40251f..53c6f3421 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,6 +59,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Empty outputs layer removed from flow's partial order. - Flow well-formedness check does not trigger false negative for flows on open graphs without outputs. +- #535, #559: Added a padding beneath the measurement-order arrow when visualizing open graphs with layers, keeping both the arrow and its label inside the visualization box. + ### Changed - #452: Use `uv` for dependency management diff --git a/graphix/visualization.py b/graphix/visualization.py index 1212e6023..b4f36e210 100644 --- a/graphix/visualization.py +++ b/graphix/visualization.py @@ -543,8 +543,13 @@ def _draw_layers(self, plot_lims: PlotLims) -> PlotLims: ) # Update plot_lims to take into account label - trans = base + offset + padding = mtransforms.ScaledTranslation(0, -8 / 72, fig.dpi_scale_trans) + + trans = base + offset + padding _, ydisp = trans.transform((0, plot_lims.ymin)) + + # inverted transformation depends on the current plot limits + self._set_plot_lims(plot_lims) return replace(plot_lims, ymin=base.inverted().transform((0, ydisp))[1]) def _draw_measurements_labels(self) -> None: diff --git a/tests/baseline/test_causal_flow_draw.png b/tests/baseline/test_causal_flow_draw.png index 9c474e962..1c86603f6 100644 Binary files a/tests/baseline/test_causal_flow_draw.png and b/tests/baseline/test_causal_flow_draw.png differ diff --git a/tests/baseline/test_draw_graph_linear_graph.png b/tests/baseline/test_draw_graph_linear_graph.png new file mode 100644 index 000000000..de8e8820d Binary files /dev/null and b/tests/baseline/test_draw_graph_linear_graph.png differ diff --git a/tests/baseline/test_draw_graph_reference_False.png b/tests/baseline/test_draw_graph_reference_False.png index 55b09a743..b3abc0570 100644 Binary files a/tests/baseline/test_draw_graph_reference_False.png and b/tests/baseline/test_draw_graph_reference_False.png differ diff --git a/tests/baseline/test_draw_graph_reference_True.png b/tests/baseline/test_draw_graph_reference_True.png index 64972df49..2521ecd92 100644 Binary files a/tests/baseline/test_draw_graph_reference_True.png and b/tests/baseline/test_draw_graph_reference_True.png differ diff --git a/tests/baseline/test_gflow_draw.png b/tests/baseline/test_gflow_draw.png index 6288c67ea..3c4aad181 100644 Binary files a/tests/baseline/test_gflow_draw.png and b/tests/baseline/test_gflow_draw.png differ diff --git a/tests/baseline/test_og_draw.png b/tests/baseline/test_og_draw.png index 1f14d4b1e..661a1ca53 100644 Binary files a/tests/baseline/test_og_draw.png and b/tests/baseline/test_og_draw.png differ diff --git a/tests/baseline/test_pauli_flow_draw.png b/tests/baseline/test_pauli_flow_draw.png index 642ace731..e752438f1 100644 Binary files a/tests/baseline/test_pauli_flow_draw.png and b/tests/baseline/test_pauli_flow_draw.png differ diff --git a/tests/baseline/test_xzcorr_draw.png b/tests/baseline/test_xzcorr_draw.png index a365384f7..bea19994b 100644 Binary files a/tests/baseline/test_xzcorr_draw.png and b/tests/baseline/test_xzcorr_draw.png differ diff --git a/tests/test_visualization.py b/tests/test_visualization.py index 598082bc8..7e21f98ac 100644 --- a/tests/test_visualization.py +++ b/tests/test_visualization.py @@ -8,7 +8,7 @@ import networkx as nx import pytest -from graphix import Circuit, Pattern, command +from graphix import Circuit, Pattern, Plane, command from graphix.fundamentals import ANGLE_PI from graphix.measurements import Measurement from graphix.opengraph import OpenGraph, OpenGraphError @@ -265,3 +265,18 @@ def test_draw_graph_reference(flow_and_not_pauli_presimulate: bool) -> Figure: flow_from_pattern=flow_and_not_pauli_presimulate, node_distance=(1, 1), measurement_labels=True, legend=False ) return plt.gcf() + + +@pytest.mark.usefixtures("mock_plot") +@pytest.mark.mpl_image_compare +def test_draw_graph_linear_graph() -> Figure: + # See https://github.com/TeamGraphix/graphix/issues/535 + og = OpenGraph( + graph=nx.Graph([(0, 1), (1, 2), (2, 3)]), + input_nodes=[0], + output_nodes=[3], + measurements=dict.fromkeys(range(3), Plane.XY), + ) + flow = og.extract_causal_flow() + flow.draw(legend=False) + return plt.gcf()