round().astype() -> rint(...)
This commit is contained in:
parent
599723e470
commit
9c20960e62
@ -53,6 +53,10 @@ path_cap_map = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def rint_cast(val: ArrayLike) -> NDArray[numpy.int32]:
|
||||||
|
return numpy.rint(val, dtype=numpy.int32, casting='unsafe')
|
||||||
|
|
||||||
|
|
||||||
def write(
|
def write(
|
||||||
patterns: Union[Pattern, Sequence[Pattern]],
|
patterns: Union[Pattern, Sequence[Pattern]],
|
||||||
stream: BinaryIO,
|
stream: BinaryIO,
|
||||||
@ -392,8 +396,8 @@ def _subpatterns_to_refs(subpatterns: List[SubPattern]) -> List[klamath.library.
|
|||||||
]
|
]
|
||||||
aref = klamath.library.Reference(
|
aref = klamath.library.Reference(
|
||||||
struct_name=encoded_name,
|
struct_name=encoded_name,
|
||||||
xy=numpy.round(xy).astype(int),
|
xy=rint_cast(xy),
|
||||||
colrow=(numpy.round(rep.a_count), numpy.round(rep.b_count)),
|
colrow=(numpy.rint(rep.a_count), numpy.rint(rep.b_count)),
|
||||||
angle_deg=angle_deg,
|
angle_deg=angle_deg,
|
||||||
invert_y=mirror_across_x,
|
invert_y=mirror_across_x,
|
||||||
mag=subpat.scale,
|
mag=subpat.scale,
|
||||||
@ -403,7 +407,7 @@ def _subpatterns_to_refs(subpatterns: List[SubPattern]) -> List[klamath.library.
|
|||||||
elif rep is None:
|
elif rep is None:
|
||||||
ref = klamath.library.Reference(
|
ref = klamath.library.Reference(
|
||||||
struct_name=encoded_name,
|
struct_name=encoded_name,
|
||||||
xy=numpy.round([subpat.offset]).astype(int),
|
xy=rint_cast([subpat.offset]),
|
||||||
colrow=None,
|
colrow=None,
|
||||||
angle_deg=angle_deg,
|
angle_deg=angle_deg,
|
||||||
invert_y=mirror_across_x,
|
invert_y=mirror_across_x,
|
||||||
@ -414,7 +418,7 @@ def _subpatterns_to_refs(subpatterns: List[SubPattern]) -> List[klamath.library.
|
|||||||
else:
|
else:
|
||||||
new_srefs = [klamath.library.Reference(
|
new_srefs = [klamath.library.Reference(
|
||||||
struct_name=encoded_name,
|
struct_name=encoded_name,
|
||||||
xy=numpy.round([subpat.offset + dd]).astype(int),
|
xy=rint_cast([subpat.offset + dd]),
|
||||||
colrow=None,
|
colrow=None,
|
||||||
angle_deg=angle_deg,
|
angle_deg=angle_deg,
|
||||||
invert_y=mirror_across_x,
|
invert_y=mirror_across_x,
|
||||||
@ -462,8 +466,8 @@ def _shapes_to_elements(
|
|||||||
layer, data_type = _mlayer2gds(shape.layer)
|
layer, data_type = _mlayer2gds(shape.layer)
|
||||||
properties = _annotations_to_properties(shape.annotations, 128)
|
properties = _annotations_to_properties(shape.annotations, 128)
|
||||||
if isinstance(shape, Path) and not polygonize_paths:
|
if isinstance(shape, Path) and not polygonize_paths:
|
||||||
xy = numpy.round(shape.vertices + shape.offset).astype(int)
|
xy = rint_cast(shape.vertices + shape.offset)
|
||||||
width = numpy.round(shape.width).astype(int)
|
width = rint_cast(shape.width)
|
||||||
path_type = next(k for k, v in path_cap_map.items() if v == shape.cap) # reverse lookup
|
path_type = next(k for k, v in path_cap_map.items() if v == shape.cap) # reverse lookup
|
||||||
|
|
||||||
extension: Tuple[int, int]
|
extension: Tuple[int, int]
|
||||||
@ -511,7 +515,7 @@ def _labels_to_texts(labels: List[Label]) -> List[klamath.elements.Text]:
|
|||||||
for label in labels:
|
for label in labels:
|
||||||
properties = _annotations_to_properties(label.annotations, 128)
|
properties = _annotations_to_properties(label.annotations, 128)
|
||||||
layer, text_type = _mlayer2gds(label.layer)
|
layer, text_type = _mlayer2gds(label.layer)
|
||||||
xy = numpy.round([label.offset]).astype(int)
|
xy = rint_cast([label.offset])
|
||||||
text = klamath.elements.Text(
|
text = klamath.elements.Text(
|
||||||
layer=(layer, text_type),
|
layer=(layer, text_type),
|
||||||
xy=xy,
|
xy=xy,
|
||||||
|
@ -22,6 +22,7 @@ import pathlib
|
|||||||
import gzip
|
import gzip
|
||||||
|
|
||||||
import numpy
|
import numpy
|
||||||
|
from numpy.typing import ArrayLike, NDArray
|
||||||
import fatamorgana
|
import fatamorgana
|
||||||
import fatamorgana.records as fatrec
|
import fatamorgana.records as fatrec
|
||||||
from fatamorgana.basic import PathExtensionScheme, AString, NString, PropStringReference
|
from fatamorgana.basic import PathExtensionScheme, AString, NString, PropStringReference
|
||||||
@ -47,6 +48,10 @@ path_cap_map = {
|
|||||||
|
|
||||||
#TODO implement more shape types?
|
#TODO implement more shape types?
|
||||||
|
|
||||||
|
def rint_cast(val: ArrayLike) -> NDArray[numpy.int64]:
|
||||||
|
return numpy.rint(val, dtype=numpy.int64, casting='unsafe')
|
||||||
|
|
||||||
|
|
||||||
def build(
|
def build(
|
||||||
patterns: Union[Pattern, Sequence[Pattern]],
|
patterns: Union[Pattern, Sequence[Pattern]],
|
||||||
units_per_micron: int,
|
units_per_micron: int,
|
||||||
@ -535,7 +540,7 @@ def _subpatterns_to_placements(
|
|||||||
mirror_across_x, extra_angle = normalize_mirror(subpat.mirrored)
|
mirror_across_x, extra_angle = normalize_mirror(subpat.mirrored)
|
||||||
frep, rep_offset = repetition_masq2fata(subpat.repetition)
|
frep, rep_offset = repetition_masq2fata(subpat.repetition)
|
||||||
|
|
||||||
offset = numpy.round(subpat.offset + rep_offset).astype(int)
|
offset = rint_cast(subpat.offset + rep_offset)
|
||||||
angle = numpy.rad2deg(subpat.rotation + extra_angle) % 360
|
angle = numpy.rad2deg(subpat.rotation + extra_angle) % 360
|
||||||
ref = fatrec.Placement(
|
ref = fatrec.Placement(
|
||||||
name=subpat.pattern.name,
|
name=subpat.pattern.name,
|
||||||
@ -563,8 +568,8 @@ def _shapes_to_elements(
|
|||||||
repetition, rep_offset = repetition_masq2fata(shape.repetition)
|
repetition, rep_offset = repetition_masq2fata(shape.repetition)
|
||||||
properties = annotations_to_properties(shape.annotations)
|
properties = annotations_to_properties(shape.annotations)
|
||||||
if isinstance(shape, Circle):
|
if isinstance(shape, Circle):
|
||||||
offset = numpy.round(shape.offset + rep_offset).astype(int)
|
offset = rint_cast(shape.offset + rep_offset)
|
||||||
radius = numpy.round(shape.radius).astype(int)
|
radius = rint_cast(shape.radius)
|
||||||
circle = fatrec.Circle(
|
circle = fatrec.Circle(
|
||||||
layer=layer,
|
layer=layer,
|
||||||
datatype=datatype,
|
datatype=datatype,
|
||||||
@ -576,9 +581,9 @@ def _shapes_to_elements(
|
|||||||
)
|
)
|
||||||
elements.append(circle)
|
elements.append(circle)
|
||||||
elif isinstance(shape, Path):
|
elif isinstance(shape, Path):
|
||||||
xy = numpy.round(shape.offset + shape.vertices[0] + rep_offset).astype(int)
|
xy = rint_cast(shape.offset + shape.vertices[0] + rep_offset)
|
||||||
deltas = numpy.round(numpy.diff(shape.vertices, axis=0)).astype(int)
|
deltas = rint_cast(numpy.diff(shape.vertices, axis=0))
|
||||||
half_width = numpy.round(shape.width / 2).astype(int)
|
half_width = rint_cast(shape.width / 2)
|
||||||
path_type = next(k for k, v in path_cap_map.items() if v == shape.cap) # reverse lookup
|
path_type = next(k for k, v in path_cap_map.items() if v == shape.cap) # reverse lookup
|
||||||
extension_start = (path_type, shape.cap_extensions[0] if shape.cap_extensions is not None else None)
|
extension_start = (path_type, shape.cap_extensions[0] if shape.cap_extensions is not None else None)
|
||||||
extension_end = (path_type, shape.cap_extensions[1] if shape.cap_extensions is not None else None)
|
extension_end = (path_type, shape.cap_extensions[1] if shape.cap_extensions is not None else None)
|
||||||
@ -597,8 +602,8 @@ def _shapes_to_elements(
|
|||||||
elements.append(path)
|
elements.append(path)
|
||||||
else:
|
else:
|
||||||
for polygon in shape.to_polygons():
|
for polygon in shape.to_polygons():
|
||||||
xy = numpy.round(polygon.offset + polygon.vertices[0] + rep_offset).astype(int)
|
xy = rint_cast(polygon.offset + polygon.vertices[0] + rep_offset)
|
||||||
points = numpy.round(numpy.diff(polygon.vertices, axis=0)).astype(int)
|
points = rint_cast(numpy.diff(polygon.vertices, axis=0))
|
||||||
elements.append(fatrec.Polygon(
|
elements.append(fatrec.Polygon(
|
||||||
layer=layer,
|
layer=layer,
|
||||||
datatype=datatype,
|
datatype=datatype,
|
||||||
@ -619,7 +624,7 @@ def _labels_to_texts(
|
|||||||
for label in labels:
|
for label in labels:
|
||||||
layer, datatype = layer2oas(label.layer)
|
layer, datatype = layer2oas(label.layer)
|
||||||
repetition, rep_offset = repetition_masq2fata(label.repetition)
|
repetition, rep_offset = repetition_masq2fata(label.repetition)
|
||||||
xy = numpy.round(label.offset + rep_offset).astype(int)
|
xy = rint_cast(label.offset + rep_offset)
|
||||||
properties = annotations_to_properties(label.annotations)
|
properties = annotations_to_properties(label.annotations)
|
||||||
texts.append(fatrec.Text(
|
texts.append(fatrec.Text(
|
||||||
layer=layer,
|
layer=layer,
|
||||||
|
Loading…
Reference in New Issue
Block a user