Skip to content

Commit 964e157

Browse files
committed
refactor(show): hoist dispatch constants, drop dead branch
Follow-up cleanup on the show() decomposition: - Hoist the render-command dispatch dict to a module-level _RENDERERS constant instead of rebuilding it on every _render_panel call. - Derive _VALID_RENDER_CMDS from _RENDER_CMD_TO_CS_FLAG (+ render_graph) so the valid-command set isn't a second hand-maintained list. - Drop the always-true `if "render" in cmd` branch in _collect_render_commands (every valid command starts with "render", and unknown commands already raise above it). - Hoist _finalize_panel out of the per-command loop in _render_panel; it depends only on per-panel values, so it now runs once per panel. Behavior-preserving; no public API change. (Pre-existing mypy errors on this branch are unrelated and unchanged by this commit.)
1 parent 83a3c7d commit 964e157

1 file changed

Lines changed: 18 additions & 25 deletions

File tree

‎src/spatialdata_plot/pl/basic.py‎

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1576,6 +1576,17 @@ def show(
15761576
ImageRenderParams | LabelsRenderParams | PointsRenderParams | ShapesRenderParams | GraphRenderParams,
15771577
]
15781578

1579+
# All valid render commands: the element types (which carry a coordinate-system flag) plus graphs.
1580+
_VALID_RENDER_CMDS = {*_RENDER_CMD_TO_CS_FLAG, "render_graph"}
1581+
1582+
# Dispatch from render command to its rendering function (constant; defined once).
1583+
_RENDERERS = {
1584+
"render_images": _render_images,
1585+
"render_shapes": _render_shapes,
1586+
"render_points": _render_points,
1587+
"render_labels": _render_labels,
1588+
}
1589+
15791590

15801591
def _collect_render_commands(plotting_tree: OrderedDict[str, Any]) -> list[_RenderCmd]:
15811592
"""Extract and validate the queued ``render_*`` commands from the plotting tree.
@@ -1584,25 +1595,13 @@ def _collect_render_commands(plotting_tree: OrderedDict[str, Any]) -> list[_Rend
15841595
is stripped and the bare command validated. Raises if an unknown command is present or if no
15851596
render command was queued at all.
15861597
"""
1587-
valid_commands = [
1588-
"render_images",
1589-
"render_shapes",
1590-
"render_labels",
1591-
"render_points",
1592-
"render_graph",
1593-
]
1594-
15951598
render_cmds: list[_RenderCmd] = []
15961599
for cmd, params in plotting_tree.items():
1597-
# strip the step-index prefix from cmd and verify it's valid
1600+
# strip the step-index prefix (e.g. "1_render_images" -> "render_images")
15981601
cmd = "_".join(cmd.split("_")[1:])
1599-
1600-
if cmd not in valid_commands:
1602+
if cmd not in _VALID_RENDER_CMDS:
16011603
raise ValueError(f"Command {cmd} is not valid.")
1602-
1603-
if "render" in cmd:
1604-
# verify that rendering commands have been called before
1605-
render_cmds.append((cmd, params))
1604+
render_cmds.append((cmd, params))
16061605

16071606
if not render_cmds:
16081607
raise TypeError("Please specify what to plot using the 'render_*' functions before calling 'imshow()'.")
@@ -1950,12 +1949,6 @@ def _render_panel(
19501949
``wants`` flag dict (keyed ``"images"``/``"labels"``/``"points"``/``"shapes"``) needed
19511950
downstream for extent computation.
19521951
"""
1953-
renderers = {
1954-
"render_images": _render_images,
1955-
"render_shapes": _render_shapes,
1956-
"render_points": _render_points,
1957-
"render_labels": _render_labels,
1958-
}
19591952
wants = dict.fromkeys(("images", "labels", "points", "shapes"), False)
19601953
wanted_elements: list[str] = []
19611954

@@ -1979,7 +1972,7 @@ def _render_panel(
19791972
legend_params=legend_params_obj,
19801973
colorbar_requests=axis_colorbar_requests,
19811974
)
1982-
elif cmd in renderers and cs_row[_RENDER_CMD_TO_CS_FLAG[cmd]]:
1975+
elif cmd in _RENDERERS and cs_row[_RENDER_CMD_TO_CS_FLAG[cmd]]:
19831976
element_type = cmd.removeprefix("render_")
19841977
wanted_elements, wanted_on_cs, wants[element_type] = _get_wanted_render_elements(
19851978
sdata, wanted_elements, params_copy, cs, element_type
@@ -2000,8 +1993,8 @@ def _render_panel(
20001993
kwargs["rasterize"] = _should_rasterize(params_copy, dpi, figsize)
20011994
if cmd == "render_labels":
20021995
_maybe_set_label_colors(sdata, params_copy)
2003-
renderers[cmd](**kwargs)
2004-
2005-
_finalize_panel(ax, panel_idx, title, panel_key, cs, fig_params.frameon)
1996+
_RENDERERS[cmd](**kwargs)
20061997

1998+
# Panel finalization depends only on per-panel values, so run it once after the loop.
1999+
_finalize_panel(ax, panel_idx, title, panel_key, cs, fig_params.frameon)
20072000
return wanted_elements, wants

0 commit comments

Comments
 (0)