SkillAgentSearch skills...

Gdspy

Python module for creating GDSII stream files, usually CAD layouts.

Install / Use

/learn @heitzmann/Gdspy
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

GDSPY README

Boost Software License - Version 1.0 Documentation Status tests Appveyor Status Downloads

Gdspy is a Python module for creation and manipulation of GDSII stream files. Key features for the creation of complex CAD layouts are included:

  • Boolean operations on polygons (AND, OR, NOT, XOR) based on clipping algorithm
  • Polygon offset (inward and outward rescaling of polygons)
  • Efficient point-in-polygon solutions for large array sets

Gdspy also includes a simple layout viewer.

Typical applications of Gdspy are in the fields of electronic chip design, planar lightwave circuit design, and mechanical engineering.

Future of Gdspy

In trying to improve the performance of Gdspy for large layouts, we ended up concluding that the best way to reach our goal was to rewrite the critical parts of the library as a C extension. It turns out that beside obvious functions, method calling has a big impact in performance due to the overhead it introduces. The best solution was to re-design the whole project as a C++ library with a thin Python wrapper: thus was born Gdstk, the GDSII Tool Kit.

Therefore, version 1.6 will be the last major release of Gdspy, with development focused only on bug fixes. Users are encouraged to move from Gdspy to Gdstk: although their API is not 100% compatible, the new module should be familiar enough to allow a quick transition.

Installation

Dependencies:

  • Python (tested with versions 2.7, 3.6, 3.7, and 3.8)
  • Numpy
  • C compiler (needed only if built from source)
  • Tkinter (optional: needed for the LayoutViewer GUI)
  • Sphinx (optional: to build the documentation)

Linux / OS X

Option 1: using pip:

python -m pip install --user gdspy

Option 2: download the source from github and build/install with:

python setup.py install

Windows

The preferred option is to install pre-compiled binaries from here.

Installation via pip and building from source as above are also possible, but an appropriate build environment is required for compilation of the C extension modules.

Documentation

The complete documentation is available here.

The source files can be found in the docs directory.

Support

Help support Gdspy development by donating via PayPal or sponsoring me on GitHub

History of changes

Version 1.6.13 (Apr 26, 2023)

  • Allow ill-formed GDSII label anchors to be correctly loaded.

Version 1.6.12 (Jun 2, 2022)

  • Fix in Cell.get_texttypes.
  • Allow labels to inherit transforms through get_labels.

Version 1.6.11 (Jan 14, 2022)

  • Fix in Cell.write_svg when missing references.
  • Speed improvements in Cell.remove_polygons (thanks Troy for the contribution).

Version 1.6.10 (Nov 14, 2021)

  • Fix in Cell.get_polygons

Version 1.6.9 (Sep 23, 2021)

  • Fix in Cell.get_polygons with specified layer and datatype.
  • Raise error for duplicate cells when reading a GDSII file.

Version 1.6.8 (Aug 2, 2021)

  • Fix in boolean for complex geometries that freeze the operation.

Version 1.6.7 (Jul 14, 2021)

  • Fixes in boolean for bugs with self-intersecting holes and holes horizontal edges.
  • Fix bug in warning message.

Version 1.6.6 (Jun 09, 2021)

  • Fix error in Path.smooth not finding _hobby function.
  • Allow precision specification in SVG output.

Version 1.6.5 (Jun 08, 2021)

  • Support GDSII files with 0-padding at the end.
  • Allow fixing and modifying GDSII file timestamps.
  • Thanks Troy Tamas and Joaquin Matres for the fixes

Version 1.6.4 (Apr 23, 2021)

  • Fix missing module import (thanks Troy Tamas for the fix).

Version 1.6.3 (Dec 28, 2020)

  • Fix bounding box edge case (thanks Troy Tamas for the fix).

Version 1.6.2 (Dec 18, 2020)

  • More efficient bounding box calculation (thanks to Troy Tamas for the contribution).
  • Fix Label creation bug.

Version 1.6.1 (Oct 22, 2020)

  • Fix SVG output when Label contains special characters.

Version 1.6 (Aug 12, 2020)

  • Added support for element properties.
  • Added transformation support to Cell.copy.
  • Layer/datatype filtering in get_polygons for Cell, CellReference and CellArray.
  • Layer/datatype filtering in LayoutViewer.
  • Removed global cache _bounding_boxes. Only cells cache their bounding boxes.
  • Bug fixes (thanks Daniel Hwang for the contributions).
  • Bug fix in Cell.copy where the whole dependency tree would be copied on a deep copy creation.

Version 1.5.2 (Feb 01, 2020)

  • Added support for importing GDSII files containing BOX elements.
  • Bug fix in GdsLibrary.extract (thanks collineps for finding the problem).

Version 1.5 (Dec 20, 2019)

  • New Cell.write_svg function to export an SVG image of the cell.
  • New GdsLibrary.new_cell function to quickly create and add cells to a library.
  • GdsLibrary.add can update references when a cell is overwritten.
  • Added GdsLibrary.remove to allow cells to be properly removed from libraries.
  • Added GdsLibrary.rename_cell to rename cells in libraries.
  • Added GdsLibrary.replace_references to easily replace referenced cells in libraries.
  • GdsLibrary.add can add dependencies recursively.
  • Iterating over GdsLibrary objects yields all its cells.
  • Iterating over Cell objects yield all its polygons, paths, labels and references.
  • Breaking change to *.to_gds functions in order to improve write efficiency (this should not be a problem for most users, since gdspy.write_gds and Cell.write_gds remain the same).
  • Breaking change: renamed GdsLibrary.cell_dict to GdsLibrary.cells.
  • Deprecated: gdspy.current_library, gdspy.write_gds, gdspy.fast_boolen, GdsLibrary.extract.
  • Bug fixes and better tests for FlexPath and RobustPath.

Version 1.4.3 (Nov 11, 2019)

  • Bug fix for FlexPath and RobustPath references.

Version 1.4.2 (Oct 01, 2019)

  • Bug fix in FlexPath.

Version 1.4.1 (Sep 20, 2019)

  • Bug fixes (thanks to DerekK88 and Sequencer for the patches).

Version 1.4 (May 18, 2019)

  • Revised documentation.
  • New FlexPath and RobustPath classes: more efficient path generation when using the original GDSII path specification.
  • New Curve class: SVG-like polygon creation.
  • Added PolygonSet.mirror (thanks to Daan Waardenburg for the contribution).
  • Added Path.bezier to create paths based on Bézier curves.
  • Added Path.smooth to create paths based on smooth interpolating curves.
  • Added get_gds_units to get units used in a GDSII file without loading.
  • Added get_binary_cells to load only the binary GDSII representation of cell from a file.
  • Added argument tolerance to Round, Path.arc, Path.turn, and Path.parametric to automatically control the number of points in the final polygons.
  • Added argument binary_cells to GDSII writing functions to support get_binary_cells.
  • Added argument rename_template to GdsLibrary.read_gds for flexible cell renaming (thanks to @yoshi74ls181 for the contribution).
  • Changed return value of slice to avoid creating empty PolygonSet.
  • Added argument timestamp to GDSII writing functions.
  • Improved Round to support creating ellipses.
  • Added support for unlimited number of points per polygon.
  • Added support for BGNEXTN and ENDEXTN when reading a GDSII file.
  • Polygon creation warnings are now controlled by poly_warnings.
  • Incorrect anchor in Label now raises an error, instead of emitting a warning.
  • Added correct support for radius in PolygonSet.fillet on a per-vertex basis.
  • Speed improvements in GDSII file generation (thanks to @fbeutel for the contribution) and geometry creation.
  • Font rendering example using matplotlib (thanks Hernan Pastoriza for the contribution).
  • Expanded test suite.

Version 1.3.2 (Mar 14, 2019)

  • Small fix for building on Mac OS X Mojave.

Version 1.3.1 (Jun 29, 2018)

  • PolygonSet becomes the base class for all polygons, in particular Polygon and Rectangle.
  • Added Cell.remove_polygons and Cell.remove_labels functions to allow filtering a cell contents based, for example, on each element's layer.
  • Added PolygonSet.scale utility method.
  • Added PolygonSet.get_bounding_box utility method.
  • Added argument timestamp to Cell.to_gds, GdsLibrary.write_gds and GdsWriter.
  • Added unit and precision arguments to GdsLibrary initialization and removed from its write_gds method.
  • Changed the meaning of argument unit in GdsLibrary.read_gds.
  • Improved slice to avoid errors when slicing in multiple positions at once.
  • Improved PolygonSet.fracture to reduce number of function calls.
  • Removed incorrect absolute flags for magnification and rotation in CellReference and CellArray.
  • Minor bug fixes.
  • Documentation fixes.
  • Removed deprecated classes and functions.

Version 1.2.1 (Dec 5, 2017)

  • GdsLibrary can be created directly from a GDSII
View on GitHub
GitHub Stars383
CategoryDevelopment
Updated1d ago
Forks131

Languages

Python

Security Score

100/100

Audited on Apr 4, 2026

No findings