Source code for piel.models.logic.photonic.switch_lattice

import functools
from itertools import product
import numpy as np
import pathlib
from typing import Optional, Callable


[docs]def compose_switch_position_list( network: np.array, gap_elements: list = None, cross_elements: list = None, *args, **kwargs ): """ This function returns a list of the switch positions in the network, the corresponding instance, and the 2D position in the network. Args: network (np.array): The network array. gap_elements (list, optional): The gap elements in the network. Defaults to None. cross_elements (list, optional): The cross elements in the network. Defaults to None. Returns: switch_position_list (list): A list of tuples of the form (switch_instance, (row, col)). """ if cross_elements is None: cross_elements = ["-"] if gap_elements is None: gap_elements = ["0"] # Temporary fix for the case where the gap_elements and cross_elements are lists cross_elements = cross_elements[0] gap_elements = gap_elements[0] switch_position_list = [ (value, (row, col)) for row, row_values in enumerate(network) for col, value in enumerate(row_values) if (value != gap_elements) if (value != cross_elements) ] return switch_position_list