The package already supports the core SLH reduction rules: cascade, concatenate, and feedback. However, complicated networks still require manual port bookkeeping with integer indices, e.g.
feedback(G, 1 => 3, 3 => 5, 5 => 7)
This is powerful but easy to get wrong. A higher-level named-port interface would make large networks easier to read, debug, and teach.
net = Network()
add!(net, :source, coherent_drive(α), outputs=[:out])
add!(net, :cavity, one_sided_cavity(a; κ, Δ), inputs=[:in], outputs=[:out])
add!(net, :phase, phase_shifter(ϕ), inputs=[:in], outputs=[:out])
connect!(net, :source => :out, :cavity => :in)
connect!(net, :cavity => :out, :phase => :in)
G_eff = reduce(net)
And then we can add plotting
plot_network(net)
plot_reduction_steps(net)
The package already supports the core SLH reduction rules: cascade, concatenate, and feedback. However, complicated networks still require manual port bookkeeping with integer indices, e.g.
This is powerful but easy to get wrong. A higher-level named-port interface would make large networks easier to read, debug, and teach.
And then we can add plotting