import io from pathlib import Path import pytest from numpy.testing import assert_equal from ..error import PatternError from ..pattern import Pattern from ..library import Library from ..shapes import Path as MPath def test_oasis_roundtrip(tmp_path: Path) -> None: # Skip if fatamorgana is not installed pytest.importorskip("fatamorgana") from ..file import oasis lib = Library() pat1 = Pattern() pat1.polygon((1, 0), vertices=[[0, 0], [10, 0], [10, 10], [0, 10]]) lib["cell1"] = pat1 oas_file = tmp_path / "test.oas" # OASIS needs units_per_micron oasis.writefile(lib, oas_file, units_per_micron=1000) read_lib, info = oasis.readfile(oas_file) assert "cell1" in read_lib # Check bounds assert_equal(read_lib["cell1"].get_bounds(), [[0, 0], [10, 10]]) def test_oasis_properties_to_annotations_merges_repeated_keys() -> None: pytest.importorskip("fatamorgana") import fatamorgana.records as fatrec from ..file.oasis import properties_to_annotations annotations = properties_to_annotations( [ fatrec.Property("k", [1], is_standard=False), fatrec.Property("k", [2, 3], is_standard=False), ], {}, {}, ) assert annotations == {"k": [1, 2, 3]} def test_oasis_write_rejects_circle_path_caps() -> None: pytest.importorskip("fatamorgana") from ..file import oasis lib = Library() pat = Pattern() pat.path((1, 0), vertices=[[0, 0], [10, 0]], width=2, cap=MPath.Cap.Circle) lib["cell1"] = pat with pytest.raises(PatternError, match="does not support path cap"): oasis.write(lib, io.BytesIO(), units_per_micron=1000)