Skip to main content

isotile

PyPI Python CI License: MIT Docs

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_prototile reports 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)

Source distribution for isotile 0.1.0
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)

Table of built distributions (wheels) for isotile 0.1.0
File Interpreter ABI Platform Actions
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 log

Release 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 log

Security 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.

Select from 2 files

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 log

A 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.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page