# Release notes IPKISS Photonics Design Platform 3.7.0¶

The IPKISS Photonics Design Platform 3.7 introduces new concepts to make placement and routing of PIC circuits easier and more efficient with the help of ‘specs’. This release also features some smaller improvements in IPKISS such as improved error messages during waveguide routing and new device simulation features. A full list of improvements can be found in the changelog.

Highlights are shown below:

## Place and route of photonic ICs using i3.Circuit¶

i3.Circuit is a new intuitive way of making circuits, which replaces and improves CircuitCell (previously available in Luceda Academy), PlaceAndAutoRoute, PlaceComponents and PlaceAndConnect. It introduces a new high-level approach of creating circuits based on only two main concepts: insts + specs. i3.Circuit provides a more readable and consistent IPKISS experience with less code. You can now define your full circuit just by providing the instances (insts), the newly introduced specifications (specs) and the exposed ports. You can improve your workflow by using the strict parameter. This parameter allows to check for mistakes in your design without raising exceptions, which allows to build your design more iteratively and with less runs.

Check out the migration guide to migrate your code to this new syntax.

## Placing and routing¶

We introduce a new function that allows to easily place and route a series of instances using the same concepts as i3.Circuit while provdiding more flexibility for edge cases. This is done by providing the placement specifications and connectors for the instances, in short the ‘specs’. The strict parameter is also here available. Check out the place_and_route reference for more information.

## Connectors¶

In this release we introduce a new connector class i3.Connector. A Connector is an algorithm that defines how to connect two ports to each other using a routing function. You can now define your own custom connectors based on i3.Connector or use the pre-built ones available out-of-the-box:

There’s already a few predefined connectors:

• ConnectManhattan
• ConnectBend
• ConnectManhattanTapered

ConnectBend will automatically choose the best bending algorithm to route your ports, or you can specify the route you want from these predefined classes that just calculate the shape:

• i3.RouteSBend
• i3.RouteUBend
• i3.RouteArcBend

Connectors are mainly used together with i3.Circuit and i3.place_and_route, although they also provide a .connect() method to quickly try out your connector. Both optical and electrical routes are supported.

Note that it is also possible to combine multiple connectors using arbitrary intermediate points.

### Manhattan control points¶

Using the new i3.V and i3.H syntax in the control_points parameter of ConnectManhattan or RouteManhattan you can more precisely control your routing. By specifying the vertical and horizontal lines the waveguide has to pass through you have a more readable and simpler way to control the routing. Keep in mind that the vertical and horizontal lines have to be alternated. Check the H & V control points reference for some examples.

## Custom solver macros¶

A new type of output, called i3.MacroOutput, is introduced for all supported solvers. This macro allows you to return arbitrary data from the solver. This allows for more flexibility during the simulation phase.

The user is responsible for writing the macro such that it generates and stores the data to a file (or multiple files) after which it can be retrieved through get_result.