[ell] validate spacing length

This commit is contained in:
Jan Petykiewicz 2026-04-01 21:58:56 -07:00
commit 20f37ea0f7
2 changed files with 28 additions and 1 deletions

View file

@ -132,8 +132,17 @@ def ell(
if spacing is None: if spacing is None:
ch_offsets = numpy.zeros_like(y_order) ch_offsets = numpy.zeros_like(y_order)
else: else:
spacing_arr = numpy.asarray(spacing, dtype=float).reshape(-1)
steps = numpy.zeros_like(y_order) steps = numpy.zeros_like(y_order)
steps[1:] = spacing if spacing_arr.size == 1:
steps[1:] = spacing_arr[0]
elif spacing_arr.size == len(ports) - 1:
steps[1:] = spacing_arr
else:
raise BuildError(
f'spacing must be scalar or have length {len(ports) - 1} for {len(ports)} ports; '
f'got length {spacing_arr.size}'
)
ch_offsets = numpy.cumsum(steps)[y_ind] ch_offsets = numpy.cumsum(steps)[y_ind]
x_start = rot_offsets[:, 0] x_start = rot_offsets[:, 0]

View file

@ -1,7 +1,11 @@
import numpy
import pytest
from numpy.testing import assert_equal, assert_allclose from numpy.testing import assert_equal, assert_allclose
from numpy import pi from numpy import pi
from ..builder import Builder from ..builder import Builder
from ..builder.utils import ell
from ..error import BuildError
from ..library import Library from ..library import Library
from ..pattern import Pattern from ..pattern import Pattern
from ..ports import Port from ..ports import Port
@ -131,6 +135,20 @@ def test_dead_plug_best_effort() -> None:
assert_allclose(b.ports['B'].rotation, 0, atol=1e-10) assert_allclose(b.ports['B'].rotation, 0, atol=1e-10)
def test_ell_validates_spacing_length() -> None:
ports = {
'A': Port((0, 0), 0),
'B': Port((0, 1), 0),
'C': Port((0, 2), 0),
}
with pytest.raises(BuildError, match='spacing must be scalar or have length 2'):
ell(ports, True, 'min_extension', 5, spacing=[1, 2, 3])
with pytest.raises(BuildError, match='spacing must be scalar or have length 2'):
ell(ports, True, 'min_extension', 5, spacing=[])
def test_ell_handles_array_spacing_when_ccw_none() -> None: def test_ell_handles_array_spacing_when_ccw_none() -> None:
ports = { ports = {
'A': Port((0, 0), 0), 'A': Port((0, 0), 0),