Known backwards incompatibilities 3.1.3¶
Waveguide circuit models¶
Before IPKISS 3.1.3, waveguide models did not extract the length from the layout except when you explicitly set the
default waveguide model to
CapheModelFromLayout, for example:
import ipkiss3.all as i3 i3.Waveguide.set_default_view("CapheModelFromLayout") i3.RoundedWaveguide.set_default_view("CapheModelFromLayout")
Using a zero-length by default was not a sensible default. Now we extract the length from the layout. This means
that the Python code above can be ommitted in scripts now. For backward compatibility reasons,
CapheModel will remain to exist, but we recommend using
CircuitModel now, which replaces both views.
See also the circuit model tutorial to learn more about the new
Subclassing legacy CapheModel¶
All components in ipkiss and picazzo have both a new
CircuitModel and a legacy
CapheModel. This ensures that scripts
that use the old
CapheModel will still be working as before, this way you can gradually transition to using
CircuitModel. Both models
are made to be equivalent, the only difference is in the way they’re executed.
In some cases however, you might have subclassed from the
CapheModel view to extend the default behavior. In this case you’ll
need to tell ipkiss to prefer your extended model over the
CircuitModel. You can use
set_default_view for this, as illustrated in
the example below.
from technologies.silicon_photonics import TECH import ipkiss3.all as i3 from picazzo3.filters.mmi import MM1x2 class MyMMI(MM1x2): class CapheModel(MM1x2.CapheModel): def _default_back_coupling(self): return 0.1 # Required to ensure that the adapted model is used. MyMMI.set_default_view(MyMMI.CapheModel) mmi = MyMMI() assert isinstance(mmi.get_default_view(i3.CircuitModelView), MyMMI.CapheModel)
The straight_extension property of ShapeWindowTraceTransition was incorrectly used in previous releases when the trace template types were reversed. This is also the case for the following predefined transitions in picazzo3:
- WireRibWaveguideTransitionLinear, WireRibWaveguideTransitionFromPortLinear
- WireRibWireWaveguideTransitionLinear, WireRibWireWaveguideTransitionFromPortLinear
- WireSocketWaveguideTransitionLinear, WireSocketWaveguideTransitionFromPortLinear
- ThinnedWireWireWaveguideTransitionLinear, ThinnedWireWireWaveguideTransitionFromPortLinear
In the following example a rib waveguide to wire waveguide transition is created, with and (exaggerated) straight extension set to (1.0, 2.0). WireRibWaveguideTransitionLinear is used and is called with a rib waveguide as the start and a wire waveguide as the end trace template. In ipkiss 3.1.2, the transition would have gotten a 2.0um extension at the start point (rib waveguide) and a 1.0um extension at the end point (strip waveguide), whereas one would expect the reverse. In Ipkiss 3.1.3, the first value of the straight_extension corresponding always to the start point and the second value to the end point of the transition. Designs from before 3.1.3 will therefore render slightly different on 3.1.3 in case straight_extension was used.
import technologies.silicon_photonics from ipkiss3 import all as i3 from picazzo3.traces.wire_wg import WireWaveguideTemplate from picazzo3.traces.rib_wg import RibWaveguideTemplate from picazzo3.traces.rib_wg import WireRibWaveguideTransitionLinear wg_start = RibWaveguideTemplate() wg_start.Layout(core_width=1.0, cladding_width=5.0) wg_end = WireWaveguideTemplate() wg_end.Layout() trans = WireRibWaveguideTransitionLinear(name="my_rib_wire_transition", start_trace_template=wg_start, end_trace_template=wg_end) trans_lo = trans.Layout(start_position=(0.0, 0.0), end_position=(6.0, 0.0), straight_extension=(1, 2)) trans_lo.visualize_2d()