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,
LongIntPropertyis deprecated. In Python 3, there will be no more difference between integer and long integer. Use a
IntPropertywhere possible (on Python 2, this is limited to 32 bits) or a generic
DefinitionPropertyin 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 (
In Python 3
__rdiv__ got removed in favor of
As a result every
__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.
Coord2dividing 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
Coord2contains an integer.
Coord2with integer coordinates might get deprecated in the future.
SlabFieldProfile2Ddividing 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.
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
The i3 namespace no longer includes certain symbols from internal libraries.
tkinter: Label, Tk, END, Y, RIGHT, VERTICAL, Scrollbar, Listbox, Checkbutton, IntVar, tkSimpleDialog