Files
pinmap-to-pinlist/Code/src/models.py

90 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Data models for PinMAP → PinList conversion."""
from dataclasses import dataclass, field
@dataclass
class Pin:
"""A single pin on the package."""
number: int
name: str
edge: str # "top" | "right" | "bottom" | "left"
position_on_edge: int
@dataclass
class PinMAP:
"""Parsed pin map from an Excel file."""
package_info: str
pins: list[Pin]
width: int
height: int
grid_origin: tuple[int, int] # (row, col) of top-left corner
raw_cells: dict[tuple[int, int], str] = field(default_factory=dict)
@dataclass
class PinList:
"""Flat pin list for output."""
package_info: str
rows: list[tuple[str, int]] # [(PinName, Pin序号), ...]
@dataclass
class ValidationError:
"""A single validation issue."""
level: str # "error" | "warning"
message: str
details: str
@dataclass
class ValidationResult:
"""Aggregate validation result."""
is_valid: bool
errors: list[ValidationError] = field(default_factory=list)
warnings: list[ValidationError] = field(default_factory=list)
@dataclass
class PinListEntry:
"""A single pin entry from the PinList."""
number: int # Pin 序号B 列)
name: str # PinNameA 列,可能为空)
@dataclass
class EdgePins:
"""Pins assigned to one edge of the PinMAP."""
edge: str # "left" | "bottom" | "right" | "top"
pins: list[tuple[int, str]] # [(number, name), ...]
cells: list[tuple[int, int]] # 对应的单元格坐标 (row, col) 0-based
@dataclass
class PinMAPLayout:
"""计算出的 PinMAP 布局。"""
package_info: str
rows: int
cols: int
edges: dict[str, EdgePins] # left/bottom/right/top
cells: dict[str, str] # 单元格数据 {"A2": "1", "B2": "Pin1", ...}
# ── Custom exceptions ──────────────────────────────────────────────
class PinMapError(Exception):
"""Base exception for this project."""
class FileFormatError(PinMapError):
"""Raised when a file is not a valid Excel format."""
class StructureError(PinMapError):
"""Raised when the PinMAP structure is invalid or unrecognisable."""
class LayoutError(PinMapError):
"""布局计算错误尺寸无效、Pin 数量不匹配等)。"""