Recent Releases of phidl
phidl - PHIDL 1.7.2
1.7.2 (July 3, 2024)
Bugfixes
- Updated to be compatible with Numpy 2.0 (thanks Ashley Anderson @aganders3)
- Removed leftover debugging
print()statement fromkl_boolean functions (thanks Bakhrom Oripov @bakhromtjk)
- Python
Published by amccaugh almost 2 years ago
phidl - PHIDL 1.7.1
1.7.1 (April 26, 2024)
New features
- Allow
Device.get_ports()to be used with arrays - Allow setting
num_cpuin the newpg.kl_boolean(),pg.kl_offset,pg.kl_invert()functions. Global defaults for the number of CPU to be used can be set with e.g.phidl.config["NUM_CPU"] = 8 - Added
pg.flatten()convenience function. This is identical toDevice.flatten()but instead of modifying the geometry in-place, returns a flattened copy (thanks Bas Nijholt @basnijholt) - Fixed an issue from
gdspywhere property keys are incorrectly interpreted as signed integers when importing GDS files usingimport_gds()(thanks Bas Nijholt @basnijholt)
Bugfixes
- Fixed rare problem with mew
pg.kl_invert()function whentile_sizewas too small
- Python
Published by amccaugh about 2 years ago
phidl - PHIDL 1.7.0
1.7.0 (April 9, 2024)
Major optimization update!
New features
- New KLayout-based boolean/offset/outline functions! These are under the name
pg.kl_boolean(),pg.kl_offset, etc. They utilize the excellent KLayout tile processor, which allows breaking down & parallelizing these operations--in a nutshell, these operations should be much, much faster. - Added
D.simplify(), which allows you to significantly reduce memory usage of a geometry by discarding unnecessarily-precise points from all polygons within a Device. Uses the very robust Ramer–Douglas–Peucker algorithm for simplification. - Now
pg.gridsweep()allowsparam_xorparam_yto be integers, which creates copies of the same parameters in the x or y direction.
Bugfixes
- 20x speedup to the internal operation
_merge_nearby_floating_points()which should significantly speed up large operations (thanks Alex Tait @atait) - New pre-commit using ruff (thanks Bas Nijholt @basnijholt)
- Grammar fix to documentation (thanks Ashish Panigrahi @paniash)
- Python
Published by amccaugh about 2 years ago
phidl - PHIDL 1.6.4
1.6.4 (July 20, 2023)
New features
- Optimized/vectorized point rotation, speeding up the
rotate()operation by as much as 150x(!) (thanks Bas Nijholt @basnijholt) - Added proper
pg.fill_rectangle()examples and documentation
Bugfixes
- Fixed
pg.grid()to allow for emptyshapeparameter (thanks Samuel Gyger @gyger) - Allow
pg.grid()spacing to be a single integer (thanks Samuel Gyger @gyger) - Fix to np.bool
- Python
Published by amccaugh almost 3 years ago
phidl - PHIDL 1.6.3
1.6.3 (Feb 9, 2023)
Bugfixes
- Fixed error in
pg.euler()andpp.smooth()for edge case of nearly-colinear points - Specify certain numpy arrays as
objectto avoid numpy deprecation (thanks Bas Nijholt @basnijholt and Samuel Gyger @gyger) - Corrected docstring for
pg.union()as it does not accept lists of Devices (improvement for future, thanks Samuel Gyger @gyger)
- Python
Published by amccaugh about 3 years ago
phidl - PHIDL 1.6.2
1.6.2 (July 25, 2022)
New features
- Addition of
pg.snspd_candelabra()which creates an optimally-rounded SNSPD with low current crowding and arbtitrarily-high fill factor (thanks Dileep Reddy @dileepvr) - Lazy loading of
matplotlib, allowing loading the base phidl libraries much faster (thanks Joaquin Matres @joamatab)
Changes
- Modification to
pg.boolean()s othatOR/union will merge all shapes within one Device, even if the second Device isNone(thanks Stijn Balk @sbalk)
Bugfixes
- Modifying the
parentof aDeviceReferencenow correctly updates the reference cell (thanks Joaquin Matres @joamatab) - Fix bug in
pg.outline()whendistance < 0(thanks @yoshi74ls181) - GDS path objects now copy over when using
pg.import_gds()(thanks Bas Nijholt @basnijholt) - Preserve Polygon.properties and DeviceReference.properties when saving and loading (thanks Bas Nijholt @basnijholt)
D.remove_layers()works also with GDS path objects (thanks Joaquin Matres @joamatab)
- Python
Published by amccaugh almost 4 years ago
phidl - PHIDL 1.6.1
1.6.1 (April 7, 2022)
New features
- Re-added
Device.get_info()that gathers the Device.info dictionaries from every sub-Device and returns them in a list. Useful for collecting information about every Device in a layout - Updated documentation
Changes
- Deprecated Python 2
- Removal of 1023-character limit for labels (will only show warning instead now)
- Deprecated
reflect()has been fully removed, usemirror()instead
Bugfixes
- Much code sanitization under the hood (thanks Bas Nijholt @basnijholt)
Device.absorb()now preserves labels from the parent component (thanks Joaquin Matres @joamatab)- Fixed extrusion error of
pp.spiral()caused by overlapping points - Bugfix for
pg.optimal_step(), now works correctly whenstart_width == end_width - Fixed naming of some previously-unnamed geometries
- Future-proofing for upcoming Numpy changes
- Bugfix for
CrossSection.extrude()since cross_section parameter renamed towidth
- Python
Published by amccaugh about 4 years ago
phidl - PHIDL 1.6.0
1.6.0 (Sept 28, 2021)
New features
- Huge new routing rewrite for
phidl.routing, including automatic manhattan routing with custom cross-sections! See the routing documentation for details. Big thanks to Jeffrey Holzgrafe @jolzgrafe for this contribution Paths can now be used to produce sharp angles, in addition to smooth bends. See the Path documentation
Changes
- The
Path()constructor no longer forces the path to start at (0,0)
Bugfixes
- Interactive zoom for
quickplot()is now disabled by default in Jupyter-type notebooks to avoid strange scrolling behavior. This can be manually changed usingset_quickplot_options(interactive_zoom = True)
- Python
Published by amccaugh over 4 years ago
phidl - PHIDL 1.5.2
Hotfix to ensure Python 2 compatibility
- Python
Published by amccaugh about 5 years ago
phidl - PHIDL 1.5.1
1.5.1 (May 19, 2021)
New features
- New
pg.gridsweep()function, allowing for easy creation of parameter sweeps on a grid. See the documentation for details.

- New tutorial on layers
- Can now define layer to be
Noneto prevent creation of polygons - Added
pg.litho_ruler()for creation of lithographic rulers/measurement
- Python
Published by amccaugh about 5 years ago
phidl - PHIDL 1.5.0
1.5.0 (April 19, 2021)
New features
- Better interactive windows for
quickplot()! Now you can use the mousewheel/trackpad scroll to zoom in and out, and right-click or left-click to zoom to a region. - Added
blockingoption forquickplot()(thanks @giumc)
Changes
- Quickplot options (such as displaying ports, subports, or aliases) are now set using
set_quickplot_options()
Bugfixes
- Fix for Path function
smooth(), which broke when sequential waypoints were co-linear (thanks @giumc) - Fix for non-C-continguous arrays in
hash_geometry()(thanks Joaquin Matres @joamatab)
- Python
Published by amccaugh about 5 years ago
phidl - PHIDL 1.4.4
1.4.4 (Feb 23, 2021)
Bugfix release
Bugfixes
- Allow labels imported through
import_gds()to be moved (thanks Joaquin Matres @joamatab) - Fix to
Path.smooth()to prevent right-angle turns from accidentally having an additional +180 degrees applied to them (thanks Jeffrey Holzgrafe @jolzgrafe)
- Python
Published by amccaugh over 5 years ago
phidl - PHIDL 1.4.3
1.4.3 (Dec 11, 2020)
New features
- Added
open_portsargument topg.outline, which allows you to cut holes in the outline at Port locations on a Device. See the outline reference here (thanks to Owen Medeiros @omedeiro)

- Easier-to-read quickstart tutorial
- Added
num_squarestoinfodictionary ofpg.optimal_step(thanks Ekkehart Schmidt)
Bugfixes
- Fixed bug in
pp.smooth()that forced paths to start out traveling to the right (orientation = 0 degrees) (thanks to Sebastian Pauka @spauka)
- Python
Published by amccaugh over 5 years ago
phidl - PHIDL 1.4.2
1.4.2 (Oct 7, 2020)
Bugfix release
Bugfixes
- Fix for Device xmin/xmax/ymin/ymax property assignment (e.g.
D.xmin = 30) causing incorrect movement of references and labels
- Python
Published by amccaugh over 5 years ago
phidl - PHIDL 1.4.1
1.4.1 (Oct 6, 2020)
New features
- Added font support to
pg.text()- Now you can use built-in fonts or specify a .TTF/.OTF font, including full unicode support (thanks to Sebastian Pauka @spauka). See the geometry reference library here - Added new
smooth()function that allows you to construct a smooth path by defining waypoints. The corners are smoothed either with the circularpp.arc()function or the adiabatic straight-to-bendpp.euler()function. See the path/waveguide tutorial here

- Added
route_turn_manhattan()function for more flexible manhattan routing (thanks to @mr-roger-a)
Changes
- Fix to start/end angles for
pp.spiral() - Style consistency fix for
pp.arc()when angle negative
Bugfixes
- Fix to casting issue when moving components with labels #78 (thanks to Joaquin Matres @joamatab)
- Python
Published by amccaugh over 5 years ago
phidl - PHIDL 1.4.0
1.4.0 (Sept 14, 2020)
Huge update with lots of quality-of-life improvements.
New features
- New path / waveguide module featuring intuitive and fast path building, sub-millisecond polygon generation, and modular cross-sections (thanks to Alex Tait @atait, Dylan Oh @dmwo, Samuel Gyger @gyger, and Florian Vogelbacher).
- Now you can easily
Groupobjects for easier manipulation. See the Group tutorial here - Significantly extended documentation, including new tutorials, geometry library description with images, and API / function reference. See https://phidl.readthedocs.io/
- Docstrings added for all functions
- Addition of
pg.grid()a grid-placement function for creating 2D arrays of devices (thanks to Samuel Gyger @gyger)

Changes
filenameargument inwrite_gds()can now acceptpathlibor file buffer (thanks to Samuel Gyger @gyger)
Bugfixes
- int-casting fix in
routing(thanks to Samuel Gyger @gyger) - Fix for
pg.optimal_step()ifstart_width==end_widthandsymmetric==True(thanks to Ekkehart Schmidt) - Fix capitalization errors of color names in
Layer(thanks to Jeff Shainline) - Fix to
@endpoints.setter
- Python
Published by amccaugh over 5 years ago
phidl - PHIDL 1.3.0
1.3.0 (May 5, 2020)
New features
- Now introducing the automatic
pg.packer()geometry-packing tool:
- New documentation for
pg.packer(),align(), anddistribute(). See Geometry + function documentation
Changes
- Configurable toplevel
cellnameargument inwrite_gds() - Change to the arguments available in
distribute(). See the Geometry + function documentation - Rename
reflect()tomirror(). Note thatreflect()will continue to work until May 2021 so as not to break any existing code
Bugfixes
- Int-casting compatibility fix with latest numpy (thanks @gyger)
- Bugfix to
pg.basic_die()for non-square die (thanks @jonnyfountain) - Fixed harmless but annoying warning if PyQt was not installed
- Small under-the-hood optimizations
- Python
Published by amccaugh about 6 years ago
phidl - PHIDL 1.2.2
1.2.2 (January 17, 2020)
Minor bugfixes
Bugfixes
- Fixed rare bug with
pg.import_gds()causing cell name collisions pg.boolean()no longer errors when passed empty geometries
- Python
Published by amccaugh over 6 years ago
phidl - PHIDL 1.2.1
- Maintenance update to work with
gdspy1.5
New features
- References, arrays and polygons can all be assigned to a Device using
D['myalias'] = mypolygon, then later accessed usingD['myalias']
Changes
- Default precision changed to
1e-4on boolean functions (for 1 unit = 1 micron, this corresponds to 0.1 nanometer precision) - Added
join,miterandmax_pointsarguments topg.offsetto match the arguments with gdspy - The
Device.label()function is going to be move toDevice.add_label()- both will still work for now, but when usinglabel()a warning will pop up suggesting you switch toadd_label()since it will be removed in future versions.
Bugfixes
- Maintenance update to work with
gdspy1.5 (specificallypg.import_gds()fixes) - Allow DeviceReferences to be used with
pg.port_to_geometry()(thanks Alex Tait @atait )
- Python
Published by amccaugh over 6 years ago
phidl - PHIDL 1.2.0
PHIDL 1.2.0 (December 1, 2019)
New features
- Major optimization of
pg.boolean(),pg.offset(),pg.outline(), andpg.invert(): Thenum_divisionsargument can now be used to divide up the geometry into multiple rectangular regions and process each region sequentially (which is much, much more computationally efficient). If you have a large geometry that takes a long time to process, try usingnum_divisions = [10,10]to optimize the operation -- you may see speed improvements well over 100x for very large geometries (>1 million points). - New geometry documentation with quick picture references and code examples! See Geometry + function documentation
Changes
- Big update to
quickplot(), should be faster now and not have issues with overlapping polygons generating whitespace. - Can now use
port.center, which is identical toport.midpoint
Bugfixes
- Allow labels to be correctly moved/rotated
- Fix fontsize and figure initialization of
quickplot() - Bugfix for 'd' shape in
pg.flagpole()
- Python
Published by amccaugh over 6 years ago
phidl - 1.1.0
1.1.0 (October 16, 2019)
New features
- New online notebook to try out PHIDL! Try now in an interactive online notebook: Link
- Added full CellArray support, use the
D.add_array()function (see the tutorial for more details) - Allow plotting of
DeviceReferences directly inquickplot
Changes
- Added
connector_symmetricargument topg.snspd_expanded()
Bugfixes
- Bounding box cache speed improvement
- Python
Published by amccaugh over 6 years ago
phidl - 1.0.2
PHIDL 1.0.2 (March 26, 2019)
New features
- Added tutorial section for phidl.geometry library lithographic shapes (resolution tests, calipers, stars, etc)
- Added
symmetricargument to pg.optimal_step() - Experimental port phidl.geometry function
pg.port_to_geometry()which converts Ports in a Device into polygon-geometry so they can be saved into the GDS file (in the style of SiEPIC). (contribution thanks to Alex Tait @atait) - Added support for
magnificationandrotationofLabels (contribution thanks to Alex Tait @atait)
Changes
- Precision for boolean functions set to 1e-6 by default now
positionargument removed from pg.text()
Bugfixes
- Fixed rare but persistent bug affecting boolean operations (e.g.
pg.offset(),pg.outline(),pg.boolean(),pg.union()) on polygons with sub-precision floating point errors. Will no longer cause jagged edges when two points are misaligned by very small amounts (e.g. when points that should be equal differ by 1e-27 due to floating point imprecision) - Fix for
pg.import_gds()so that items can be moved/rotated correctly after importing - Fix for
remove_layers()correctly preserves references now (contribution thanks to Alex Tait @atait) - Suppressed unecessary warnings
- Python
Published by amccaugh about 7 years ago
phidl - 1.0.0
1.0 release! The core functionality of phidl has been stable for over 18 months, and all major planned features have been implemented. Time to reflect that in the version number!
New features
- Significant upgrades to
quickplot2: now shows coordinates, a help message box (press ?), and a scale notation (along with several under-the-hood optimizations) - Added
D.hash_geometry()-- use to generate a SHA1-based hash of the polygons in a Device - Added
phidl.utilities.load_lyp(), which loads a KLayout layer properties (.lyp) file and converts it into a LayerSet (contribution thanks to Alex Tait @atait)
Changes
- Optimized rotation so 90-degree rotations (contribution thanks to Alex Tait @atait)
- Function documentation for geometry module (contribution thanks to Jimmy Gammell @jgammell and Dylan Oh @dmwo)
pytestimplementation for internal consistency checking
- Python
Published by amccaugh over 7 years ago