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 from kl_ 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_cpu in the new pg.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 to Device.flatten() but instead of modifying the geometry in-place, returns a flattened copy (thanks Bas Nijholt @basnijholt)
  • Fixed an issue from gdspy where property keys are incorrectly interpreted as signed integers when importing GDS files using import_gds() (thanks Bas Nijholt @basnijholt)

Bugfixes

  • Fixed rare problem with mew pg.kl_invert() function when tile_size was 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() allows param_x or param_y to 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 empty shape parameter (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() and pp.smooth() for edge case of nearly-colinear points
  • Specify certain numpy arrays as object to 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 othat OR/union will merge all shapes within one Device, even if the second Device is None (thanks Stijn Balk @sbalk)

Bugfixes

  • Modifying the parent of a DeviceReference now correctly updates the reference cell (thanks Joaquin Matres @joamatab)
  • Fix bug in pg.outline() when distance < 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, use mirror() 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 when start_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 to width

- 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 using set_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.

phidl example image

  • New tutorial on layers
  • Can now define layer to be None to 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 blocking option for quickplot() (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_ports argument to pg.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)

phidl example image

  • Easier-to-read quickstart tutorial
  • Added num_squares to info dictionary of pg.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 circular pp.arc() function or the adiabatic straight-to-bend pp.euler() function. See the path/waveguide tutorial here

phidl example image

  • 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 Group objects 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)

phidl example image

Changes

  • filename argument in write_gds() can now accept pathlib or file buffer (thanks to Samuel Gyger @gyger)

Bugfixes

  • int-casting fix in routing (thanks to Samuel Gyger @gyger)
  • Fix for pg.optimal_step() if start_width==end_width and symmetric==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: phidl example image
  • New documentation for pg.packer(), align(), and distribute(). See Geometry + function documentation

Changes

  • Configurable toplevel cellname argument in write_gds()
  • Change to the arguments available in distribute(). See the Geometry + function documentation
  • Rename reflect() to mirror(). Note that reflect() 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 gdspy 1.5

New features

  • References, arrays and polygons can all be assigned to a Device using D['myalias'] = mypolygon, then later accessed using D['myalias']

Changes

  • Default precision changed to 1e-4 on boolean functions (for 1 unit = 1 micron, this corresponds to 0.1 nanometer precision)
  • Added join, miter and max_points arguments to pg.offset to match the arguments with gdspy
  • The Device.label() function is going to be move to Device.add_label() - both will still work for now, but when using label() a warning will pop up suggesting you switch to add_label() since it will be removed in future versions.

Bugfixes

  • Maintenance update to work with gdspy 1.5 (specifically pg.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(), and pg.invert(): The num_divisions argument 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 using num_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 to port.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 in quickplot

Changes

  • Added connector_symmetric argument to pg.snspd_expanded()

Bugfixes

  • Bounding box cache speed improvement

- Python
Published by amccaugh over 6 years ago

phidl - 1.0.3

1.0.3 (May 23, 2019)

  • Maintenance release to work with gdspy 1.4
  • Removal of scipy from strict installation requirements

Bugfixes

  • Minor fix to distribute()

- Python
Published by amccaugh about 7 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 symmetric argument 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 magnification and rotation of Labels (contribution thanks to Alex Tait @atait)

Changes

  • Precision for boolean functions set to 1e-6 by default now
  • position argument 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.1

1.0.1 (Jan 21, 2019)

New features

  • D.remove() can now remove Ports as well as references/polygons

Bugfixes

  • Can't have a major release without at least one bug! Fixed errors introduced by optimized-rotation algorithm.

- Python
Published by amccaugh over 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)
  • pytest implementation for internal consistency checking

- Python
Published by amccaugh over 7 years ago