68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
"""Dataclass models used by manifest-backed technologies."""
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Any, Optional, Tuple
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class LayerSpec:
|
|
"""One canonical foundry GDS layer plus optional process metadata."""
|
|
|
|
name: str
|
|
layer: Tuple[int, int]
|
|
aliases: Tuple[str, ...] = ()
|
|
material: Optional[str] = None
|
|
z_start: Optional[float] = None
|
|
thickness: Optional[float] = None
|
|
sidewall_angle: Optional[float] = None
|
|
process: Optional[str] = None
|
|
description: str = ""
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class XSectionLayerSpec:
|
|
"""One layer contribution inside a Nazca xsection."""
|
|
|
|
layer: str
|
|
growx: Optional[float] = None
|
|
growy: Optional[float] = None
|
|
leftedge: Optional[Tuple[float, float]] = None
|
|
rightedge: Optional[Tuple[float, float]] = None
|
|
overwrite: bool = True
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class XSectionSpec:
|
|
"""Named cross-section made from one or more layer contributions."""
|
|
|
|
name: str
|
|
layers: Tuple[XSectionLayerSpec, ...]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class MaterialSpec:
|
|
"""Material metadata and optional refractive-index data reference."""
|
|
|
|
name: str
|
|
display_name: Optional[str] = None
|
|
source_file: Optional[str] = None
|
|
source_revision: Optional[str] = None
|
|
data_file: Optional[str] = None
|
|
notes: str = ""
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ProcessLayerSpec:
|
|
"""Detailed process-stack row reserved for full process exports."""
|
|
|
|
name: str
|
|
gds: Any = None
|
|
z_start_um: Optional[float] = None
|
|
thickness_um: Optional[float] = None
|
|
material: Optional[str] = None
|
|
pattern_material: Optional[str] = None
|
|
process: Optional[str] = None
|
|
sidewall_angle: Optional[float] = None
|
|
pattern_growth_delta_um: Optional[float] = None
|
|
enabled: Optional[bool] = None
|