Documentation: https://bright-fakl.github.io/isotile/
Isohedral tilings in NumPy: the 81 isohedral tiling types, vectorized tile generation and exact tile adjacency from a lattice table. It replaces tactile for these tasks and keeps its tiling type numbers (IH1 to IH93) and parameter format.
- Tiles are generated for a rectangle or for a target tile count, as arrays of cells, aspects and affine transforms.
- Adjacency (shared edge, shared vertex, vertex only) comes from a table of the tiling type, as a scipy sparse boolean matrix. It does not depend on the parameters, the scale or the position of the tiling.
- Squares, hexagons, any triangle and any simple quadrilateral are named constructors of the same class.
- A parameter set that makes the prototile self-intersecting raises
ValueError;check_prototilereports the edges at fault without constructing a tiling.
Install
pip install isotile # numpy and scipy
pip install "isotile[shapely]" # adds TileSet.polygons()
pip install "isotile[plot]" # adds isotile.plot (matplotlib)
Python 3.10 or newer.
Quickstart
from isotile import IsohedralTiling, check_prototile, find_types
tiling = IsohedralTiling(7) # type IH7 at its default parameters
print(tiling.describe())
tiles = tiling.fill_region((0, 0, 10, 6), n_tiles=200) # tiles that cover the region
print(len(tiles), tiles.cell.shape, tiles.aspect.shape, tiles.transforms.shape)
polygons = tiles.vertices() # (n, n_vertices, 2) tile outlines
edge = tiles.adjacency("edge") # scipy.sparse.csr_array of bool, (n, n)
print(edge.sum(axis=1).max(), tiles.neighbors(0, "vertex"))
hexagons = IsohedralTiling.hexagon(pointy_top=False)
triangles = IsohedralTiling.triangle([(0, 0), (3, 0), (1, 2)]) # any triangle
print(find_types(num_vertices=3, all_edges="S"))
print(check_prototile(7, [0.25, -1.0])) # PrototileReport(valid=False, ...)
Concepts
A tiling is one of 81 types with free parameters that change the shape of the prototile. The lattice is spanned by
two translation vectors (translation_u, translation_v). A tile is identified by its cell (u, v) and its
aspect, the index of the tile within the cell. A tile set holds cell (n, 2), aspect (n,) and the affine
transforms (n, 2, 3) of the prototile onto each tile.
IsohedralTiling(type, parameters, frame=...) takes an affine frame that maps the type's native coordinates to
world coordinates (scale, rotation, reflection, position). fill_region(bounds, n_tiles=... | tile_size=..., margin=...) computes the frame from a region and a tile count or size.
Documentation
https://bright-fakl.github.io/isotile/: quickstart, catalog of the 81 types, adjacency, edge curves, benchmark, migrating from tactile and the API reference.
Background and citation
The 93 isohedral tiling types were classified by Branko Grünbaum and G. C. Shephard, Tilings and Patterns (W. H. Freeman, 1987). The type data and the parameter format come from Tactile / tactile-js by Craig S. Kaplan; if you use isotile in published work, please also cite Tactile and Grünbaum and Shephard.
License
MIT. The tiling type data is derived from Tactile / tactile-js by Craig S. Kaplan (BSD 3-Clause); see NOTICE.
Metadata
Release files for isotile 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| isotile-0.1.0.tar.gz | 123.5 kB | With provenance | Details for isotile-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| isotile-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for isotile-0.1.0-py3-none-any.whl |
Total release size: 212.3 kB
Release files / isotile-0.1.0.tar.gz
| Download URL | isotile-0.1.0.tar.gz |
|---|---|
| Size | 123.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d0a833eaac022104a554ca85affbefefaa729bcfb332f25fc8690af5e8878c7a
|
|
BLAKE2b-256 checksum How to use checksums |
4070234bf61dcfa6e4a46a64ed10cf5c044788742d91566fb881202109c25763
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logRelease files / isotile-0.1.0-py3-none-any.whl
| Download URL | isotile-0.1.0-py3-none-any.whl |
|---|---|
| Size | 88.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7584f7f98213f59f98067a49bd715a838e955055437bea2a5db878c1709976e2
|
|
BLAKE2b-256 checksum How to use checksums |
ff76eb0d6cfc199f8963f2dd71fe90b38670bef35803517aedec43698896093f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logSecurity for isotile 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for isotile-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.