Compare commits

..

No commits in common. "90e30821ebbd9354cf4b16bf312b4bcfec0b94f1" and "b450fd10fe7fb9a4ff9e7c059ec750cb0947c634" have entirely different histories.

5 changed files with 20 additions and 61 deletions

View File

@ -13,6 +13,7 @@
Requirements: Requirements:
* python >= 3.10 (written and tested with 3.11) * python >= 3.10 (written and tested with 3.11)
* numpy
Install with pip: Install with pip:

View File

@ -1,9 +1,6 @@
from .main import ( from .main import Map, Device
Map as Map, from .read import read
Device as Device, from .write import write
)
from .read import read as read
from .write import write as write
__author__ = 'Jan Petykiewicz' __author__ = 'Jan Petykiewicz'
__version__ = '0.7' __version__ = '0.6'

View File

@ -58,24 +58,22 @@ def read_devices(el_map: ElementTree.Element) -> list[Device]:
device = Device(BinType=bin_type, NullBin=null_bin) device = Device(BinType=bin_type, NullBin=null_bin)
val: Any
for key, val in el_device.attrib.items(): for key, val in el_device.attrib.items():
if key in ('BinType', 'NullBin'): if key in ('BinType', 'NullBin'):
continue continue
parsed_val: Any
if key in ('WaferSize', 'DeviceSizeX', 'DeviceSizeY', 'Orientation'): if key in ('WaferSize', 'DeviceSizeX', 'DeviceSizeY', 'Orientation'):
parsed_val = float(val) val = float(val)
elif key in ('OriginLocation',): elif key in ('OriginLocation',):
parsed_val = int(val) val = int(val)
elif key == 'CreateDate': elif key == 'CreateDate':
parsed_val = datetime.datetime.strptime(val + '000', '%Y%m%d%H%M%S%f') val = datetime.datetime.strptime(val + '000', '%Y%m%d%H%M%S%f')
else:
parsed_val = val
if key in dev_fields and key[0].isupper(): if key in dev_fields and key[0].isupper():
setattr(device, key, parsed_val) setattr(device, key, val)
else: else:
device.misc[key] = parsed_val device.misc[key] = val
for el_entry in el_device: for el_entry in el_device:
tag = _tag(el_entry) tag = _tag(el_entry)
@ -139,7 +137,7 @@ def read_row(el_row: ElementTree.Element) -> list[str]:
def _tag(element: ElementTree.Element) -> str: def _tag(element: ElementTree.Element) -> str:
""" '''
Get the element's tag, excluding any namespaces. Get the element's tag, excluding any namespaces.
""" '''
return element.tag.split('}')[-1] return element.tag.split('}')[-1]

View File

@ -1,5 +1,4 @@
from typing import TextIO, cast from typing import Sequence, TextIO, cast
from collections.abc import Sequence
import logging import logging
import math import math
from dataclasses import fields from dataclasses import fields
@ -11,14 +10,11 @@ from .main import Map, Device
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class G85Error(Exception):
pass
# Hack to directly pass through <![CDATA[...]]> # Hack to directly pass through <![CDATA[...]]>
def _escape_cdata(text: str) -> str: def _escape_cdata(text):
if text.startswith('<![CDATA[') and text.endswith(']]>'): if text.startswith('<![CDATA[') and text.endswith(']]>'):
return text return text
else:
return _original_escape_cdata(text) return _original_escape_cdata(text)
@ -68,7 +64,7 @@ def write_devices(devices: Sequence[Device], el_map: ElementTree.Element) -> Non
# Row data prep # Row data prep
if device.map is None: if device.map is None:
raise G85Error(f'No _data for device pformat({device})') raise Exception(f'No _data for device pformat({device})')
is_decimal = device.BinType == 'Decimal' is_decimal = device.BinType == 'Decimal'
row_texts, bin_length = prepare_data(device.map, decimal=is_decimal) row_texts, bin_length = prepare_data(device.map, decimal=is_decimal)
@ -140,7 +136,7 @@ def prepare_data(data: list[list[str]] | list[list[int]], decimal: bool) -> tupl
row_text = ' '.join(srow) + ' ' row_text = ' '.join(srow) + ' '
row_texts.append(row_text) row_texts.append(row_text)
return row_texts, char_len return row_texts, char_len
else: # noqa: RET505 else:
data = cast(list[list[int]], data) data = cast(list[list[int]], data)
max_value = max(max(rr) for rr in data) max_value = max(max(rr) for rr in data)
max_digits = math.ceil(math.log10(max_value)) max_digits = math.ceil(math.log10(max_value))

View File

@ -38,41 +38,8 @@ classifiers = [
requires-python = ">=3.10" requires-python = ">=3.10"
dynamic = ["version"] dynamic = ["version"]
dependencies = [ dependencies = [
"numpy~=1.21",
] ]
[tool.hatch.version] [tool.hatch.version]
path = "g85/__init__.py" path = "g85/__init__.py"
[tool.ruff]
exclude = [
".git",
"dist",
]
line-length = 145
indent-width = 4
lint.dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
lint.select = [
"NPY", "E", "F", "W", "B", "ANN", "UP", "SLOT", "SIM", "LOG",
"C4", "ISC", "PIE", "PT", "RET", "TCH", "PTH", "INT",
"ARG", "PL", "R", "TRY",
"G010", "G101", "G201", "G202",
"Q002", "Q003", "Q004",
]
lint.ignore = [
#"ANN001", # No annotation
"ANN002", # *args
"ANN003", # **kwargs
"ANN401", # Any
"ANN101", # self: Self
"SIM108", # single-line if / else assignment
"RET504", # x=y+z; return x
"PIE790", # unnecessary pass
"ISC003", # non-implicit string concatenation
"C408", # dict(x=y) instead of {'x': y}
"PLR09", # Too many xxx
"PLR2004", # magic number
"PLC0414", # import x as x
"TRY003", # Long exception message
]