Known changes and backwards incompatibilities in 3.9.0

Deprecation LongIntProperty and removal of explicit long int

As a preparation to migrating to Python 3,

  • LongIntProperty is deprecated. In Python 3, there will be no more difference between integer and long integer. Use a IntProperty where possible (on Python 2, this is limited to 32 bits) or a generic DefinitionProperty in the unlikely case that you need to store a long integer in Python 2.

  • RESTRICT_LONG, ProcessorLongInt and processor_longint are removed. In the odd case that you used these, remove them from your code. If a regular Python 2 int is sufficient for your purposes, then replace with RESTRICT_INT, ProcessorInt and processor_int, respectively.

Deprecation of Python 2 division operator overloading (__div__, __idiv__ and __rdiv__)

In Python 3 __div__, __idiv__ and __rdiv__ got removed in favor of __truediv__, __itruediv__ and __rtruediv__ respectively. As a result every __div__, __idiv__ and __rdiv__ is now deprecated in order to prepare the migration to Python 3. In Python 2 you can get the Python 3 division semantics by adding from __future__ import division at the top of your script, which we recommend doing as much as possible in order to to ease the migration to Python 3.

  • Coord2 dividing by a scalar is deprecated when running in Python 2 without from __future__ import division. Note that there will only be a change in behavior if the scalar is an integer and Coord2 contains an integer. Coord2 with integer coordinates might get deprecated in the future.

  • AWG Designer: SlabFieldProfile1D and SlabFieldProfile2D dividing by a scalar is deprecated when running in Python 2 without from __future__ import division. Be aware that dividing by a scalar did not work correctly before this version, so differences in behavior will not be related to Python 3 division semantics.

IP Manager reference files

Regeneration of reference files (S-matrices, virtual fabrication snapshots, GDS files) led to slightly different files even when the underlying data did not change. Since the goal is to version control these files, it is important that changes don’t happen when the underlying data doesn’t change. To resolve this the following changes were made:

  • SVG reference files are removed from the virtual fabrication tests from ip_manager.testing.VFab2DReferenceTest: -> such files include data that is randomly generated (IDs of elements in an svg), which outputs slightly different files when regenerating the reference files.

  • S matrices are exported to a touchstone instead of a binary format.

  • Fixed timestamp (1/1/1970, 0:00) is added to all newly generated GDS reference files instead of the time of the generation. Regenerating existing GDS files is optional, as the timestamp is not taken into account in LayoutToGds and GdsToGds tests.

The known good reference files will need to be (re)generated (see Generating the known-good reference files), while svg and smat files can be removed.

Picazzo containers netlist

The picazzo3 containers such as AutoTransitionPorts, FanoutPorts, IoFibcoup and RoutePortsAroundCorner now have a netlist with a deterministic order of terms across python2 and python3. As a result, XML netlist files for IP Manager may have a different order of nets and need to be checked and regenerated on IPKISS 3.9.

Removal of ObserverList and EventList

These classes were not fully implemented and have thus been removed in this release as part of a general code base cleanup.

Numpy 1.16

The Python 3 release of all Luceda software now uses numpy version 1.16. While numpy is mostly backward compatible, some behavior that was deprecated in 1.11 or between 1.11 and 1.16 was removed. Most often, this may reveal some programming errors which were still possible when using numpy 1.11, such as indexing an array with a non-integer index or with a too large index array. For details, see the detailed release notes of numpy.

Removed symbols from i3

The i3 namespace no longer includes certain symbols from internal libraries.

  • tkinter: Label, Tk, END, Y, RIGHT, VERTICAL, Scrollbar, Listbox, Checkbutton, IntVar, tkSimpleDialog