Known changes and backwards incompatibilities in 2026.06.0
Grid snapping of SRefs and ARefs
The GDSII exporter writes positions of SRefs and ARefs using a single snapping step instead of two. This can result in different but in most cases more accurate grid snapping. Consider the following code:
import ipkiss3.all as i3
grids_per_unit = i3.get_grids_per_unit()
class ExampleCell(i3.PCell):
class Layout(i3.LayoutView):
n_grid_points_x = i3.PositiveNumberProperty(default=0.6)
n_grid_points_y = i3.PositiveNumberProperty(default=0.8)
def generate(self, layout):
shift_x = self.n_grid_points_x / grids_per_unit
shift_y = self.n_grid_points_y / grids_per_unit
layout += i3.SRef(
name="wg",
reference=i3.Waveguide(),
position=(shift_x, shift_y),
transformation=i3.Translation(translation=(shift_x, shift_y)),
)
return layout
lv = ExampleCell().get_default_view(i3.LayoutView)
lv.write_gdsii("example.gds")
lv_imported = i3.GDSCell(filename="example.gds").get_default_view(i3.LayoutView)
position = lv_imported["wg"].position
# On 2026.06: 1.0 2.0
# On 2026.03: 2.0 2.0
print(position.x * grids_per_unit, position.y * grids_per_unit)
Return type of i3.dummy_fill_layout and i3.dummy_fill_layout_box
The functions i3.dummy_fill_layout and i3.dummy_fill_layout_box return a list of dummy ARefs instead of a Layout object.
The following will still work as before.
import ipkiss3.all as i3
class ExampleCell(i3.PCell):
class Layout(i3.LayoutView):
def generate(self, layout):
...
layout += i3.dummy_fill_layout(layout, filling=[...]) # or i3.dummy_fill_layout_box(...)
return layout
Connector error handling
The connector error handling logic have been refactored to be more robust and maintainable. This introduces few backward incompatibilities:
ConnectorError Change: ConnectorError is no longer a
BaseException(it is now a@dataclass). Code that attempts toraiseit or catch it viaexceptwill break. Error handling is now delegated to itsresolve(strict)method.Stricter Initialization: Self-connections and duplicate specs now raise a
ValueErrorimmediately duringi3.Connectorori3.ConnectSBendinitialization. This occurs even ifstrict=Falseis used in the layout context.Internal Attribute Refactoring: The
self.portsattribute has been removed fromi3.Connectorandi3.ConnectSBendin favor ofself.connect_specs.Invalid names: Starting a name of a connection or an instance with failed_ is not allowed, this prefix is reserved for invalid connections.