cleanup based on flake8 output

This commit is contained in:
Jan Petykiewicz 2023-01-26 13:36:22 -08:00
parent 406550cfd6
commit aa5967b58c
19 changed files with 1429 additions and 1494 deletions

View File

@ -27,3 +27,4 @@ ignore =
per-file-ignores = per-file-ignores =
# F401 import without use # F401 import without use
*/__init__.py: F401, */__init__.py: F401,
__init__.py: F401,

View File

@ -7,7 +7,6 @@ from fractions import Fraction
from enum import Enum from enum import Enum
import math import math
import struct import struct
import io
import warnings import warnings
try: try:
@ -1663,13 +1662,13 @@ def write_point_list(
if implicit_closed: if implicit_closed:
ManhattanDelta(points[-1][0] - points[0][0], points[-1][1] - points[0][1]) ManhattanDelta(points[-1][0] - points[0][0], points[-1][1] - points[0][1])
list_type = 2 list_type = 2
except: except InvalidDataError:
try: try:
deltas = [OctangularDelta(x, y) for x, y in points] deltas = [OctangularDelta(x, y) for x, y in points]
if implicit_closed: if implicit_closed:
OctangularDelta(points[-1][0] - points[0][0], points[-1][1] - points[0][1]) OctangularDelta(points[-1][0] - points[0][0], points[-1][1] - points[0][1])
list_type = 3 list_type = 3
except: except InvalidDataError:
pass pass
if list_type is not None: if list_type is not None:
size = write_uint(stream, list_type) size = write_uint(stream, list_type)

View File

@ -383,7 +383,7 @@ class Start(Record):
def __init__( def __init__(
self, self,
unit: real_t, unit: real_t,
version: Union[AString, str] = "1.0", version: Union[AString, str] = "1.0",
offset_table: Optional[OffsetTable] = None, offset_table: Optional[OffsetTable] = None,
) -> None: ) -> None:
""" """

View File

@ -1,17 +1,11 @@
# type: ignore # type: ignore
from typing import List, Tuple, Iterable
from itertools import chain
from io import BytesIO, BufferedIOBase from io import BytesIO, BufferedIOBase
import struct
import pytest # type: ignore
import numpy
from numpy.testing import assert_equal from numpy.testing import assert_equal
from .utils import HEADER, FOOTER from .utils import HEADER, FOOTER
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring, write_byte, PathExtensionScheme from ..basic import write_uint, write_bstring, write_byte
from ..basic import InvalidRecordError, InvalidDataError
from ..main import OasisLayout from ..main import OasisLayout
@ -98,86 +92,105 @@ def test_file_1() -> None:
assert geometry[1].height == 610 assert geometry[1].height == 610
assert geometry[1].width == 680 assert geometry[1].width == 680
assert_equal(geometry[2].point_list, assert_equal(geometry[2].point_list, [
[[-30, -360], [480, -50], [180, 430], [-630, -20]]) [-30, -360],
[480, -50],
[180, 430],
[-630, -20],
])
assert_equal(geometry[3].point_list, assert_equal(geometry[3].point_list, [
[[-30, -400], [-30, -400],
[450, 40], [450, 40],
[70, -220], [70, -220],
[10, 210], [10, 210],
[740, -20], [740, -20],
[0, 660], [0, 660],
[570, 10], [570, 10],
[50, 500], [50, 500],
[630, 20], [630, 20],
[10, 100], [10, 100],
[-810, 10], [-810, 10],
[20, -470], [20, -470],
[-660, 0], [-660, 0],
[20, -470], [20, -470],
[-620, 10], [-620, 10],
[0, 610], [0, 610],
[610, -10], [610, -10],
[0, -100], [0, -100],
[210, 10], [210, 10],
[40, 820], [40, 820],
[-1340, 60], [-1340, 60],
[30, -1370]]) [30, -1370],
])
assert_equal(geometry[4].point_list, assert_equal(geometry[4].point_list, [
[[40, -760], [490, -50], [110, 800], [-640, 10]]) [40, -760],
[490, -50],
[110, 800],
[-640, 10],
])
assert_equal(geometry[5].point_list, assert_equal(geometry[5].point_list, [
[[140, -380], [140, -380],
[340, -10], [340, -10],
[30, -100], [30, -100],
[-320, 20], [-320, 20],
[130, -460], [130, -460],
[-480, -20], [-480, -20],
[-210, 910], [-210, 910],
[370, 40]]) [370, 40],
])
assert_equal(geometry[6].point_list, assert_equal(geometry[6].point_list, [
[[720, -20], [720, -20],
[20, 20], [20, 20],
[690, 0], [690, 0],
[-10, 650], [-10, 650],
[-20, 30], [-20, 30],
[-90, -10], [-90, -10],
[10, 70], [10, 70],
[470, -30], [470, -30],
[20, -120], [20, -120],
[-320, 0], [-320, 0],
[40, -790], [40, -790],
[-90, -20], [-90, -20],
[-60, 140], [-60, 140],
[-1390, 50], [-1390, 50],
[10, 30]]) [10, 30],
])
assert_equal(geometry[7].point_list, assert_equal(geometry[7].point_list, [
[[150, -830], [150, -830],
[-1320, 40], [-1320, 40],
[-70, 370], [-70, 370],
[310, -30], [310, -30],
[10, 220], [10, 220],
[250, -40], [250, -40],
[40, -220], [40, -220],
[340, 10], [340, 10],
[-20, 290], [-20, 290],
[-1070, 20], [-1070, 20],
[0, 230], [0, 230],
[1380, -60]]) [1380, -60],
])
assert_equal(geometry[8].point_list, assert_equal(geometry[8].point_list, [
[[330, 0], [-10, 480], [620, -20], [-10, 330], [-930, 60], [0, -850]]) [330, 0],
[-10, 480],
[620, -20],
[-10, 330],
[-930, 60],
[0, -850],
])
assert_equal(geometry[9].point_list, assert_equal(geometry[9].point_list, [
[[-140, -410], [-140, -410],
[10, -140], [10, -140],
[270, 0], [270, 0],
[130, 1030], [130, 1030],
[-500, 50], [-500, 50],
[10, -330], [10, -330],
[210, -10], [210, -10],
[10, -190]]) [10, -190],
])

View File

@ -1,14 +1,11 @@
# type: ignore # type: ignore
from typing import List, Tuple, Iterable
from itertools import chain
from io import BytesIO, BufferedIOBase from io import BytesIO, BufferedIOBase
import struct
import pytest # type: ignore import pytest
from .utils import HEADER, FOOTER from .utils import HEADER, FOOTER
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring from ..basic import write_uint, write_bstring
from ..basic import InvalidRecordError, InvalidDataError from ..basic import InvalidRecordError, InvalidDataError
from ..main import OasisLayout from ..main import OasisLayout

View File

@ -1,17 +1,9 @@
# type: ignore # type: ignore
from typing import List, Tuple, Iterable
from itertools import chain
from io import BytesIO, BufferedIOBase from io import BytesIO, BufferedIOBase
import struct
import pytest # type: ignore
import numpy
from numpy.testing import assert_equal
from .utils import HEADER, FOOTER from .utils import HEADER, FOOTER
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring, write_byte, PathExtensionScheme from ..basic import write_uint, write_sint, write_bstring, write_byte
from ..basic import InvalidRecordError, InvalidDataError
from ..main import OasisLayout from ..main import OasisLayout
@ -37,52 +29,52 @@ def write_file_1(buf: BufferedIOBase) -> BufferedIOBase:
''' '''
buf.write(HEADER) buf.write(HEADER)
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'A') # Cell name write_bstring(buf, b'A') # Cell name
write_uint(buf, 27) # CIRCLE record write_uint(buf, 27) # CIRCLE record
write_byte(buf, 0b0011_1011) # 00rX_YRDL write_byte(buf, 0b0011_1011) # 00rX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 150) # radius write_uint(buf, 150) # radius
write_sint(buf, -100) # geometry-x (absolute) write_sint(buf, -100) # geometry-x (absolute)
write_sint(buf, 200) # geometry-y (absolute) write_sint(buf, 200) # geometry-y (absolute)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
write_uint(buf, 27) # CIRCLE record write_uint(buf, 27) # CIRCLE record
write_byte(buf, 0b0000_1000) # 00rX_YRDL write_byte(buf, 0b0000_1000) # 00rX_YRDL
write_sint(buf, 400) # geometry-y (relative) write_sint(buf, 400) # geometry-y (relative)
write_uint(buf, 27) # CIRCLE record write_uint(buf, 27) # CIRCLE record
write_byte(buf, 0b0010_1000) # 00rX_YRDL write_byte(buf, 0b0010_1000) # 00rX_YRDL
write_uint(buf, 0) # radius write_uint(buf, 0) # radius
write_sint(buf, 400) # geometry-y (relative) write_sint(buf, 400) # geometry-y (relative)
write_uint(buf, 27) # CIRCLE record write_uint(buf, 27) # CIRCLE record
write_byte(buf, 0b0010_1000) # 00rX_YRDL write_byte(buf, 0b0010_1000) # 00rX_YRDL
write_uint(buf, 1) # radius write_uint(buf, 1) # radius
write_sint(buf, 400) # geometry-y (relative) write_sint(buf, 400) # geometry-y (relative)
write_uint(buf, 27) # CIRCLE record write_uint(buf, 27) # CIRCLE record
write_byte(buf, 0b0010_1000) # 00rX_YRDL write_byte(buf, 0b0010_1000) # 00rX_YRDL
write_uint(buf, 6) # radius write_uint(buf, 6) # radius
write_sint(buf, 400) # geometry-y (relative) write_sint(buf, 400) # geometry-y (relative)
write_uint(buf, 27) # CIRCLE record write_uint(buf, 27) # CIRCLE record
write_byte(buf, 0b0010_1000) # 00rX_YRDL write_byte(buf, 0b0010_1000) # 00rX_YRDL
write_uint(buf, 20) # radius write_uint(buf, 20) # radius
write_sint(buf, 400) # geometry-y (relative) write_sint(buf, 400) # geometry-y (relative)
write_uint(buf, 27) # CIRCLE record write_uint(buf, 27) # CIRCLE record
write_byte(buf, 0b0010_1100) # 00rX_YRDL write_byte(buf, 0b0010_1100) # 00rX_YRDL
write_uint(buf, 100) # radius write_uint(buf, 100) # radius
write_sint(buf, 400) # geometry-y (relative) write_sint(buf, 400) # geometry-y (relative)
write_uint(buf, 1) # repetition (3x4 matrix) write_uint(buf, 1) # repetition (3x4 matrix)
write_uint(buf, 1) # (repetition) x-dimension write_uint(buf, 1) # (repetition) x-dimension
write_uint(buf, 2) # (repetition) y-dimension write_uint(buf, 2) # (repetition) y-dimension
write_uint(buf, 400) # (repetition) x-spacing write_uint(buf, 400) # (repetition) x-spacing
write_uint(buf, 300) # (repetition) y-spacing write_uint(buf, 300) # (repetition) y-spacing
buf.write(FOOTER) buf.write(FOOTER)
return buf return buf

View File

@ -1,17 +1,9 @@
# type: ignore # type: ignore
from typing import List, Tuple, Iterable
from itertools import chain
from io import BytesIO, BufferedIOBase from io import BytesIO, BufferedIOBase
import struct
import pytest # type: ignore
import numpy
from numpy.testing import assert_equal
from .utils import HEADER, FOOTER from .utils import HEADER, FOOTER
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring, write_byte, PathExtensionScheme from ..basic import write_uint, write_sint, write_bstring, write_byte
from ..basic import InvalidRecordError, InvalidDataError
from ..main import OasisLayout from ..main import OasisLayout
@ -33,29 +25,29 @@ def write_file_1(buf: BufferedIOBase) -> BufferedIOBase:
''' '''
buf.write(HEADER) buf.write(HEADER)
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'A') # Cell name write_bstring(buf, b'A') # Cell name
write_uint(buf, 26) # CTRAPEZOID record write_uint(buf, 26) # CTRAPEZOID record
write_byte(buf, 0b1111_1011) # TWHX_YRDL write_byte(buf, 0b1111_1011) # TWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 24) # ctrapezoid type write_uint(buf, 24) # ctrapezoid type
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, -100) # geometry-x (absolute) write_sint(buf, -100) # geometry-x (absolute)
write_sint(buf, 200) # geometry-y (absolute) write_sint(buf, 200) # geometry-y (absolute)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
write_uint(buf, 26) # CTRAPEZOID record write_uint(buf, 26) # CTRAPEZOID record
write_byte(buf, 0b0000_1000) # TWHX_YRDL write_byte(buf, 0b0000_1000) # TWHX_YRDL
write_sint(buf, 400) # geometry-y (relative) write_sint(buf, 400) # geometry-y (relative)
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0000_0011) # SWHX_YRDL write_byte(buf, 0b0000_0011) # SWHX_YRDL
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 3) # datatype write_uint(buf, 3) # datatype
h = [250, 100] h = [250, 100]
v = [100, 250] v = [100, 250]
@ -66,33 +58,34 @@ def write_file_1(buf: BufferedIOBase) -> BufferedIOBase:
+ [0b10] * 4 + [0b10] * 4
+ [0b01] * 2 + [0b01] * 2
+ [0b10] * 2 + [0b10] * 2
+ [0b11, 0b10]) + [0b11, 0b10]
)
for t, (x, x_en) in enumerate(zip(wh, wh_en)): for t, (x, x_en) in enumerate(zip(wh, wh_en)):
write_uint(buf, 26) # CTRAPEZOID record write_uint(buf, 26) # CTRAPEZOID record
write_byte(buf, 0b1000_1011 | (x_en << 5)) # TWHX_YRDL write_byte(buf, 0b1000_1011 | (x_en << 5)) # TWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, t) # ctrapezoid type write_uint(buf, t) # ctrapezoid type
if x_en & 0b10: if x_en & 0b10:
write_uint(buf, x[0]) # width write_uint(buf, x[0]) # width
if x_en & 0b01: if x_en & 0b01:
write_uint(buf, x[1]) # height write_uint(buf, x[1]) # height
write_sint(buf, 400) # geometry-y (relative) write_sint(buf, 400) # geometry-y (relative)
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0000_0011) # SWHX_YRDL write_byte(buf, 0b0000_0011) # SWHX_YRDL
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 3) # datatype write_uint(buf, 3) # datatype
write_uint(buf, 26) # CTRAPEZOID record write_uint(buf, 26) # CTRAPEZOID record
write_byte(buf, 0b0000_1100) # TWHX_YRDL write_byte(buf, 0b0000_1100) # TWHX_YRDL
write_sint(buf, 400) # geometry-y (relative) write_sint(buf, 400) # geometry-y (relative)
write_uint(buf, 1) # repetition (3x4 matrix) write_uint(buf, 1) # repetition (3x4 matrix)
write_uint(buf, 1) # (repetition) x-dimension write_uint(buf, 1) # (repetition) x-dimension
write_uint(buf, 2) # (repetition) y-dimension write_uint(buf, 2) # (repetition) y-dimension
write_uint(buf, 400) # (repetition) x-spacing write_uint(buf, 400) # (repetition) x-spacing
write_uint(buf, 300) # (repetition) y-spacing write_uint(buf, 300) # (repetition) y-spacing
buf.write(FOOTER) buf.write(FOOTER)
return buf return buf
@ -143,7 +136,7 @@ def test_file_1() -> None:
elif ct_type in range(22, 24) or ct_type == 25: elif ct_type in range(22, 24) or ct_type == 25:
assert gg.height == [100, None][is_ctrapz], msg assert gg.height == [100, None][is_ctrapz], msg
else: else:
if ct_type < 8 or 16 <= ct_type < 25 or 26 <= ct_type : if ct_type < 8 or 16 <= ct_type < 25 or 26 <= ct_type:
assert gg.width == 250, msg assert gg.width == 250, msg
assert gg.height == 100, msg assert gg.height == 100, msg
else: else:
@ -169,39 +162,39 @@ def write_file_2(buf: BufferedIOBase) -> BufferedIOBase:
write_bstring(buf, b'A') # Cell name write_bstring(buf, b'A') # Cell name
# Shouldn't access (undefined) height modal, despite not having a height. # Shouldn't access (undefined) height modal, despite not having a height.
write_uint(buf, 26) # CTRAPEZOID record write_uint(buf, 26) # CTRAPEZOID record
write_byte(buf, 0b1101_1011) # TWHX_YRDL write_byte(buf, 0b1101_1011) # TWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 16) # ctrapezoid type write_uint(buf, 16) # ctrapezoid type
write_uint(buf, 200) # width write_uint(buf, 200) # width
write_sint(buf, -100) # geometry-x (absolute) write_sint(buf, -100) # geometry-x (absolute)
write_sint(buf, 200) # geometry-y (absolute) write_sint(buf, 200) # geometry-y (absolute)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
write_uint(buf, 26) # CTRAPEZOID record write_uint(buf, 26) # CTRAPEZOID record
write_byte(buf, 0b0000_1000) # TWHX_YRDL write_byte(buf, 0b0000_1000) # TWHX_YRDL
write_sint(buf, 400) # geometry-y (relative) write_sint(buf, 400) # geometry-y (relative)
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'B') # Cell name write_bstring(buf, b'B') # Cell name
# Shouldn't access (undefined) width modal, despite not having a width. # Shouldn't access (undefined) width modal, despite not having a width.
write_uint(buf, 26) # CTRAPEZOID record write_uint(buf, 26) # CTRAPEZOID record
write_byte(buf, 0b1011_1011) # TWHX_YRDL write_byte(buf, 0b1011_1011) # TWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 20) # ctrapezoid type write_uint(buf, 20) # ctrapezoid type
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, -100) # geometry-x (absolute) write_sint(buf, -100) # geometry-x (absolute)
write_sint(buf, 200) # geometry-y (absolute) write_sint(buf, 200) # geometry-y (absolute)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
write_uint(buf, 26) # CTRAPEZOID record write_uint(buf, 26) # CTRAPEZOID record
write_byte(buf, 0b0000_1000) # TWHX_YRDL write_byte(buf, 0b0000_1000) # TWHX_YRDL
write_sint(buf, 400) # geometry-y (relative) write_sint(buf, 400) # geometry-y (relative)
buf.write(FOOTER) buf.write(FOOTER)
return buf return buf

View File

@ -1,14 +1,10 @@
# type: ignore # type: ignore
from typing import List, Tuple, Iterable
from itertools import chain
from io import BytesIO, BufferedIOBase from io import BytesIO, BufferedIOBase
import struct import struct
import pytest # type: ignore
from .utils import MAGIC_BYTES, FOOTER from .utils import MAGIC_BYTES, FOOTER
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring from ..basic import write_uint, write_bstring
from ..main import OasisLayout from ..main import OasisLayout
@ -59,7 +55,6 @@ def test_file_1() -> None:
assert layout.unit == 1000 assert layout.unit == 1000
def write_file_2(buf: BufferedIOBase) -> BufferedIOBase: def write_file_2(buf: BufferedIOBase) -> BufferedIOBase:
''' '''
File contains no records. File contains no records.

View File

@ -1,16 +1,10 @@
# type: ignore # type: ignore
from typing import Sequence
from typing import List, Tuple, Iterable, Sequence
from itertools import chain
from io import BytesIO, BufferedIOBase from io import BytesIO, BufferedIOBase
import pytest # type: ignore
import numpy
from numpy.testing import assert_equal
from .utils import HEADER, FOOTER from .utils import HEADER, FOOTER
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring, write_byte, PathExtensionScheme from ..basic import write_uint, write_sint, write_bstring, write_byte
from ..basic import InvalidRecordError, InvalidDataError
from ..main import OasisLayout from ..main import OasisLayout
@ -37,67 +31,67 @@ def base_tests(layout: OasisLayout) -> None:
def write_names_geom(buf: BufferedIOBase, short: bool = False) -> BufferedIOBase: def write_names_geom(buf: BufferedIOBase, short: bool = False) -> BufferedIOBase:
write_uint(buf, 11) # LAYERNAME record (geometry) write_uint(buf, 11) # LAYERNAME record (geometry)
write_bstring(buf, b'AA') # name write_bstring(buf, b'AA') # name
write_uint(buf, 0) # all layers write_uint(buf, 0) # all layers
write_uint(buf, 0) # all datatypes write_uint(buf, 0) # all datatypes
write_uint(buf, 11) # LAYERNAME record (geometry) write_uint(buf, 11) # LAYERNAME record (geometry)
write_bstring(buf, b'L5A') # name write_bstring(buf, b'L5A') # name
write_uint(buf, 1) # layer <=5 write_uint(buf, 1) # layer <=5
write_uint(buf, 5) # (...) write_uint(buf, 5) # (...)
write_uint(buf, 0) # all datatypes write_uint(buf, 0) # all datatypes
write_uint(buf, 11) # LAYERNAME record (geometry) write_uint(buf, 11) # LAYERNAME record (geometry)
write_bstring(buf, b'H5A') # name write_bstring(buf, b'H5A') # name
write_uint(buf, 2) # layer >=5 write_uint(buf, 2) # layer >=5
write_uint(buf, 5) # (...) write_uint(buf, 5) # (...)
write_uint(buf, 0) # all datatypes write_uint(buf, 0) # all datatypes
write_uint(buf, 11) # LAYERNAME record (geometry) write_uint(buf, 11) # LAYERNAME record (geometry)
write_bstring(buf, b'E5A') # name write_bstring(buf, b'E5A') # name
write_uint(buf, 3) # layer ==5 write_uint(buf, 3) # layer ==5
write_uint(buf, 5) # (...) write_uint(buf, 5) # (...)
write_uint(buf, 0) # all datatypes write_uint(buf, 0) # all datatypes
write_uint(buf, 11) # LAYERNAME record (geometry) write_uint(buf, 11) # LAYERNAME record (geometry)
write_bstring(buf, b'I56A') # name write_bstring(buf, b'I56A') # name
write_uint(buf, 4) # layer 5 to 6 write_uint(buf, 4) # layer 5 to 6
write_uint(buf, 5) # (...) write_uint(buf, 5) # (...)
write_uint(buf, 6) # (...) write_uint(buf, 6) # (...)
write_uint(buf, 0) # all datatypes write_uint(buf, 0) # all datatypes
if short: if short:
return buf return buf
write_uint(buf, 11) # LAYERNAME record (geometry) write_uint(buf, 11) # LAYERNAME record (geometry)
write_bstring(buf, b'E5L4') # name write_bstring(buf, b'E5L4') # name
write_uint(buf, 3) # layer ==5 write_uint(buf, 3) # layer ==5
write_uint(buf, 5) # (...) write_uint(buf, 5) # (...)
write_uint(buf, 1) # datatype <=4 write_uint(buf, 1) # datatype <=4
write_uint(buf, 4) # (...) write_uint(buf, 4) # (...)
write_uint(buf, 11) # LAYERNAME record (geometry) write_uint(buf, 11) # LAYERNAME record (geometry)
write_bstring(buf, b'E5H4') # name write_bstring(buf, b'E5H4') # name
write_uint(buf, 3) # layer ==5 write_uint(buf, 3) # layer ==5
write_uint(buf, 5) # (...) write_uint(buf, 5) # (...)
write_uint(buf, 2) # datatype >=4 write_uint(buf, 2) # datatype >=4
write_uint(buf, 4) # (...) write_uint(buf, 4) # (...)
write_uint(buf, 11) # LAYERNAME record (geometry) write_uint(buf, 11) # LAYERNAME record (geometry)
write_bstring(buf, b'E5E4') # name write_bstring(buf, b'E5E4') # name
write_uint(buf, 3) # layer ==5 write_uint(buf, 3) # layer ==5
write_uint(buf, 5) # (...) write_uint(buf, 5) # (...)
write_uint(buf, 3) # datatype ==4 write_uint(buf, 3) # datatype ==4
write_uint(buf, 4) # (...) write_uint(buf, 4) # (...)
write_uint(buf, 11) # LAYERNAME record (geometry) write_uint(buf, 11) # LAYERNAME record (geometry)
write_bstring(buf, b'E5I47') # name write_bstring(buf, b'E5I47') # name
write_uint(buf, 3) # layer ==5 write_uint(buf, 3) # layer ==5
write_uint(buf, 5) # (...) write_uint(buf, 5) # (...)
write_uint(buf, 4) # datatype 4 to 7 write_uint(buf, 4) # datatype 4 to 7
write_uint(buf, 4) # (...) write_uint(buf, 4) # (...)
write_uint(buf, 7) # (...) write_uint(buf, 7) # (...)
return buf return buf
@ -127,7 +121,7 @@ def write_names_text(buf: BufferedIOBase, prefix: bytes = b'') -> BufferedIOBase
write_uint(buf, 0) # all datatypes write_uint(buf, 0) # all datatypes
write_uint(buf, 12) # LAYERNAME record (geometry) write_uint(buf, 12) # LAYERNAME record (geometry)
write_bstring(buf, prefix + b'I56A') # name write_bstring(buf, prefix + b'I56A') # name
write_uint(buf, 4) # layer 5 to 6 write_uint(buf, 4) # layer 5 to 6
write_uint(buf, 5) # (...) write_uint(buf, 5) # (...)
write_uint(buf, 6) # (...) write_uint(buf, 6) # (...)
@ -160,7 +154,8 @@ def write_text(buf: BufferedIOBase) -> BufferedIOBase:
def name_test(layers: Sequence, is_textlayer: bool) -> None: def name_test(layers: Sequence, is_textlayer: bool) -> None:
for ii, nn in enumerate(layers): for ii, nn in enumerate(layers):
assert is_textlayer == nn.is_textlayer, f'Fail on layername {ii}' msg = f'Fail on layername {ii}'
assert is_textlayer == nn.is_textlayer, msg
assert nn.nstring.string == ['AA', 'L5A', 'H5A', 'E5A', 'I56A', assert nn.nstring.string == ['AA', 'L5A', 'H5A', 'E5A', 'I56A',
'E5L4', 'E5H4', 'E5E4', 'E5I47'][ii], msg 'E5L4', 'E5H4', 'E5E4', 'E5I47'][ii], msg
@ -172,7 +167,8 @@ def name_test(layers: Sequence, is_textlayer: bool) -> None:
def name_test_text(layers: Sequence) -> None: def name_test_text(layers: Sequence) -> None:
for ii, nn in enumerate(layers): for ii, nn in enumerate(layers):
assert nn.is_textlayer, f'Fail on layername {ii}' msg = f'Fail on layername {ii}'
assert nn.is_textlayer, msg
assert nn.nstring.string == ['TAA', 'TL5A', 'TH5A', 'TE5A', 'TI56A'][ii], msg assert nn.nstring.string == ['TAA', 'TL5A', 'TH5A', 'TE5A', 'TI56A'][ii], msg
assert nn.layer_interval[0] == [None, None, 5, 5, 5][ii], msg assert nn.layer_interval[0] == [None, None, 5, 5, 5][ii], msg

View File

@ -1,17 +1,9 @@
# type: ignore # type: ignore
from typing import List, Tuple, Iterable
from itertools import chain
from io import BytesIO, BufferedIOBase from io import BytesIO, BufferedIOBase
import struct
import pytest # type: ignore
import numpy
from numpy.testing import assert_equal
from .utils import HEADER, FOOTER from .utils import HEADER, FOOTER
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring, write_byte, PathExtensionScheme from ..basic import write_uint, write_sint, write_bstring, write_byte
from ..basic import InvalidRecordError, InvalidDataError
from ..main import OasisLayout from ..main import OasisLayout
@ -33,151 +25,151 @@ def write_file_1(buf: BufferedIOBase) -> BufferedIOBase:
''' '''
buf.write(HEADER) buf.write(HEADER)
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'A') # Cell name write_bstring(buf, b'A') # Cell name
# RECTANGLE 0 # RECTANGLE 0
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0110_0011) # SWHX_YRDL write_byte(buf, 0b0110_0011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 10) # width write_uint(buf, 10) # width
write_uint(buf, 20) # height write_uint(buf, 20) # height
# TEXT 1 # TEXT 1
write_uint(buf, 19) # TEXT record write_uint(buf, 19) # TEXT record
write_byte(buf, 0b0100_0011) # 0CNX_YRTL write_byte(buf, 0b0100_0011) # 0CNX_YRTL
write_bstring(buf, b'A') # text string write_bstring(buf, b'A') # text string
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 1) # datatype write_uint(buf, 1) # datatype
# RECTANGLE 2 # RECTANGLE 2
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0001_1000) # SWHX_YRDL write_byte(buf, 0b0001_1000) # SWHX_YRDL
write_sint(buf, 100) # geometry-x (absolute) write_sint(buf, 100) # geometry-x (absolute)
write_sint(buf, -100) # geometry-y (absolute) write_sint(buf, -100) # geometry-y (absolute)
# TEXT 3 # TEXT 3
write_uint(buf, 19) # TEXT record write_uint(buf, 19) # TEXT record
write_byte(buf, 0b0001_1000) # 0CNX_YRTL write_byte(buf, 0b0001_1000) # 0CNX_YRTL
write_sint(buf, 100) # text-x (absolute) write_sint(buf, 100) # text-x (absolute)
write_sint(buf, -100) # text-y (absolute) write_sint(buf, -100) # text-y (absolute)
# RECTANGLE 4 # RECTANGLE 4
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0001_1000) # SWHX_YRDL write_byte(buf, 0b0001_1000) # SWHX_YRDL
write_sint(buf, 200) # geometry-x (absolute) write_sint(buf, 200) # geometry-x (absolute)
write_sint(buf, -200) # geometry-y (absolute) write_sint(buf, -200) # geometry-y (absolute)
# TEXT 5 # TEXT 5
write_uint(buf, 19) # TEXT record write_uint(buf, 19) # TEXT record
write_byte(buf, 0b0001_1000) # 0CNX_YRTL write_byte(buf, 0b0001_1000) # 0CNX_YRTL
write_sint(buf, 200) # text-x (absolute) write_sint(buf, 200) # text-x (absolute)
write_sint(buf, -200) # text-y (absolute) write_sint(buf, -200) # text-y (absolute)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# RECTANGLE 6 # RECTANGLE 6
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0001_1000) # SWHX_YRDL write_byte(buf, 0b0001_1000) # SWHX_YRDL
write_sint(buf, 100) # geometry-x (relative) write_sint(buf, 100) # geometry-x (relative)
write_sint(buf, -100) # geometry-y (relative) write_sint(buf, -100) # geometry-y (relative)
# TEXT 7 # TEXT 7
write_uint(buf, 19) # TEXT record write_uint(buf, 19) # TEXT record
write_byte(buf, 0b0001_1000) # 0CNX_YRTL write_byte(buf, 0b0001_1000) # 0CNX_YRTL
write_sint(buf, 100) # text-x (relative) write_sint(buf, 100) # text-x (relative)
write_sint(buf, -100) # text-y (relative) write_sint(buf, -100) # text-y (relative)
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'B') # Cell name write_bstring(buf, b'B') # Cell name
# RECTANGLE 0 # RECTANGLE 0
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0110_0011) # SWHX_YRDL write_byte(buf, 0b0110_0011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 20) # width write_uint(buf, 20) # width
write_uint(buf, 10) # height write_uint(buf, 10) # height
# TEXT 1 # TEXT 1
write_uint(buf, 19) # TEXT record write_uint(buf, 19) # TEXT record
write_byte(buf, 0b0100_0011) # 0CNX_YRTL write_byte(buf, 0b0100_0011) # 0CNX_YRTL
write_bstring(buf, b'B') # text string write_bstring(buf, b'B') # text string
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 1) # datatype write_uint(buf, 1) # datatype
# RECTANGLE 2 # RECTANGLE 2
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0001_1000) # SWHX_YRDL write_byte(buf, 0b0001_1000) # SWHX_YRDL
write_sint(buf, 100) # geometry-x (absolute) write_sint(buf, 100) # geometry-x (absolute)
write_sint(buf, 100) # geometry-y (absolute) write_sint(buf, 100) # geometry-y (absolute)
# TEXT 3 # TEXT 3
write_uint(buf, 19) # TEXT record write_uint(buf, 19) # TEXT record
write_byte(buf, 0b0001_1000) # 0CNX_YRTL write_byte(buf, 0b0001_1000) # 0CNX_YRTL
write_sint(buf, 100) # text-x (absolute) write_sint(buf, 100) # text-x (absolute)
write_sint(buf, 100) # text-y (absolute) write_sint(buf, 100) # text-y (absolute)
# RECTANGLE 4 # RECTANGLE 4
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0001_1000) # SWHX_YRDL write_byte(buf, 0b0001_1000) # SWHX_YRDL
write_sint(buf, 200) # geometry-x (absolute) write_sint(buf, 200) # geometry-x (absolute)
write_sint(buf, 200) # geometry-y (absolute) write_sint(buf, 200) # geometry-y (absolute)
# TEXT 5 # TEXT 5
write_uint(buf, 19) # TEXT record write_uint(buf, 19) # TEXT record
write_byte(buf, 0b0001_1000) # 0CNX_YRTL write_byte(buf, 0b0001_1000) # 0CNX_YRTL
write_sint(buf, 200) # text-x (absolute) write_sint(buf, 200) # text-x (absolute)
write_sint(buf, 200) # text-y (absolute) write_sint(buf, 200) # text-y (absolute)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# RECTANGLE 6 # RECTANGLE 6
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0001_1000) # SWHX_YRDL write_byte(buf, 0b0001_1000) # SWHX_YRDL
write_sint(buf, 100) # geometry-x (relative) write_sint(buf, 100) # geometry-x (relative)
write_sint(buf, 100) # geometry-y (relative) write_sint(buf, 100) # geometry-y (relative)
# TEXT 7 # TEXT 7
write_uint(buf, 19) # TEXT record write_uint(buf, 19) # TEXT record
write_byte(buf, 0b0001_1000) # 0CNX_YRTL write_byte(buf, 0b0001_1000) # 0CNX_YRTL
write_sint(buf, 100) # text-x (relative) write_sint(buf, 100) # text-x (relative)
write_sint(buf, 100) # text-y (relative) write_sint(buf, 100) # text-y (relative)
# PLACEMENT 0 # PLACEMENT 0
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b1000_0000) # CNXY_RAAF write_byte(buf, 0b1000_0000) # CNXY_RAAF
write_bstring(buf, b'A') # Cell reference write_bstring(buf, b'A') # Cell reference
# PLACEMENT 1 # PLACEMENT 1
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0011_0000) # CNXY_RAAF write_byte(buf, 0b0011_0000) # CNXY_RAAF
write_sint(buf, 50) # placement-x (relative) write_sint(buf, 50) # placement-x (relative)
write_sint(buf, 50) # placement-y (relative) write_sint(buf, 50) # placement-y (relative)
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'TOP') # Cell name write_bstring(buf, b'TOP') # Cell name
# PLACEMENT 0 # PLACEMENT 0
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b1000_0000) # CNXY_RAAF write_byte(buf, 0b1000_0000) # CNXY_RAAF
write_bstring(buf, b'B') # Cell reference write_bstring(buf, b'B') # Cell reference
# RECTANGLE 0 # RECTANGLE 0
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0110_0011) # SWHX_YRDL write_byte(buf, 0b0110_0011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 50) # width write_uint(buf, 50) # width
write_uint(buf, 5) # height write_uint(buf, 5) # height
# TEXT 1 # TEXT 1
write_uint(buf, 19) # TEXT record write_uint(buf, 19) # TEXT record
write_byte(buf, 0b0100_0011) # 0CNX_YRTL write_byte(buf, 0b0100_0011) # 0CNX_YRTL
write_bstring(buf, b'TOP') # text string write_bstring(buf, b'TOP') # text string
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 1) # datatype write_uint(buf, 1) # datatype
buf.write(FOOTER) buf.write(FOOTER)
return buf return buf

View File

@ -1,17 +1,11 @@
# type: ignore # type: ignore
from typing import List, Tuple, Iterable
from itertools import chain
from io import BytesIO, BufferedIOBase from io import BytesIO, BufferedIOBase
import struct
import pytest # type: ignore
import numpy
from numpy.testing import assert_equal from numpy.testing import assert_equal
from .utils import HEADER, FOOTER from .utils import HEADER, FOOTER
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring, write_byte, PathExtensionScheme from ..basic import write_uint, write_sint, write_bstring, write_byte, PathExtensionScheme
from ..basic import InvalidRecordError, InvalidDataError
from ..main import OasisLayout from ..main import OasisLayout
@ -37,108 +31,108 @@ def write_file_1(buf: BufferedIOBase) -> BufferedIOBase:
''' '''
buf.write(HEADER) buf.write(HEADER)
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'ABC') # Cell name write_bstring(buf, b'ABC') # Cell name
# PATH 0 # PATH 0
write_uint(buf, 22) # PATH record write_uint(buf, 22) # PATH record
write_byte(buf, 0b1111_1011) # EWPX_YRDL write_byte(buf, 0b1111_1011) # EWPX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 10) # half-width write_uint(buf, 10) # half-width
write_byte(buf, 0b0000_1111) # extension-scheme 0000_SSEE write_byte(buf, 0b0000_1111) # extension-scheme 0000_SSEE
write_sint(buf, 5) # (extension-scheme) start write_sint(buf, 5) # (extension-scheme) start
write_sint(buf, -5) # (extension-scheme) end write_sint(buf, -5) # (extension-scheme) end
write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt
write_uint(buf, 3) # (pointlist) dimension write_uint(buf, 3) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 0) # geometry-x (absolute) write_sint(buf, 0) # geometry-x (absolute)
write_sint(buf, 100) # geometry-y (absolute) write_sint(buf, 100) # geometry-y (absolute)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# PATH 1 # PATH 1
write_uint(buf, 22) # PATH record write_uint(buf, 22) # PATH record
write_byte(buf, 0b1110_1011) # EWPX_YRDL write_byte(buf, 0b1110_1011) # EWPX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 10) # half-width write_uint(buf, 10) # half-width
write_byte(buf, 0b0000_0000) # extension-scheme 0000_SSEE write_byte(buf, 0b0000_0000) # extension-scheme 0000_SSEE
write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt
write_uint(buf, 3) # (pointlist) dimension write_uint(buf, 3) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 200) # geometry-y (relative) write_sint(buf, 200) # geometry-y (relative)
# PATH 2 # PATH 2
write_uint(buf, 22) # PATH record write_uint(buf, 22) # PATH record
write_byte(buf, 0b1110_1001) # EWPX_YRDL write_byte(buf, 0b1110_1001) # EWPX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 10) # half-width write_uint(buf, 10) # half-width
write_byte(buf, 0b0000_0100) # extension-scheme 0000_SSEE write_byte(buf, 0b0000_0100) # extension-scheme 0000_SSEE
write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt
write_uint(buf, 3) # (pointlist) dimension write_uint(buf, 3) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 200) # geometry-y (relative) write_sint(buf, 200) # geometry-y (relative)
# PATH 3 # PATH 3
write_uint(buf, 22) # PATH record write_uint(buf, 22) # PATH record
write_byte(buf, 0b1110_1010) # EWPX_YRDL write_byte(buf, 0b1110_1010) # EWPX_YRDL
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 12) # half-width write_uint(buf, 12) # half-width
write_byte(buf, 0b0000_0101) # extension-scheme 0000_SSEE write_byte(buf, 0b0000_0101) # extension-scheme 0000_SSEE
write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt
write_uint(buf, 3) # (pointlist) dimension write_uint(buf, 3) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 200) # geometry-y (relative) write_sint(buf, 200) # geometry-y (relative)
# PATH 4 # PATH 4
write_uint(buf, 22) # PATH record write_uint(buf, 22) # PATH record
write_byte(buf, 0b1010_1011) # EWPX_YRDL write_byte(buf, 0b1010_1011) # EWPX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_byte(buf, 0b0000_1010) # extension-scheme 0000_SSEE write_byte(buf, 0b0000_1010) # extension-scheme 0000_SSEE
write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt
write_uint(buf, 3) # (pointlist) dimension write_uint(buf, 3) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 200) # geometry-y (relative) write_sint(buf, 200) # geometry-y (relative)
# PATH 5 # PATH 5
write_uint(buf, 22) # PATH record write_uint(buf, 22) # PATH record
write_byte(buf, 0b0000_1011) # EWPX_YRDL write_byte(buf, 0b0000_1011) # EWPX_YRDL
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 3) # datatype write_uint(buf, 3) # datatype
write_sint(buf, 200) # geometry-y (relative) write_sint(buf, 200) # geometry-y (relative)
# PATH 6 # PATH 6
write_uint(buf, 22) # PATH record write_uint(buf, 22) # PATH record
write_byte(buf, 0b0000_1111) # EWPX_YRDL write_byte(buf, 0b0000_1111) # EWPX_YRDL
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 3) # datatype write_uint(buf, 3) # datatype
write_sint(buf, 200) # geometry-y (relative) write_sint(buf, 200) # geometry-y (relative)
write_uint(buf, 1) # repetition (3x4 matrix) write_uint(buf, 1) # repetition (3x4 matrix)
write_uint(buf, 1) # (repetition) x-dimension write_uint(buf, 1) # (repetition) x-dimension
write_uint(buf, 2) # (repetition) y-dimension write_uint(buf, 2) # (repetition) y-dimension
write_uint(buf, 200) # (repetition) x-spacing write_uint(buf, 200) # (repetition) x-spacing
write_uint(buf, 300) # (repetition) y-spacing write_uint(buf, 300) # (repetition) y-spacing
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# PATH 7 # PATH 7
write_uint(buf, 22) # PATH record write_uint(buf, 22) # PATH record
write_byte(buf, 0b0001_0101) # EWPX_YRDL write_byte(buf, 0b0001_0101) # EWPX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_sint(buf, 1000) # geometry-x (relative) write_sint(buf, 1000) # geometry-x (relative)
write_uint(buf, 0) # repetition (reuse) write_uint(buf, 0) # repetition (reuse)
buf.write(FOOTER) buf.write(FOOTER)
return buf return buf

View File

@ -1,17 +1,11 @@
# type: ignore # type: ignore
from typing import Tuple
from typing import List, Tuple, Iterable
from itertools import chain
from io import BytesIO, BufferedIOBase from io import BytesIO, BufferedIOBase
import struct
import pytest # type: ignore
import numpy
from numpy.testing import assert_equal from numpy.testing import assert_equal
from .utils import HEADER, FOOTER from .utils import HEADER, FOOTER
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring, write_byte, PathExtensionScheme from ..basic import write_uint, write_sint, write_bstring, write_byte, write_float32, write_float64
from ..basic import InvalidRecordError, InvalidDataError, write_float32, write_float64
from ..main import OasisLayout from ..main import OasisLayout
@ -28,14 +22,14 @@ def base_tests(layout: OasisLayout) -> None:
def write_rectangle(buf: BufferedIOBase, pos: Tuple[int, int] = (300, -400)) -> None: def write_rectangle(buf: BufferedIOBase, pos: Tuple[int, int] = (300, -400)) -> None:
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0111_1011) # SWHX_YRDL write_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, pos[0]) # geometry-x (absolute) write_sint(buf, pos[0]) # geometry-x (absolute)
write_sint(buf, pos[1]) # geometry-y (absolute) write_sint(buf, pos[1]) # geometry-y (absolute)
def write_file_1(buf: BufferedIOBase) -> BufferedIOBase: def write_file_1(buf: BufferedIOBase) -> BufferedIOBase:
@ -43,120 +37,120 @@ def write_file_1(buf: BufferedIOBase) -> BufferedIOBase:
''' '''
buf.write(HEADER) buf.write(HEADER)
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'A') # Cell name write_bstring(buf, b'A') # Cell name
write_rectangle(buf) write_rectangle(buf)
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'TOP') # Cell name write_bstring(buf, b'TOP') # Cell name
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# PLACEMENT 0 # PLACEMENT 0
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b1011_0000) # CNXY_RAAF write_byte(buf, 0b1011_0000) # CNXY_RAAF
write_bstring(buf, b'A') # cell reference write_bstring(buf, b'A') # cell reference
write_sint(buf, -300) # placement-x (relative) write_sint(buf, -300) # placement-x (relative)
write_sint(buf, 400) # placement-y (relative) write_sint(buf, 400) # placement-y (relative)
# PLACEMENT 1 # PLACEMENT 1
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0011_0000) # CNXY_RAAF write_byte(buf, 0b0011_0000) # CNXY_RAAF
write_sint(buf, 0) # placement-x (relative) write_sint(buf, 0) # placement-x (relative)
write_sint(buf, 400) # placement-y (relative) write_sint(buf, 400) # placement-y (relative)
# PLACEMENT 2 # PLACEMENT 2
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0001_0000) # CNXY_RAAF write_byte(buf, 0b0001_0000) # CNXY_RAAF
write_sint(buf, 400) # placement-y (relative) write_sint(buf, 400) # placement-y (relative)
# PLACEMENT 3 # PLACEMENT 3
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0010_0000) # CNXY_RAAF write_byte(buf, 0b0010_0000) # CNXY_RAAF
write_sint(buf, 300) # placement-x (relative) write_sint(buf, 300) # placement-x (relative)
write_uint(buf, 15) # XYABSOLUTE record write_uint(buf, 15) # XYABSOLUTE record
# PLACEMENT 4 # PLACEMENT 4
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0011_0001) # CNXY_RAAF write_byte(buf, 0b0011_0001) # CNXY_RAAF
write_sint(buf, 700) # placement-x (absolute) write_sint(buf, 700) # placement-x (absolute)
write_sint(buf, 400) # placement-y (absolute) write_sint(buf, 400) # placement-y (absolute)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# PLACEMENT 5 # PLACEMENT 5
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0001_0010) # CNXY_RAAF write_byte(buf, 0b0001_0010) # CNXY_RAAF
write_sint(buf, 1000) # placement-y (relative) write_sint(buf, 1000) # placement-y (relative)
# PLACEMENT 6 # PLACEMENT 6
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0001_0011) # CNXY_RAAF write_byte(buf, 0b0001_0011) # CNXY_RAAF
write_sint(buf, 1000) # placement-y (relative) write_sint(buf, 1000) # placement-y (relative)
write_uint(buf, 15) # XYABSOLUTE record write_uint(buf, 15) # XYABSOLUTE record
# PLACEMENT 7 # PLACEMENT 7
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0011_1111) # CNXY_RAAF write_byte(buf, 0b0011_1111) # CNXY_RAAF
write_sint(buf, 2000) # placement-x (absolute) write_sint(buf, 2000) # placement-x (absolute)
write_sint(buf, 0) # placement-y (absolute) write_sint(buf, 0) # placement-y (absolute)
write_uint(buf, 1) # repetition (3x4 matrix) write_uint(buf, 1) # repetition (3x4 matrix)
write_uint(buf, 1) # (repetition) x-dimension write_uint(buf, 1) # (repetition) x-dimension
write_uint(buf, 2) # (repetition) y-dimension write_uint(buf, 2) # (repetition) y-dimension
write_uint(buf, 300) # (repetition) x-spacing write_uint(buf, 300) # (repetition) x-spacing
write_uint(buf, 300) # (repetition) y-spacing write_uint(buf, 300) # (repetition) y-spacing
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# PLACEMENT 8 # PLACEMENT 8
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0011_1111) # CNXY_RAAF write_byte(buf, 0b0011_1111) # CNXY_RAAF
write_sint(buf, 2000) # placement-x (relative) write_sint(buf, 2000) # placement-x (relative)
write_sint(buf, 0) # placement-y (relative) write_sint(buf, 0) # placement-y (relative)
write_uint(buf, 0) # repetition (reuse) write_uint(buf, 0) # repetition (reuse)
# PLACEMENT 9 # PLACEMENT 9
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0011_1111) # CNXY_RAAF write_byte(buf, 0b0011_1111) # CNXY_RAAF
write_sint(buf, 2000) # placement-x (relative) write_sint(buf, 2000) # placement-x (relative)
write_sint(buf, 0) # placement-y (relative) write_sint(buf, 0) # placement-y (relative)
write_uint(buf, 2) # repetition (3 cols.) write_uint(buf, 2) # repetition (3 cols.)
write_uint(buf, 1) # (repetition) count write_uint(buf, 1) # (repetition) count
write_uint(buf, 320) # (repetition) spacing write_uint(buf, 320) # (repetition) spacing
# PLACEMENT 10 # PLACEMENT 10
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0011_1111) # CNXY_RAAF write_byte(buf, 0b0011_1111) # CNXY_RAAF
write_sint(buf, 2000) # placement-x (relative) write_sint(buf, 2000) # placement-x (relative)
write_sint(buf, 0) # placement-y (relative) write_sint(buf, 0) # placement-y (relative)
write_uint(buf, 3) # repetition (4 rows) write_uint(buf, 3) # repetition (4 rows)
write_uint(buf, 2) # (repetition) count write_uint(buf, 2) # (repetition) count
write_uint(buf, 310) # (repetition) spacing write_uint(buf, 310) # (repetition) spacing
# PLACEMENT 11 # PLACEMENT 11
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0011_1111) # CNXY_RAAF write_byte(buf, 0b0011_1111) # CNXY_RAAF
write_sint(buf, 2000) # placement-x (relative) write_sint(buf, 2000) # placement-x (relative)
write_sint(buf, 0) # placement-y (relative) write_sint(buf, 0) # placement-y (relative)
write_uint(buf, 4) # repetition (4 arbitrary cols.) write_uint(buf, 4) # repetition (4 arbitrary cols.)
write_uint(buf, 2) # (repetition) dimension write_uint(buf, 2) # (repetition) dimension
write_uint(buf, 320) # (repetition) spacing write_uint(buf, 320) # (repetition) spacing
write_uint(buf, 330) # (repetition) spacing write_uint(buf, 330) # (repetition) spacing
write_uint(buf, 340) # (repetition) spacing write_uint(buf, 340) # (repetition) spacing
# PLACEMENT 12 # PLACEMENT 12
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0011_1111) # CNXY_RAAF write_byte(buf, 0b0011_1111) # CNXY_RAAF
write_sint(buf, 2000) # placement-x (relative) write_sint(buf, 2000) # placement-x (relative)
write_sint(buf, 0) # placement-y (relative) write_sint(buf, 0) # placement-y (relative)
write_uint(buf, 8) # repetition (3x4 matrix, arbitrary vectors) write_uint(buf, 8) # repetition (3x4 matrix, arbitrary vectors)
write_uint(buf, 1) # (repetition) n-dimension write_uint(buf, 1) # (repetition) n-dimension
write_uint(buf, 2) # (repetition) m-dimension write_uint(buf, 2) # (repetition) m-dimension
write_uint(buf, 310 << 2 | 0b01) # (repetition) n-displacement g-delta: (310, 320) write_uint(buf, 310 << 2 | 0b01) # (repetition) n-displacement g-delta: (310, 320)
write_sint(buf, 320) # (repetition g-delta) write_sint(buf, 320) # (repetition g-delta)
write_uint(buf, 330 << 4 | 0b1010) # (repetition) m-displacement g-delta: 330-northwest (-330, 330) write_uint(buf, 330 << 4 | 0b1010) # (repetition) m-displacement g-delta: 330-northwest (-330, 330)
buf.write(FOOTER) buf.write(FOOTER)
@ -211,9 +205,9 @@ def test_file_1() -> None:
assert pp.y == 0, msg assert pp.y == 0, msg
if ii < 4 or ii == 5: if ii < 4 or ii == 5:
assert pp.flip == False, msg assert not bool(pp.flip), msg
else: else:
assert pp.flip == True, msg assert bool(pp.flip), msg
if ii < 5: if ii < 5:
assert pp.angle == 0, msg assert pp.angle == 0, msg
@ -286,49 +280,49 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
# PLACEMENT 0 # PLACEMENT 0
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
if variant == 2: if variant == 2:
write_byte(buf, 0b1011_0000) # CNXY_RAAF write_byte(buf, 0b1011_0000) # CNXY_RAAF
write_bstring(buf, b'A') # cell reference write_bstring(buf, b'A') # cell reference
else: else:
write_byte(buf, 0b1111_0000) # CNXY_RAAF write_byte(buf, 0b1111_0000) # CNXY_RAAF
write_uint(buf, 0) # cell reference write_uint(buf, 0) # cell reference
write_sint(buf, -300) # placement-x (relative) write_sint(buf, -300) # placement-x (relative)
write_sint(buf, 400) # placement-y (relative) write_sint(buf, 400) # placement-y (relative)
# PLACEMENT 1 # PLACEMENT 1
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0011_0000) # CNXY_RAAF write_byte(buf, 0b0011_0000) # CNXY_RAAF
write_sint(buf, 0) # placement-x (relative) write_sint(buf, 0) # placement-x (relative)
write_sint(buf, 400) # placement-y (relative) write_sint(buf, 400) # placement-y (relative)
# PLACEMENT 2 # PLACEMENT 2
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0001_0000) # CNXY_RAAF write_byte(buf, 0b0001_0000) # CNXY_RAAF
write_sint(buf, 400) # placement-y (relative) write_sint(buf, 400) # placement-y (relative)
# PLACEMENT 3 # PLACEMENT 3
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0010_0000) # CNXY_RAAF write_byte(buf, 0b0010_0000) # CNXY_RAAF
write_sint(buf, 300) # placement-x (relative) write_sint(buf, 300) # placement-x (relative)
write_uint(buf, 15) # XYABSOLUTE record write_uint(buf, 15) # XYABSOLUTE record
# PLACEMENT 4 # PLACEMENT 4
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0011_0001) # CNXY_RAAF write_byte(buf, 0b0011_0001) # CNXY_RAAF
write_sint(buf, 700) # placement-x (absolute) write_sint(buf, 700) # placement-x (absolute)
write_sint(buf, 400) # placement-y (absolute) write_sint(buf, 400) # placement-y (absolute)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# PLACEMENT 5 # PLACEMENT 5
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0001_0010) # CNXY_RAAF write_byte(buf, 0b0001_0010) # CNXY_RAAF
write_sint(buf, 1000) # placement-y (relative) write_sint(buf, 1000) # placement-y (relative)
# PLACEMENT 6 # PLACEMENT 6
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0001_0011) # CNXY_RAAF write_byte(buf, 0b0001_0011) # CNXY_RAAF
write_sint(buf, 1000) # placement-y (relative) write_sint(buf, 1000) # placement-y (relative)
if variant == 2: if variant == 2:
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
@ -502,9 +496,9 @@ def common_tests(layout: OasisLayout, variant: int) -> None:
assert pp.y == 400 * (ii + 1), msg assert pp.y == 400 * (ii + 1), msg
if ii in (4, 6): if ii in (4, 6):
assert pp.flip == True, msg assert bool(pp.flip), msg
else: else:
assert pp.flip == False, msg assert not bool(pp.flip), msg
if ii in (5, 6): if ii in (5, 6):
assert pp.angle == 90, msg assert pp.angle == 90, msg
@ -525,73 +519,73 @@ def write_file_4(buf: BufferedIOBase) -> BufferedIOBase:
''' '''
buf.write(HEADER) buf.write(HEADER)
write_uint(buf, 3) # CELLNAME record (implicit id 0) write_uint(buf, 3) # CELLNAME record (implicit id 0)
write_bstring(buf, b'A') write_bstring(buf, b'A')
write_uint(buf, 3) # CELLNAME record (implicit id 1) write_uint(buf, 3) # CELLNAME record (implicit id 1)
write_bstring(buf, b'TOP') write_bstring(buf, b'TOP')
write_uint(buf, 13) # CELL record (name ref.) write_uint(buf, 13) # CELL record (name ref.)
write_uint(buf, 1) # Cell name 1 (TOP) write_uint(buf, 1) # Cell name 1 (TOP)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# PLACEMENT 0 # PLACEMENT 0
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b1111_1000) # CNXY_RAAF write_byte(buf, 0b1111_1000) # CNXY_RAAF
write_uint(buf, 0) # cell reference write_uint(buf, 0) # cell reference
write_sint(buf, -300) # placement-x (relative) write_sint(buf, -300) # placement-x (relative)
write_sint(buf, 400) # placement-y (relative) write_sint(buf, 400) # placement-y (relative)
write_uint(buf, 1) # repetition (3x4 matrix) write_uint(buf, 1) # repetition (3x4 matrix)
write_uint(buf, 1) # (repetition) x-dimension write_uint(buf, 1) # (repetition) x-dimension
write_uint(buf, 2) # (repetition) y-dimension write_uint(buf, 2) # (repetition) y-dimension
write_uint(buf, 20) # (repetition) x-spacing write_uint(buf, 20) # (repetition) x-spacing
write_uint(buf, 30) # (repetition) y-spacing write_uint(buf, 30) # (repetition) y-spacing
# PLACEMENT 1 # PLACEMENT 1
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0011_1000) # CNXY_RAAF write_byte(buf, 0b0011_1000) # CNXY_RAAF
write_sint(buf, 0) # placement-x (relative) write_sint(buf, 0) # placement-x (relative)
write_sint(buf, 400) # placement-y (relative) write_sint(buf, 400) # placement-y (relative)
write_uint(buf, 0) # repetition (reuse) write_uint(buf, 0) # repetition (reuse)
# PLACEMENT 2 # PLACEMENT 2
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0001_1000) # CNXY_RAAF write_byte(buf, 0b0001_1000) # CNXY_RAAF
write_sint(buf, 400) # placement-y (relative) write_sint(buf, 400) # placement-y (relative)
write_uint(buf, 0) # repetition (reuse) write_uint(buf, 0) # repetition (reuse)
# PLACEMENT 3 # PLACEMENT 3
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0010_1000) # CNXY_RAAF write_byte(buf, 0b0010_1000) # CNXY_RAAF
write_sint(buf, 300) # placement-x (relative) write_sint(buf, 300) # placement-x (relative)
write_uint(buf, 0) # repetition (reuse) write_uint(buf, 0) # repetition (reuse)
write_uint(buf, 15) # XYABSOLUTE record write_uint(buf, 15) # XYABSOLUTE record
# PLACEMENT 4 # PLACEMENT 4
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0011_1001) # CNXY_RAAF write_byte(buf, 0b0011_1001) # CNXY_RAAF
write_sint(buf, 700) # placement-x (absolute) write_sint(buf, 700) # placement-x (absolute)
write_sint(buf, 400) # placement-y (absolute) write_sint(buf, 400) # placement-y (absolute)
write_uint(buf, 0) # repetition (reuse) write_uint(buf, 0) # repetition (reuse)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# PLACEMENT 5 # PLACEMENT 5
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0001_1010) # CNXY_RAAF write_byte(buf, 0b0001_1010) # CNXY_RAAF
write_sint(buf, 1000) # placement-y (relative) write_sint(buf, 1000) # placement-y (relative)
write_uint(buf, 0) # repetition (reuse) write_uint(buf, 0) # repetition (reuse)
# PLACEMENT 6 # PLACEMENT 6
write_uint(buf, 17) # PLACEMENT (simple) write_uint(buf, 17) # PLACEMENT (simple)
write_byte(buf, 0b0001_1011) # CNXY_RAAF write_byte(buf, 0b0001_1011) # CNXY_RAAF
write_sint(buf, 1000) # placement-y (relative) write_sint(buf, 1000) # placement-y (relative)
write_uint(buf, 0) # repetition (reuse) write_uint(buf, 0) # repetition (reuse)
write_uint(buf, 13) # CELL record (name ref.) write_uint(buf, 13) # CELL record (name ref.)
write_uint(buf, 0) # Cell name 0 (A) write_uint(buf, 0) # Cell name 0 (A)
write_rectangle(buf) write_rectangle(buf)
@ -604,84 +598,84 @@ def write_file_6(buf: BufferedIOBase) -> BufferedIOBase:
''' '''
buf.write(HEADER) buf.write(HEADER)
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'TOPTOP') # Cell name write_bstring(buf, b'TOPTOP') # Cell name
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
write_uint(buf, 18) # PLACEMENT (mag 0.5, manhattan) write_uint(buf, 18) # PLACEMENT (mag 0.5, manhattan)
write_byte(buf, 0b1011_0110) # CNXY_RMAF write_byte(buf, 0b1011_0110) # CNXY_RMAF
write_bstring(buf, b'TOP') # Cell reference write_bstring(buf, b'TOP') # Cell reference
write_uint(buf, 6) # magnitude, float32 write_uint(buf, 6) # magnitude, float32
write_float32(buf, 0.5) # (magnitude) write_float32(buf, 0.5) # (magnitude)
write_uint(buf, 7) # angle, float64 write_uint(buf, 7) # angle, float64
write_float64(buf, 90.0) # (angle) write_float64(buf, 90.0) # (angle)
write_sint(buf, 100) # placement-x (relative) write_sint(buf, 100) # placement-x (relative)
write_sint(buf, 0) # placement-y (relative) write_sint(buf, 0) # placement-y (relative)
write_uint(buf, 18) # PLACEMENT (no mag, manhattan) write_uint(buf, 18) # PLACEMENT (no mag, manhattan)
write_byte(buf, 0b0011_0000) # CNXY_RMAF write_byte(buf, 0b0011_0000) # CNXY_RMAF
write_sint(buf, 100) # placement-x (relative) write_sint(buf, 100) # placement-x (relative)
write_sint(buf, 1000) # placement-y (relative) write_sint(buf, 1000) # placement-y (relative)
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'TOP') # Cell name write_bstring(buf, b'TOP') # Cell name
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# PLACEMENT 0 # PLACEMENT 0
write_uint(buf, 18) # PLACEMENT (mag 0.5, manhattan) write_uint(buf, 18) # PLACEMENT (mag 0.5, manhattan)
write_byte(buf, 0b1011_0110) # CNXY_RMAF write_byte(buf, 0b1011_0110) # CNXY_RMAF
write_bstring(buf, b'A') # Cell reference write_bstring(buf, b'A') # Cell reference
write_uint(buf, 6) # magnitude, float32 write_uint(buf, 6) # magnitude, float32
write_float32(buf, 0.5) # (magnitude) write_float32(buf, 0.5) # (magnitude)
write_uint(buf, 7) # angle, float64 write_uint(buf, 7) # angle, float64
write_float64(buf, 0.0) # (angle) write_float64(buf, 0.0) # (angle)
write_sint(buf, -150) # placement-x (relative) write_sint(buf, -150) # placement-x (relative)
write_sint(buf, 200) # placement-y (relative) write_sint(buf, 200) # placement-y (relative)
# PLACEMENT 1 # PLACEMENT 1
write_uint(buf, 18) # PLACEMENT (no mag, manhattan) write_uint(buf, 18) # PLACEMENT (no mag, manhattan)
write_byte(buf, 0b0011_0000) # CNXY_RMAF write_byte(buf, 0b0011_0000) # CNXY_RMAF
write_sint(buf, -150) # placement-x (relative) write_sint(buf, -150) # placement-x (relative)
write_sint(buf, 600) # placement-y (relative) write_sint(buf, 600) # placement-y (relative)
# PLACEMENT 2 # PLACEMENT 2
write_uint(buf, 18) # PLACEMENT (no mag, manhattan) write_uint(buf, 18) # PLACEMENT (no mag, manhattan)
write_byte(buf, 0b0001_0000) # CNXY_RMAF write_byte(buf, 0b0001_0000) # CNXY_RMAF
write_sint(buf, 400) # placement-y (relative) write_sint(buf, 400) # placement-y (relative)
# PLACEMENT 3 # PLACEMENT 3
write_uint(buf, 18) # PLACEMENT (no mag, manhattan) write_uint(buf, 18) # PLACEMENT (no mag, manhattan)
write_byte(buf, 0b0010_0000) # CNXY_RMAF write_byte(buf, 0b0010_0000) # CNXY_RMAF
write_sint(buf, 300) # placement-x (relative) write_sint(buf, 300) # placement-x (relative)
write_uint(buf, 15) # XYABSOLUTE record write_uint(buf, 15) # XYABSOLUTE record
# PLACEMENT 4 # PLACEMENT 4
write_uint(buf, 18) # PLACEMENT (no mag, manhattan) write_uint(buf, 18) # PLACEMENT (no mag, manhattan)
write_byte(buf, 0b0011_0001) # CNXY_RMAF write_byte(buf, 0b0011_0001) # CNXY_RMAF
write_sint(buf, 700) # placement-x (absolute) write_sint(buf, 700) # placement-x (absolute)
write_sint(buf, 400) # placement-y (absolute) write_sint(buf, 400) # placement-y (absolute)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# PLACEMENT 5 # PLACEMENT 5
write_uint(buf, 18) # PLACEMENT (no mag, manhattan) write_uint(buf, 18) # PLACEMENT (no mag, manhattan)
write_byte(buf, 0b0001_0010) # CNXY_RMAF write_byte(buf, 0b0001_0010) # CNXY_RMAF
write_uint(buf, 0) # angle (uint, positive) write_uint(buf, 0) # angle (uint, positive)
write_uint(buf, 90) # (angle) write_uint(buf, 90) # (angle)
write_sint(buf, 1000) # placement-y (relative) write_sint(buf, 1000) # placement-y (relative)
# PLACEMENT 6 # PLACEMENT 6
write_uint(buf, 18) # PLACEMENT (no mag, manhattan) write_uint(buf, 18) # PLACEMENT (no mag, manhattan)
write_byte(buf, 0b0001_0011) # CNXY_RMAF write_byte(buf, 0b0001_0011) # CNXY_RMAF
write_uint(buf, 1) # angle (uint, negative) write_uint(buf, 1) # angle (uint, negative)
write_uint(buf, 90) # (angle) write_uint(buf, 90) # (angle)
write_sint(buf, 1000) # placement-y (relative) write_sint(buf, 1000) # placement-y (relative)
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'A') # Cell name write_bstring(buf, b'A') # Cell name
write_rectangle(buf) write_rectangle(buf)
@ -757,71 +751,71 @@ def write_file_8(buf: BufferedIOBase) -> BufferedIOBase:
''' '''
buf.write(HEADER) buf.write(HEADER)
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'TOPTOP') # Cell name write_bstring(buf, b'TOPTOP') # Cell name
write_uint(buf, 15) # XYABSOLUTE record write_uint(buf, 15) # XYABSOLUTE record
write_uint(buf, 18) # PLACEMENT (mag 0.5, arbitrary angle) write_uint(buf, 18) # PLACEMENT (mag 0.5, arbitrary angle)
write_byte(buf, 0b1011_0110) # CNXY_RMAF write_byte(buf, 0b1011_0110) # CNXY_RMAF
write_bstring(buf, b'TOP') # Cell reference write_bstring(buf, b'TOP') # Cell reference
write_uint(buf, 6) # magnitude, float32 write_uint(buf, 6) # magnitude, float32
write_float32(buf, 0.5) # (magnitude) write_float32(buf, 0.5) # (magnitude)
write_uint(buf, 7) # angle, float64 write_uint(buf, 7) # angle, float64
write_float64(buf, 22.5) # (angle) write_float64(buf, 22.5) # (angle)
write_sint(buf, 100) # placement-x (absolute) write_sint(buf, 100) # placement-x (absolute)
write_sint(buf, 0) # placement-y (absolute) write_sint(buf, 0) # placement-y (absolute)
write_uint(buf, 18) # PLACEMENT (mag 1.0, manhattan) write_uint(buf, 18) # PLACEMENT (mag 1.0, manhattan)
write_byte(buf, 0b1011_0110) # CNXY_RMAF write_byte(buf, 0b1011_0110) # CNXY_RMAF
write_bstring(buf, b'TOP') # Cell reference write_bstring(buf, b'TOP') # Cell reference
write_uint(buf, 6) # magnitude, float32 write_uint(buf, 6) # magnitude, float32
write_float32(buf, 1.0) # (magnitude) write_float32(buf, 1.0) # (magnitude)
write_uint(buf, 7) # angle, float64 write_uint(buf, 7) # angle, float64
write_float64(buf, 0.0) # (angle) write_float64(buf, 0.0) # (angle)
write_sint(buf, 1100) # placement-x (absolute) write_sint(buf, 1100) # placement-x (absolute)
write_sint(buf, 0) # placement-y (absolute) write_sint(buf, 0) # placement-y (absolute)
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'TOP') # Cell name write_bstring(buf, b'TOP') # Cell name
write_uint(buf, 18) # PLACEMENT (mag 2.0, manhattan) write_uint(buf, 18) # PLACEMENT (mag 2.0, manhattan)
write_byte(buf, 0b1011_0110) # CNXY_RMAF write_byte(buf, 0b1011_0110) # CNXY_RMAF
write_bstring(buf, b'A') # Cell reference write_bstring(buf, b'A') # Cell reference
write_uint(buf, 6) # magnitude, float32 write_uint(buf, 6) # magnitude, float32
write_float32(buf, 2.0) # (magnitude) write_float32(buf, 2.0) # (magnitude)
write_uint(buf, 7) # angle, float64 write_uint(buf, 7) # angle, float64
write_float64(buf, 0.0) # (angle) write_float64(buf, 0.0) # (angle)
write_sint(buf, -100) # placement-x (absolute) write_sint(buf, -100) # placement-x (absolute)
write_sint(buf, 100) # placement-y (absolute) write_sint(buf, 100) # placement-y (absolute)
write_uint(buf, 18) # PLACEMENT (mag 1.0, arbitrary angle) write_uint(buf, 18) # PLACEMENT (mag 1.0, arbitrary angle)
write_byte(buf, 0b1011_0110) # CNXY_RMAF write_byte(buf, 0b1011_0110) # CNXY_RMAF
write_bstring(buf, b'A') # Cell reference write_bstring(buf, b'A') # Cell reference
write_uint(buf, 6) # magnitude, float32 write_uint(buf, 6) # magnitude, float32
write_float32(buf, 1.0) # (magnitude) write_float32(buf, 1.0) # (magnitude)
write_uint(buf, 7) # angle, float64 write_uint(buf, 7) # angle, float64
write_float64(buf, 45.0) # (angle) write_float64(buf, 45.0) # (angle)
write_sint(buf, -150) # placement-x (absolute) write_sint(buf, -150) # placement-x (absolute)
write_sint(buf, 1100) # placement-y (absolute) write_sint(buf, 1100) # placement-y (absolute)
write_uint(buf, 18) # PLACEMENT (mag 0.5, arbitrary angle) write_uint(buf, 18) # PLACEMENT (mag 0.5, arbitrary angle)
write_byte(buf, 0b1011_1111) # CNXY_RMAF write_byte(buf, 0b1011_1111) # CNXY_RMAF
write_bstring(buf, b'A') # Cell reference write_bstring(buf, b'A') # Cell reference
write_uint(buf, 6) # magnitude, float32 write_uint(buf, 6) # magnitude, float32
write_float32(buf, 0.5) # (magnitude) write_float32(buf, 0.5) # (magnitude)
write_uint(buf, 7) # angle, float64 write_uint(buf, 7) # angle, float64
write_float64(buf, 135.0) # (angle) write_float64(buf, 135.0) # (angle)
write_sint(buf, -200) # placement-x (absolute) write_sint(buf, -200) # placement-x (absolute)
write_sint(buf, 2100) # placement-y (absolute) write_sint(buf, 2100) # placement-y (absolute)
write_uint(buf, 1) # repetition (3x4 matrix) write_uint(buf, 1) # repetition (3x4 matrix)
write_uint(buf, 1) # (repetition) x-dimension write_uint(buf, 1) # (repetition) x-dimension
write_uint(buf, 2) # (repetition) y-dimension write_uint(buf, 2) # (repetition) y-dimension
write_uint(buf, 200) # (repetition) x-spacing write_uint(buf, 200) # (repetition) x-spacing
write_uint(buf, 300) # (repetition) y-spacing write_uint(buf, 300) # (repetition) y-spacing
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'A') # Cell name write_bstring(buf, b'A') # Cell name
write_rectangle(buf, pos=(30, -40)) write_rectangle(buf, pos=(30, -40))

View File

@ -1,17 +1,12 @@
# type: ignore # type: ignore
from typing import List, Tuple, Iterable
from itertools import chain
from io import BytesIO, BufferedIOBase from io import BytesIO, BufferedIOBase
import struct
import pytest # type: ignore
import numpy import numpy
from numpy.testing import assert_equal from numpy.testing import assert_equal
from .utils import HEADER, FOOTER from .utils import HEADER, FOOTER
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring, write_byte from ..basic import write_uint, write_sint, write_bstring, write_byte
from ..basic import InvalidRecordError, InvalidDataError
from ..main import OasisLayout from ..main import OasisLayout
@ -85,8 +80,11 @@ def common_tests(layout: OasisLayout) -> None:
for ii in range(4): for ii in range(4):
msg = f'Fail on poly {ii}' msg = f'Fail on poly {ii}'
assert len(geometry[0].point_list) == 6, msg assert len(geometry[0].point_list) == 6, msg
assert_equal(geometry[0].point_list, [[150, 0], [0, 50], [-50, 0], [0, 50], assert_equal(
[-100, 0], [0, -100]], err_msg=msg) geometry[0].point_list,
[[150, 0], [0, 50], [-50, 0], [0, 50], [-100, 0], [0, -100]],
err_msg=msg,
)
assert len(geometry[4].point_list) == 6 assert len(geometry[4].point_list) == 6
assert_equal(geometry[4].point_list, [[0, 150], [50, 0], [0, -50], [50, 0], [0, -100], [-100, 0]]) assert_equal(geometry[4].point_list, [[0, 150], [50, 0], [0, -50], [50, 0], [0, -100], [-100, 0]])
@ -97,8 +95,10 @@ def common_tests(layout: OasisLayout) -> None:
assert len(geometry[7].point_list) == 9 assert len(geometry[7].point_list) == 9
assert_equal(geometry[7].point_list, [[25, 0], [50, 50], [0, 50], [-50, 50], [-50, 0], [-50, -50], [10, -75], [25, -25], [40, 0]]) assert_equal(geometry[7].point_list, [[25, 0], [50, 50], [0, 50], [-50, 50], [-50, 0], [-50, -50], [10, -75], [25, -25], [40, 0]])
assert len(geometry[8].point_list) == 9 assert len(geometry[8].point_list) == 9
assert_equal(geometry[8].point_list, assert_equal(
numpy.cumsum([[25, 0], [50, 50], [0, 50], [-50, 50], [-50, 0], [-50, -50], [10, -75], [25, -25], [45, -575]], axis=0)) geometry[8].point_list,
numpy.cumsum([[25, 0], [50, 50], [0, 50], [-50, 50], [-50, 0], [-50, -50], [10, -75], [25, -25], [45, -575]], axis=0),
)
for ii in range(9, 12): for ii in range(9, 12):
msg = f'Fail on poly {ii}' msg = f'Fail on poly {ii}'
@ -114,49 +114,49 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
buf.write(HEADER) buf.write(HEADER)
if variant == 3: if variant == 3:
write_uint(buf, 7) # PROPNAME record (implict id 0) write_uint(buf, 7) # PROPNAME record (implict id 0)
write_bstring(buf, b'PROP0') # property name write_bstring(buf, b'PROP0') # property name
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'ABC') # Cell name write_bstring(buf, b'ABC') # Cell name
# POLYGON 0 # POLYGON 0
write_uint(buf, 21) # POLYGON record write_uint(buf, 21) # POLYGON record
write_byte(buf, 0b0011_1011) # 00PX_YRDL write_byte(buf, 0b0011_1011) # 00PX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt
write_uint(buf, 4) # (pointlist) dimension write_uint(buf, 4) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, 0) # geometry-x (absolute) write_sint(buf, 0) # geometry-x (absolute)
write_sint(buf, 100) # geometry-y (absolute) write_sint(buf, 100) # geometry-y (absolute)
if variant == 3: if variant == 3:
# PROPERTY 0 # PROPERTY 0
write_uint(buf, 28) # PROPERTY record (explicit) write_uint(buf, 28) # PROPERTY record (explicit)
write_byte(buf, 0b0001_0110) # UUUU_VCNS write_byte(buf, 0b0001_0110) # UUUU_VCNS
write_uint(buf, 0) # propname id write_uint(buf, 0) # propname id
write_uint(buf, 2) # property value (real: positive reciprocal) write_uint(buf, 2) # property value (real: positive reciprocal)
write_uint(buf, 5) # (real) 1/5 write_uint(buf, 5) # (real) 1/5
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# Polygon 1 # Polygon 1
write_uint(buf, 21) # POLYGON record write_uint(buf, 21) # POLYGON record
write_byte(buf, 0b0011_1011) # 00PX_YRDL write_byte(buf, 0b0011_1011) # 00PX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt
write_uint(buf, 4) # (pointlist) dimension write_uint(buf, 4) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -200) # geometry-x (relative) write_sint(buf, -200) # geometry-x (relative)
write_sint(buf, 300) # geometry-y (relative) write_sint(buf, 300) # geometry-y (relative)
if variant == 3: if variant == 3:
# PROPERTY 1 # PROPERTY 1
@ -165,55 +165,55 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
write_uint(buf, 15) # XYABSOLUTE record write_uint(buf, 15) # XYABSOLUTE record
# Polygon 2 # Polygon 2
write_uint(buf, 21) # POLYGON record write_uint(buf, 21) # POLYGON record
write_byte(buf, 0b0011_0011) # 00PX_YRDL write_byte(buf, 0b0011_0011) # 00PX_YRDL
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 3) # datatype write_uint(buf, 3) # datatype
write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt write_uint(buf, 0) # pointlist: 1-delta, horiz-fisrt
write_uint(buf, 4) # (pointlist) dimension write_uint(buf, 4) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, 0) # geometry-x (absolute) write_sint(buf, 0) # geometry-x (absolute)
if variant == 3: if variant == 3:
# PROPERTY 2 # PROPERTY 2
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# Polygon 3 # Polygon 3
write_uint(buf, 21) # POLYGON record write_uint(buf, 21) # POLYGON record
write_byte(buf, 0b0000_1000) # 00PX_YRDL write_byte(buf, 0b0000_1000) # 00PX_YRDL
write_sint(buf, 1000) # geometry-y (absolute) write_sint(buf, 1000) # geometry-y (absolute)
if variant == 3: if variant == 3:
# PROPERTY 3 # PROPERTY 3
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# Polygon 4 # Polygon 4
write_uint(buf, 21) # POLYGON record write_uint(buf, 21) # POLYGON record
write_byte(buf, 0b0011_0011) # 00PX_YRDL write_byte(buf, 0b0011_0011) # 00PX_YRDL
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 3) # datatype write_uint(buf, 3) # datatype
write_uint(buf, 1) # pointlist: 1-delta, vert-fisrt write_uint(buf, 1) # pointlist: 1-delta, vert-fisrt
write_uint(buf, 4) # (pointlist) dimension write_uint(buf, 4) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, 200) # geometry-x (absolute) write_sint(buf, 200) # geometry-x (absolute)
if variant == 3: if variant == 3:
# PROPERTY 4 # PROPERTY 4
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# Polygon 5 # Polygon 5
write_uint(buf, 21) # POLYGON record write_uint(buf, 21) # POLYGON record
write_byte(buf, 0b0011_0011) # 00PX_YRDL write_byte(buf, 0b0011_0011) # 00PX_YRDL
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 3) # datatype write_uint(buf, 3) # datatype
write_uint(buf, 2) # pointlist: 2-delta write_uint(buf, 2) # pointlist: 2-delta
write_uint(buf, 7) # (pointlist) dimension write_uint(buf, 7) # (pointlist) dimension
write_uint(buf, 150 << 2 | 0b00) # (pointlist) write_uint(buf, 150 << 2 | 0b00) # (pointlist)
write_uint(buf, 50 << 2 | 0b01) # (pointlist) write_uint(buf, 50 << 2 | 0b01) # (pointlist)
write_uint(buf, 50 << 2 | 0b10) # (pointlist) write_uint(buf, 50 << 2 | 0b10) # (pointlist)
@ -228,12 +228,12 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# Polygon 6 # Polygon 6
write_uint(buf, 21) # POLYGON record write_uint(buf, 21) # POLYGON record
write_byte(buf, 0b0011_0011) # 00PX_YRDL write_byte(buf, 0b0011_0011) # 00PX_YRDL
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 3) # datatype write_uint(buf, 3) # datatype
write_uint(buf, 3) # pointlist: 3-delta write_uint(buf, 3) # pointlist: 3-delta
write_uint(buf, 8) # (pointlist) dimension write_uint(buf, 8) # (pointlist) dimension
write_uint(buf, 25 << 3 | 0b000) # (pointlist) write_uint(buf, 25 << 3 | 0b000) # (pointlist)
write_uint(buf, 50 << 3 | 0b100) # (pointlist) write_uint(buf, 50 << 3 | 0b100) # (pointlist)
write_uint(buf, 50 << 3 | 0b001) # (pointlist) write_uint(buf, 50 << 3 | 0b001) # (pointlist)
@ -249,12 +249,12 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# Polygon 7 # Polygon 7
write_uint(buf, 21) # POLYGON record write_uint(buf, 21) # POLYGON record
write_byte(buf, 0b0011_0011) # 00PX_YRDL write_byte(buf, 0b0011_0011) # 00PX_YRDL
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 3) # datatype write_uint(buf, 3) # datatype
write_uint(buf, 4) # pointlist: g-delta write_uint(buf, 4) # pointlist: g-delta
write_uint(buf, 8) # (pointlist) dimension write_uint(buf, 8) # (pointlist) dimension
write_uint(buf, 25 << 4 | 0b0000) # (pointlist) write_uint(buf, 25 << 4 | 0b0000) # (pointlist)
write_uint(buf, 50 << 4 | 0b1000) # (pointlist) write_uint(buf, 50 << 4 | 0b1000) # (pointlist)
write_uint(buf, 50 << 4 | 0b0010) # (pointlist) write_uint(buf, 50 << 4 | 0b0010) # (pointlist)
@ -263,7 +263,7 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
write_uint(buf, 50 << 4 | 0b0100) # (pointlist) write_uint(buf, 50 << 4 | 0b0100) # (pointlist)
write_uint(buf, 50 << 4 | 0b1100) # (pointlist) write_uint(buf, 50 << 4 | 0b1100) # (pointlist)
write_uint(buf, 10 << 2 | 0b01) # (pointlist) write_uint(buf, 10 << 2 | 0b01) # (pointlist)
write_sint(buf, -75 ) write_sint(buf, -75)
write_uint(buf, 25 << 4 | 0b1110) # (pointlist) write_uint(buf, 25 << 4 | 0b1110) # (pointlist)
write_sint(buf, 900) # geometry-x (absolute) write_sint(buf, 900) # geometry-x (absolute)
@ -272,12 +272,12 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# Polygon 8 # Polygon 8
write_uint(buf, 21) # POLYGON record write_uint(buf, 21) # POLYGON record
write_byte(buf, 0b0011_0011) # 00PX_YRDL write_byte(buf, 0b0011_0011) # 00PX_YRDL
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 3) # datatype write_uint(buf, 3) # datatype
write_uint(buf, 5) # pointlist: double g-delta write_uint(buf, 5) # pointlist: double g-delta
write_uint(buf, 8) # (pointlist) dimension write_uint(buf, 8) # (pointlist) dimension
write_uint(buf, 25 << 4 | 0b0000) # (pointlist) write_uint(buf, 25 << 4 | 0b0000) # (pointlist)
write_uint(buf, 50 << 4 | 0b1000) # (pointlist) write_uint(buf, 50 << 4 | 0b1000) # (pointlist)
write_uint(buf, 50 << 4 | 0b0010) # (pointlist) write_uint(buf, 50 << 4 | 0b0010) # (pointlist)
@ -286,7 +286,7 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
write_uint(buf, 50 << 4 | 0b0100) # (pointlist) write_uint(buf, 50 << 4 | 0b0100) # (pointlist)
write_uint(buf, 50 << 4 | 0b1100) # (pointlist) write_uint(buf, 50 << 4 | 0b1100) # (pointlist)
write_uint(buf, 10 << 2 | 0b01) # (pointlist) write_uint(buf, 10 << 2 | 0b01) # (pointlist)
write_sint(buf, -75 ) write_sint(buf, -75)
write_uint(buf, 25 << 4 | 0b1110) # (pointlist) write_uint(buf, 25 << 4 | 0b1110) # (pointlist)
write_sint(buf, 1100) # geometry-x (absolute) write_sint(buf, 1100) # geometry-x (absolute)
@ -295,62 +295,62 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# Polygon 9 # Polygon 9
write_uint(buf, 21) # POLYGON record write_uint(buf, 21) # POLYGON record
write_byte(buf, 0b0011_1111) # 00PX_YRDL write_byte(buf, 0b0011_1111) # 00PX_YRDL
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 3) # datatype write_uint(buf, 3) # datatype
write_uint(buf, 1) # pointlist: 1-delta (vert. first) write_uint(buf, 1) # pointlist: 1-delta (vert. first)
write_uint(buf, 4) # (pointlist) dimension write_uint(buf, 4) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, 0) # geometry-x (absolute) write_sint(buf, 0) # geometry-x (absolute)
write_sint(buf, 2000) # geometry-y (absolute) write_sint(buf, 2000) # geometry-y (absolute)
write_uint(buf, 1) # repetition (3x4 matrix) write_uint(buf, 1) # repetition (3x4 matrix)
write_uint(buf, 1) # (repetition) x-dimension write_uint(buf, 1) # (repetition) x-dimension
write_uint(buf, 2) # (repetition) y-dimension write_uint(buf, 2) # (repetition) y-dimension
write_uint(buf, 200) # (repetition) x-spacing write_uint(buf, 200) # (repetition) x-spacing
write_uint(buf, 300) # (repetition) y-spacing write_uint(buf, 300) # (repetition) y-spacing
if variant == 3: if variant == 3:
# PROPERTY 9 # PROPERTY 9
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# Polygon 10 # Polygon 10
write_uint(buf, 21) # POLYGON record write_uint(buf, 21) # POLYGON record
write_byte(buf, 0b0011_0110) # 00PX_YRDL write_byte(buf, 0b0011_0110) # 00PX_YRDL
write_uint(buf, 1) # datatype write_uint(buf, 1) # datatype
write_uint(buf, 1) # pointlist: 1-delta (vert. first) write_uint(buf, 1) # pointlist: 1-delta (vert. first)
write_uint(buf, 4) # (pointlist) dimension write_uint(buf, 4) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, 1000) # geometry-x (relative) write_sint(buf, 1000) # geometry-x (relative)
write_uint(buf, 0) # repetition (reuse) write_uint(buf, 0) # repetition (reuse)
if variant == 3: if variant == 3:
# PROPERTY 10 # PROPERTY 10
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# Polygon 11 # Polygon 11
write_uint(buf, 21) # POLYGON record write_uint(buf, 21) # POLYGON record
write_byte(buf, 0b0011_0110) # 00PX_YRDL write_byte(buf, 0b0011_0110) # 00PX_YRDL
write_uint(buf, 1) # datatype write_uint(buf, 1) # datatype
write_uint(buf, 1) # pointlist: 1-delta (vert. first) write_uint(buf, 1) # pointlist: 1-delta (vert. first)
write_uint(buf, 4) # (pointlist) dimension write_uint(buf, 4) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, 1000) # geometry-x (relative) write_sint(buf, 1000) # geometry-x (relative)
write_uint(buf, 6) # repetition (3 rows) write_uint(buf, 6) # repetition (3 rows)
write_uint(buf, 1) # (repetition) dimension write_uint(buf, 1) # (repetition) dimension
write_uint(buf, 200) # (repetition) y-delta write_uint(buf, 200) # (repetition) y-delta
write_uint(buf, 300) # (repetition) y-delta write_uint(buf, 300) # (repetition) y-delta
if variant == 3: if variant == 3:
# PROPERTY 11 # PROPERTY 11
@ -386,21 +386,21 @@ def write_file_2(buf: BufferedIOBase) -> BufferedIOBase:
write_uint(buf, 15) # XYRELATIVE record write_uint(buf, 15) # XYRELATIVE record
# POLYGON 0 # POLYGON 0
write_uint(buf, 21) # POLYGON record write_uint(buf, 21) # POLYGON record
write_byte(buf, 0b0011_0011) # 00PX_YRDL write_byte(buf, 0b0011_0011) # 00PX_YRDL
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 3) # datatype write_uint(buf, 3) # datatype
write_uint(buf, 4) # pointlist: g-delta write_uint(buf, 4) # pointlist: g-delta
write_uint(buf, 8002) # (pointlist) dimension write_uint(buf, 8002) # (pointlist) dimension
write_uint(buf, 1000 << 2 | 0b11) # (pointlist) write_uint(buf, 1000 << 2 | 0b11) # (pointlist)
write_sint(buf, 0) # (pointlist) write_sint(buf, 0) # (pointlist)
for _ in range(4000): for _ in range(4000):
write_uint(buf, 10 << 2 | 0b01) # (pointlist) write_uint(buf, 10 << 2 | 0b01) # (pointlist)
write_sint(buf, 20) # (pointlist) write_sint(buf, 20) # (pointlist)
write_uint(buf, 10 << 2 | 0b11) # (pointlist) write_uint(buf, 10 << 2 | 0b11) # (pointlist)
write_sint(buf, 20) # (pointlist) write_sint(buf, 20) # (pointlist)
write_uint(buf, 1000 << 2 | 0b01) # (pointlist) write_uint(buf, 1000 << 2 | 0b01) # (pointlist)
write_sint(buf, 0) # (pointlist) write_sint(buf, 0) # (pointlist)
write_sint(buf, 0) # geometry-x (absolute) write_sint(buf, 0) # geometry-x (absolute)
buf.write(FOOTER) buf.write(FOOTER)
@ -425,7 +425,8 @@ def test_file_2() -> None:
assert_equal(poly.point_list, assert_equal(poly.point_list,
([[-1000, 0]] ([[-1000, 0]]
+ [[(-1) ** nn * 10, 20] for nn in range(8000)] + [[(-1) ** nn * 10, 20] for nn in range(8000)]
+ [[1000, 0], [0, -20 * 8000]])) + [[1000, 0], [0, -20 * 8000]]),
)
def test_file_3() -> None: def test_file_3() -> None:

View File

@ -1,17 +1,13 @@
# type: ignore # type: ignore
from typing import List, Tuple, Iterable
from itertools import chain
from io import BytesIO, BufferedIOBase from io import BytesIO, BufferedIOBase
import struct
import pytest # type: ignore import pytest
import numpy
from numpy.testing import assert_equal from numpy.testing import assert_equal
from .utils import HEADER, FOOTER from .utils import HEADER, FOOTER
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring, write_byte, PathExtensionScheme from ..basic import write_uint, write_sint, write_bstring, write_byte
from ..basic import InvalidRecordError, InvalidDataError from ..basic import InvalidDataError
from ..main import OasisLayout from ..main import OasisLayout
@ -54,7 +50,6 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
write_uint(buf, 7) # PROPNAME record (implicit id 1) write_uint(buf, 7) # PROPNAME record (implicit id 1)
write_bstring(buf, b'PROP1') write_bstring(buf, b'PROP1')
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'A') # Cell name write_bstring(buf, b'A') # Cell name
@ -74,11 +69,29 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
write_uint(buf, 300) # (repetition) x-spacing write_uint(buf, 300) # (repetition) x-spacing
write_uint(buf, 320) # (repetition) y-spacing write_uint(buf, 320) # (repetition) y-spacing
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0000_0100) # UUUU_VCNS write_byte(buf, 0b0000_0100) # UUUU_VCNS
write_bstring(buf, b'PROPX') write_bstring(buf, b'PROPX')
# RECTANGLE 1 # RECTANGLE 1
write_uint(buf, 20) # RECTANGLE record
var_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype
write_uint(buf, 100) # width
write_uint(buf, 200) # height
write_sint(buf, 0) # geometry-x (relative)
write_sint(buf, 1000) # geometry-y (relative)
if include_repetitions:
write_uint(buf, 0) # repetition (reuse)
write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0001_0110) # UUUU_VCNS
write_uint(buf, 0) # propname id
write_uint(buf, 1) # property value 0 (real type 1, negative int)
write_uint(buf, 5) # (real 1)
# RECTANGLE 2
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
var_byte(buf, 0b0111_1011) # SWHX_YRDL var_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
@ -90,60 +103,20 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
if include_repetitions: if include_repetitions:
write_uint(buf, 0) # repetition (reuse) write_uint(buf, 0) # repetition (reuse)
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0001_0110) # UUUU_VCNS write_byte(buf, 0b0100_0110) # UUUU_VCNS
write_uint(buf, 0) # propname id write_uint(buf, 0) # propname id
write_uint(buf, 1) # property value 0 (real type 1, negative int) write_uint(buf, 8) # prop value 0 (unsigned int)
write_uint(buf, 5) # (real 1) write_uint(buf, 25) # (prop value)
write_uint(buf, 9) # prop value 1 (signed int)
# RECTANGLE 2 write_sint(buf, -124) # (prop value)
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 10) # prop value 2 (a-string)
var_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype
write_uint(buf, 100) # width
write_uint(buf, 200) # height
write_sint(buf, 0) # geometry-x (relative)
write_sint(buf, 1000) # geometry-y (relative)
if include_repetitions:
write_uint(buf, 0) # repetition (reuse)
write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0100_0110) # UUUU_VCNS
write_uint(buf, 0) # propname id
write_uint(buf, 8) # prop value 0 (unsigned int)
write_uint(buf, 25) # (prop value)
write_uint(buf, 9) # prop value 1 (signed int)
write_sint(buf, -124) # (prop value)
write_uint(buf, 10) # prop value 2 (a-string)
write_bstring(buf, b'PROP_VALUE2') write_bstring(buf, b'PROP_VALUE2')
write_uint(buf, 13) # prop value 3 (propstring ref.) write_uint(buf, 13) # prop value 3 (propstring ref.)
write_uint(buf, 12) write_uint(buf, 12)
# RECTANGLE 3 # RECTANGLE 3
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
var_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype
write_uint(buf, 100) # width
write_uint(buf, 200) # height
write_sint(buf, 0) # geometry-x (relative)
write_sint(buf, 1000) # geometry-y (relative)
if include_repetitions:
write_uint(buf, 0) # repetition (reuse)
write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b1111_0000) # UUUU_VCNS
write_uint(buf, 3) # number of values
write_uint(buf, 0) # prop value 0 (unsigned int)
write_uint(buf, 25) # (prop value)
write_uint(buf, 9) # prop value 1 (signed int)
write_sint(buf, -124) # (prop value)
write_uint(buf, 14) # prop value 2 (propstring ref.)
write_uint(buf, 13)
# RECTANGLE 4
write_uint(buf, 20) # RECTANGLE record
var_byte(buf, 0b0111_1011) # SWHX_YRDL var_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
@ -154,14 +127,36 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
if include_repetitions: if include_repetitions:
write_uint(buf, 0) # repetition (reuse) write_uint(buf, 0) # repetition (reuse)
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0000_1000) # UUUU_VCNS write_byte(buf, 0b1111_0000) # UUUU_VCNS
write_uint(buf, 3) # number of values
write_uint(buf, 0) # prop value 0 (unsigned int)
write_uint(buf, 25) # (prop value)
write_uint(buf, 9) # prop value 1 (signed int)
write_sint(buf, -124) # (prop value)
write_uint(buf, 14) # prop value 2 (propstring ref.)
write_uint(buf, 13)
write_uint(buf, 15) # XYABSOLUTE record # RECTANGLE 4
write_uint(buf, 20) # RECTANGLE record
var_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype
write_uint(buf, 100) # width
write_uint(buf, 200) # height
write_sint(buf, 0) # geometry-x (relative)
write_sint(buf, 1000) # geometry-y (relative)
if include_repetitions:
write_uint(buf, 0) # repetition (reuse)
write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0000_1000) # UUUU_VCNS
write_uint(buf, 15) # XYABSOLUTE record
# TEXT 5 # TEXT 5
write_uint(buf, 19) # TEXT record write_uint(buf, 19) # TEXT record
var_byte(buf, 0b0101_1011) # 0CNX_YRTL var_byte(buf, 0b0101_1011) # 0CNX_YRTL
write_bstring(buf, b'A') # text-string write_bstring(buf, b'A') # text-string
write_uint(buf, 2) # text-layer write_uint(buf, 2) # text-layer
write_uint(buf, 1) # text-datatype write_uint(buf, 1) # text-datatype
@ -173,47 +168,47 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
write_uint(buf, 29) # PROPERTY (reuse) write_uint(buf, 29) # PROPERTY (reuse)
# PATH 6 # PATH 6
write_uint(buf, 22) # PATH record write_uint(buf, 22) # PATH record
var_byte(buf, 0b1111_1011) # EWPX_YRDL var_byte(buf, 0b1111_1011) # EWPX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 10) # half-width write_uint(buf, 10) # half-width
write_byte(buf, 0b0000_1111) # extension-scheme 0000_SSEE write_byte(buf, 0b0000_1111) # extension-scheme 0000_SSEE
write_sint(buf, 5) # (extension-scheme) write_sint(buf, 5) # (extension-scheme)
write_sint(buf, -5) # (extension-scheme) write_sint(buf, -5) # (extension-scheme)
write_uint(buf, 0) # pointlist (1-delta, horiz. first) write_uint(buf, 0) # pointlist (1-delta, horiz. first)
write_uint(buf, 3) # (pointlist) dimension write_uint(buf, 3) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 2000) # geometry-x (absolute) write_sint(buf, 2000) # geometry-x (absolute)
write_sint(buf, 0) # geometry-y (absolute) write_sint(buf, 0) # geometry-y (absolute)
if include_repetitions: if include_repetitions:
write_uint(buf, 0) # repetition (reuse) write_uint(buf, 0) # repetition (reuse)
write_uint(buf, 29) # PROPERTY (reuse) write_uint(buf, 29) # PROPERTY (reuse)
# POLYGON 7 # POLYGON 7
write_uint(buf, 21) # POLYGON record write_uint(buf, 21) # POLYGON record
var_byte(buf, 0b0011_1011) # 00PX_YRDL var_byte(buf, 0b0011_1011) # 00PX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 0) # pointlist (1-delta, horiz. first) write_uint(buf, 0) # pointlist (1-delta, horiz. first)
write_uint(buf, 4) # (pointlist) dimension write_uint(buf, 4) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, 3000) # geometry-x (absolute) write_sint(buf, 3000) # geometry-x (absolute)
write_sint(buf, 0) # geometry-y (absolute) write_sint(buf, 0) # geometry-y (absolute)
if include_repetitions: if include_repetitions:
write_uint(buf, 0) # repetition (reuse) write_uint(buf, 0) # repetition (reuse)
write_uint(buf, 29) # PROPERTY (reuse) write_uint(buf, 29) # PROPERTY (reuse)
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0000_0110) # UUUU_VCNS write_byte(buf, 0b0000_0110) # UUUU_VCNS
write_uint(buf, 1) # propname id write_uint(buf, 1) # propname id
if variant == 5: if variant == 5:
write_uint(buf, 10) # PROPSTRING (explicit id) write_uint(buf, 10) # PROPSTRING (explicit id)
@ -375,141 +370,141 @@ def write_file_3(buf: BufferedIOBase) -> BufferedIOBase:
write_uint(buf, 7) # PROPNAME record (implicit id 0) write_uint(buf, 7) # PROPNAME record (implicit id 0)
write_bstring(buf, b'S_GDS_PROPERTY') write_bstring(buf, b'S_GDS_PROPERTY')
# ** CELL **
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'A') # Cell name write_bstring(buf, b'A') # Cell name
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# RECTANGLE 0 # RECTANGLE 0
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0111_1011) # SWHX_YRDL write_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, 0) # geometry-x (relative) write_sint(buf, 0) # geometry-x (relative)
write_sint(buf, 1000) # geometry-y (relative) write_sint(buf, 1000) # geometry-y (relative)
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0010_0111) # UUUU_VCNS write_byte(buf, 0b0010_0111) # UUUU_VCNS
write_uint(buf, 0) # propname id write_uint(buf, 0) # propname id
write_uint(buf, 8) # property value 0 (unsigned int) write_uint(buf, 8) # property value 0 (unsigned int)
write_uint(buf, 25) # (...) write_uint(buf, 25) # (...)
write_uint(buf, 10) # property value 1 (a-string) write_uint(buf, 10) # property value 1 (a-string)
write_bstring(buf, b'PROP_VALUE2') write_bstring(buf, b'PROP_VALUE2')
# RECTANGLE 1 # RECTANGLE 1
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0111_1011) # SWHX_YRDL write_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, 0) # geometry-x (relative) write_sint(buf, 0) # geometry-x (relative)
write_sint(buf, 1000) # geometry-y (relative) write_sint(buf, 1000) # geometry-y (relative)
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b1111_0001) # UUUU_VCNS write_byte(buf, 0b1111_0001) # UUUU_VCNS
write_uint(buf, 2) # number of values write_uint(buf, 2) # number of values
write_uint(buf, 8) # property value 0 (unsigned int) write_uint(buf, 8) # property value 0 (unsigned int)
write_uint(buf, 10) # (...) write_uint(buf, 10) # (...)
write_uint(buf, 14) # property value 1 (prop-string ref.) write_uint(buf, 14) # property value 1 (prop-string ref.)
write_uint(buf, 13) # (...) write_uint(buf, 13) # (...)
# RECTANGLE 2 # RECTANGLE 2
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0111_1011) # SWHX_YRDL write_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, 0) # geometry-x (relative) write_sint(buf, 0) # geometry-x (relative)
write_sint(buf, 1000) # geometry-y (relative) write_sint(buf, 1000) # geometry-y (relative)
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0000_1001) # UUUU_VCNS write_byte(buf, 0b0000_1001) # UUUU_VCNS
# RECTANGLE 3 # RECTANGLE 3
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0111_1011) # SWHX_YRDL write_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, 0) # geometry-x (relative) write_sint(buf, 0) # geometry-x (relative)
write_sint(buf, 1000) # geometry-y (relative) write_sint(buf, 1000) # geometry-y (relative)
write_uint(buf, 29) # PROPERTY (reuse) write_uint(buf, 29) # PROPERTY (reuse)
# RECTANGLE 4 # RECTANGLE 4
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0111_1011) # SWHX_YRDL write_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, 0) # geometry-x (relative) write_sint(buf, 0) # geometry-x (relative)
write_sint(buf, 1000) # geometry-y (relative) write_sint(buf, 1000) # geometry-y (relative)
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0000_1001) # UUUU_VCNS write_byte(buf, 0b0000_1001) # UUUU_VCNS
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0010_0111) # UUUU_VCNS write_byte(buf, 0b0010_0111) # UUUU_VCNS
write_uint(buf, 0) # propname id write_uint(buf, 0) # propname id
write_uint(buf, 8) # prop value 0 (unsigned int) write_uint(buf, 8) # prop value 0 (unsigned int)
write_uint(buf, 25) # (...) write_uint(buf, 25) # (...)
write_uint(buf, 10) # prop-value 1 (a-string) write_uint(buf, 10) # prop-value 1 (a-string)
write_bstring(buf, b'PROP_VALUE2') # (...) write_bstring(buf, b'PROP_VALUE2') # (...)
write_uint(buf, 15) # XYABSOLUTE record write_uint(buf, 15) # XYABSOLUTE record
# TEXT 5 # TEXT 5
write_uint(buf, 19) # TEXT record write_uint(buf, 19) # TEXT record
write_byte(buf, 0b0101_1011) # 0CNX_YRTL write_byte(buf, 0b0101_1011) # 0CNX_YRTL
write_bstring(buf, b'A') # text-string write_bstring(buf, b'A') # text-string
write_uint(buf, 2) # text-layer write_uint(buf, 2) # text-layer
write_uint(buf, 1) # text-datatype write_uint(buf, 1) # text-datatype
write_sint(buf, 1000) # geometry-x (absolute) write_sint(buf, 1000) # geometry-x (absolute)
write_sint(buf, 0) # geometry-y (absolute) write_sint(buf, 0) # geometry-y (absolute)
write_uint(buf, 29) # PROPERTY (reuse) write_uint(buf, 29) # PROPERTY (reuse)
# PATH 6 # PATH 6
write_uint(buf, 22) # PATH record write_uint(buf, 22) # PATH record
write_byte(buf, 0b1111_1011) # EWPX_YRDL write_byte(buf, 0b1111_1011) # EWPX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 10) # half-width write_uint(buf, 10) # half-width
write_byte(buf, 0b0000_1111) # extension-scheme 0000_SSEE write_byte(buf, 0b0000_1111) # extension-scheme 0000_SSEE
write_sint(buf, 5) # (extension-scheme) write_sint(buf, 5) # (extension-scheme)
write_sint(buf, -5) # (extension-scheme) write_sint(buf, -5) # (extension-scheme)
write_uint(buf, 0) # pointlist (1-delta, horiz. first) write_uint(buf, 0) # pointlist (1-delta, horiz. first)
write_uint(buf, 3) # (pointlist) dimension write_uint(buf, 3) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 2000) # geometry-x (absolute) write_sint(buf, 2000) # geometry-x (absolute)
write_sint(buf, 0) # geometry-y (absolute) write_sint(buf, 0) # geometry-y (absolute)
write_uint(buf, 29) # PROPERTY (reuse) write_uint(buf, 29) # PROPERTY (reuse)
# POLYGON 7 # POLYGON 7
write_uint(buf, 21) # POLYGON record write_uint(buf, 21) # POLYGON record
write_byte(buf, 0b0011_1011) # 00PX_YRDL write_byte(buf, 0b0011_1011) # 00PX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 0) # pointlist (1-delta, horiz. first) write_uint(buf, 0) # pointlist (1-delta, horiz. first)
write_uint(buf, 4) # (pointlist) dimension write_uint(buf, 4) # (pointlist) dimension
write_sint(buf, 150) # (pointlist) write_sint(buf, 150) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, -50) # (pointlist) write_sint(buf, -50) # (pointlist)
write_sint(buf, 50) # (pointlist) write_sint(buf, 50) # (pointlist)
write_sint(buf, 3000) # geometry-x (absolute) write_sint(buf, 3000) # geometry-x (absolute)
write_sint(buf, 0) # geometry-y (absolute) write_sint(buf, 0) # geometry-y (absolute)
write_uint(buf, 29) # PROPERTY (reuse) write_uint(buf, 29) # PROPERTY (reuse)
buf.write(FOOTER) buf.write(FOOTER)
return buf return buf
@ -605,180 +600,180 @@ def write_file_4_6(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
write_bstring(buf, b'A') # Cell name write_bstring(buf, b'A') # Cell name
# RECTANGLE 0 # RECTANGLE 0
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0111_1011) # SWHX_YRDL write_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, 300) # geometry-x (relative) write_sint(buf, 300) # geometry-x (relative)
write_sint(buf, -400) # geometry-y (relative) write_sint(buf, -400) # geometry-y (relative)
# ** CELL **
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'TOP') # Cell name write_bstring(buf, b'TOP') # Cell name
# PLACEMENT 0 # PLACEMENT 0
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan) write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
write_byte(buf, 0b1011_0000) # CNXY_RAAF write_byte(buf, 0b1011_0000) # CNXY_RAAF
write_bstring(buf, b'A') # cell name write_bstring(buf, b'A') # cell name
write_sint(buf, -300) # placement-x write_sint(buf, -300) # placement-x
write_sint(buf, 400) # placement-y write_sint(buf, 400) # placement-y
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0010_0111) # UUUU_VCNS write_byte(buf, 0b0010_0111) # UUUU_VCNS
write_uint(buf, 0) # propname-id write_uint(buf, 0) # propname-id
write_uint(buf, 8) # prop-value 0 (unsigned int) write_uint(buf, 8) # prop-value 0 (unsigned int)
write_uint(buf, 25) # (...) write_uint(buf, 25) # (...)
write_uint(buf, 10) # prop-value 1 (a-string) write_uint(buf, 10) # prop-value 1 (a-string)
write_bstring(buf, b'PROP_VALUE2') write_bstring(buf, b'PROP_VALUE2')
if variant == 6: if variant == 6:
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0010_0111) # UUUU_VCNS write_byte(buf, 0b0010_0111) # UUUU_VCNS
write_uint(buf, 0) # propname-id write_uint(buf, 0) # propname-id
write_uint(buf, 8) # prop-value 0 (unsigned int) write_uint(buf, 8) # prop-value 0 (unsigned int)
write_uint(buf, 26) # (...) write_uint(buf, 26) # (...)
write_uint(buf, 10) # prop-value 1 (a-string) write_uint(buf, 10) # prop-value 1 (a-string)
write_bstring(buf, b'PROP_VALUE26') write_bstring(buf, b'PROP_VALUE26')
# PLACEMENT 1 # PLACEMENT 1
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan) write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
write_byte(buf, 0b0011_0000) # CNXY_RAAF write_byte(buf, 0b0011_0000) # CNXY_RAAF
write_sint(buf, 0) # placement-x write_sint(buf, 0) # placement-x
if variant == 4: if variant == 4:
write_sint(buf, 200) # placement-y write_sint(buf, 200) # placement-y
else: else:
write_sint(buf, 400) # placement-y write_sint(buf, 400) # placement-y
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b1111_0001) # UUUU_VCNS write_byte(buf, 0b1111_0001) # UUUU_VCNS
write_uint(buf, 2) # number of values write_uint(buf, 2) # number of values
write_uint(buf, 8) # prop-value 0 (unsigned int) write_uint(buf, 8) # prop-value 0 (unsigned int)
write_uint(buf, 10) # (...) write_uint(buf, 10) # (...)
write_uint(buf, 14) # prop-value 1 (prop-string ref.) write_uint(buf, 14) # prop-value 1 (prop-string ref.)
write_uint(buf, 13) # (...) write_uint(buf, 13) # (...)
# PLACEMENT 2 # PLACEMENT 2
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan) write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
write_byte(buf, 0b0001_0000) # CNXY_RAAF write_byte(buf, 0b0001_0000) # CNXY_RAAF
write_sint(buf, 400) # placement-y write_sint(buf, 400) # placement-y
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0000_1001) # UUUU_VCNS write_byte(buf, 0b0000_1001) # UUUU_VCNS
# PLACEMENT 3 # PLACEMENT 3
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan) write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
write_byte(buf, 0b0010_0000) # CNXY_RAAF write_byte(buf, 0b0010_0000) # CNXY_RAAF
write_sint(buf, 300) # placement-x write_sint(buf, 300) # placement-x
write_uint(buf, 29) # PROPERTY (reuse) write_uint(buf, 29) # PROPERTY (reuse)
write_uint(buf, 15) # XYABSOLUTE record write_uint(buf, 15) # XYABSOLUTE record
# PLACEMENT 4 # PLACEMENT 4
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan) write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
write_byte(buf, 0b0011_0001) # CNXY_RAAF write_byte(buf, 0b0011_0001) # CNXY_RAAF
write_sint(buf, 700) # placement-x (absolute) write_sint(buf, 700) # placement-x (absolute)
write_sint(buf, 400) # placement-y (absolute) write_sint(buf, 400) # placement-y (absolute)
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0000_1001) # UUUU_VCNS write_byte(buf, 0b0000_1001) # UUUU_VCNS
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# PLACEMENT 5 # PLACEMENT 5
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan) write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
write_byte(buf, 0b0001_0010) # CNXY_RAAF write_byte(buf, 0b0001_0010) # CNXY_RAAF
write_sint(buf, 1000) # placement-y (relative) write_sint(buf, 1000) # placement-y (relative)
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0010_0111) # UUUU_VCNS write_byte(buf, 0b0010_0111) # UUUU_VCNS
write_uint(buf, 0) # propname-id write_uint(buf, 0) # propname-id
write_uint(buf, 8) # prop-value 0 (unsigned int) write_uint(buf, 8) # prop-value 0 (unsigned int)
write_uint(buf, 25) # (...) write_uint(buf, 25) # (...)
write_uint(buf, 10) # prop-value 1 (a-string) write_uint(buf, 10) # prop-value 1 (a-string)
write_bstring(buf, b'PROP_VALUE2') write_bstring(buf, b'PROP_VALUE2')
# PLACEMENT 6 # PLACEMENT 6
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan) write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
write_byte(buf, 0b0001_0011) # CNXY_RAAF write_byte(buf, 0b0001_0011) # CNXY_RAAF
write_sint(buf, 1000) # placement-y (relative) write_sint(buf, 1000) # placement-y (relative)
write_uint(buf, 29) # PROPERTY (reuse) write_uint(buf, 29) # PROPERTY (reuse)
write_uint(buf, 15) # XYABSOLUTE record write_uint(buf, 15) # XYABSOLUTE record
# PLACEMENT 7 # PLACEMENT 7
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan) write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
write_byte(buf, 0b0011_1111) # CNXY_RAAF write_byte(buf, 0b0011_1111) # CNXY_RAAF
write_sint(buf, 2000) # placement-x (absolute) write_sint(buf, 2000) # placement-x (absolute)
write_sint(buf, 0) # placement-y (absolute) write_sint(buf, 0) # placement-y (absolute)
write_uint(buf, 1) # repetition (3x4 matrix) write_uint(buf, 1) # repetition (3x4 matrix)
write_uint(buf, 1) # (repetition) x-dimension write_uint(buf, 1) # (repetition) x-dimension
write_uint(buf, 2) # (repetition) y-dimension write_uint(buf, 2) # (repetition) y-dimension
write_uint(buf, 300) # (repetition) x-spacing write_uint(buf, 300) # (repetition) x-spacing
write_uint(buf, 300) # (repetition) y-spacing write_uint(buf, 300) # (repetition) y-spacing
write_uint(buf, 29) # PROPERTY (reuse) write_uint(buf, 29) # PROPERTY (reuse)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# PLACEMENT 8 # PLACEMENT 8
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan) write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
write_byte(buf, 0b0011_1111) # CNXY_RAAF write_byte(buf, 0b0011_1111) # CNXY_RAAF
write_sint(buf, 2000) # placement-x write_sint(buf, 2000) # placement-x
write_sint(buf, 0) # placement-y write_sint(buf, 0) # placement-y
write_uint(buf, 0) # repetition (reuse) write_uint(buf, 0) # repetition (reuse)
write_uint(buf, 29) # PROPERTY (reuse) write_uint(buf, 29) # PROPERTY (reuse)
# PLACEMENT 9 # PLACEMENT 9
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan) write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
write_byte(buf, 0b0011_1111) # CNXY_RAAF write_byte(buf, 0b0011_1111) # CNXY_RAAF
write_sint(buf, 2000) # placement-x write_sint(buf, 2000) # placement-x
write_sint(buf, 0) # placement-y write_sint(buf, 0) # placement-y
write_uint(buf, 2) # repetition (3 cols.) write_uint(buf, 2) # repetition (3 cols.)
write_uint(buf, 1) # (repetition) dimension write_uint(buf, 1) # (repetition) dimension
write_uint(buf, 320) # (repetition) offset write_uint(buf, 320) # (repetition) offset
write_uint(buf, 29) # PROPERTY (reuse) write_uint(buf, 29) # PROPERTY (reuse)
# PLACEMENT 10 # PLACEMENT 10
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan) write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
write_byte(buf, 0b0011_1111) # CNXY_RAAF write_byte(buf, 0b0011_1111) # CNXY_RAAF
write_sint(buf, 2000) # placement-x write_sint(buf, 2000) # placement-x
write_sint(buf, 0) # placement-y write_sint(buf, 0) # placement-y
write_uint(buf, 3) # repetition (4 rows) write_uint(buf, 3) # repetition (4 rows)
write_uint(buf, 2) # (repetition) dimension write_uint(buf, 2) # (repetition) dimension
write_uint(buf, 310) # (repetition) offset write_uint(buf, 310) # (repetition) offset
write_uint(buf, 29) # PROPERTY (reuse) write_uint(buf, 29) # PROPERTY (reuse)
# PLACEMENT 11 # PLACEMENT 11
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan) write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
write_byte(buf, 0b0011_1111) # CNXY_RAAF write_byte(buf, 0b0011_1111) # CNXY_RAAF
write_sint(buf, 2000) # placement-x write_sint(buf, 2000) # placement-x
write_sint(buf, 0) # placement-y write_sint(buf, 0) # placement-y
write_uint(buf, 4) # repetition (4 arbitrary cols.) write_uint(buf, 4) # repetition (4 arbitrary cols.)
write_uint(buf, 2) # (repetition) dimension write_uint(buf, 2) # (repetition) dimension
write_uint(buf, 320) # (repetition) write_uint(buf, 320) # (repetition)
write_uint(buf, 330) # (repetition) write_uint(buf, 330) # (repetition)
write_uint(buf, 340) # (repetition) write_uint(buf, 340) # (repetition)
write_uint(buf, 29) # PROPERTY (reuse) write_uint(buf, 29) # PROPERTY (reuse)
# PLACEMENT 12 # PLACEMENT 12
write_uint(buf, 17) # PLACEMENT record (no mag, manhattan) write_uint(buf, 17) # PLACEMENT record (no mag, manhattan)
write_byte(buf, 0b0011_1111) # CNXY_RAAF write_byte(buf, 0b0011_1111) # CNXY_RAAF
write_sint(buf, 2000) # placement-x write_sint(buf, 2000) # placement-x
write_sint(buf, 0) # placement-y write_sint(buf, 0) # placement-y
write_uint(buf, 8) # repetition (3x4 matrix, arbitrary vectors) write_uint(buf, 8) # repetition (3x4 matrix, arbitrary vectors)
write_uint(buf, 1) # (repetition) n-dimension write_uint(buf, 1) # (repetition) n-dimension
write_uint(buf, 2) # (repetition) m-dimension write_uint(buf, 2) # (repetition) m-dimension
write_uint(buf, 310 << 2 | 0b01) # (repetition) n-displacement g-delta (310, 320) write_uint(buf, 310 << 2 | 0b01) # (repetition) n-displacement g-delta (310, 320)
write_sint(buf, 320) write_sint(buf, 320)
write_uint(buf, 330 << 4 | 0b1010) # (repetition) m-dispalcement g-delta 330/northwest = (-330, 330) write_uint(buf, 330 << 4 | 0b1010) # (repetition) m-dispalcement g-delta 330/northwest = (-330, 330)
write_uint(buf, 29) # PROPERTY (reuse) write_uint(buf, 29) # PROPERTY (reuse)
@ -937,16 +932,16 @@ def write_file_7_8_9(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
''' '''
buf.write(HEADER) buf.write(HEADER)
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0001_0100) # UUUU_VCNS write_byte(buf, 0b0001_0100) # UUUU_VCNS
write_bstring(buf, b'FileProp1') # property name write_bstring(buf, b'FileProp1') # property name
write_uint(buf, 10) # prop-value 0 (a-string) write_uint(buf, 10) # prop-value 0 (a-string)
write_bstring(buf, b'FileProp1Value') write_bstring(buf, b'FileProp1Value')
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0001_0110) # UUUU_VCNS write_byte(buf, 0b0001_0110) # UUUU_VCNS
write_uint(buf, 13) # prop-name reference write_uint(buf, 13) # prop-name reference
write_uint(buf, 10) # prop-value 0 (a-string) write_uint(buf, 10) # prop-value 0 (a-string)
write_bstring(buf, b'FileProp1Value') write_bstring(buf, b'FileProp1Value')
write_uint(buf, 8) # PROPNAME record (explicit id) write_uint(buf, 8) # PROPNAME record (explicit id)
@ -957,70 +952,69 @@ def write_file_7_8_9(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
if variant == 8: if variant == 8:
# Will give an error since the value modal variable is reset by PROPNAME_ID # Will give an error since the value modal variable is reset by PROPNAME_ID
write_byte(buf, 0b0001_1110) # UUUU_VCNS write_byte(buf, 0b0001_1110) # UUUU_VCNS
else: else:
write_byte(buf, 0b0001_0110) # UUUU_VCNS write_byte(buf, 0b0001_0110) # UUUU_VCNS
write_uint(buf, 13) # prop-name reference write_uint(buf, 13) # prop-name reference
if variant != 8: if variant != 8:
write_uint(buf, 8) # prop-value 0 (unsigned int) write_uint(buf, 8) # prop-value 0 (unsigned int)
write_uint(buf, 17) # (...) write_uint(buf, 17) # (...)
write_uint(buf, 10) # PROPSTRING (explicit id) write_uint(buf, 10) # PROPSTRING (explicit id)
write_bstring(buf, b'FileProp2Value') write_bstring(buf, b'FileProp2Value')
write_uint(buf, 12) # id write_uint(buf, 12) # id
# associated with PROPSTRING? # associated with PROPSTRING?
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
if variant == 9: if variant == 9:
# Will give an error since the value modal variable is unset # Will give an error since the value modal variable is unset
write_byte(buf, 0b0001_1110) # UUUU_VCNS write_byte(buf, 0b0001_1110) # UUUU_VCNS
else: else:
write_byte(buf, 0b0001_0110) # UUUU_VCNS write_byte(buf, 0b0001_0110) # UUUU_VCNS
write_uint(buf, 13) # prop-name reference write_uint(buf, 13) # prop-name reference
if variant != 9: if variant != 9:
write_uint(buf, 8) # prop-value 0 (unsigned int) write_uint(buf, 8) # prop-value 0 (unsigned int)
write_uint(buf, 42) # (...) write_uint(buf, 42) # (...)
write_uint(buf, 3) # CELLNAME record (implicit id 0) write_uint(buf, 3) # CELLNAME record (implicit id 0)
write_bstring(buf, b'A') write_bstring(buf, b'A')
# associated with cell A, through CELLNAME # TODO # associated with cell A, through CELLNAME # TODO
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0001_0100) # UUUU_VCNS write_byte(buf, 0b0001_0100) # UUUU_VCNS
write_bstring(buf, b'CellProp0') # prop name write_bstring(buf, b'CellProp0') # prop name
write_uint(buf, 10) # prop-value 0 (a-string) write_uint(buf, 10) # prop-value 0 (a-string)
write_bstring(buf, b'CPValue0') write_bstring(buf, b'CPValue0')
# ** CELL **
write_uint(buf, 13) # CELL record (name ref.) write_uint(buf, 13) # CELL record (name ref.)
write_uint(buf, 0) # Cell name 0 (XYZ) write_uint(buf, 0) # Cell name 0 (XYZ)
# associated with cell A # associated with cell A
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0001_0100) # UUUU_VCNS write_byte(buf, 0b0001_0100) # UUUU_VCNS
write_bstring(buf, b'CellProp1') # prop name write_bstring(buf, b'CellProp1') # prop name
write_uint(buf, 10) # prop-value 0 (a-string) write_uint(buf, 10) # prop-value 0 (a-string)
write_bstring(buf, b'CPValue') write_bstring(buf, b'CPValue')
write_uint(buf, 28) # PROPERTY record write_uint(buf, 28) # PROPERTY record
write_byte(buf, 0b0001_1100) # UUUU_VCNS write_byte(buf, 0b0001_1100) # UUUU_VCNS
write_bstring(buf, b'CellProp2') # prop name write_bstring(buf, b'CellProp2') # prop name
# RECTANGLE 0 # RECTANGLE 0
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0111_1011) # SWHX_YRDL write_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, 300) # geometry-x write_sint(buf, 300) # geometry-x
write_sint(buf, -400) # geometry-y write_sint(buf, -400) # geometry-y
buf.write(FOOTER) buf.write(FOOTER)
return buf return buf
def test_file_7() -> None: def test_file_7() -> None:
buf = write_file_7_8_9(BytesIO(), 7) buf = write_file_7_8_9(BytesIO(), 7)

View File

@ -1,15 +1,9 @@
# type: ignore # type: ignore
from typing import List, Tuple, Iterable
from itertools import chain
from io import BytesIO, BufferedIOBase from io import BytesIO, BufferedIOBase
import struct
import pytest # type: ignore
from .utils import HEADER, FOOTER from .utils import HEADER, FOOTER
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring, write_byte from ..basic import write_uint, write_sint, write_bstring, write_byte
from ..basic import InvalidRecordError, InvalidDataError
from ..main import OasisLayout from ..main import OasisLayout
@ -88,149 +82,149 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
buf.write(HEADER) buf.write(HEADER)
if variant == 2: if variant == 2:
write_uint(buf, 7) # PROPNAME record (implict id 0) write_uint(buf, 7) # PROPNAME record (implict id 0)
write_bstring(buf, b'PROP0') # property name write_bstring(buf, b'PROP0') # property name
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'ABC') # Cell name write_bstring(buf, b'ABC') # Cell name
# RECTANGLE 0 # RECTANGLE 0
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0111_1011) # SWHX_YRDL write_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, 300) # geometry-x (absolute) write_sint(buf, 300) # geometry-x (absolute)
write_sint(buf, -400) # geometry-y (absolute) write_sint(buf, -400) # geometry-y (absolute)
if variant == 2: if variant == 2:
# PROPERTY 0 # PROPERTY 0
write_uint(buf, 28) # PROPERTY record (explicit) write_uint(buf, 28) # PROPERTY record (explicit)
write_byte(buf, 0b0001_0110) # UUUU_VCNS write_byte(buf, 0b0001_0110) # UUUU_VCNS
write_uint(buf, 0) # propname id write_uint(buf, 0) # propname id
write_uint(buf, 2) # property value (real: positive reciprocal) write_uint(buf, 2) # property value (real: positive reciprocal)
write_uint(buf, 5) # (real) 1/5 write_uint(buf, 5) # (real) 1/5
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# RECTANGLE 1 # RECTANGLE 1
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0111_1011) # SWHX_YRDL write_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, 100) # geometry-x (relative) write_sint(buf, 100) # geometry-x (relative)
write_sint(buf, -100) # geometry-y (relative) write_sint(buf, -100) # geometry-y (relative)
if variant == 2: if variant == 2:
# PROPERTY 1 # PROPERTY 1
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
write_uint(buf, 15) # XYABSOLUTE record write_uint(buf, 15) # XYABSOLUTE record
# RECTANGLE 2 # RECTANGLE 2
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0111_1011) # SWHX_YRDL write_byte(buf, 0b0111_1011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, 600) # geometry-x (absolute) write_sint(buf, 600) # geometry-x (absolute)
write_sint(buf, -300) # geometry-y (absolute) write_sint(buf, -300) # geometry-y (absolute)
if variant == 2: if variant == 2:
# PROPERTY 2 # PROPERTY 2
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# RECTANGLE 3 # RECTANGLE 3
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0111_0011) # SWHX_YRDL write_byte(buf, 0b0111_0011) # SWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, 800) # geometry-x (absolute) write_sint(buf, 800) # geometry-x (absolute)
if variant == 2: if variant == 2:
# PROPERTY 3 # PROPERTY 3
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# RECTANGLE 4 # RECTANGLE 4
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0110_1011) # SWHX_YRDL write_byte(buf, 0b0110_1011) # SWHX_YRDL
write_uint(buf, 2) # layer write_uint(buf, 2) # layer
write_uint(buf, 3) # datatype write_uint(buf, 3) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, -600) # geometry-y (absolute) write_sint(buf, -600) # geometry-y (absolute)
if variant == 2: if variant == 2:
# PROPERTY 4 # PROPERTY 4
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# RECTANGLE 5 # RECTANGLE 5
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0110_1000) # SWHX_YRDL write_byte(buf, 0b0110_1000) # SWHX_YRDL
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 200) # height write_uint(buf, 200) # height
write_sint(buf, -900) # geometry-y (absolute) write_sint(buf, -900) # geometry-y (absolute)
if variant == 2: if variant == 2:
# PROPERTY 5 # PROPERTY 5
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# RECTANGLE 6 # RECTANGLE 6
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0000_1000) # SWHX_YRDL write_byte(buf, 0b0000_1000) # SWHX_YRDL
write_sint(buf, -1200) # geometry-y (absolute) write_sint(buf, -1200) # geometry-y (absolute)
if variant == 2: if variant == 2:
# PROPERTY 6 # PROPERTY 6
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# RECTANGLE 7 # RECTANGLE 7
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b1100_1000) # SWHX_YRDL write_byte(buf, 0b1100_1000) # SWHX_YRDL
write_uint(buf, 150) # width write_uint(buf, 150) # width
write_sint(buf, -1500) # geometry-y (absolute) write_sint(buf, -1500) # geometry-y (absolute)
if variant == 2: if variant == 2:
# PROPERTY 7 # PROPERTY 7
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# RECTANGLE 8 # RECTANGLE 8
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0000_1000) # SWHX_YRDL write_byte(buf, 0b0000_1000) # SWHX_YRDL
write_sint(buf, -1800) # geometry-y (absolute) write_sint(buf, -1800) # geometry-y (absolute)
if variant == 2: if variant == 2:
# PROPERTY 8 # PROPERTY 8
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# RECTANGLE 9 # RECTANGLE 9
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0000_1100) # SWHX_YRDL write_byte(buf, 0b0000_1100) # SWHX_YRDL
write_sint(buf, 500) # geometry-y (absolute) write_sint(buf, 500) # geometry-y (absolute)
write_uint(buf, 1) # repetition (3x4 matrix) write_uint(buf, 1) # repetition (3x4 matrix)
write_uint(buf, 1) # (repetition) x-dimension write_uint(buf, 1) # (repetition) x-dimension
write_uint(buf, 2) # (repetition) y-dimension write_uint(buf, 2) # (repetition) y-dimension
write_uint(buf, 200) # (repetition) x-spacing write_uint(buf, 200) # (repetition) x-spacing
write_uint(buf, 300) # (repetition) y-spacing write_uint(buf, 300) # (repetition) y-spacing
if variant == 2: if variant == 2:
# PROPERTY 9 # PROPERTY 9
write_uint(buf, 29) # PROPERTY record (repeat) write_uint(buf, 29) # PROPERTY record (repeat)
# RECTANGLE 10 # RECTANGLE 10
write_uint(buf, 20) # RECTANGLE record write_uint(buf, 20) # RECTANGLE record
write_byte(buf, 0b0000_1100) # SWHX_YRDL write_byte(buf, 0b0000_1100) # SWHX_YRDL
write_sint(buf, 2000) # geometry-y (absolute) write_sint(buf, 2000) # geometry-y (absolute)
write_uint(buf, 4) # repetition (3 arbitrary cols.) write_uint(buf, 4) # repetition (3 arbitrary cols.)
write_uint(buf, 1) # (repetition) dimension write_uint(buf, 1) # (repetition) dimension
write_uint(buf, 200) # (repetition) x-delta write_uint(buf, 200) # (repetition) x-delta
write_uint(buf, 300) # (repetition) x-delta write_uint(buf, 300) # (repetition) x-delta
if variant == 2: if variant == 2:
# PROPERTY 10 # PROPERTY 10

View File

@ -1,14 +1,11 @@
# type: ignore # type: ignore
from typing import List, Tuple, Iterable
from itertools import chain
from io import BytesIO, BufferedIOBase from io import BytesIO, BufferedIOBase
import struct
import pytest # type: ignore import pytest
from .utils import HEADER, FOOTER from .utils import HEADER, FOOTER
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring, write_byte from ..basic import write_uint, write_sint, write_bstring, write_byte
from ..basic import InvalidRecordError, InvalidDataError from ..basic import InvalidRecordError, InvalidDataError
from ..basic import GridRepetition, ArbitraryRepetition from ..basic import GridRepetition, ArbitraryRepetition
from ..main import OasisLayout from ..main import OasisLayout
@ -86,12 +83,12 @@ def common_tests(layout: OasisLayout) -> None:
assert geometry[13].repetition.b_vector == [-10, 10] assert geometry[13].repetition.b_vector == [-10, 10]
assert geometry[14].repetition.a_count == 3 assert geometry[14].repetition.a_count == 3
assert geometry[14].repetition.b_count == None assert geometry[14].repetition.b_count is None
assert geometry[14].repetition.a_vector == [11, 12] assert geometry[14].repetition.a_vector == [11, 12]
assert geometry[14].repetition.b_vector is None assert geometry[14].repetition.b_vector is None
assert geometry[15].repetition.a_count == 4 assert geometry[15].repetition.a_count == 4
assert geometry[15].repetition.b_count == None assert geometry[15].repetition.b_count is None
assert geometry[15].repetition.a_vector == [-10, 10] assert geometry[15].repetition.a_vector == [-10, 10]
assert geometry[15].repetition.b_vector is None assert geometry[15].repetition.b_vector is None
@ -256,9 +253,9 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
write_uint(buf, 8) # repetition (3x4 matrix w/arb. vectors) write_uint(buf, 8) # repetition (3x4 matrix w/arb. vectors)
write_uint(buf, 1) # (repetition) n-dimension write_uint(buf, 1) # (repetition) n-dimension
write_uint(buf, 2) # (repetition) m-dimension write_uint(buf, 2) # (repetition) m-dimension
write_uint(buf, (10 << 4) | 0b0000) # (repetition) n-displacement g-delta: 10/east = (10, 0) write_uint(buf, (10 << 4) | 0b0000) # (repetition) n-displacement g-delta: 10/east = (10, 0)
write_uint(buf, (11 << 2) | 0b11) # (repetition) m-displacement g-delta: (-11, -12) write_uint(buf, (11 << 2) | 0b11) # (repetition) m-displacement g-delta: (-11, -12)
write_sint(buf, -12) # (repetition g-delta) write_sint(buf, -12) # (repetition g-delta)
# TEXT 13 # TEXT 13
write_uint(buf, 19) # TEXT record write_uint(buf, 19) # TEXT record
@ -267,9 +264,9 @@ def write_file_common(buf: BufferedIOBase, variant: int) -> BufferedIOBase:
write_uint(buf, 8) # repetition (3x4 matrix w/arb. vectors) write_uint(buf, 8) # repetition (3x4 matrix w/arb. vectors)
write_uint(buf, 1) # (repetition) n-dimension write_uint(buf, 1) # (repetition) n-dimension
write_uint(buf, 2) # (repetition) m-dimension write_uint(buf, 2) # (repetition) m-dimension
write_uint(buf, (11 << 2) | 0b01) # (repetition) n-displacement g-delta: (11, 12) write_uint(buf, (11 << 2) | 0b01) # (repetition) n-displacement g-delta: (11, 12)
write_sint(buf, 12) write_sint(buf, 12)
write_uint(buf, (10 << 4) | 0b1010) # (repetition) n-displacement g-delta: 10/northwest = (-10, 10) write_uint(buf, (10 << 4) | 0b1010) # (repetition) n-displacement g-delta: 10/northwest = (-10, 10)
# TEXT 14 # TEXT 14
write_uint(buf, 19) # TEXT record write_uint(buf, 19) # TEXT record

View File

@ -1,17 +1,9 @@
# type: ignore # type: ignore
from typing import List, Tuple, Iterable
from itertools import chain
from io import BytesIO, BufferedIOBase from io import BytesIO, BufferedIOBase
import struct
import pytest # type: ignore
import numpy
from numpy.testing import assert_equal
from .utils import HEADER, FOOTER from .utils import HEADER, FOOTER
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring, write_byte, PathExtensionScheme from ..basic import write_uint, write_sint, write_bstring, write_byte
from ..basic import InvalidRecordError, InvalidDataError
from ..main import OasisLayout from ..main import OasisLayout
@ -37,145 +29,145 @@ def write_file_1(buf: BufferedIOBase) -> BufferedIOBase:
''' '''
buf.write(HEADER) buf.write(HEADER)
write_uint(buf, 14) # CELL record (explicit) write_uint(buf, 14) # CELL record (explicit)
write_bstring(buf, b'ABC') # Cell name write_bstring(buf, b'ABC') # Cell name
# Trapezoid 0 # Trapezoid 0
write_uint(buf, 23) # TRAPEZOID record write_uint(buf, 23) # TRAPEZOID record
write_byte(buf, 0b0111_1011) # OWHX_YRDL write_byte(buf, 0b0111_1011) # OWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 50) # height write_uint(buf, 50) # height
write_sint(buf, -20) # delta-a write_sint(buf, -20) # delta-a
write_sint(buf, 40) # delta-b write_sint(buf, 40) # delta-b
write_sint(buf, 0) # geometry-x (absolute) write_sint(buf, 0) # geometry-x (absolute)
write_sint(buf, 100) # geometry-y (absolute) write_sint(buf, 100) # geometry-y (absolute)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# Trapezoid 1 # Trapezoid 1
write_uint(buf, 23) # TRAPEZOID record write_uint(buf, 23) # TRAPEZOID record
write_byte(buf, 0b1010_1011) # OWHX_YRDL write_byte(buf, 0b1010_1011) # OWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 50) # height write_uint(buf, 50) # height
write_sint(buf, 20) # delta-a write_sint(buf, 20) # delta-a
write_sint(buf, 40) # delta-b write_sint(buf, 40) # delta-b
write_sint(buf, 300) # geometry-y (absolute) write_sint(buf, 300) # geometry-y (absolute)
# Trapezoid 2 # Trapezoid 2
write_uint(buf, 23) # TRAPEZOID record write_uint(buf, 23) # TRAPEZOID record
write_byte(buf, 0b1100_1001) # OWHX_YRDL write_byte(buf, 0b1100_1001) # OWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 150) # width write_uint(buf, 150) # width
write_sint(buf, 20) # delta-a write_sint(buf, 20) # delta-a
write_sint(buf, -20) # delta-b write_sint(buf, -20) # delta-b
write_sint(buf, 300) # geometry-y (relative) write_sint(buf, 300) # geometry-y (relative)
# Trapezoid 3 # Trapezoid 3
write_uint(buf, 23) # TRAPEZOID record write_uint(buf, 23) # TRAPEZOID record
write_byte(buf, 0b0100_1101) # OWHX_YRDL write_byte(buf, 0b0100_1101) # OWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 150) # width write_uint(buf, 150) # width
write_sint(buf, 20) # delta-a write_sint(buf, 20) # delta-a
write_sint(buf, -20) # delta-b write_sint(buf, -20) # delta-b
write_sint(buf, 300) # geometry-y (relative) write_sint(buf, 300) # geometry-y (relative)
write_uint(buf, 1) # repetition (3x4 matrix) write_uint(buf, 1) # repetition (3x4 matrix)
write_uint(buf, 1) # (repetition) x-dimension write_uint(buf, 1) # (repetition) x-dimension
write_uint(buf, 2) # (repetition) y-dimension write_uint(buf, 2) # (repetition) y-dimension
write_uint(buf, 200) # (repetition) x-spacing write_uint(buf, 200) # (repetition) x-spacing
write_uint(buf, 300) # (repetition) y-spacing write_uint(buf, 300) # (repetition) y-spacing
write_uint(buf, 15) # XYABSOLUTE record write_uint(buf, 15) # XYABSOLUTE record
# Trapezoid 4 # Trapezoid 4
write_uint(buf, 24) # TRAPEZOID record write_uint(buf, 24) # TRAPEZOID record
write_byte(buf, 0b0111_1011) # OWHX_YRDL write_byte(buf, 0b0111_1011) # OWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 50) # height write_uint(buf, 50) # height
write_sint(buf, -20) # delta-a write_sint(buf, -20) # delta-a
write_sint(buf, 1000) # geometry-x (absolute) write_sint(buf, 1000) # geometry-x (absolute)
write_sint(buf, 100) # geometry-y (absolute) write_sint(buf, 100) # geometry-y (absolute)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# Trapezoid 5 # Trapezoid 5
write_uint(buf, 24) # TRAPEZOID record write_uint(buf, 24) # TRAPEZOID record
write_byte(buf, 0b1010_1011) # OWHX_YRDL write_byte(buf, 0b1010_1011) # OWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 50) # height write_uint(buf, 50) # height
write_sint(buf, 20) # delta-a write_sint(buf, 20) # delta-a
write_sint(buf, 300) # geometry-y (relative) write_sint(buf, 300) # geometry-y (relative)
# Trapezoid 6 # Trapezoid 6
write_uint(buf, 24) # TRAPEZOID record write_uint(buf, 24) # TRAPEZOID record
write_byte(buf, 0b1100_1001) # OWHX_YRDL write_byte(buf, 0b1100_1001) # OWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 150) # width write_uint(buf, 150) # width
write_sint(buf, 20) # delta-a write_sint(buf, 20) # delta-a
write_sint(buf, 300) # geometry-y (relative) write_sint(buf, 300) # geometry-y (relative)
# Trapezoid 7 # Trapezoid 7
write_uint(buf, 24) # TRAPEZOID record write_uint(buf, 24) # TRAPEZOID record
write_byte(buf, 0b0100_1101) # OWHX_YRDL write_byte(buf, 0b0100_1101) # OWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 150) # width write_uint(buf, 150) # width
write_sint(buf, 20) # delta-a write_sint(buf, 20) # delta-a
write_sint(buf, 300) # geometry-y (relative) write_sint(buf, 300) # geometry-y (relative)
write_uint(buf, 1) # repetition (3x4 matrix) write_uint(buf, 1) # repetition (3x4 matrix)
write_uint(buf, 1) # (repetition) x-dimension write_uint(buf, 1) # (repetition) x-dimension
write_uint(buf, 2) # (repetition) y-dimension write_uint(buf, 2) # (repetition) y-dimension
write_uint(buf, 200) # (repetition) x-spacing write_uint(buf, 200) # (repetition) x-spacing
write_uint(buf, 300) # (repetition) y-spacing write_uint(buf, 300) # (repetition) y-spacing
write_uint(buf, 15) # XYABSOLUTE record write_uint(buf, 15) # XYABSOLUTE record
# Trapezoid 8 # Trapezoid 8
write_uint(buf, 25) # TRAPEZOID record write_uint(buf, 25) # TRAPEZOID record
write_byte(buf, 0b0111_1011) # OWHX_YRDL write_byte(buf, 0b0111_1011) # OWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 100) # width write_uint(buf, 100) # width
write_uint(buf, 50) # height write_uint(buf, 50) # height
write_sint(buf, 40) # delta-b write_sint(buf, 40) # delta-b
write_sint(buf, 2000) # geometry-x (absolute) write_sint(buf, 2000) # geometry-x (absolute)
write_sint(buf, 100) # geometry-y (absolute) write_sint(buf, 100) # geometry-y (absolute)
write_uint(buf, 16) # XYRELATIVE record write_uint(buf, 16) # XYRELATIVE record
# Trapezoid 9 # Trapezoid 9
write_uint(buf, 25) # TRAPEZOID record write_uint(buf, 25) # TRAPEZOID record
write_byte(buf, 0b1010_1011) # OWHX_YRDL write_byte(buf, 0b1010_1011) # OWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 2) # datatype write_uint(buf, 2) # datatype
write_uint(buf, 50) # height write_uint(buf, 50) # height
write_sint(buf, 40) # delta-b write_sint(buf, 40) # delta-b
write_sint(buf, 300) # geometry-y (relative) write_sint(buf, 300) # geometry-y (relative)
# Trapezoid 10 # Trapezoid 10
write_uint(buf, 25) # TRAPEZOID record write_uint(buf, 25) # TRAPEZOID record
write_byte(buf, 0b1100_1001) # OWHX_YRDL write_byte(buf, 0b1100_1001) # OWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 150) # width write_uint(buf, 150) # width
write_sint(buf, -20) # delta-b write_sint(buf, -20) # delta-b
write_sint(buf, 300) # geometry-y (relative) write_sint(buf, 300) # geometry-y (relative)
# Trapezoid 11 # Trapezoid 11
write_uint(buf, 25) # TRAPEZOID record write_uint(buf, 25) # TRAPEZOID record
write_byte(buf, 0b0100_1101) # OWHX_YRDL write_byte(buf, 0b0100_1101) # OWHX_YRDL
write_uint(buf, 1) # layer write_uint(buf, 1) # layer
write_uint(buf, 150) # width write_uint(buf, 150) # width
write_sint(buf, -20) # delta-b write_sint(buf, -20) # delta-b
write_sint(buf, 300) # geometry-y (relative) write_sint(buf, 300) # geometry-y (relative)
write_uint(buf, 1) # repetition (3x4 matrix) write_uint(buf, 1) # repetition (3x4 matrix)
write_uint(buf, 1) # (repetition) x-dimension write_uint(buf, 1) # (repetition) x-dimension
write_uint(buf, 2) # (repetition) y-dimension write_uint(buf, 2) # (repetition) y-dimension
write_uint(buf, 200) # (repetition) x-spacing write_uint(buf, 200) # (repetition) x-spacing
write_uint(buf, 300) # (repetition) y-spacing write_uint(buf, 300) # (repetition) y-spacing
buf.write(FOOTER) buf.write(FOOTER)
return buf return buf

View File

@ -1,9 +1,6 @@
from typing import List, Tuple, Iterable
from itertools import chain from itertools import chain
from io import BytesIO from io import BytesIO
import pytest # type: ignore
from ..basic import read_uint, read_sint, write_uint, write_sint from ..basic import read_uint, read_sint, write_uint, write_sint

View File

@ -1,12 +1,6 @@
from typing import List, Tuple, Iterable from io import BytesIO
from itertools import chain
from io import BytesIO, BufferedIOBase
import struct
import pytest # type: ignore from ..basic import write_uint, write_bstring, write_byte
from ..basic import write_uint, write_sint, read_uint, read_sint, write_bstring, write_byte
from ..main import OasisLayout
MAGIC_BYTES = b'%SEMI-OASIS\r\n' MAGIC_BYTES = b'%SEMI-OASIS\r\n'