Source code for piel.models.physical.electrical.pcb
from typing import Optional, Callable
from ....types import PCB, PhysicalPort, PhysicalConnection, Connection
from typing import List, Tuple
[docs]
def create_pcb(
pcb_name: str = None,
port_name_list: List[str] = None,
connection_tuple_list: List[Tuple[str, str]] = None,
port_factory: Optional[Callable[[str], PhysicalPort]] = None,
**kwargs,
) -> PCB:
"""
Defines a PCB component instantiation.
Args:
port_name_list (List[str], optional): The list of port names. Defaults to None.
connection_tuple_list (List[Tuple[str, str]], optional): The list of connections between connection. Defaults to None.
port_factory (Optional[Callable[[str], PhysicalPort]], optional): The factory function to create the connection.
Needs to contain the port definition parameters. Defaults to None.
"""
if pcb_name is None:
pcb_name = "pcb"
def default_port_factory(name: str, pcb_name: str) -> PhysicalPort:
return PhysicalPort(name=name, parent_component_name=pcb_name)
# Default arguments if None are provided
if port_name_list is None:
port_name_list = []
if connection_tuple_list is None:
connection_tuple_list = []
if port_factory is None:
port_factory = default_port_factory
# Create connection based on port_name_list
ports_list = [
port_factory(name=port_name, pcb_name=pcb_name) for port_name in port_name_list
]
# Create a dictionary to quickly lookup connection by name
port_dict = {port.name: port for port in ports_list}
# Create connections
connections = []
for connection_tuple in connection_tuple_list:
port1_name, port2_name = connection_tuple
if port1_name not in port_dict:
raise ValueError(f"Port '{port1_name}' not found in the port list.")
if port2_name not in port_dict:
raise ValueError(f"Port '{port2_name}' not found in the port list.")
port1 = port_dict[port1_name]
port2 = port_dict[port2_name]
connection = Connection(ports=(port1, port2))
connections.append(
PhysicalConnection(
connections=[connection],
),
)
return PCB(name=pcb_name, ports=ports_list, connections=connections, **kwargs)