def export_inputs(self, subgraph) -> List[ConnectingOption]: input_nodes = [] for node in subgraph.nodes: in_dim = len(list(subgraph.in_edges(node))) if in_dim == 0: input_nodes.append(node) # TODO create the connecting options based on in dim and out dim if len(input_nodes) == 1: # This is the normal numbering of the connecting options return [ConnectingOption(None, ["1"])] else: # This is the reverse numbering of the connecting options return [ ConnectingOption(None, [str(i)]) for i in range(2, len(input_nodes) + 2) ]
def generate_output_connectingoptions( self, subgraph_view) -> List[ConnectingOption]: subgraph_outputs = [] for node in list(subgraph_view.nodes): if len(subgraph_view.out_edges(node)) == 0: subgraph_outputs.append( ConnectingOption(self._get_fig_netlist_name(node))) return subgraph_outputs
def generate_dropx_library() -> MappingLibrary: library = MappingLibrary("dropx") # PORT port_inputs = [] port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_inputs.append(ConnectingOption(None, [None])) port_outputs = [] port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port_outputs.append(ConnectingOption(None, [])) port = Primitive( "PORT", PrimitiveType.COMPONENT, "IO", False, False, port_inputs, port_outputs, None, None, None, ) library.add_io_entry(port) # PICO INJECTOR pico_injector_inputs = [] pico_injector_inputs.append(ConnectingOption(None, ["1"])) pico_injector_inputs.append(ConnectingOption(None, ["2"])) pico_injector_outputs = [] pico_injector_outputs.append(ConnectingOption(None, ["3"])) pico_injector_loadings = [] pico_injector_carriers = [] pico_injector = Primitive( "PICOINJECTOR", PrimitiveType.COMPONENT, "MIX", False, False, pico_injector_inputs, pico_injector_outputs, pico_injector_loadings, pico_injector_carriers, None, ) library.add_operator_entry(pico_injector, InteractionType.MIX) # DROPLET ELECTROPHORESIS MERGER electrophoresis_merger_inputs = [] electrophoresis_merger_inputs.append(ConnectingOption(None, ["1"])) electrophoresis_merger_inputs.append(ConnectingOption(None, ["2"])) electrophoresis_merger_outputs = [] electrophoresis_merger_outputs.append(ConnectingOption(None, ["3"])) electrophoresis_merger_loadings = [] electrophoresis_merger_carriers = [] # TODO - Modify this later on electrophoresis_merger = Primitive( "DROPLET MERGER", PrimitiveType.COMPONENT, "MIX", False, False, electrophoresis_merger_inputs, electrophoresis_merger_outputs, electrophoresis_merger_loadings, electrophoresis_merger_carriers, None, ) library.add_operator_entry(electrophoresis_merger, InteractionType.MIX) # DROPLET SORTER droplet_sorter_inputs = [] droplet_sorter_inputs.append(ConnectingOption(None, ["1"])) droplet_sorter_outputs = [] droplet_sorter_outputs.append(ConnectingOption(None, ["2"])) droplet_sorter_outputs.append(ConnectingOption(None, ["3"])) droplet_sorter_loadings = [] droplet_sorter_carriers = [] # TODO - Modify this later on droplet_sorter = Primitive( "DROPLET SORTER", PrimitiveType.COMPONENT, "SIEVE", False, False, droplet_sorter_inputs, droplet_sorter_outputs, droplet_sorter_loadings, droplet_sorter_carriers, None, ) library.add_operator_entry(droplet_sorter, InteractionType.SIEVE) # DROPLET GENERATOR droplet_generator_inputs = [] droplet_generator_inputs.append( ConnectingOption("default_component", ["1"])) droplet_generator_outputs = [] droplet_generator_outputs.append( ConnectingOption("default_component", ["3"])) droplet_generator_loadings = [] droplet_generator_carriers = [] droplet_generator = Primitive( "NOZZLE DROPLET GENERATOR", PrimitiveType.NETLIST, "METER", False, False, droplet_generator_inputs, droplet_generator_outputs, droplet_generator_loadings, droplet_generator_carriers, "default-netlists/dropletgenerator.mint", ["droplet_size", "generation_rate"], [ "orifice_size", "aspect_ratio", "capillary_number", "expansion_ratio", "flow_rate_ratio", "normalized_oil_inlet", "normalized_orifice_length", "normalized_water_inlet", ], ) library.add_operator_entry(droplet_generator, InteractionType.METER) droplet_merger_junction_inputs = [] droplet_merger_junction_inputs.append(ConnectingOption(None, ["1"])) droplet_merger_junction_inputs.append(ConnectingOption(None, ["2"])) droplet_merger_junction_outputs = [] droplet_merger_junction_outputs.append(ConnectingOption(None, ["3"])) droplet_merger_junction_loadings = [] droplet_merger_junction_carriers = [] droplet_merger_junction = Primitive( "DROPLET MERGER JUNCTION", PrimitiveType.COMPONENT, "MIX", False, False, droplet_merger_junction_inputs, droplet_merger_junction_outputs, droplet_merger_junction_loadings, droplet_merger_junction_carriers, None, ) library.add_operator_entry(droplet_merger_junction, InteractionType.MIX) # DROPLET MERGER CHANNEL droplet_merger_channel_inputs = [] droplet_merger_channel_inputs.append(ConnectingOption(None, ["1"])) droplet_merger_channel_outputs = [] droplet_merger_channel_outputs.append(ConnectingOption(None, ["2"])) droplet_merger_channel_loadings = [] droplet_merger_channel_carriers = [] droplet_merger_channel = Primitive( "DROPLET MERGER CHANNEL", PrimitiveType.COMPONENT, "MIX", False, False, droplet_merger_channel_inputs, droplet_merger_channel_outputs, droplet_merger_channel_loadings, droplet_merger_channel_carriers, None, ) library.add_operator_entry(droplet_merger_channel, InteractionType.MIX) # MIXER - CONTINOUS FLOW ONE cf_mixer_inputs = [] cf_mixer_inputs.append(ConnectingOption(None, ["1"])) cf_mixer_inputs.append(ConnectingOption(None, ["1"])) cf_mixer_inputs.append(ConnectingOption(None, ["1"])) cf_mixer_inputs.append(ConnectingOption(None, ["1"])) cf_mixer_inputs.append(ConnectingOption(None, ["1"])) cf_mixer_inputs.append(ConnectingOption(None, ["1"])) cf_mixer_inputs.append(ConnectingOption(None, ["1"])) cf_mixer_inputs.append(ConnectingOption(None, ["1"])) cf_mixer_inputs.append(ConnectingOption(None, ["1"])) cf_mixer_inputs.append(ConnectingOption(None, ["1"])) cf_mixer_outputs = [] cf_mixer_outputs.append(ConnectingOption(None, ["2"])) cf_mixer_loadings = [] cf_mixer_carriers = [] cf_mixer = Primitive( "MIXER", PrimitiveType.COMPONENT, "MIX", False, False, cf_mixer_inputs, cf_mixer_outputs, cf_mixer_loadings, cf_mixer_carriers, None, ) library.add_operator_entry(cf_mixer, InteractionType.MIX) # DROPLET SPLITTER droplet_splitter_inputs = [] droplet_splitter_inputs.append(ConnectingOption(None, ["1"])) droplet_splitter_outputs = [] droplet_splitter_outputs.append(ConnectingOption(None, ["2"])) droplet_splitter_outputs.append(ConnectingOption(None, ["3"])) droplet_splitter_loadings = [] droplet_splitter_carriers = [] droplet_splitter = Primitive( "DROPLET SPLITTER", PrimitiveType.COMPONENT, "DIVIDE", False, False, droplet_splitter_inputs, droplet_splitter_outputs, droplet_splitter_loadings, droplet_splitter_carriers, None, ) library.add_operator_entry(droplet_splitter, InteractionType.DIVIDE) # NORMAL MIXER mixer_inputs = [] mixer_inputs.append(ConnectingOption(None, ["1"])) mixer_inputs.append(ConnectingOption(None, ["1"])) mixer_inputs.append(ConnectingOption(None, ["1"])) mixer_inputs.append(ConnectingOption(None, ["1"])) mixer_inputs.append(ConnectingOption(None, ["1"])) mixer_inputs.append(ConnectingOption(None, ["1"])) mixer_inputs.append(ConnectingOption(None, ["1"])) mixer_inputs.append(ConnectingOption(None, ["1"])) mixer_inputs.append(ConnectingOption(None, ["1"])) mixer_inputs.append(ConnectingOption(None, ["1"])) mixer_outputs = [] mixer_outputs.append(ConnectingOption(None, ["2"])) mixer_outputs.append(ConnectingOption(None, ["2"])) mixer_outputs.append(ConnectingOption(None, ["2"])) mixer_outputs.append(ConnectingOption(None, ["2"])) mixer_outputs.append(ConnectingOption(None, ["2"])) mixer_outputs.append(ConnectingOption(None, ["2"])) mixer_outputs.append(ConnectingOption(None, ["2"])) mixer_outputs.append(ConnectingOption(None, ["2"])) mixer_outputs.append(ConnectingOption(None, ["2"])) mixer_outputs.append(ConnectingOption(None, ["2"])) mixer_loadings = [] mixer_carriers = [] mixer = Primitive( "MIXER", PrimitiveType.COMPONENT, "MIX", False, False, mixer_inputs, mixer_outputs, mixer_loadings, mixer_carriers, None, ) library.add_operator_entry(mixer, InteractionType.MIX) # DROPLET CAPACITANCE SENSOR droplet_capacitance_sensor_inputs = [] droplet_capacitance_sensor_inputs.append(ConnectingOption(None, ["1"])) droplet_capacitance_sensor_outputs = [] droplet_capacitance_sensor_outputs.append(ConnectingOption(None, ["2"])) droplet_capacitance_sensor_loadings = [] droplet_capacitance_sensor_carriers = [] droplet_capacitance_sensor = Primitive( "DROPLET CAPACITANCE SENSOR", PrimitiveType.COMPONENT, "PROCESS", False, False, droplet_capacitance_sensor_inputs, droplet_capacitance_sensor_outputs, droplet_capacitance_sensor_loadings, droplet_capacitance_sensor_carriers, None, ) library.add_operator_entry(droplet_capacitance_sensor, InteractionType.TECHNOLOGY_PROCESS) # FILTER filter_inputs = [] filter_inputs.append(ConnectingOption(None, ["1"])) filter_outputs = [] filter_outputs.append(ConnectingOption(None, ["2"])) filter_loadings = [] filter_carriers = [] filter = Primitive( "FILTER", PrimitiveType.COMPONENT, "PROCESS", False, False, filter_inputs, filter_outputs, filter_loadings, filter_carriers, None, ) library.add_operator_entry(filter, InteractionType.TECHNOLOGY_PROCESS) # DROPLET FLUORESCENCE SENSOR droplet_fluorescence_sensor_inputs = [] droplet_fluorescence_sensor_inputs.append(ConnectingOption(None, ["1"])) droplet_fluorescence_sensor_outputs = [] droplet_fluorescence_sensor_outputs.append(ConnectingOption(None, ["2"])) droplet_fluorescence_sensor_loadings = [] droplet_fluorescence_sensor_carriers = [] droplet_fluorescence_sensor = Primitive( "DROPLET FLUORESCENCE SENSOR", PrimitiveType.COMPONENT, "PROCESS", False, False, droplet_fluorescence_sensor_inputs, droplet_fluorescence_sensor_outputs, droplet_fluorescence_sensor_loadings, droplet_fluorescence_sensor_carriers, None, ) library.add_operator_entry(droplet_fluorescence_sensor, InteractionType.TECHNOLOGY_PROCESS) # DROPLET LUMINESCENCE SENSOR droplet_luminescence_sensor_inputs = [] droplet_luminescence_sensor_inputs.append(ConnectingOption(None, ["1"])) droplet_luminescence_sensor_outputs = [] droplet_luminescence_sensor_outputs.append(ConnectingOption(None, ["2"])) droplet_luminescence_sensor_loadings = [] droplet_luminescence_sensor_carriers = [] droplet_luminescence_sensor = Primitive( "DROPLET CAPACITANCE SENSOR", PrimitiveType.COMPONENT, "PROCESS", False, False, droplet_luminescence_sensor_inputs, droplet_luminescence_sensor_outputs, droplet_luminescence_sensor_loadings, droplet_luminescence_sensor_carriers, None, ) library.add_operator_entry(droplet_luminescence_sensor, InteractionType.TECHNOLOGY_PROCESS) # DROPLET SPACER droplet_spacer_inputs = [] droplet_spacer_inputs.append(ConnectingOption("default_component", ["1"])) droplet_spacer_outputs = [] droplet_spacer_outputs.append(ConnectingOption("default_component", ["2"])) droplet_spacer_loadings = [] droplet_spacer_carriers = [] droplet_spacer = Primitive( "DROPLET SPACER", PrimitiveType.NETLIST, "PROCESS", False, False, droplet_spacer_inputs, droplet_spacer_outputs, droplet_spacer_loadings, droplet_spacer_carriers, "default-netlists/dropletspacer.mint", ) library.add_operator_entry(droplet_spacer, InteractionType.TECHNOLOGY_PROCESS) # YTREE - This is a procedural primitives ytree = YTREE() library.add_procedural_entry(ytree) return library