From 0d0b3b5fb31ed827d0569e0874e357c53b3b8e3c Mon Sep 17 00:00:00 2001 From: Dimitri Yatsenko Date: Wed, 15 Jul 2026 13:54:09 -0500 Subject: [PATCH] docs(#1484): document pair-keyed part-to-master invariant in _propagate_restrictions Address MilagrosMarin's review note on #1484: add a method-docstring line noting that under part_integrity="cascade" each restricted Part fires its own upward walk to its Master exactly once, deduplicated per (part, master) pair (not per master). --- src/datajoint/diagram.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/datajoint/diagram.py b/src/datajoint/diagram.py index 97e000834..c8ef16a9f 100644 --- a/src/datajoint/diagram.py +++ b/src/datajoint/diagram.py @@ -696,6 +696,12 @@ def _propagate_restrictions(self, start_node, mode, part_integrity="enforce"): Walks the dependency graph in topological order, applying propagation rules at each edge. Only processes descendants of start_node to avoid duplicate propagation when chaining. + + Invariant (``part_integrity="cascade"``): each restricted Part fires + its own upward walk to its Master exactly once — deduplicated per + ``(part, master)`` pair (``visited_part_master_pairs``), not per + master — so a Master reached through several restricted Parts is + restricted from every one of them. """ sorted_nodes = topo_sort(self)