feat: add support-bounded cone partitioner
Splits a cover network into blocks whose input support is at most a given
budget, so that a decision diagram can be built per block instead of one
diagram per primary output over all primary inputs.
Grows a cone backwards from every primary output while its support fits the
budget; a fanin that would exceed it is cut and becomes a boundary net, which
is a leaf of the current block and the root of a block of its own. Iterating
until no boundary net is left covers every gate exactly once.
Builds on mockturtle's window utilities but cannot use expand_towards_tfi
directly: that stops only on a trivial cut (all leaves are CIs or constants)
and would expand through gates already owned by another block, duplicating
their logic. expand0_bounded and select_next_fanin mirror the mockturtle
versions with a caller supplied terminal predicate that also stops at owned
gates.
Uses out_of_place_color_view, not color_view: the in-place variant stores
colors in _storage->nodes[n].data[1].h1, which cover_network uses for the
node's cover index, so painting would destroy every node function.
Verified on c17/c432/c880 for n in {4,6,8,10,16} and n=0: the gates of all
blocks always sum to exactly num_gates (no duplication, no gaps), no block
exceeds the budget, and n=0 degenerates to a single whole-network block.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012nXGcHc3GSLAqg1AL53LKM