[library / gdsii] more cleanup
This commit is contained in:
parent
7b589e4f44
commit
e7f7cae8b9
4 changed files with 40 additions and 1 deletions
|
|
@ -7,10 +7,11 @@ from numpy.testing import assert_allclose
|
|||
|
||||
from ..file import gdsii
|
||||
from ..file.gdsii import lazy as gdsii_lazy
|
||||
from ..file.gdsii import lazy_write as gdsii_lazy_write
|
||||
from ..error import LibraryError
|
||||
from ..pattern import Pattern
|
||||
from ..ports import Port
|
||||
from ..library import IBorrowing, IMaterializable, LazyLibrary, Library, OverlayLibrary, PortsLibraryView
|
||||
from ..library import IBorrowing, IMaterializable, LazyLibrary, Library, LibraryView, OverlayLibrary, PortsLibraryView
|
||||
|
||||
|
||||
def _make_lazy_port_library() -> Library:
|
||||
|
|
@ -76,6 +77,19 @@ def test_gdsii_lazy_write_materializes_transiently() -> None:
|
|||
assert info['name'] == 'transient'
|
||||
|
||||
|
||||
def test_gdsii_raw_copy_provenance_cycle_falls_back() -> None:
|
||||
class SelfBorrowingView(LibraryView, IBorrowing):
|
||||
def borrowed_sources(self) -> tuple['SelfBorrowingView', ...]:
|
||||
return (self,)
|
||||
|
||||
def source_cell(self, name: str) -> tuple['SelfBorrowingView', str] | None:
|
||||
return self, name
|
||||
|
||||
view = SelfBorrowingView({'top': Pattern()})
|
||||
|
||||
assert gdsii_lazy_write._resolve_raw_struct(view, 'top') is None
|
||||
|
||||
|
||||
def test_gdsii_lazy_source_exposes_order_and_graph_without_materializing(tmp_path: Path) -> None:
|
||||
gds_file = tmp_path / 'lazy_source.gds'
|
||||
src = _make_lazy_port_library()
|
||||
|
|
@ -147,6 +161,23 @@ def test_gdsii_lazy_subtree_stays_borrowed_and_preserves_write_metadata(tmp_path
|
|||
assert set(roundtrip) == {'leaf', 'child', 'top'}
|
||||
|
||||
|
||||
def test_gdsii_lazy_borrowed_sources_require_matching_units(tmp_path: Path) -> None:
|
||||
gds_a = tmp_path / 'units_a.gds'
|
||||
gds_b = tmp_path / 'units_b.gds'
|
||||
source = Library({'top': Pattern()})
|
||||
gdsii.writefile(source, gds_a, meters_per_unit=1e-9, library_name='units-a')
|
||||
gdsii.writefile(source, gds_b, meters_per_unit=2e-9, library_name='units-b')
|
||||
|
||||
lazy_a, _ = gdsii_lazy.readfile(gds_a)
|
||||
lazy_b, _ = gdsii_lazy.readfile(gds_b)
|
||||
overlay = OverlayLibrary()
|
||||
overlay.add_source(lazy_a)
|
||||
overlay.add_source(lazy_b, rename_theirs=lambda lib, name: lib.get_name(name))
|
||||
|
||||
with pytest.raises(LibraryError, match='identical units'):
|
||||
gdsii_lazy.write(overlay, io.BytesIO())
|
||||
|
||||
|
||||
def test_gdsii_lazy_overlay_subtree_preserves_source_laziness(tmp_path: Path) -> None:
|
||||
gds_file = tmp_path / 'lazy_overlay_subtree_source.gds'
|
||||
src = _make_lazy_port_library()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue