From 5dbb923c6b24d188e2290b252adb1d36aff7b0e7 Mon Sep 17 00:00:00 2001 From: Matthew Wildoer Date: Mon, 16 Sep 2024 16:23:24 +0200 Subject: [PATCH 1/4] Library: Consolidate has_footprint implementations --- src/faebryk/library/_F.py | 43 ++++++++++---------- src/faebryk/library/has_footprint_defined.py | 12 +++++- src/faebryk/library/has_footprint_impl.py | 14 ------- 3 files changed, 31 insertions(+), 38 deletions(-) delete mode 100644 src/faebryk/library/has_footprint_impl.py diff --git a/src/faebryk/library/_F.py b/src/faebryk/library/_F.py index 843264bf..c9908abe 100644 --- a/src/faebryk/library/_F.py +++ b/src/faebryk/library/_F.py @@ -82,15 +82,16 @@ from faebryk.library.LogicOps import LogicOps from faebryk.library.can_attach_to_footprint import can_attach_to_footprint from faebryk.library.can_attach_via_pinmap import can_attach_via_pinmap -from faebryk.library.has_footprint_impl import has_footprint_impl +from faebryk.library.has_footprint_defined import has_footprint_defined from faebryk.library.has_kicad_footprint import has_kicad_footprint from faebryk.library.Pad import Pad from faebryk.library.Button import Button from faebryk.library.GDT import GDT from faebryk.library.has_pin_association_heuristic_lookup_table import has_pin_association_heuristic_lookup_table from faebryk.library.LogicGate import LogicGate -from faebryk.library.has_footprint_defined import has_footprint_defined +from faebryk.library.can_attach_to_footprint_via_pinmap import can_attach_to_footprint_via_pinmap from faebryk.library.Net import Net +from faebryk.library.can_attach_to_footprint_symmetrically import can_attach_to_footprint_symmetrically from faebryk.library.can_attach_via_pinmap_pinlist import can_attach_via_pinmap_pinlist from faebryk.library.has_equal_pins import has_equal_pins from faebryk.library.has_kicad_manual_footprint import has_kicad_manual_footprint @@ -99,32 +100,22 @@ from faebryk.library.Diode import Diode from faebryk.library.MOSFET import MOSFET from faebryk.library.LogicGates import LogicGates -from faebryk.library.can_attach_to_footprint_symmetrically import can_attach_to_footprint_symmetrically -from faebryk.library.can_attach_to_footprint_via_pinmap import can_attach_to_footprint_via_pinmap +from faebryk.library.B4B_ZR_SM4_TF import B4B_ZR_SM4_TF +from faebryk.library.DE9Connector import DE9Connector +from faebryk.library.pf_533984002 import pf_533984002 from faebryk.library.has_pcb_routing_strategy_manual import has_pcb_routing_strategy_manual from faebryk.library.has_pcb_routing_strategy_via_to_layer import has_pcb_routing_strategy_via_to_layer -from faebryk.library.can_attach_via_pinmap_equal import can_attach_via_pinmap_equal -from faebryk.library.has_equal_pins_in_ifs import has_equal_pins_in_ifs -from faebryk.library.has_kicad_footprint_equal_ifs import has_kicad_footprint_equal_ifs -from faebryk.library.KicadFootprint import KicadFootprint -from faebryk.library.TVS import TVS from faebryk.library.Capacitor import Capacitor from faebryk.library.Crystal import Crystal from faebryk.library.Fuse import Fuse from faebryk.library.Inductor import Inductor from faebryk.library.Resistor import Resistor from faebryk.library.Switch import Switch -from faebryk.library.B4B_ZR_SM4_TF import B4B_ZR_SM4_TF -from faebryk.library.DE9Connector import DE9Connector -from faebryk.library.pf_533984002 import pf_533984002 -from faebryk.library.DIP import DIP -from faebryk.library.QFN import QFN -from faebryk.library.SMDTwoPin import SMDTwoPin -from faebryk.library.SOIC import SOIC -from faebryk.library.has_kicad_footprint_equal_ifs_defined import has_kicad_footprint_equal_ifs_defined -from faebryk.library.Mounting_Hole import Mounting_Hole -from faebryk.library.can_be_surge_protected import can_be_surge_protected -from faebryk.library.is_surge_protected import is_surge_protected +from faebryk.library.can_attach_via_pinmap_equal import can_attach_via_pinmap_equal +from faebryk.library.has_equal_pins_in_ifs import has_equal_pins_in_ifs +from faebryk.library.has_kicad_footprint_equal_ifs import has_kicad_footprint_equal_ifs +from faebryk.library.KicadFootprint import KicadFootprint +from faebryk.library.TVS import TVS from faebryk.library.MultiCapacitor import MultiCapacitor from faebryk.library.can_be_decoupled import can_be_decoupled from faebryk.library.is_decoupled import is_decoupled @@ -133,13 +124,21 @@ from faebryk.library.Potentiometer import Potentiometer from faebryk.library.ResistorVoltageDivider import ResistorVoltageDivider from faebryk.library.Resistor_Voltage_Divider import Resistor_Voltage_Divider -from faebryk.library.is_surge_protected_defined import is_surge_protected_defined +from faebryk.library.DIP import DIP +from faebryk.library.QFN import QFN +from faebryk.library.SMDTwoPin import SMDTwoPin +from faebryk.library.SOIC import SOIC +from faebryk.library.has_kicad_footprint_equal_ifs_defined import has_kicad_footprint_equal_ifs_defined +from faebryk.library.Mounting_Hole import Mounting_Hole +from faebryk.library.can_be_surge_protected import can_be_surge_protected +from faebryk.library.is_surge_protected import is_surge_protected from faebryk.library.is_decoupled_nodes import is_decoupled_nodes from faebryk.library.Ethernet import Ethernet from faebryk.library.RS485 import RS485 from faebryk.library.USB_Type_C_Receptacle_24_pin import USB_Type_C_Receptacle_24_pin -from faebryk.library.can_be_surge_protected_defined import can_be_surge_protected_defined +from faebryk.library.is_surge_protected_defined import is_surge_protected_defined from faebryk.library.can_be_decoupled_defined import can_be_decoupled_defined +from faebryk.library.can_be_surge_protected_defined import can_be_surge_protected_defined from faebryk.library.ElectricPower import ElectricPower from faebryk.library.B0505S_1WR3 import B0505S_1WR3 from faebryk.library.Battery import Battery diff --git a/src/faebryk/library/has_footprint_defined.py b/src/faebryk/library/has_footprint_defined.py index 71940e62..e4331a0c 100644 --- a/src/faebryk/library/has_footprint_defined.py +++ b/src/faebryk/library/has_footprint_defined.py @@ -4,10 +4,18 @@ import faebryk.library._F as F -class has_footprint_defined(F.has_footprint_impl): +class has_footprint_defined(F.has_footprint.impl()): def __init__(self, fp: F.Footprint) -> None: super().__init__() self.fp = fp def on_obj_set(self): - self.set_footprint(self.fp) + self._set_footprint(self.fp) + + def _set_footprint(self, fp: F.Footprint): + self.obj.add(fp, name="footprint") + + def get_footprint(self) -> F.Footprint: + fps = self.obj.get_children(direct_only=True, types=F.Footprint) + assert len(fps) == 1, f"In obj: {self.obj}: candidates: {fps}" + return next(iter(fps)) diff --git a/src/faebryk/library/has_footprint_impl.py b/src/faebryk/library/has_footprint_impl.py deleted file mode 100644 index 6d9bb2f3..00000000 --- a/src/faebryk/library/has_footprint_impl.py +++ /dev/null @@ -1,14 +0,0 @@ -# This file is part of the faebryk project -# SPDX-License-Identifier: MIT - -import faebryk.library._F as F - - -class has_footprint_impl(F.has_footprint.impl()): - def set_footprint(self, fp: F.Footprint): - self.obj.add(fp, name="footprint") - - def get_footprint(self) -> F.Footprint: - fps = self.obj.get_children(direct_only=True, types=F.Footprint) - assert len(fps) == 1, f"In obj: {self.obj}: candidates: {fps}" - return next(iter(fps)) From ffb8fcb0adb248301c71737c856db8f73596e090 Mon Sep 17 00:00:00 2001 From: Matthew Wildoer Date: Tue, 17 Sep 2024 12:52:33 +0200 Subject: [PATCH 2/4] Core: Cleanup PCB transformer to use F.xxx --- .../exporters/pcb/kicad/transformer.py | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/faebryk/exporters/pcb/kicad/transformer.py b/src/faebryk/exporters/pcb/kicad/transformer.py index 3c7a8051..9de41776 100644 --- a/src/faebryk/exporters/pcb/kicad/transformer.py +++ b/src/faebryk/exporters/pcb/kicad/transformer.py @@ -49,9 +49,6 @@ logger = logging.getLogger(__name__) -FPad = F.Pad -FNet = F.Net -FFootprint = F.Footprint PCB = C_kicad_pcb_file.C_kicad_pcb Footprint = PCB.C_pcb_footprint @@ -249,7 +246,7 @@ def attach(self): pads = [ pad for pad in fp.pads - if pad.name == pin_names[cast_assert(FPad, fpad)] + if pad.name == pin_names[cast_assert(F.Pad, fpad)] ] fpad.add(PCB_Transformer.has_linked_kicad_pad_defined(fp, pads, self)) @@ -304,7 +301,7 @@ def get_all_footprints(self) -> List[tuple[Module, Footprint]]: ) ] - def get_net(self, net: FNet) -> Net: + def get_net(self, net: F.Net) -> Net: nets = {pcb_net.name: pcb_net for pcb_net in self.pcb.nets} return nets[net.get_trait(F.has_overriden_name).get_name()] @@ -484,7 +481,7 @@ def geo_to_lines( return list(poly.exterior.coords) @staticmethod - def _get_pad(ffp: FFootprint, intf: F.Electrical): + def _get_pad(ffp: F.Footprint, intf: F.Electrical): pin_map = ffp.get_trait(F.has_kicad_footprint).get_pin_names() pin_name = find( pin_map.items(), @@ -498,15 +495,15 @@ def _get_pad(ffp: FFootprint, intf: F.Electrical): @staticmethod def get_pad(intf: F.Electrical) -> tuple[Footprint, Pad, Node]: - obj, ffp = FFootprint.get_footprint_of_parent(intf) + obj, ffp = F.Footprint.get_footprint_of_parent(intf) fp, pad = PCB_Transformer._get_pad(ffp, intf) return fp, pad, obj @staticmethod - def get_pad_pos_any(intf: F.Electrical) -> list[tuple[FPad, Point]]: + def get_pad_pos_any(intf: F.Electrical) -> list[tuple[F.Pad, Point]]: try: - fpads = FPad.find_pad_for_intf_with_parent_that_has_footprint(intf) + fpads = F.Pad.find_pad_for_intf_with_parent_that_has_footprint(intf) except KeyErrorNotFound: # intf has no parent with footprint return [] @@ -514,16 +511,16 @@ def get_pad_pos_any(intf: F.Electrical) -> list[tuple[FPad, Point]]: return [PCB_Transformer.get_fpad_pos(fpad) for fpad in fpads] @staticmethod - def get_pad_pos(intf: F.Electrical) -> tuple[FPad, Point] | None: + def get_pad_pos(intf: F.Electrical) -> tuple[F.Pad, Point] | None: try: - fpad = FPad.find_pad_for_intf_with_parent_that_has_footprint_unique(intf) + fpad = F.Pad.find_pad_for_intf_with_parent_that_has_footprint_unique(intf) except ValueError: return None return PCB_Transformer.get_fpad_pos(fpad) @staticmethod - def get_fpad_pos(fpad: FPad): + def get_fpad_pos(fpad: F.Pad): fp, pad = fpad.get_trait(PCB_Transformer.has_linked_kicad_pad).get_pad() if len(pad) > 1: raise NotImplementedError( From ced2fc7820f44b783452268eeff246106ce490be Mon Sep 17 00:00:00 2001 From: Matthew Wildoer Date: Wed, 18 Sep 2024 14:57:37 +0200 Subject: [PATCH 3/4] Library: Remove old shim class for has_kicad_footprint_equal_ifs --- src/faebryk/library/DIP.py | 2 +- src/faebryk/library/QFN.py | 2 +- src/faebryk/library/SMDTwoPin.py | 2 +- src/faebryk/library/SOIC.py | 2 +- src/faebryk/library/has_kicad_footprint_equal_ifs.py | 9 --------- .../library/has_kicad_symbol_equal_ifs_defined.py | 12 ++++++++++++ 6 files changed, 16 insertions(+), 13 deletions(-) delete mode 100644 src/faebryk/library/has_kicad_footprint_equal_ifs.py create mode 100644 src/faebryk/library/has_kicad_symbol_equal_ifs_defined.py diff --git a/src/faebryk/library/DIP.py b/src/faebryk/library/DIP.py index e628d359..0f6cb19e 100644 --- a/src/faebryk/library/DIP.py +++ b/src/faebryk/library/DIP.py @@ -22,7 +22,7 @@ def pins(self): @L.rt_field def kicad_footprint(self): - class _has_kicad_footprint(F.has_kicad_footprint_equal_ifs): + class _has_kicad_footprint(F.has_kicad_footprint.impl()): @staticmethod def get_kicad_footprint() -> str: return "Package_DIP:DIP-{leads}_W{spacing:.2f}mm{longpads}".format( diff --git a/src/faebryk/library/QFN.py b/src/faebryk/library/QFN.py index b0a22d18..13c99962 100644 --- a/src/faebryk/library/QFN.py +++ b/src/faebryk/library/QFN.py @@ -42,7 +42,7 @@ def pins(self): @L.rt_field def kicad_footprint(self): - class _has_kicad_footprint(F.has_kicad_footprint_equal_ifs): + class _has_kicad_footprint(F.has_kicad_footprint.impl()): @staticmethod def get_kicad_footprint() -> str: return "Package_DFN_QFN:QFN-{leads}-{ep}EP_{size_x}x{size_y}mm_P{pitch}mm_EP{ep_x}x{ep_y}mm{vias}".format( # noqa: E501 diff --git a/src/faebryk/library/SMDTwoPin.py b/src/faebryk/library/SMDTwoPin.py index 03a4e29e..78f8729c 100644 --- a/src/faebryk/library/SMDTwoPin.py +++ b/src/faebryk/library/SMDTwoPin.py @@ -26,7 +26,7 @@ def __init__(self, type: Type) -> None: pins = L.list_field(2, F.Pad) - class _has_kicad_footprint(F.has_kicad_footprint_equal_ifs): + class _has_kicad_footprint(F.has_kicad_footprint.impl()): def get_kicad_footprint(self) -> str: obj = self.obj assert isinstance(obj, SMDTwoPin) diff --git a/src/faebryk/library/SOIC.py b/src/faebryk/library/SOIC.py index 81254336..a625cc67 100644 --- a/src/faebryk/library/SOIC.py +++ b/src/faebryk/library/SOIC.py @@ -24,7 +24,7 @@ def __init__( def pins(self): return times(self._pin_cnt, F.Pad) - class _has_kicad_footprint(F.has_kicad_footprint_equal_ifs): + class _has_kicad_footprint(F.has_kicad_footprint.impl()): def get_kicad_footprint(self) -> str: obj = self.obj assert isinstance(obj, SOIC) diff --git a/src/faebryk/library/has_kicad_footprint_equal_ifs.py b/src/faebryk/library/has_kicad_footprint_equal_ifs.py deleted file mode 100644 index 900bcd5f..00000000 --- a/src/faebryk/library/has_kicad_footprint_equal_ifs.py +++ /dev/null @@ -1,9 +0,0 @@ -# This file is part of the faebryk project -# SPDX-License-Identifier: MIT - -import faebryk.library._F as F - - -class has_kicad_footprint_equal_ifs(F.has_kicad_footprint.impl()): - def get_pin_names(self): - return self.obj.get_trait(F.has_equal_pins).get_pin_map() diff --git a/src/faebryk/library/has_kicad_symbol_equal_ifs_defined.py b/src/faebryk/library/has_kicad_symbol_equal_ifs_defined.py new file mode 100644 index 00000000..5f0addaf --- /dev/null +++ b/src/faebryk/library/has_kicad_symbol_equal_ifs_defined.py @@ -0,0 +1,12 @@ +# This file is part of the faebryk project +# SPDX-License-Identifier: MIT + +import faebryk.library._F as F + + +class has_kicad_symbol_equal_ifs_defined(F.has_kicad_symbol_equal_ifs): + def __init__(self, symbol_name) -> None: + super().__init__(symbol_name) + + def get_kicad_symbol(self): + return self.symbol_name From 2e67aaa4378a89ae61840880d88e0d2d50e983b9 Mon Sep 17 00:00:00 2001 From: Matthew Wildoer Date: Mon, 23 Sep 2024 15:41:53 +0200 Subject: [PATCH 4/4] Remove symbol junk --- .../library/has_kicad_symbol_equal_ifs_defined.py | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 src/faebryk/library/has_kicad_symbol_equal_ifs_defined.py diff --git a/src/faebryk/library/has_kicad_symbol_equal_ifs_defined.py b/src/faebryk/library/has_kicad_symbol_equal_ifs_defined.py deleted file mode 100644 index 5f0addaf..00000000 --- a/src/faebryk/library/has_kicad_symbol_equal_ifs_defined.py +++ /dev/null @@ -1,12 +0,0 @@ -# This file is part of the faebryk project -# SPDX-License-Identifier: MIT - -import faebryk.library._F as F - - -class has_kicad_symbol_equal_ifs_defined(F.has_kicad_symbol_equal_ifs): - def __init__(self, symbol_name) -> None: - super().__init__(symbol_name) - - def get_kicad_symbol(self): - return self.symbol_name