{ "info": { "author": "Thomas Ferreira de Lima ", "author_email": "tlima@princeton.edu", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Scientific/Engineering" ], "description": "# ZeroPDK\n\nThis is a pure-python PDK factory that enables klayout scripted layout. It assists in photonic integrated circuit layout, which relies on having specialized curved waveguides and non-square-corner shapes.\n\n## Installation\n\nThis package is heavily based on python's [klayout package](https://github.com/klayout/klayout), still in beta version as of this writing (Jul 2019). \n\nInstallation with pip (virtual environment is highly recommended):\n\n```bash\npip install zeropdk\n```\n\nInstallation from source:\n\n```bash\npython setup.py install\n```\n\n## Features\n\n### KLayout extension\n\nBy importing zeropdk, klayout is patched with a few useful functionalities. For example:\n\n```python\nimport klayout.db as kdb\nimport zeropdk\n\nlayout = kdb.Layout()\nplogo = layout.read_cell(cell_name='princeton_logo', filepath='gdslibrary/princeton_logo_simple.gds')\n\n# plogo is a cell in the current layout. It can be inserted in the top cell.\n```\n\n### Easy technology layers definition\n\nBased on a KLayout's layout properties file (.lyp) containing layer definitions, it is easy to import and use all layers. For example:\n\n```python\n\nfrom zeropdk import Tech\nlyp_path = \"examples/EBeam.lyp\"\nEBeam = Tech.load_from_xml(lyp_path)\nlayerM1 = EBeam.layers[\"M1\"]\nprint(layerM1, type(layerM1)) # M1 (41/0) \n```\n\nThe file above belongs to a project called [SiEPIC EBeam PDK](https://github.com/lukasc-ubc/SiEPIC_EBeam_PDK), used in passive silicon photonic foundries.\n\n### Advanced PCell definition\n\nPCells can be hierarchical, as described in [Sec. IV.C of this article](https://ieeexplore.ieee.org/abstract/document/8718393). One PCell can use another PCell in its definition, and the parent pcell should, in this case, inherit the child's parameters. an example taken from `zeropdk.default_library.io` is:\n\n```python\nclass DCPadArray(DCPad):\n params = ParamContainer(pad_array_count, pad_array_pitch)\n\n def draw(self, cell):\n # ...\n for i in range(cp.pad_array_count):\n dcpad = DCPad(name=f\"pad_{i}\", params=cp)\n return cell, ports\n```\n\nIn this case, `DCPadArray` simply places an array of `DCPad` Pcells, and contains parameters `pad_array_count` and also `pad_array_pitch`, but also the parameters belonging to `DCPad`, such as `layer_metal` and `layer_opening`.\n\nIn the EBeam PDK example, one can edit adapt a standard library of pcells to its own parameter sets. For example, EBeam PDK uses particular layers for its metal deposition and oxide etch steps. So the DCPadArray can be changed via the following:\n\n```python\n\nclass DCPadArray(DCPadArray):\n params = ParamContainer(\n PCellParameter(\n name=\"layer_metal\",\n type=TypeLayer,\n description=\"Metal Layer\",\n default=EBeam.layers[\"M1\"],\n ),\n PCellParameter(\n name=\"layer_opening\",\n type=TypeLayer,\n description=\"Open Layer\",\n default=EBeam.layers[\"13_MLopen\"],\n ),\n )\n```\n\nTODO: adapt example provided [here](https://github.com/lightwave-lab/SiEPIC_EBeam_PDK/tree/scripted_layout/Examples/scripted_layout) to zeropdk.\n\n### Photonics-inspired layout functions\n\nSeveral assistive tools for handling photonic shapes. For example, it is desired, sometimes, to draw a waveguide with progressive widths (a taper). \n\n```python\nfrom zeropdk.layout import layout_waveguide\nwav_polygon = layout_waveguide(cell, layer, points_list, width)\n```\n\n## Developer notes\n\nThis project is still under development phase. See the [development notes](devnotes/README.md) for more information.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lightwave-lab/zeropdk", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "zeropdk", "package_url": "https://pypi.org/project/zeropdk/", "platform": "", "project_url": "https://pypi.org/project/zeropdk/", "project_urls": { "Homepage": "https://github.com/lightwave-lab/zeropdk" }, "release_url": "https://pypi.org/project/zeropdk/19.7b1/", "requires_dist": [ "numpy", "klayout", "scipy" ], "requires_python": ">=3.6", "summary": "PDK factory for klayout", "version": "19.7b1" }, "last_serial": 5575681, "releases": { "19.7b1": [ { "comment_text": "", "digests": { "md5": "a1a2b7f055bdfaa5ece682db96b24f57", "sha256": "2dfa839ab0a3beefe9d0cc261546d4b54c3e24e97380723d22d860e3fe5077ba" }, "downloads": -1, "filename": "zeropdk-19.7b1-py3-none-any.whl", "has_sig": false, "md5_digest": "a1a2b7f055bdfaa5ece682db96b24f57", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 44163, "upload_time": "2019-07-24T04:41:26", "url": "https://files.pythonhosted.org/packages/ae/45/29c9f525791c10f84639bde337ad11702bcc1b358d25f6658d9605dd6c57/zeropdk-19.7b1-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a1a2b7f055bdfaa5ece682db96b24f57", "sha256": "2dfa839ab0a3beefe9d0cc261546d4b54c3e24e97380723d22d860e3fe5077ba" }, "downloads": -1, "filename": "zeropdk-19.7b1-py3-none-any.whl", "has_sig": false, "md5_digest": "a1a2b7f055bdfaa5ece682db96b24f57", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 44163, "upload_time": "2019-07-24T04:41:26", "url": "https://files.pythonhosted.org/packages/ae/45/29c9f525791c10f84639bde337ad11702bcc1b358d25f6658d9605dd6c57/zeropdk-19.7b1-py3-none-any.whl" } ] }