all models

import sax
print(sax.models.__all__)
['attenuator', 'bend', 'copier', 'coupler', 'coupler_ideal', 'crossing_ideal', 'grating_coupler', 'mmi1x2', 'mmi1x2_ideal', 'mmi2x2', 'mmi2x2_ideal', 'model_2port', 'model_3port', 'model_4port', 'passthru', 'phase_shifter', 'splitter_ideal', 'straight', 'unitary']
sax.models.attenuator(loss=1.0)
{('in0', 'out0'): Array(0.89125094+0.j, dtype=complex128),
 ('out0', 'in0'): Array(0.89125094+0.j, dtype=complex128)}
sax.models.bend()
{('in0', 'out0'): Array(0.82075399+0.57126164j, dtype=complex128),
 ('out0', 'in0'): Array(0.82075399+0.57126164j, dtype=complex128)}
sax.sdict(sax.models.copier(2, 2)())
{('in0', 'out1'): Array(1., dtype=float64),
 ('in0', 'out0'): Array(1., dtype=float64),
 ('in1', 'out1'): Array(1., dtype=float64),
 ('in1', 'out0'): Array(1., dtype=float64),
 ('out1', 'in0'): Array(1., dtype=float64),
 ('out1', 'in1'): Array(1., dtype=float64),
 ('out0', 'in0'): Array(1., dtype=float64),
 ('out0', 'in1'): Array(1., dtype=float64)}
sax.models.coupler()
{('in0', 'out0'): Array(0.98006658, dtype=float64, weak_type=True),
 ('in0', 'out1'): Array(-0.-0.19866933j, dtype=complex128, weak_type=True),
 ('in1', 'out0'): Array(-0.-0.19866933j, dtype=complex128, weak_type=True),
 ('in1', 'out1'): Array(0.98006658, dtype=float64, weak_type=True),
 ('out0', 'in0'): Array(0.98006658, dtype=float64, weak_type=True),
 ('out0', 'in1'): Array(-0.-0.19866933j, dtype=complex128, weak_type=True),
 ('out1', 'in0'): Array(-0.-0.19866933j, dtype=complex128, weak_type=True),
 ('out1', 'in1'): Array(0.98006658, dtype=float64, weak_type=True)}
sax.models.coupler_ideal()
{('in0', 'out0'): Array(0.70710678, dtype=float64, weak_type=True),
 ('in0', 'out1'): Array(0.+0.70710678j, dtype=complex128, weak_type=True),
 ('in1', 'out0'): Array(0.+0.70710678j, dtype=complex128, weak_type=True),
 ('in1', 'out1'): Array(0.70710678, dtype=float64, weak_type=True),
 ('out0', 'in0'): Array(0.70710678, dtype=float64, weak_type=True),
 ('out0', 'in1'): Array(0.+0.70710678j, dtype=complex128, weak_type=True),
 ('out1', 'in0'): Array(0.+0.70710678j, dtype=complex128, weak_type=True),
 ('out1', 'in1'): Array(0.70710678, dtype=float64, weak_type=True)}
sax.models.crossing_ideal()
{('in0', 'out1'): Array(1., dtype=float64, weak_type=True),
 ('in1', 'out0'): Array(1., dtype=float64, weak_type=True),
 ('out0', 'in1'): Array(1., dtype=float64, weak_type=True),
 ('out1', 'in0'): Array(1., dtype=float64, weak_type=True)}
sax.models.grating_coupler()
{('in0', 'in0'): Array(0., dtype=float64, weak_type=True),
 ('in0', 'out0'): Array(1., dtype=float64, weak_type=True),
 ('out0', 'in0'): Array(1., dtype=float64, weak_type=True),
 ('out0', 'out0'): Array(0., dtype=float64, weak_type=True)}
sax.models.mmi1x2()
{('in0', 'out0'): Array(0.68310113, dtype=float64),
 ('in0', 'out1'): Array(0.68310113, dtype=float64),
 ('out0', 'in0'): Array(0.68310113, dtype=float64),
 ('out1', 'in0'): Array(0.68310113, dtype=float64)}
sax.models.mmi1x2_ideal()
{('in0', 'out0'): Array(0.70710678, dtype=float64, weak_type=True),
 ('in0', 'out1'): Array(0.70710678, dtype=float64, weak_type=True),
 ('out0', 'in0'): Array(0.70710678, dtype=float64, weak_type=True),
 ('out1', 'in0'): Array(0.70710678, dtype=float64, weak_type=True)}
sax.models.mmi2x2()
{('in0', 'out0'): Array(0.+0.68310113j, dtype=complex128),
 ('in0', 'out1'): Array(0.68310113, dtype=float64),
 ('in1', 'out0'): Array(0.68310113, dtype=float64),
 ('in1', 'out1'): Array(0.+0.68310113j, dtype=complex128),
 ('out0', 'in0'): Array(0.+0.68310113j, dtype=complex128),
 ('out0', 'in1'): Array(0.68310113, dtype=float64),
 ('out1', 'in0'): Array(0.68310113, dtype=float64),
 ('out1', 'in1'): Array(0.+0.68310113j, dtype=complex128)}
sax.models.mmi2x2_ideal()
{('in0', 'out0'): Array(0.70710678, dtype=float64, weak_type=True),
 ('in0', 'out1'): Array(0.+0.70710678j, dtype=complex128, weak_type=True),
 ('in1', 'out0'): Array(0.+0.70710678j, dtype=complex128, weak_type=True),
 ('in1', 'out1'): Array(0.70710678, dtype=float64, weak_type=True),
 ('out0', 'in0'): Array(0.70710678, dtype=float64, weak_type=True),
 ('out0', 'in1'): Array(0.+0.70710678j, dtype=complex128, weak_type=True),
 ('out1', 'in0'): Array(0.+0.70710678j, dtype=complex128, weak_type=True),
 ('out1', 'in1'): Array(0.70710678, dtype=float64, weak_type=True)}
sax.models.model_2port("o1", "o2")()
{('o1', 'o2'): Array(1., dtype=float64, weak_type=True),
 ('o2', 'o1'): Array(1., dtype=float64, weak_type=True)}
sax.models.model_3port("o1", "o2", "o3")()
{('o1', 'o2'): Array(0.70710678, dtype=float64, weak_type=True),
 ('o1', 'o3'): Array(0.70710678, dtype=float64, weak_type=True),
 ('o2', 'o1'): Array(0.70710678, dtype=float64, weak_type=True),
 ('o3', 'o1'): Array(0.70710678, dtype=float64, weak_type=True)}
sax.models.model_4port("o1", "o2", "o3", "o4")()
{('o1', 'o3'): Array(0.+0.70710678j, dtype=complex128, weak_type=True),
 ('o1', 'o4'): Array(0.70710678, dtype=float64, weak_type=True),
 ('o2', 'o3'): Array(0.70710678, dtype=float64, weak_type=True),
 ('o2', 'o4'): Array(0.+0.70710678j, dtype=complex128, weak_type=True),
 ('o3', 'o1'): Array(0.+0.70710678j, dtype=complex128, weak_type=True),
 ('o3', 'o2'): Array(0.70710678, dtype=float64, weak_type=True),
 ('o4', 'o1'): Array(0.70710678, dtype=float64, weak_type=True),
 ('o4', 'o2'): Array(0.+0.70710678j, dtype=complex128, weak_type=True)}
sax.sdict(sax.models.passthru(2)())
{('in0', 'out1'): Array(1., dtype=float64),
 ('in1', 'out0'): Array(1., dtype=float64),
 ('out1', 'in0'): Array(1., dtype=float64),
 ('out0', 'in1'): Array(1., dtype=float64)}
sax.models.phase_shifter()
{('in0', 'out0'): Array(0.82076344+0.57126822j, dtype=complex128),
 ('out0', 'in0'): Array(0.82076344+0.57126822j, dtype=complex128)}
sax.models.splitter_ideal()
{('in0', 'out0'): Array(0.70710678, dtype=float64, weak_type=True),
 ('in0', 'out1'): Array(0.70710678, dtype=float64, weak_type=True),
 ('out0', 'in0'): Array(0.70710678, dtype=float64, weak_type=True),
 ('out1', 'in0'): Array(0.70710678, dtype=float64, weak_type=True)}
sax.models.straight()
{('in0', 'out0'): Array(0.82076344+0.57126822j, dtype=complex128),
 ('out0', 'in0'): Array(0.82076344+0.57126822j, dtype=complex128)}
sax.sdict(sax.models.unitary(4, 4)())
{('in0', 'out3'): Array(0.5, dtype=float64),
 ('in0', 'out2'): Array(0.5, dtype=float64),
 ('in0', 'out1'): Array(0.5, dtype=float64),
 ('in0', 'out0'): Array(0.5, dtype=float64),
 ('in1', 'out3'): Array(0.5, dtype=float64),
 ('in1', 'out2'): Array(0.5, dtype=float64),
 ('in1', 'out1'): Array(0.5, dtype=float64),
 ('in1', 'out0'): Array(0.5, dtype=float64),
 ('in2', 'out3'): Array(0.5, dtype=float64),
 ('in2', 'out2'): Array(0.5, dtype=float64),
 ('in2', 'out1'): Array(0.5, dtype=float64),
 ('in2', 'out0'): Array(0.5, dtype=float64),
 ('in3', 'out3'): Array(0.5, dtype=float64),
 ('in3', 'out2'): Array(0.5, dtype=float64),
 ('in3', 'out1'): Array(0.5, dtype=float64),
 ('in3', 'out0'): Array(0.5, dtype=float64),
 ('out3', 'in0'): Array(0.5, dtype=float64),
 ('out3', 'in1'): Array(0.5, dtype=float64),
 ('out3', 'in2'): Array(0.5, dtype=float64),
 ('out3', 'in3'): Array(0.5, dtype=float64),
 ('out2', 'in0'): Array(0.5, dtype=float64),
 ('out2', 'in1'): Array(0.5, dtype=float64),
 ('out2', 'in2'): Array(0.5, dtype=float64),
 ('out2', 'in3'): Array(0.5, dtype=float64),
 ('out1', 'in0'): Array(0.5, dtype=float64),
 ('out1', 'in1'): Array(0.5, dtype=float64),
 ('out1', 'in2'): Array(0.5, dtype=float64),
 ('out1', 'in3'): Array(0.5, dtype=float64),
 ('out0', 'in0'): Array(0.5, dtype=float64),
 ('out0', 'in1'): Array(0.5, dtype=float64),
 ('out0', 'in2'): Array(0.5, dtype=float64),
 ('out0', 'in3'): Array(0.5, dtype=float64)}