def cutback_phase(straight_length=100.0, bend_radius=10.0, n=2): # Define sub components bend180 = bend_circular(radius=bend_radius, start_angle=-90, theta=180) pm_wg = phase_modulator_waveguide(length=straight_length) wg_short = waveguide(length=1.0) wg_short2 = waveguide(length=2.0) wg_heater = waveguide_heater(length=10.0) taper = _taper() # Define a map between symbols and (component, input port, output port) string_to_device_in_out_ports = { "I": (taper, "1", "wg_2"), "O": (taper, "wg_2", "1"), "S": (wg_short, "W0", "E0"), "P": (pm_wg, "W0", "E0"), "A": (bend180, "W0", "W1"), "B": (bend180, "W1", "W0"), "H": (wg_heater, "W0", "E0"), "-": (wg_short2, "W0", "E0"), } # Generate a sequence # This is simply a chain of characters. Each of them represents a component # with a given input and and a given output repeated_sequence = "SIPOSASIPOSB" heater_seq = "-H-H-H-H-" sequence = repeated_sequence * n + "SIPO" + heater_seq component = component_sequence(sequence, string_to_device_in_out_ports) return component
def test_cutback_heater(): # Define subcomponents bend_radius = 10.0 bend180 = bend_circular(radius=bend_radius, start_angle=-90, theta=180) wg = waveguide(length=5.0) wg_heater = waveguide_heater(length=20.0) # Define a map between symbols and (component, input port, output port) string_to_device_in_out_ports = { "A": (bend180, "W0", "W1"), "B": (bend180, "W1", "W0"), "H": (wg_heater, "W0", "E0"), "-": (wg, "W0", "E0"), } # Generate a sequence # This is simply a chain of characters. Each of them represents a component # with a given input and and a given output sequence = "AB-H-H-H-H-BA" component = component_sequence(sequence, string_to_device_in_out_ports) assert component return component