{"id":13787010,"url":"https://github.com/cap1tan/wafermap","last_synced_at":"2025-05-12T00:30:40.815Z","repository":{"id":62588012,"uuid":"420481288","full_name":"cap1tan/wafermap","owner":"cap1tan","description":"A python package to plot maps of semiconductor wafers.","archived":false,"fork":false,"pushed_at":"2025-04-28T14:35:22.000Z","size":7803,"stargazers_count":25,"open_issues_count":1,"forks_count":8,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-07T13:39:45.604Z","etag":null,"topics":["python","semiconductor","wafer"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cap1tan.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-23T17:40:01.000Z","updated_at":"2025-04-26T06:11:08.000Z","dependencies_parsed_at":"2025-03-12T09:31:19.005Z","dependency_job_id":"38a3c7d7-9153-4463-ac9b-11ad835785ea","html_url":"https://github.com/cap1tan/wafermap","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cap1tan%2Fwafermap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cap1tan%2Fwafermap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cap1tan%2Fwafermap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cap1tan%2Fwafermap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cap1tan","download_url":"https://codeload.github.com/cap1tan/wafermap/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253655755,"owners_count":21943068,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["python","semiconductor","wafer"],"created_at":"2024-08-03T20:00:24.660Z","updated_at":"2025-05-12T00:30:40.805Z","avatar_url":"https://github.com/cap1tan.png","language":"Python","funding_links":[],"categories":["Full Custom Design"],"sub_categories":["Verification"],"readme":"# Wafermap\n\n[\n![pypi](https://img.shields.io/pypi/v/wafermap.svg)\n![pypi](https://img.shields.io/pypi/pyversions/wafermap.svg)\n![pypi](https://img.shields.io/github/license/cap1tan/wafermap.svg)\n](https://pypi.org/project/wafermap/)\n[\n![GitHub](https://img.shields.io/github/v/release/cap1tan/wafermap?include_prereleases)\n![GitHub](https://img.shields.io/github/languages/code-size/cap1tan/wafermap)\n](https://github.com/cap1tan/wafermap)\n\n\n\nA python package to plot maps of semiconductor wafers.\n\nFree software: MIT license\n\n\n## Features\n\n* Circular wafers with arbitrary notch orientations and full or inner layouts.\n* Grid with adjustable offset and origin, cells with adjustable size and margin.\n* Edge-exclusion.\n* Hover-able points, vectors and images.\n* Tooltips with embeddable images.\n* Individual labels and colors for each die.\n* Toggle layers on/off individually.\n* Export zoom-able maps to HTML.\n* Export PNG images (needs Chromium)\n\n\n## Examples\n\n- See the full dynamic maps [here](https://cap1tan.github.io/wafermap/)!\n\n- Static png image, just to get a taste:\n\n![Example_wafermap](docs/test_wafermap_example.png)\n\n\n## Installation\n\nTo install Wafermap, run this command in your\nterminal:\n\n``` console\n$ pip install wafermap\n```\n\nThis is the preferred method to install Wafermap, as it will always install the most recent stable release.\n\nIf you don't have [pip][] installed, this [Python installation guide][]\ncan guide you through the process.\n\n### From source\n\nThe source for Wafermap can be downloaded from\nthe [Github repo][].\n\nYou can clone the public repository:\n\n``` console\n$ git clone git://github.com/cap1tan/wafermap\n```\n\n\n  [pip]: https://pip.pypa.io\n  [Python installation guide]: http://docs.python-guide.org/en/latest/starting/installation/\n  [Github repo]: https://github.com/%7B%7B%20cookiecutter.github_username%20%7D%7D/%7B%7B%20cookiecutter.project_slug%20%7D%7D\n\n\n## Usage\n\nTo use Wafermap in a project\n\n```python\n    import wafermap\n```\n\nFirst let's define a Wafermap:\n```python\nwm = wafermap.WaferMap(wafer_radius=100,                # all length dimensions in mm\n                       cell_size=(10, 20),              # (sizeX, sizeY)\n                       cell_margin=(8, 15),             # distance between cell borders (x, y)\n                       cell_origin=(0, 0),              # which cell to select as origin (0, 0), in (x, y)\n                       grid_offset=(-2.05, -4.1),       # grid offset in (x, y)\n                       edge_exclusion=2.2,              # margin from the wafer edge where a red edge exclusion ring is drawn\n                       coverage='full',                 # 'full': will cover wafer with cells, partial cells allowed\n                                                        # 'inner': only full cells allowed\n                       notch_orientation=270)           # angle of notch in degrees. 270 corresponds to a notch at the bottom\n```\n\nTo add an image at a specific cell/relative cell coordinates simply:\n```python\nwm.add_image(image_source_file=\"inspection1.jpg\",\n             cell=(1, 0),                               # (cell_index_x, cell_index_y)\n             offset=(2.0, 2.0))                         # relative coordinate of the image within the cell\n```\n\nAdding vectors is just as easy. Just define cell and \\[(start_rel_coordinates), (end_rel_coordinates)\\]:\n```python\nvectors = [\n            ((3, 0), [(0, 0), (1, 1)]),\n            ((3, 0), [(1, 0), (-5, 5)]),\n            ((3, 0), [(0, 1), (10, -10)]),\n            ((3, 0), [(1, 1), (-20, -20)]),\n            ]\ncolors = ['green', 'red', 'blue', 'black']\nfor color, (cell, vector) in zip(colors, vectors):\n    wm.add_vector(vector_points=vector, cell=cell, vector_style={'color': color}, root_style={'radius': 1, 'color': color})\n```\n\nLet's throw in some points in a normal distribution for good measure too:\n\n```python\n# add 50 points per cell, in a random distribution\nimport random as rnd\n\ncell_size = (10, 20)\ncell_points = [(cell, [(rnd.gauss(cell_size[0] / 2, cell_size[0] / 6),\n                        rnd.gauss(cell_size[1] / 2, cell_size[1] / 6)) for _ in\n                       range(50)]) for cell in wm]\nfor cell, cell_points_ in cell_points:\n    for cell_point in cell_points_:\n        wm.add_point(cell=cell, offset=cell_point)\n```\n\nFinally, nothing would matter if we couldn't see the result:\n```python\n# save to html\nwm.save_html(f\"wafermap.html\")\n\n# save to png (Chromium must be installed)\nwm.save_png(f\"wafermap.png\")\n```\n\n\n## Dependencies\n\n- __Folium__ \u0026 __branca__ -\u003e to make dynamic, zoom-able and pan-able HTML based maps\n- __Pillow__ -\u003e to support embedded images and format the optional image output \n- __Chromium__ -\u003e exporting to .png images\n\n\n## Contributing\n\nContributions are welcome, and they are greatly appreciated! Every little bit\nhelps, and credit will always be given.\n\nYou can contribute in many ways:\n\n### Types of Contributions\n\n#### Report Bugs\n\nReport bugs at https://github.com/cap1tan/wafermap/issues.\n\nIf you are reporting a bug, please include:\n\n* Your operating system name and version.\n* Any details about your local setup that might be helpful in troubleshooting.\n* Detailed steps to reproduce the bug.\n\n#### Fix Bugs\n\nLook through the GitHub issues for bugs. Anything tagged with \"bug\" and \"help\nwanted\" is open to whoever wants to implement it.\n\n#### Implement Features\n\nLook through the GitHub issues for features. Anything tagged with \"enhancement\"\nand \"help wanted\" is open to whoever wants to implement it.\n\n#### Write Documentation\n\nWafermap could always use more documentation, whether as part of the\nofficial Wafermap docs, in docstrings, or even on the web in blog posts,\narticles, and such.\n\n#### Submit Feedback\n\nThe best way to send feedback is to file an issue at https://github.com/cap1tan/wafermap/issues.\n\nIf you are proposing a feature:\n\n* Explain in detail how it would work.\n* Keep the scope as narrow as possible, to make it easier to implement.\n* Remember that this is a volunteer-driven project, and that contributions\n  are welcome :)\n\n### Get Started!\n\nReady to contribute? Here's how to set up `wafermap` for local development.\n\n1. Fork the `wafermap` repo on GitHub.\n2. Clone your fork locally\n\n```\n    $ git clone git@github.com:your_name_here/wafermap.git\n```\n\n3. Ensure [poetry](https://python-poetry.org/docs/) is installed.\n4. Install dependencies and start your virtualenv:\n\n```\n    $ poetry install -E test -E doc -E dev\n```\n\n5. Create a branch for local development:\n\n```\n    $ git checkout -b name-of-your-bugfix-or-feature\n```\n\n   Now you can make your changes locally.\n\n6. When you're done making changes, check that your changes pass the\n   tests, including testing other Python versions, with tox:\n\n```\n    $ tox\n```\n\n7. Commit your changes and push your branch to GitHub:\n\n```\n    $ git add .\n    $ git commit -m \"Your detailed description of your changes.\"\n    $ git push origin name-of-your-bugfix-or-feature\n```\n\n8. Submit a pull request through the GitHub website.\n\n### Pull Request Guidelines\n\nBefore you submit a pull request, check that it meets these guidelines:\n\n1. The pull request should include tests.\n2. If the pull request adds functionality, the docs should be updated. Put\n   your new functionality into a function with a docstring, and add the\n   feature to the list in README.md.\n3. The pull request should work for Python 3.6, 3.7, 3.8, 3.9 and for PyPy. Check\n   https://github.com/cap1tan/wafermap/actions\n   and make sure that the tests pass for all supported Python versions.\n\n### Tips\n```\n    $ python -m unittest tests.test_wafermap\n```\nTo run a subset of tests.\n\n\n### Deploying\n\nA reminder for the maintainers on how to deploy.\nMake sure all your changes are committed (including an entry in HISTORY.md).\nThen run:\n\n```\n$ poetry patch # possible: major / minor / patch\n$ git push\n$ git push --tags\n```\n\nGithub Actions will then deploy to PyPI if tests pass.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcap1tan%2Fwafermap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcap1tan%2Fwafermap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcap1tan%2Fwafermap/lists"}