# Mach-Zehnder Interferometers¶

Mach-Zehnder interferometers (MZI) are one of the simplest two-path interferometers to implement on a chip. They consist of a splitter, two delay lines, and a combiner coupler. In their simplcity, they are the basis for many more complex components.

The PICAZZO MZI classes provide a parametric framework to define both very simple and very advanced MZIs. The couplers for splitter and combiner can be supplied by the user, using MMIs, directional couplers, or just Y-Splitters. The arms can be simple delay lines, or contain seperate components, such as ring resonators or electro-optic phase shifters.

The hierarchy of an MZI is illustrated below:

Because the splitter and combiner can be manually, the user can set these ports by specifying the labels of the splitter and combiner ports that need to connect to arm1 and arm2, respectively, using the properties splitter_port_names and combiner_port_names (The default follow the patterns in1, out1, …). Likewise, the ports of the arms that are to be connected to the splitter and combiner are supplied in arm1_port_names and arm2_port_names).

Two basic MZI classes are provided: one with simple delay lines, and one where each arm is a container with a user-defined cell.

 MZI Generic MZI, taking a splitter, combiner and two _MziArm objects. MZIWaveguides A MZI with two simple waveguide arms. MZIWithCells An MZI which contains another cell in one or both arms.

The individual arms can also be define manually

 MZIWaveguideArm A Mach-Zehnder arm with a given length: routing upward at right-angle MZIContainerArm A Mach-Zehnder arm which contains another cell and connects it to the splitter and combiner port