Skip to content

[Bug]: minimize_space can increase max_space #454

@thierry-martinez

Description

@thierry-martinez

This is a longstanding bug but I just realized it had not been properly reported yet.

The following example provides a family of patterns where max_space is larger after calling minimize_space than before. sz = 4 and depth = 3 are the minimum values for which the problem occurs, but the gap between max_space before and after increases as these values grow (and the initial max_space depends only on sz, not on depth).

from graphix import Pattern, command
from graphix.measurements import Measurement

sz = 4
depth = 3
block = Pattern(input_nodes=range(sz))
block.extend(command.N(sz + i) for i in range(sz))
for i in range(1, sz):
    block.extend(command.E((j, sz + i)) for j in range(sz))
    block.extend(command.E((sz + j, sz + i)) for j in range(1, i))
block.extend(command.M(i) for i in range(sz))
p, _ = block.compose(block, {i: o for i, o in zip(block.input_nodes, block.output_nodes, strict=True)})
for _ in range(depth):
    p, _ = p.compose(block, {i: o for i, o in zip(block.input_nodes, p.output_nodes, strict=True)})
print(f"Before minimize_space: {p.max_space()=}")
p.minimize_space()
print(f"After minimize_space: {p.max_space()=}")

These patterns have X measurements; therefore they do not have causal flows, so that minimize_space uses the heuristics implemented in _measurement_order_space (selecting nodes with minimum degree first).

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions