Release notes IPKISS 3.1.1

What's new in 3.1.1

IPKISS 3.1.1 comes with a series of small improvements and bugfixes. Please check the changelog at the bottom for the full list of changes. Highlights are shown below:

  1. License installation and verification
  2. Updated packages
  3. Visualization: ports are labeled
  4. Cross-sections of trace templates
  5. PlaceAndConnect draws flylines when links are not properly connected
  6. Shapes for performing spline fitting
  7. Bugfixes: see full changelog (online, below on this page)

1. License installation and verification

Installing licenses is now much simpler. In addition, you can verify whether your licenses have been installed properly. After installing, simply open the "Luceda Control Center" and go to the "Product License" tab. To install a license, drag-and-drop your license file into this tab. The table will show which licenses you have, and until when they are valid:

Installing a license can now be done from the "Product license" tab in the "Luceda Control Center"

2. Updated packages

We have updated many packages in our Luceda distribution. Most notably, we now use conda 4, and include numpy (v1.11.2) and scipy (v0.18.1).

3. Visualization: ports can be labeled

The visualize() method of a Layout view can show the ports by using visualize(annotate=True).

In [1]:
from technologies import silicon_photonics
from ipkiss3 import all as i3
%pylab inline
Populating the interactive namespace from numpy and matplotlib
In [2]:
from picazzo3.filters.ring import RingRect180DropFilter
ring = RingRect180DropFilter()
ring_layout = ring.Layout(bend_radius=8.0)

4. Cross-sections of trace templates

Trace templates can now generate and visualize a cross-section geometry. Use cross_section() to get the cross-section, and visualize() to visualize.

In [3]:
from picazzo3.traces.rib_wg import RibWaveguideTemplate
rwg = RibWaveguideTemplate()
rwg_layout = rwg.Layout(core_width=.60)

Flylines visually show when you haven't properly connected components with PlaceAndConnect. The Layout view has two new parameters to control the behavior of the flylines:

  • flyline_layer (default: i3.TECH.PPLAYER.ERROR.GENERIC)
  • flyline_width (default: 0.5 * i3.TECH.WG.WIRE_WIDTH).
In [4]:
from picazzo3.routing.place_route import PlaceAndConnect
ring1 = RingRect180DropFilter()
ring2 = RingRect180DropFilter()
pac = PlaceAndConnect(child_cells={'ring1': ring1, 'ring2': ring2}, 
                      links=[('ring1:out1', 'ring2:in1'), ('ring1:in2', 'ring2:out2')])
pac_lay = pac.Layout(child_transformations={'ring1': (0, 0), 'ring2': (30, 0)})

6. Shapes for performing spline fitting

Ipkiss now contains 2 new spline shapes:

  • ShapeFitNaturalCubicSpline
  • ShapeFitClampedCubicSpline

See also the documentation here: spline shapes.


A natural cubic spline shape.

In [5]:
s = i3.Shape([(0.0, 0.0), (10.0, 0.0), (10.0, 20.0), (30.0, 15.0), (30.0, 30.0)])
s2 = i3.ShapeFitNaturalCubicSpline(original_shape=s, discretisation=.1)

# plot control shape
x, y = s.points.transpose()
plt.plot(x, y, 'bo-')
# plot spline
x2, y2 = s2.points.transpose()
plt.plot(x2, y2, 'r-')
[<matplotlib.lines.Line2D at 0xcab34a8>]


A cubic spline shape which can be clamped at the start / end to a fixed angle.

In [6]:
s = i3.Shape([(0.0, 0.0), (10.0, 0.0), (10.0, 20.0), (30.0, 15.0), (30.0, 30.0)],
             start_face_angle=0.0, end_face_angle=80.0)
s2 = i3.ShapeFitClampedCubicSpline(original_shape=s, discretisation=.1)

# plot control shape
x, y = s.points.transpose()
plt.plot(x, y, 'bo-')
# plot spline
x2, y2 = s2.points.transpose()
plt.plot(x2, y2, 'r-')
[<matplotlib.lines.Line2D at 0xd459cf8>]

Full list of improvements and bugfixes


  • New feature: shapes for performing spline fitting of a control shape: ShapeFitClampedCubicSpline and ShapeFitClampedCubicSpline. See spline shapes.
  • Improvement: extra type check when adding transitions to an AutoTransitionDatabase.
  • Improvement: Ports are now labeled in the visualization of the Layout. The Layout visualize method has a new keyword annotate (default: True).
  • Improvement: AutoTransitionDatabase can now resolve multiple 'aliases' of trace templates. This makes it much easier to define customized trace templates that are a variation of existing trace templates. The transitions will be correctly resolved.
  • The Layout view of a TraceTemplate now has a method cross_section() which returns a 2D geometry of the waveguide cross section.
  • Change: cross section geometries now have a method visualize(). Use this instead of figure_2d().show() (which will still work).
  • Bugfix: the interface with the Caphe circuit simulator can now handle electrical ports.
  • Bugfix: fixed RadialLine.
  • Bugfix: a component with a SMatrixView can now be simulated repeatedly.
  • Bugfix: StrongPropertyInitializer objects, and in particular PCells and Views, can now be pickled.
  • Bugfix: Views with properties that have a numpy array as value can now be properly compared (view1 == view2).
  • Bugfix: When the original shape is an empty shape or a shape with length == 0.0, shape modifiers now return an empty points array instead of raising an exception.
  • Improvement: Our packages are now compatible with numpy 1.11, this is now the default numpy shipped with the installer. If you have your own packages that are compiled against an older numpy version, you might have to reinstall a version for numpy 1.11.
  • Improvement: The example silicon_photonics technology now uses an improved color scheme for materials (when using visualize_2d).

Ipkiss-caphe interface

  • Bugfix: calculating the S-matrix of circuits containing nonlinear models no longer fails. The result will be the linear contribution of the scattering matrix (i.e., defined by _calculate_S in each CapheModel).
  • Bugfix: CapheModelFromSMatrix accidentally reset the view of the associated PCell, resulting in an empty smatrix or an infinite recursion, depending on the model. This no longer happens.
  • Bugfix: Testbenches that have no terms in the top-level netlist can now also be converted to a native caphe circuit.


  • Improvement: PlaceAndConnect draws flylines for logical connections that are not properly connected in the layout. Flylines are drawn on the TECH.PPLAYER.ERROR.GENERIC layer.
  • Bugfix: thinned waveguide templates (ThinnedWaveguideTemplate) and rib waveguide templates (RibWaveguideTemplate) are correctly identified when using automated transitions such as with AutoTransitionPorts.
  • Bugfix: thinned waveguide templates (ThinnedWaveguideTemplate) now correctly interprete and pass along their properties.
  • Bugfix: IoFibcoup now raises a proper exception when a fiber coupler without an East Port is used.
  • Bugfix: IoFibcoup now handles fiber couplers with multiple waveguide ports (e.g. 2D couplers) correctly.

Samples & documentation

  • Added MMIs to demolib (samples\demo\libraries).
  • Docfix: Layout elements like Circle and Rectangle only accept Layer objects for the layer argument, not an integer.

Starting from our extensive validated component library, we can assist you in the creation and validation of new model libraries