SymmetryDSU#
- class SymmetryDSU(dsu=None, *, iterable=None)#
Bases:
objectSymmetry-aware union–find on top of a base DSU.
- Layers:
A Disjoint Set Union for true equality.
A labeled, undirected multigraph between DSU components for symmetry relations.
You can later “promote” a symmetry to equivalence via collapse(sym), which unions all components linked by that symmetry.
Notes
The graph is on DSU representatives (components).
relate(a, b, sym) records that class(a) ~ class(b) by symmetry label sym.
orbit_items(item, allowed=…) returns the components in the symmetry orbit.
Self-mirror edges are ignored by default (no-op if a and b are same class).
- __init__(dsu=None, *, iterable=None)#
Methods
__init__([dsu, iterable])add(item)classes()collapse(sym)Promote symmetry sym to equivalence: union pairs of components linked by this label.
edges()Iterate over edges as (rep_u, rep_v, sym).
find(item)orbit_items(item[, allowed])Return the list of DSU components (as sets of items) in the symmetry orbit.
orbit_reps(item[, allowed])Return the set of DSU representatives reachable from class(item) via symmetry edges whose labels are in allowed (or all if None).
relate(a, b, sym)Declare that class(a) is related to class(b) by symmetry sym (undirected).
union(a, b)Merge DSU classes for a and b; relabel symmetry-graph nodes accordingly.
- add(item)#
- union(a, b)#
Merge DSU classes for a and b; relabel symmetry-graph nodes accordingly.
- find(item)#
- classes()#
- relate(a, b, sym)#
Declare that class(a) is related to class(b) by symmetry sym (undirected).
- edges()#
Iterate over edges as (rep_u, rep_v, sym).
- orbit_reps(item, allowed=None)#
Return the set of DSU representatives reachable from class(item) via symmetry edges whose labels are in allowed (or all if None).
- orbit_items(item, allowed=None)#
Return the list of DSU components (as sets of items) in the symmetry orbit.
- collapse(sym)#
Promote symmetry sym to equivalence: union pairs of components linked by this label.